浏览代码

aps-换线后重叠之后,清除加工时间叠问题tesin1637,以及testin1636补充

zhoudazhuang 9 月之前
父节点
当前提交
533dda73e6

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

@@ -71,6 +71,8 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
     private ApsConflictLogServiceImpl apsConflictLogService;
     @Autowired
     private HttpServletRequest httpServletRequest;
+    @Autowired
+    private ApsProcessOperationProcessEquService apsProcessOperationProcessEquService;
 
     /**
      * 更新工序的待加工批次号信息
@@ -474,7 +476,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
             updateConflictVoList.forEach(data -> {
                 ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = data.getApsProcessOperationProcessEquDo();
                 affectedIdList.addAll(checkProcessingTimeConflict(apsProcessOperationProcessEquDo,
-                        data.getOldPlanStartdate(), data.getOldPlanEnddate(), data.getOldEquId(), data.getCurrentProcessWay()));
+                        data.getOldPlanStartdate(), data.getOldPlanEnddate(), data.getOldEquId(), data.getCurrentProcessWay(),returnAboutIds));
                 // 判断是否存在设备不可用
                 inspectionEquipmentIsAvailable(apsProcessOperationProcessEquDo,
                         apsProcessOperationProcessEquDo.getProcessdeviceid(),
@@ -482,12 +484,14 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                         apsProcessOperationProcessEquDo.getPlanenddate());
             });
         }
+        List<String> aboutIds= affectedIdList.stream().distinct().collect(Collectors.toList());
         blankIds.forEach(data -> {
             // 更新坯料交货期
-            apsBlankOrderService.updateBlankDeliveryDate(null, data);
+            aboutIds.addAll(apsBlankOrderService.updateBlankDeliveryDate(null, data));
         });
+
         // 重新获取甘特图数据并返回前段
-        return R.ok(ganttService.getListById(affectedIdList.stream().distinct().collect(Collectors.toList())));
+        return R.ok(ganttService.getListById(aboutIds));
     }
 
     /**
@@ -544,11 +548,13 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
         List<UpdateConflictVo> updateConflictVos = new ArrayList<>();
         Set<String> blankIdSet = new HashSet<>();
         UpdateConflictVo vo;
+        List<String> returnAboutIds = new ArrayList<>();
         for (ChangeStartTimeVo changeStartTimeVo : changeStartTimeVos) {
             vo = new UpdateConflictVo();
             String id = changeStartTimeVo.getId();
             affectedIdList.add(id);
             affectedIdList.addAll(changeStartTimeVo.getReturnAboutIds());
+            returnAboutIds.addAll(changeStartTimeVo.getReturnAboutIds());
             ApsProcessOperationProcessEquDo processEquDo = this.getById(id);
             ApsProcessOperationDo operationDo = apsProcessOperationService.getById(processEquDo.getProcessid());
             if (operationDo == null) {
@@ -587,19 +593,26 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
         updateConflictVos.forEach(data -> {
             ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = data.getApsProcessOperationProcessEquDo();
             affectedIdList.addAll(checkProcessingTimeConflict(apsProcessOperationProcessEquDo,
-                    data.getOldPlanStartdate(), data.getOldPlanEnddate(), data.getOldEquId(), data.getCurrentProcessWay()));
+                    data.getOldPlanStartdate(), data.getOldPlanEnddate(), data.getOldEquId(), data.getCurrentProcessWay(),returnAboutIds));
             // 判断是否存在设备不可用
             inspectionEquipmentIsAvailable(apsProcessOperationProcessEquDo,
                     apsProcessOperationProcessEquDo.getProcessdeviceid(),
                     apsProcessOperationProcessEquDo.getPlanstartdate(),
                     apsProcessOperationProcessEquDo.getPlanenddate());
         });
-        blankIdSet.forEach(blankId -> {
+//        blankIdSet.forEach(blankId -> {
+//            // 更新坯料交货期
+//            apsBlankOrderService.updateBlankDeliveryDate(null, blankId);
+//        });
+//        // 返回受影响的数据
+//        return R.ok(this.ganttService.getListById(affectedIdList.stream().distinct().collect(Collectors.toList())));
+        List<String> aboutIds= affectedIdList.stream().distinct().collect(Collectors.toList());
+        blankIdSet.forEach(data -> {
             // 更新坯料交货期
-            apsBlankOrderService.updateBlankDeliveryDate(null, blankId);
+            aboutIds.addAll(apsBlankOrderService.updateBlankDeliveryDate(null, data));
         });
         // 返回受影响的数据
-        return R.ok(this.ganttService.getListById(affectedIdList.stream().distinct().collect(Collectors.toList())));
+        return R.ok(ganttService.getListById(aboutIds));
     }
 
     /**
@@ -664,7 +677,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                     jobDetailsVo.getPlanStartTime().getTime() - oldPlanstartdate.getTime()));
             // 增加受影响的工序作业信息
             affectedIdList.addAll(checkProcessingTimeConflict(apsProcessOperationProcessEquDo, oldPlanstartdate,
-                    oldPlanenddate, oldEquId, apsProcessOperationDo.getProcessway()));
+                    oldPlanenddate, oldEquId, apsProcessOperationDo.getProcessway(),null));
         }
 
         // 判断是否存在设备不可用
@@ -673,9 +686,13 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
 
         this.updateById(apsProcessOperationProcessEquDo);
         // 更新坯料交货期
-        apsBlankOrderService.updateBlankDeliveryDate(null, apsProcessOperationDo.getBlankid());
+//        apsBlankOrderService.updateBlankDeliveryDate(null, apsProcessOperationDo.getBlankid());
+//        affectedIdList.addAll(jobDetailsVo.getReturnAboutIds());
+//        return R.ok(this.ganttService.getListById(affectedIdList));
         affectedIdList.addAll(jobDetailsVo.getReturnAboutIds());
-        return R.ok(this.ganttService.getListById(affectedIdList));
+        List<String> aboutIds= affectedIdList.stream().distinct().collect(Collectors.toList());
+        aboutIds.addAll(apsBlankOrderService.updateBlankDeliveryDate(null, apsProcessOperationDo.getBlankid()));
+        return R.ok(ganttService.getListById(aboutIds));
     }
 
     /**
@@ -803,7 +820,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                 // 增加受影响的工序作业信息
                 affectedIdList.addAll(checkProcessingTimeConflict(newDo, currentProcessEquDo.getPlanstartdate(),
                         currentProcessEquDo.getPlanenddate(), currentProcessEquDo.getProcessdeviceid(),
-                        currentProcessOperationDo.getProcessway()));
+                        currentProcessOperationDo.getProcessway(),null));
             } else {
                 /**************************拆分逻辑处理***********************************/
                 newDo.setId(SecurityUtil.getUUID());
