xiahan 1 год назад
Родитель
Сommit
64d634e743

+ 65 - 50
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsProcessOperationProcessEquServiceImpl.java

@@ -302,7 +302,10 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
         AtomicReference<Boolean> emptyBackup = new AtomicReference<>(false);
         List<CheckConflictVo> checkConflictVos = new ArrayList<>();
         List<ApsProcessOperationProcessEquDo> saveList = new ArrayList<>();
-        changingWiresVos.forEach(changingWiresVo -> {
+        List<UpdateConflictVo> updateConflictVoList = new ArrayList<>();
+        UpdateConflictVo updateConflictVo;
+        for (ChangingWiresVo changingWiresVo : changingWiresVos) {
+            updateConflictVo = new UpdateConflictVo();
             // 工序作业明细
             ApsProcessOperationProcessEquDo processEqus = apsProcessOperationProcessEquDos.stream()
                     .filter(info -> changingWiresVo.getId().equals(info.getId()))
@@ -315,12 +318,12 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
             if (JOBSTATUS_TO_BE_STARTING.equals(processEqus.getWorkstatus()) &&
                     processEqus.getProcessdeviceid().equals(changingWiresVo.getEquId())) {
                 log.debug("该工序作业明细:{}加工中且设备未发生变化无需换线", processEqus.getId());
-                return;
+                continue;
             }
             // 加工卷数 = 已报工卷数+已取消卷数时 不更新作业
             if (processEqus.getPlanprocessrall() == processEqus.getStartingroll() + processEqus.getCancelroll()) {
                 log.debug("该工序作业明细:{}已全部报工无需换线", processEqus.getId());
-                return;
+                continue;
             }
 
             // 获取该工序作业最早的计划开始时间
@@ -328,6 +331,10 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
             Date planenddate = processEqus.getPlanenddate();
             ApsProcessOperationDo apsProcessOperationDo = apsProcessOperationService.getById(processEqus.getProcessid());
             String processWay = apsProcessOperationDo.getProcessway();
+            updateConflictVo.setOldPlanEnddate(planstartdate);
+            updateConflictVo.setOldPlanStartdate(planenddate);
+            updateConflictVo.setCurrentProcessWay(processWay);
+            updateConflictVo.setOldEquId(apsProcessOperationDo.getProcessdeviceid());
             // 待开工的直接修改
             if (JOBSTATUS_TO_BE_START.equals(processEqus.getWorkstatus())) {
                 // 待开工的工序作业明细 直接更换加工设备 和车间
@@ -341,48 +348,45 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                 processEqus.setPlanenddate(new Date(processEqus.getPlanenddate().getTime() - timeInterval));
                 checkConflictVos.add(new CheckConflictVo(processEqus.getId(), processEqus.getProcessdeviceid(),
                         processEqus.getPlanstartdate(), processEqus.getPlanenddate()));
-                // 校验可用时间
-                affectedIdList.addAll(checkProcessingTimeConflict(processEqus, planstartdate, planenddate, processWay));
-                // 判断是否存在设备不可用
-                inspectionEquipmentIsAvailable(processEqus, processEqus.getProcessdeviceid(), processEqus.getPlanstartdate()
-                        , processEqus.getPlanenddate());
                 saveList.add(processEqus);
+                updateConflictVo.setApsProcessOperationProcessEquDo(processEqus);
+                updateConflictVoList.add(updateConflictVo);
             }
             //加工中的状态 将未加工的改变为重新生成
             if (JOBSTATUS_TO_BE_STARTING.equals(processEqus.getWorkstatus())) {
                 emptyBackup.set(true);
-                ApsProcessOperationProcessEquDo saveProcessEqu = new ApsProcessOperationProcessEquDo();
-                BeanUtils.copyProperties(processEqus, saveProcessEqu);
+                ApsProcessOperationProcessEquDo newProcessEqu = new ApsProcessOperationProcessEquDo();
+                BeanUtils.copyProperties(processEqus, newProcessEqu);
 
                 // 获取加工时长
                 long processingTime = DateUtil.between(processEqus.getPlanenddate(), processEqus.getPlanstartdate(), DateUnit.SECOND, false);
                 /************更新换线后工序作业的信息********************/
-                saveProcessEqu.setId(SecurityUtil.getUUID());
-                affectedIdList.add(saveProcessEqu.getId());
-                saveProcessEqu.setProcessworkshopid(changingWiresVo.getWorkshopId());
-                saveProcessEqu.setProcessworkshop(changingWiresVo.getWorkshopName());
-                saveProcessEqu.setProcessdeviceid(changingWiresVo.getEquId());
-                saveProcessEqu.setProcessdevice(changingWiresVo.getEquName());
+                newProcessEqu.setId(SecurityUtil.getUUID());
+                affectedIdList.add(newProcessEqu.getId());
+                newProcessEqu.setProcessworkshopid(changingWiresVo.getWorkshopId());
+                newProcessEqu.setProcessworkshop(changingWiresVo.getWorkshopName());
+                newProcessEqu.setProcessdeviceid(changingWiresVo.getEquId());
+                newProcessEqu.setProcessdevice(changingWiresVo.getEquName());
                 // 更新计划完工时间
-                saveProcessEqu.setPlanenddate(CalculateCompletionTime(saveProcessEqu.getPlanstartdate(), processingTime,
-                        saveProcessEqu.getPlanprocessrall() - saveProcessEqu.getStartingroll(),
-                        saveProcessEqu.getPlanprocessrall()));
+                newProcessEqu.setPlanenddate(CalculateCompletionTime(newProcessEqu.getPlanstartdate(), processingTime,
+                        newProcessEqu.getPlanprocessrall() - newProcessEqu.getStartingroll(),
+                        newProcessEqu.getPlanprocessrall()));
                 //计划加工卷数=计划加工卷数-已开工卷数
-                saveProcessEqu.setPlanprocessrall(saveProcessEqu.getPlanprocessrall() - saveProcessEqu.getStartingroll());
-                saveProcessEqu.setStartingroll(0);
-                saveProcessEqu.setReportroll(0);
-                saveProcessEqu.setCheckoutroll(0);
-                saveProcessEqu.setUnfinishroll(saveProcessEqu.getPlanprocessrall());
-                saveProcessEqu.setWorkstatus(JOBSTATUS_TO_BE_START);
-                saveProcessEqu.setClosestatus(SaveConstans.CloseStatus.UNFINISHED);
-                checkConflictVos.add(new CheckConflictVo(processEqus.getId(), saveProcessEqu.getProcessdeviceid(),
-                        saveProcessEqu.getPlanstartdate(), saveProcessEqu.getPlanenddate()));
-                // 判断是否存在设备不可用
-                inspectionEquipmentIsAvailable(saveProcessEqu, saveProcessEqu.getProcessdeviceid(), saveProcessEqu.getPlanstartdate()
-                        , saveProcessEqu.getPlanenddate());
-                // 校验时间重叠问题
-                affectedIdList.addAll(checkProcessingTimeConflict(saveProcessEqu, planstartdate, planenddate, processWay));
-                saveList.add(saveProcessEqu);
+                newProcessEqu.setPlanprocessrall(newProcessEqu.getPlanprocessrall() - newProcessEqu.getStartingroll());
+                newProcessEqu.setStartingroll(0);
+                newProcessEqu.setReportroll(0);
+                newProcessEqu.setCheckoutroll(0);
+                newProcessEqu.setUnfinishroll(newProcessEqu.getPlanprocessrall());
+                newProcessEqu.setWorkstatus(JOBSTATUS_TO_BE_START);
+                newProcessEqu.setClosestatus(SaveConstans.CloseStatus.UNFINISHED);
+                saveList.add(processEqus);
+                updateConflictVo.setApsProcessOperationProcessEquDo(newProcessEqu);
+                updateConflictVoList.add(updateConflictVo);
+                checkConflictVos.add(new CheckConflictVo(processEqus.getId(), newProcessEqu.getProcessdeviceid(),
+                        newProcessEqu.getPlanstartdate(), newProcessEqu.getPlanenddate()));
+
+
+                saveList.add(newProcessEqu);
                 /************更新原数据的数量信息***********************/
                 // 更新计划完工时间
                 processEqus.setPlanenddate(CalculateCompletionTime(processEqus.getPlanstartdate(), processingTime,
@@ -404,25 +408,25 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                 } else {
                     processEqus.setClosestatus(processEqus.getStartingroll() > 0 ? JOBSTATUS_TO_BE_STARTING : JOBSTATUS_TO_BE_START);
                 }
-                // 校验可用时间
-                affectedIdList.addAll(checkProcessingTimeConflict(processEqus, planstartdate, planenddate, processWay));
-                // 判断是否存在设备不可用
-                inspectionEquipmentIsAvailable(processEqus, processEqus.getProcessdeviceid(), processEqus.getPlanstartdate()
-                        , processEqus.getPlanenddate());
+//                // 校验可用时间
+//                affectedIdList.addAll(checkProcessingTimeConflict(processEqus, planstartdate, planenddate, processWay));
+//                // 判断是否存在设备不可用
+//                inspectionEquipmentIsAvailable(processEqus, processEqus.getProcessdeviceid(), processEqus.getPlanstartdate()
+//                        , processEqus.getPlanenddate());
                 saveList.add(processEqus);
             }
             // 更新坯料交货期
-            apsBlankOrderService. updateBlankDeliveryDate(null,apsProcessOperationDo.getBlankid());
-        });
-        // 换线拆单后 需要校验 是否存在冲突 如果存在冲突 提示
-        if (!checkConflictVos.isEmpty()) {
-            List<String> promptInformation = this.baseMapper.checkConflict(checkConflictVos);
-            if (!promptInformation.isEmpty()) {
-                log.error("存在冲突的工序作业");
-                return R.error("换线后存在冲突");
-                //return R.error(promptInformation.get(0));
-            }
+            apsBlankOrderService.updateBlankDeliveryDate(null, apsProcessOperationDo.getBlankid());
         }
+        // 换线拆单后 需要校验 是否存在冲突 如果存在冲突 提示
+//        if (!checkConflictVos.isEmpty()) {
+//            List<String> promptInformation = this.baseMapper.checkConflict(checkConflictVos);
+//            if (!promptInformation.isEmpty()) {
+//                log.error("存在冲突的工序作业");
+//                return R.error("换线后存在冲突");
+//                //return R.error(promptInformation.get(0));
+//            }
+//        }
         if (emptyBackup.get()) {
             SysUserVo currentUser = CXCommonUtils.getCurrentUser();
             // 删除工序作业备份
@@ -431,7 +435,18 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
         if(!saveList.isEmpty()){
             this.saveOrUpdateBatch(saveList);
         }
-
+        if(!updateConflictVoList.isEmpty()){
+            updateConflictVoList.forEach(data->{
+                ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = data.getApsProcessOperationProcessEquDo();
+                affectedIdList.addAll(checkProcessingTimeConflict(apsProcessOperationProcessEquDo,
+                        data.getOldPlanStartdate(), data.getOldPlanEnddate(), data.getCurrentProcessWay()));
+                // 判断是否存在设备不可用
+                inspectionEquipmentIsAvailable(apsProcessOperationProcessEquDo,
+                        apsProcessOperationProcessEquDo.getProcessdeviceid(),
+                        apsProcessOperationProcessEquDo.getPlanstartdate(),
+                        apsProcessOperationProcessEquDo.getPlanenddate());
+            });
+        }
 
         // 重新获取甘特图数据并返回前段
         return R.ok(ganttService.getListById(affectedIdList));