parent
67ec26d196
commit
9d97f79fb5
22 changed files with 778 additions and 46 deletions
@ -0,0 +1,22 @@ |
|||||||
|
package org.springblade.desk.produce.pojo.dto; |
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取转外协所需数据 数据传输对象实体类 |
||||||
|
* @author litao |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
public class ListProProcessDTO { |
||||||
|
|
||||||
|
@Schema(description = "车间订单ID集合") |
||||||
|
private List<Long> woIds; |
||||||
|
|
||||||
|
@Schema(description = "转换类型:1-外协,2-厂内") |
||||||
|
private Integer runType; |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,23 @@ |
|||||||
|
package org.springblade.desk.produce.pojo.dto; |
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema; |
||||||
|
import lombok.Data; |
||||||
|
import org.springblade.desk.produce.pojo.entity.WorkOrderRun; |
||||||
|
import org.springblade.desk.produce.pojo.entity.WorkPlanRun; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* 转外协(单个/批量) 数据传输对象实体类 |
||||||
|
* @author litao |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
public class TransferBillDTO { |
||||||
|
|
||||||
|
@Schema(description = "车间订单运行记录") |
||||||
|
private List<WorkOrderRun> workOrderRuns; |
||||||
|
|
||||||
|
@Schema(description = "作业计划运行明细") |
||||||
|
private List<WorkPlanRun> workPlanRuns; |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,22 @@ |
|||||||
|
package org.springblade.desk.produce.pojo.dto; |
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* 转烧结 数据传输对象实体类 |
||||||
|
* @author litao |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
public class TurnTypeDTO { |
||||||
|
|
||||||
|
@Schema(description = "生产订单id") |
||||||
|
private Long id; |
||||||
|
|
||||||
|
@Schema(description = "订单类型") |
||||||
|
private Integer yieldType; |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,21 @@ |
|||||||
|
package org.springblade.desk.produce.pojo.dto; |
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
/** |
||||||
|
* 更改车间订单优先级 数据传输对象实体类 |
||||||
|
* @author litao |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
public class UpdatePriorityDTO { |
||||||
|
|
||||||
|
@Schema(description = "生产订单id") |
||||||
|
private Long id; |
||||||
|
|
||||||
|
@Schema(description = "需求交期") |
||||||
|
private Date demandDate; |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,25 @@ |
|||||||
|
package org.springblade.desk.produce.pojo.dto; |
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* 修改订单状态 数据传输对象实体类 |
||||||
|
* @author litao |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
public class UpdateStatusDTO { |
||||||
|
|
||||||
|
@Schema(description = "车间订单ID集合") |
||||||
|
private List<Long> idArr; |
||||||
|
|
||||||
|
@Schema(description = "状态") |
||||||
|
private Integer status; |
||||||
|
|
||||||
|
@Schema(description = "备注") |
||||||
|
private String memo; |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,77 @@ |
|||||||
|
package org.springblade.desk.produce.pojo.entity; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||||
|
import io.swagger.v3.oas.annotations.media.Schema; |
||||||
|
import lombok.Data; |
||||||
|
import lombok.EqualsAndHashCode; |
||||||
|
import org.springblade.core.mp.base.BaseEntity; |
||||||
|
|
||||||
|
import java.io.Serial; |
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
/** |
||||||
|
* 镀前镀后 实体类 |
||||||
|
* |
||||||
|
* @author BladeX |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@TableName("MES_PLATE_AROUND") |
||||||
|
@Schema(description = "PlateAround对象") |
||||||
|
@EqualsAndHashCode(callSuper = true) |
||||||
|
public class PlateAround extends BaseEntity { |
||||||
|
|
||||||
|
@Serial |
||||||
|
private static final long serialVersionUID = 1L; |
||||||
|
|
||||||
|
/** |
||||||
|
* 镀前入库 |
||||||
|
*/ |
||||||
|
public static Short BEFORE_PLAT_IN = 1; |
||||||
|
/** |
||||||
|
* 镀前出库 |
||||||
|
*/ |
||||||
|
public static Short BEFORE_PLAN_OUT = 2; |
||||||
|
/** |
||||||
|
* 镀后入库 |
||||||
|
*/ |
||||||
|
public static Short AFTER_PLAN_IN = 3; |
||||||
|
/** |
||||||
|
* 状态 新建 |
||||||
|
*/ |
||||||
|
public static Short CUR_STATUS_NEW = 1; |
||||||
|
/** |
||||||
|
* 状态 完成 |
||||||
|
*/ |
||||||
|
public static Short CUR_STATUS_OK = 2; |
||||||
|
|
||||||
|
@Schema(description = "单号") |
||||||
|
private String paCode; |
||||||
|
|
||||||
|
@Schema(description = "作业计划") |
||||||
|
private Long wpId; |
||||||
|
|
||||||
|
@Schema(description = "班组") |
||||||
|
private Long tsId; |
||||||
|
|
||||||
|
@Schema(description = "供应商") |
||||||
|
private Long ocId; |
||||||
|
|
||||||
|
@Schema(description = "类型") |
||||||
|
private Short paType; |
||||||
|
|
||||||
|
@Schema(description = "数量") |
||||||
|
private Double quantity = 0d; |
||||||
|
|
||||||
|
@Schema(description = "重量") |
||||||
|
private Double weight = 0d; |
||||||
|
|
||||||
|
@Schema(description = "制单时间") |
||||||
|
private Date makeTime; |
||||||
|
|
||||||
|
@Schema(description = "制单人") |
||||||
|
private Long makeMan; |
||||||
|
|
||||||
|
@Schema(description = "状态") |
||||||
|
private Short curStatus = 1; |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,45 @@ |
|||||||
|
package org.springblade.desk.produce.pojo.entity; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||||
|
import io.swagger.v3.oas.annotations.media.Schema; |
||||||
|
import lombok.Builder; |
||||||
|
import lombok.Data; |
||||||
|
import lombok.EqualsAndHashCode; |
||||||
|
import org.springblade.core.mp.base.BaseEntity; |
||||||
|
|
||||||
|
import java.io.Serial; |
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
/** |
||||||
|
* 作业计划运行明细 实体类 |
||||||
|
* |
||||||
|
* @author BladeX |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@TableName("MES_WORK_ORDER_RUN") |
||||||
|
@Schema(description = "WorkPlanRun对象") |
||||||
|
@EqualsAndHashCode(callSuper = true) |
||||||
|
public class WorkPlanRun extends BaseEntity { |
||||||
|
|
||||||
|
@Serial |
||||||
|
private static final long serialVersionUID = 1L; |
||||||
|
|
||||||
|
@Schema(description = "车间订单运行记录") |
||||||
|
private Long worId; |
||||||
|
|
||||||
|
@Schema(description = "作业计划工序") |
||||||
|
private Long wpId; |
||||||
|
|
||||||
|
@Schema(description = "工艺能力") |
||||||
|
private Long caId; |
||||||
|
|
||||||
|
@Schema(description = "处理工序") |
||||||
|
private Boolean handle; |
||||||
|
|
||||||
|
@Schema(description = "计划开始") |
||||||
|
private Date startTime; |
||||||
|
|
||||||
|
@Schema(description = "计划结束") |
||||||
|
private Date endTime; |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,13 @@ |
|||||||
|
package org.springblade.desk.produce.mapper; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||||
|
import org.springblade.desk.produce.pojo.entity.PlateAround; |
||||||
|
|
||||||
|
/** |
||||||
|
* 镀前镀后 Mapper 接口 |
||||||
|
* |
||||||
|
* @author BladeX |
||||||
|
*/ |
||||||
|
public interface PlateAroundMapper extends BaseMapper<PlateAround> { |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,13 @@ |
|||||||
|
package org.springblade.desk.produce.mapper; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||||
|
import org.springblade.desk.produce.pojo.entity.WorkPlanRun; |
||||||
|
|
||||||
|
/** |
||||||
|
* 作业计划运行明细 Mapper 接口 |
||||||
|
* |
||||||
|
* @author BladeX |
||||||
|
*/ |
||||||
|
public interface WorkPlanRunMapper extends BaseMapper<WorkPlanRun> { |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,14 @@ |
|||||||
|
package org.springblade.desk.produce.service; |
||||||
|
|
||||||
|
import org.springblade.core.mp.base.BaseService; |
||||||
|
import org.springblade.desk.produce.pojo.entity.PlateAround; |
||||||
|
|
||||||
|
/** |
||||||
|
* 镀前镀后 服务类 |
||||||
|
* |
||||||
|
* @author BladeX |
||||||
|
*/ |
||||||
|
public interface IPlateAroundService extends BaseService<PlateAround> { |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,14 @@ |
|||||||
|
package org.springblade.desk.produce.service; |
||||||
|
|
||||||
|
import org.springblade.core.mp.base.BaseService; |
||||||
|
import org.springblade.desk.produce.pojo.entity.WorkPlanRun; |
||||||
|
|
||||||
|
/** |
||||||
|
* 作业计划运行明细 服务类 |
||||||
|
* |
||||||
|
* @author BladeX |
||||||
|
*/ |
||||||
|
public interface IWorkPlanRunService extends BaseService<WorkPlanRun> { |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,21 @@ |
|||||||
|
package org.springblade.desk.produce.service.impl; |
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor; |
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
import org.springblade.core.mp.base.BaseServiceImpl; |
||||||
|
import org.springblade.desk.produce.mapper.PlateAroundMapper; |
||||||
|
import org.springblade.desk.produce.pojo.entity.PlateAround; |
||||||
|
import org.springblade.desk.produce.service.IPlateAroundService; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
|
||||||
|
/** |
||||||
|
* 镀前镀后 服务实现类 |
||||||
|
* |
||||||
|
* @author BladeX |
||||||
|
*/ |
||||||
|
@Slf4j |
||||||
|
@Service |
||||||
|
@RequiredArgsConstructor |
||||||
|
public class PlateAroundServiceImpl extends BaseServiceImpl<PlateAroundMapper, PlateAround> implements IPlateAroundService { |
||||||
|
|
||||||
|
} |
||||||
@ -1,20 +1,141 @@ |
|||||||
package org.springblade.desk.produce.service.impl; |
package org.springblade.desk.produce.service.impl; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
||||||
|
import lombok.RequiredArgsConstructor; |
||||||
|
import org.apache.commons.lang3.StringUtils; |
||||||
|
import org.springblade.core.log.exception.ServiceException; |
||||||
import org.springblade.core.mp.base.BaseServiceImpl; |
import org.springblade.core.mp.base.BaseServiceImpl; |
||||||
|
import org.springblade.desk.dashboard.pojo.entity.BsProcessSetEntity; |
||||||
|
import org.springblade.desk.dashboard.service.IBsProcessSetService; |
||||||
import org.springblade.desk.produce.mapper.WorkOrderRunMapper; |
import org.springblade.desk.produce.mapper.WorkOrderRunMapper; |
||||||
|
import org.springblade.desk.produce.pojo.dto.ListProProcessDTO; |
||||||
import org.springblade.desk.produce.pojo.entity.WorkOrderRun; |
import org.springblade.desk.produce.pojo.entity.WorkOrderRun; |
||||||
|
import org.springblade.desk.produce.pojo.entity.WorkPlan; |
||||||
|
import org.springblade.desk.produce.pojo.entity.WorkPlanRun; |
||||||
import org.springblade.desk.produce.service.IWorkOrderRunService; |
import org.springblade.desk.produce.service.IWorkOrderRunService; |
||||||
|
import org.springblade.desk.produce.service.IWorkPlanService; |
||||||
import org.springframework.stereotype.Service; |
import org.springframework.stereotype.Service; |
||||||
|
import org.springframework.util.CollectionUtils; |
||||||
|
|
||||||
|
import java.time.Instant; |
||||||
|
import java.time.LocalDateTime; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.Date; |
||||||
import java.util.List; |
import java.util.List; |
||||||
|
|
||||||
|
import static com.alibaba.fastjson2.util.DateUtils.DEFAULT_ZONE_ID; |
||||||
|
|
||||||
/** |
/** |
||||||
* 车间订单运行记录表 服务实现类 |
* 车间订单运行记录表 服务实现类 |
||||||
* |
* |
||||||
* @author BladeX |
* @author BladeX |
||||||
* @since 2025-11-28 |
|
||||||
*/ |
*/ |
||||||
@Service |
@Service |
||||||
|
@RequiredArgsConstructor |
||||||
public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper, WorkOrderRun> implements IWorkOrderRunService { |
public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper, WorkOrderRun> implements IWorkOrderRunService { |
||||||
|
|
||||||
|
private final IWorkPlanService prWorkPlanService; |
||||||
|
|
||||||
|
private final IBsProcessSetService bsProcessSetService; |
||||||
|
|
||||||
|
@Override |
||||||
|
public List<WorkPlanRun> listProProcess(ListProProcessDTO listProProcessDTO) { |
||||||
|
List<Long> woIds = listProProcessDTO.getWoIds(); |
||||||
|
Integer runType = listProProcessDTO.getRunType(); |
||||||
|
if (CollectionUtils.isEmpty(woIds) || runType == null) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
Long curWoId = woIds.get(0); |
||||||
|
List<WorkPlan> wpList = prWorkPlanService.list(Wrappers.lambdaQuery(WorkPlan.class).eq(WorkPlan::getWoId, curWoId)); |
||||||
|
List<WorkPlanRun> wprList = new ArrayList<>(wpList.size()); |
||||||
|
// 拿出第一个单子对应的可以派外协的工序
|
||||||
|
String proName = ""; |
||||||
|
for (WorkPlan wp : wpList) { |
||||||
|
WorkPlanRun wpr = new WorkPlanRun(); |
||||||
|
//验证
|
||||||
|
if (!this.checkWp(wp, runType)) { |
||||||
|
continue; |
||||||
|
} |
||||||
|
//转厂内时所有工序自动标记
|
||||||
|
if (WorkOrderRun.RUN_TYPE_2.equals(runType)) { |
||||||
|
wpr.setHandle(Boolean.TRUE); |
||||||
|
} else { |
||||||
|
wpr.setHandle(Boolean.FALSE); |
||||||
|
} |
||||||
|
|
||||||
|
//组装工序号和工序id,用于批量验证是否一致
|
||||||
|
if (StringUtils.isBlank(proName)) { |
||||||
|
proName = wp.getOrders() + "_" + wp.getPpsId(); |
||||||
|
} else { |
||||||
|
proName = proName + "," + wp.getOrders() + "_" + wp.getPpsId(); |
||||||
|
} |
||||||
|
wpr.setCaId(wp.getCaId()); |
||||||
|
wpr.setStartTime(localDateTimeToDate(wp.getStartTime())); |
||||||
|
wpr.setEndTime(localDateTimeToDate(wp.getEndTime())); |
||||||
|
wpr.setWpId(wp.getWoId()); |
||||||
|
wprList.add(wpr); |
||||||
|
} |
||||||
|
|
||||||
|
//如果是批量操作
|
||||||
|
if (woIds.size() > 1) { |
||||||
|
//从集合里面提出首单id
|
||||||
|
woIds.remove(curWoId); |
||||||
|
|
||||||
|
//验证其他车间订单是否满足条件
|
||||||
|
for (Long aLong : woIds) { |
||||||
|
wpList = prWorkPlanService.list(Wrappers.lambdaQuery(WorkPlan.class).eq(WorkPlan::getWoId, aLong)); |
||||||
|
// 拿出其他单子可以派外协的工序与第一条做对比
|
||||||
|
String otherProName = ""; |
||||||
|
for (WorkPlan wp : wpList) { |
||||||
|
|
||||||
|
//验证
|
||||||
|
if (!this.checkWp(wp, runType)) { |
||||||
|
continue; |
||||||
|
} |
||||||
|
//组装工序号和工序id,用于批量验证是否一致
|
||||||
|
if (StringUtils.isBlank(otherProName)) { |
||||||
|
otherProName = wp.getOrders() + "_" + wp.getPpsId(); |
||||||
|
} else { |
||||||
|
otherProName = otherProName + "," + wp.getOrders() + "_" + wp.getPpsId(); |
||||||
|
} |
||||||
|
} |
||||||
|
if (!proName.equals(otherProName)) { |
||||||
|
throw new ServiceException("请选择相同的可转出的工序进行操作!!!"); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return wprList; |
||||||
|
} |
||||||
|
|
||||||
|
private boolean checkWp(WorkPlan wp, Integer runType) { |
||||||
|
//不分派工序不能操作
|
||||||
|
BsProcessSetEntity processSet = bsProcessSetService.getById(wp.getPpsId()); |
||||||
|
if (processSet == null) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
if ("1".equals(processSet.getIsDispatch())) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
//如果是转厂内,则非厂外的工序跳过
|
||||||
|
if (WorkOrderRun.RUN_TYPE_2.equals(runType) && "0".equals(wp.getOem())) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* LocalDateTime 转 Date |
||||||
|
* @param localDateTime |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
private Date localDateTimeToDate(LocalDateTime localDateTime) { |
||||||
|
// 空值校验,避免空指针异常
|
||||||
|
if (localDateTime == null) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
// 1. LocalDateTime + 时区 → ZonedDateTime → Instant
|
||||||
|
Instant instant = localDateTime.atZone(DEFAULT_ZONE_ID).toInstant(); |
||||||
|
// 2. Instant → Date
|
||||||
|
return Date.from(instant); |
||||||
|
} |
||||||
} |
} |
||||||
|
|||||||
@ -0,0 +1,21 @@ |
|||||||
|
package org.springblade.desk.produce.service.impl; |
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor; |
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
import org.springblade.core.mp.base.BaseServiceImpl; |
||||||
|
import org.springblade.desk.produce.mapper.WorkPlanRunMapper; |
||||||
|
import org.springblade.desk.produce.pojo.entity.WorkPlanRun; |
||||||
|
import org.springblade.desk.produce.service.IWorkPlanRunService; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
|
||||||
|
/** |
||||||
|
* 作业计划运行明细 服务实现类 |
||||||
|
* |
||||||
|
* @author BladeX |
||||||
|
*/ |
||||||
|
@Slf4j |
||||||
|
@Service |
||||||
|
@RequiredArgsConstructor |
||||||
|
public class WorkPlanRunServiceImpl extends BaseServiceImpl<WorkPlanRunMapper, WorkPlanRun> implements IWorkPlanRunService { |
||||||
|
|
||||||
|
} |
||||||
Loading…
Reference in new issue