@@ -836,7 +853,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                 // 增加受影响的工序作业信息
                 affectedIdList.addAll(checkProcessingTimeConflict(newDo, newDo.getPlanstartdate(),
                         newDo.getPlanenddate(), newDo.getProcessdeviceid(),
-                        currentProcessOperationDo.getProcessway()));
+                        currentProcessOperationDo.getProcessway(),null));
                 this.save(newDo);
                 newDataList.add(newDo);
                 /**************************原数据逻辑处理***********************************/
@@ -876,7 +893,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                 // 增加受影响的工序作业信息
                 affectedIdList.addAll(checkProcessingTimeConflict(oldDo,
                         currentProcessEquDo.getPlanstartdate(), currentProcessEquDo.getPlanenddate(),
-                        oldDo.getProcessdeviceid(), currentProcessOperationDo.getProcessway()));
+                        oldDo.getProcessdeviceid(), currentProcessOperationDo.getProcessway(),null));
             }
         });
         this.saveOrUpdateBatch(newDataList);
@@ -885,9 +902,10 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
             inspectionEquipmentIsAvailable(newDo, newDo.getProcessdeviceid()
                     , newDo.getPlanstartdate(), newDo.getPlanenddate());
         });
+        List<String> aboutIds= affectedIdList.stream().distinct().collect(Collectors.toList());
         apsProcessOperationDos.forEach(data -> {
             // 更新坯料交货期
-            apsBlankOrderService.updateBlankDeliveryDate(null, data.getBlankid());
+            aboutIds.addAll(apsBlankOrderService.updateBlankDeliveryDate(null, data.getBlankid()));
         });
         // 将工序作业明细ID 加入到上一个工序作业信息的中
         Map<String, List<ApsProcessOperationProcessEquDo>> collect = newDataList.stream().collect(Collectors.groupingBy(ApsProcessOperationProcessEquDo::getPreviousprocessesids));
