pms-parent/pms-web-product/src/main/java/com/dy/pmsProduct/process/ProcessSv.java
@@ -3,6 +3,7 @@ import com.dy.common.webFilter.UserTokenContext; import com.dy.common.webUtil.QueryResultVo; import com.dy.pmsGlobal.daoOth.OthFileMapper; import com.dy.pmsGlobal.daoPr.PrAssemblyPlanMapper; import com.dy.pmsGlobal.daoPr.PrProductionNodeMapper; import com.dy.pmsGlobal.daoPr.PrProductionProcessMapper; import com.dy.pmsGlobal.daoPr.PrWorkingInstructionMapper; @@ -10,10 +11,12 @@ import com.dy.pmsGlobal.dyFile.FileRestVo; import com.dy.pmsGlobal.pojoBa.BaUser; import com.dy.pmsGlobal.pojoOth.OthFile; import com.dy.pmsGlobal.pojoPr.PrAssemblyPlan; import com.dy.pmsGlobal.pojoPr.PrProductionNode; import com.dy.pmsGlobal.pojoPr.PrProductionProcess; import com.dy.pmsGlobal.pojoPr.PrWorkingInstruction; import com.dy.pmsGlobal.util.UserUtil; import com.dy.pmsProduct.taskPlan.PlanStatusEnum; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.dubbo.common.utils.PojoUtils; @@ -30,6 +33,7 @@ @Slf4j @Service public class ProcessSv { private PrAssemblyPlanMapper assemblyDao; private PrProductionProcessMapper processDao; private PrProductionNodeMapper nodeDao; private PrWorkingInstructionMapper workDao; @@ -38,6 +42,10 @@ private OthFileMapper othFileMapper; @Value("${dy.webFile.fmUrl}") private String fmUrl ; @Autowired public void setAssemblyDao(PrAssemblyPlanMapper assemblyDao) { this.assemblyDao = assemblyDao; } @Autowired public void setProcessDao(PrProductionProcessMapper dao){ processDao = dao; @@ -80,6 +88,26 @@ if (processDao.exists(process.name, process.id)) { throw new RuntimeException("流程名称不能重复"); } PrProductionProcess originProductionProcess = processDao.selectByPrimaryKey(process.id); //如果已经绑定任务(目前不包括暂停\结束状态 投入数为0的任务 以外的 所有任务),产品\节点id不能删除不能修改 if(!originProductionProcess.getProName().equals(process.getProName())){ //组装任务计划 PrAssemblyPlan params = new PrAssemblyPlan(); params.setProcessId(process.id); List<PrAssemblyPlan> planList = assemblyDao.selectAssyPlanSimplify(params); List<PrAssemblyPlan> onlinePlanList = planList.stream().filter(plan -> plan.getStatus() == PlanStatusEnum.NORMAL.getCode()).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(planList)) { if (planList.stream().anyMatch(plan -> plan.getInputNumber() > 0)) { throw new RuntimeException("存在绑定的任务,并且投入生产,产品不能修改"); }else if(CollectionUtils.isNotEmpty(onlinePlanList)){ //先将组装任务置为暂停状态 onlinePlanList.forEach(plan -> { plan.status = PlanStatusEnum.PAUSE.getCode(); assemblyDao.updateByPrimaryKeySelective(plan); }); } } } prepareProcess(process); int count = processDao.updateByPrimaryKeySelective(process); // 优化:只有当节点有变更时才删除并重新插入 pms-parent/pms-web-product/src/main/java/com/dy/pmsProduct/taskPlan/AssemblySv.java
@@ -102,10 +102,6 @@ if(assemblyDao.exists(plan.name,plan.id)){ throw new RuntimeException("计划名称不能重复"); } PrProductionProcess process = processDao.selectByPrimaryKey(plan.processId); if(process == null || !process.proId.equals(plan.proId)){ throw new RuntimeException("产品与生产流程不匹配"); } PrAssemblyPlan origPlan = assemblyDao.selectByPrimaryKey(plan.id); PrBatchNumber batch = batchDao.selectByPrimaryKey(origPlan.batchId); //如果有投入,产品和流程不能变更 @@ -114,17 +110,7 @@ throw new RuntimeException("计划已投入,产品与生产流程不能变更"); } } //Fancy add 2024/07/09 如果状态为执行 ,则结束日期必须大于等于当前日期 if(plan.status == PlanStatusEnum.NORMAL.getCode()){ String endDateStr = plan.getEndDate(); LocalDate endDate = LocalDate.parse(endDateStr, DateTimeFormatter.ISO_LOCAL_DATE); LocalDate nextDay = endDate.plusDays(1); LocalDate today = LocalDate.now(); // 获取当前日期 if (nextDay.isBefore(today)) { throw new RuntimeException("执行状态结束日期必须大于等于当前日期"); } } extractedCheck(plan); //产品改变则更新全部已生成设备号 if(origPlan.proId != plan.proId){ batch.proId = plan.proId; @@ -137,6 +123,23 @@ insertDevice(plan.proId,origPlan.batchId,batch.batchNumber,plan.number,origPlan.number+1); } return assemblyDao.updateByPrimaryKeySelective(plan); } private void extractedCheck(PrAssemblyPlan plan) { PrProductionProcess process = processDao.selectByPrimaryKey(plan.processId); if(process == null || !process.proId.equals(plan.proId)){ throw new RuntimeException("产品与生产流程不匹配"); } //Fancy add 2024/07/09 如果状态为执行 ,则结束日期必须大于等于当前日期 if(plan.status == PlanStatusEnum.NORMAL.getCode()){ String endDateStr = plan.getEndDate(); LocalDate endDate = LocalDate.parse(endDateStr, DateTimeFormatter.ISO_LOCAL_DATE); LocalDate nextDay = endDate.plusDays(1); LocalDate today = LocalDate.now(); // 获取当前日期 if (nextDay.isBefore(today)) { throw new RuntimeException("执行状态结束日期必须大于等于当前日期,请修改结束日期"); } } } @@ -272,6 +275,11 @@ */ @Transactional public int updateStatus(PrAssemblyPlan plan) { if(plan.status == PlanStatusEnum.NORMAL.getCode()){ PrAssemblyPlan assemblyPlan = assemblyDao.selectByPrimaryKey(plan.id); assemblyPlan.status = plan.status; extractedCheck(assemblyPlan); } PrAssemblyPlan param = new PrAssemblyPlan(); param.id =plan.id; param.status = plan.status;