@@ -901,7 +919,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                     .eq(ApsProcessOperationProcessEquDo::getId, k)
                     .set(ApsProcessOperationProcessEquDo::getNextprocessesids, strAppendListConvertStr(apsProcessOperationProcessEquDo.getNextprocessesids(), collect1)));
         });
-        return R.ok(this.ganttService.getListById(affectedIdList.stream().distinct().collect(Collectors.toList())));
+        return R.ok(this.ganttService.getListById(aboutIds));
     }
 
     public void updateBlank(String processOperationId) {
@@ -1103,7 +1121,6 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                     apsConflictLogService.recordLog(info.getId(),
                             aboutId, removeConflictsDesc, 2, null);
                 }
-
             }
 
 //            else {
@@ -1114,6 +1131,48 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
         this.updateBatchById(beforeUpdatingConflictId);
     }
 
+    /**
+     * 更新设备或者时间之后 更新冲突描述
+     *
+     * @param aboutProcessEquList 工序作业明细影响到的工序作业明细数据
+     * @param removeConflictsDesc      需要被删除的冲突描述
+     */
+    public void updateProcessEquAboutBeforeAddConflictsDesc(List<ApsProcessOperationProcessEquDo> aboutProcessEquList,
+                                                       String removeConflictsDesc, String processway,
+                                                       Date newPlanStartDate,
+                                                       Date newOldEndDate,
+                                                       String aboutId) {
+        if (aboutProcessEquList.isEmpty()) {
+            return;
+        }
+        //删除之前受影响的工序作业明细的‘与加工设备其他作业加工时间重叠’冲突
+        aboutProcessEquList.forEach(info -> {
+            if (StringUtils.isNotBlank(info.getConflictdes())&&info.getConflictdes().contains(removeConflictsDesc)){
+                if (PROCESS_WAY_MERGE.equals(processway)) {
+                    info.setConflictdes(removeConflictsDesc(info.getConflictdes(), removeConflictsDesc));
+                    info.setHasconflict(StringUtils.isBlank(info.getConflictdes()) &&
+                            StringUtils.isBlank(info.getSoftconflictdes()) ?
+                            LOCKMARK_N : LOCKMARK_Y);
+                    info.setModifydate(new Date());
+                    apsConflictLogService.recordLog(info.getId(),
+                            aboutId, removeConflictsDesc, 2, null);
+                } else {
+                    if (newPlanStartDate.compareTo(info.getPlanenddate()) > 0 ||
+                            newOldEndDate.compareTo(info.getPlanstartdate()) < 0) {
+                        info.setConflictdes(removeConflictsDesc(info.getConflictdes(), removeConflictsDesc));
+                        info.setHasconflict(StringUtils.isBlank(info.getConflictdes()) &&
+                                StringUtils.isBlank(info.getSoftconflictdes()) ?
+                                LOCKMARK_N : LOCKMARK_Y);
+                        info.setModifydate(new Date());
+                        apsConflictLogService.recordLog(info.getId(),
+                                aboutId, removeConflictsDesc, 2, null);
+                    }
+                }
+            }
+        });
+        this.updateBatchById(aboutProcessEquList);
+    }
+
 
     /**
      * 更新设备或者时间之后 更新冲突描述
@@ -1198,17 +1257,26 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
      */
     public List<String> checkProcessingTimeConflict(ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo,
                                                     Date oldPlanstartdate, Date oldPlanenddate,
-                                                    String oldEquId, String currentProcessWay) {
+                                                    String oldEquId, String currentProcessWay,List<String> returnAboutIds) {
         // 受影响的工序作业Id
         List<String> affectedIdList = new ArrayList<>();
         // 获取更新之前的存在冲突的工序作业
         List<ApsProcessOperationProcessEquDo> beforeUpdatingConflictId = this.baseMapper.getTimeOverlapByEquId(oldEquId,
                 apsProcessOperationProcessEquDo.getId(), oldPlanstartdate, oldPlanenddate, currentProcessWay);
+        List<ApsProcessOperationProcessEquDo> aboutProcessEquList = new ArrayList<>();
+        if (!returnAboutIds.isEmpty()){
+            aboutProcessEquList = (List<ApsProcessOperationProcessEquDo>) apsProcessOperationProcessEquService.listByIds(returnAboutIds);
+        }
         if (!beforeUpdatingConflictId.isEmpty()) {
             affectedIdList.addAll(beforeUpdatingConflictId.stream().map(ApsProcessOperationProcessEquDo::getId).collect(Collectors.toList()));
             updateProcessEquBeforeAddConflictsDesc(beforeUpdatingConflictId, EQ_TIME_CROSS, currentProcessWay,
                     apsProcessOperationProcessEquDo.getPlanstartdate(),
                     apsProcessOperationProcessEquDo.getPlanenddate(), apsProcessOperationProcessEquDo.getId());
+            if (!aboutProcessEquList.isEmpty()){
+                updateProcessEquAboutBeforeAddConflictsDesc(aboutProcessEquList,EQ_TIME_CROSS, currentProcessWay,
+                        apsProcessOperationProcessEquDo.getPlanstartdate(),
+                        apsProcessOperationProcessEquDo.getPlanenddate(), apsProcessOperationProcessEquDo.getId());
+            }
         }
 
         // 找到更新时间之后存在冲突的工序作业
@@ -1239,6 +1307,23 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                     .set(ApsProcessOperationProcessEquDo::getHasconflict, apsProcessOperationProcessEquDo.getHasconflict())
                     .set(BaseDo::getModifydate, new Date())
             );
+            if (!aboutProcessEquList.isEmpty()){
+                aboutProcessEquList.forEach(e->{
+                    if (StringUtils.isNotBlank(e.getConflictdes())&&e.getConflictdes().contains(EQ_TIME_CROSS)){
+                        String afterConflictdes = removeConflictsDesc(e.getConflictdes(), EQ_TIME_CROSS);
+                        apsConflictLogService.recordLog(e.getId(),"", EQ_TIME_CROSS, 2, null);
+                        e.setConflictdes(afterConflictdes);
+                        e.setHasconflict(StringUtils.isBlank(e.getConflictdes()) &&
+                                StringUtils.isBlank(e.getSoftconflictdes()) ?
+                                LOCKMARK_N : LOCKMARK_Y);
+                        this.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
+                                .eq(ApsProcessOperationProcessEquDo::getId, e.getId())
+                                .set(ApsProcessOperationProcessEquDo::getConflictdes, newConflictsDesc)
+                                .set(ApsProcessOperationProcessEquDo::getHasconflict, e.getHasconflict())
+                                .set(BaseDo::getModifydate, new Date()));
+                    }
+                });
+            }
         }
         return affectedIdList;
     }