Explorar o código

Merge remote-tracking branch 'origin/mode-min-unit' into mode-min-unit

fangpy hai 9 meses
pai
achega
4618d29234

+ 74 - 22
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsBlankOrderServiceImpl.java

@@ -47,7 +47,6 @@ import java.util.stream.Collectors;
 import static com.rongwei.bscommon.sys.service.impl.ApsProductionOrderServiceImpl.ERROR_MSG;
 import static com.rongwei.bscommon.sys.utils.ApsUtils.addNewConflictsDesc;
 import static com.rongwei.bscommon.sys.utils.ApsUtils.removeConflictsDesc;
-import static com.rongwei.safecommon.utils.SaveConstans.ForcedConflictsDescription.EQUIPMENT_RUN_TIME;
 import static com.rongwei.safecommon.utils.SaveConstans.ForcedConflictsDescription.EXCEEDING_THE_PROMISED_DELIVERY_DEADLINE;
 import static com.rongwei.safecommon.utils.SaveConstans.LockmarkType.LOCKMARK_N;
 import static com.rongwei.safecommon.utils.SaveConstans.LockmarkType.LOCKMARK_Y;
@@ -2617,7 +2616,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
      *
      * @return
      */
-    public void updateBlankDeliveryDate(ApsBlankOrderDo apsBlankOrderDo, String id) {
+    public List<String> updateBlankDeliveryDate(ApsBlankOrderDo apsBlankOrderDo, String id) {
         if (apsBlankOrderDo == null) {
             apsBlankOrderDo = this.getById(id);
         }
@@ -2628,8 +2627,9 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         logger.debug("开始更新坯料计划:{}对应的交货期没", apsBlankOrderDo.getId());
         List<UpdateBlankDeliveryDateVo> blankDeliveryDate = this.getBaseMapper().getBlankDeliveryDate(apsBlankOrderDo.getId());
         logger.debug("获取当前坯料计划的相关的计划完工时间:{}", blankDeliveryDate);
+        List<String> aboutIds = removeOtherConflictdes(apsBlankOrderDo.getId(), blankDeliveryDate.stream().map(UpdateBlankDeliveryDateVo::getId).collect(Collectors.toList()));
         if (blankDeliveryDate.isEmpty()) {
-            return;
+            return aboutIds;
         }
         if (blankDeliveryDate.size() == 1) {
             blankDeliveryDate.add(blankDeliveryDate.get(0));
@@ -2710,8 +2710,46 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                 apsProcessOperationProcessEquService.updateBatchById(equDos);
             }
         }
+        return aboutIds;
 
+    }
 
+    /**
+     * 根據坯料計劃ID 刪除工序作業明細的 超出承諾交貨期衝突
+     *
+     * @param blankId
+     * @param operationId
+     */
+    public List<String> removeOtherConflictdes(String blankId, List<String> operationId) {
+        if (StringUtils.isBlank(blankId)) {
+            return new ArrayList<>();
+        }
+        List<ApsProcessOperationProcessEquDo> list = apsProcessOperationProcessEquService.list(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
+                .eq(ApsProcessOperationProcessEquDo::getBlankid, blankId)
+                .notIn(operationId == null && operationId.size() > 0, ApsProcessOperationProcessEquDo::getId, operationId)
+                .like(ApsProcessOperationProcessEquDo::getConflictdes, EXCEEDING_THE_PROMISED_DELIVERY_DEADLINE));
+
+        List<ApsProcessOperationProcessEquDo> updates = new ArrayList<>();
+        ApsProcessOperationProcessEquDo updateDo;
+        for (ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo : list) {
+            updateDo = new ApsProcessOperationProcessEquDo();
+            apsConflictLogService.recordLog(apsProcessOperationProcessEquDo.getId(),
+                    "", EXCEEDING_THE_PROMISED_DELIVERY_DEADLINE, 2, null);
+
+            updateDo.setConflictdes(removeConflictsDesc(apsProcessOperationProcessEquDo.getConflictdes(), EXCEEDING_THE_PROMISED_DELIVERY_DEADLINE));
+            if (StringUtils.isBlank(updateDo.getConflictdes()) && StringUtils.isBlank(apsProcessOperationProcessEquDo.getSoftconflictdes())) {
+                updateDo.setHasconflict("n");
+            } else {
+                updateDo.setHasconflict("y");
+            }
+            updateDo.setId(apsProcessOperationProcessEquDo.getId());
+            updateDo.setModifydate(new Date());
+            updates.add(updateDo);
+        }
+        if (!updates.isEmpty()) {
+            apsProcessOperationProcessEquService.updateBatchById(updates);
+        }
+        return updates.stream().map(ApsProcessOperationProcessEquDo::getId).collect(Collectors.toList());
     }
 
     public Date timeAddHour(Date date, int hour) {
@@ -3378,7 +3416,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
 
         //线下批次号
         List<String> offLineBatchNumberList = new LinkedList<>();
-        //线上批次号 卷重不同集合
+        //线上批次号 不匹配提示
         List<String> onLineBatchNumberWarnList = new LinkedList<>();
 
         /**
@@ -3443,26 +3481,38 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
 
             }
 
-            //查找该批次号物料=在制品的作业输出物料ID对应输出物料
-            //如果{该批次号物料的输入物料描述}与{坯料的输入物料描述}不相同,或者坯料类型不等于坯料计划的坯料类型
-            //错误提示:该批次号{批次号}物料:{该批次号物料的输入物料描述}不是该坯料计划所需的坯料{坯料的输入物料描述}
-            String s1 = apsWorkInProgressInventoryDo.getJoboutputmaterial();
-            String s2 = apsBlankOrderDo.getInputreportdescribe();
-            if (!s1.equals(s2)) {
-                return R.error("该批次号" + s + "物料:" + s1 + "不是该坯料计划所需的坯料" + s2 + "");
-            }
+//            //查找该批次号物料=在制品的作业输出物料ID对应输出物料
+//            //如果{该批次号物料的输入物料描述}与{坯料的输入物料描述}不相同,或者坯料类型不等于坯料计划的坯料类型
+//            //错误提示:该批次号{批次号}物料:{该批次号物料的输入物料描述}不是该坯料计划所需的坯料{坯料的输入物料描述}
+//            String s1 = apsWorkInProgressInventoryDo.getJoboutputmaterial();
+//            String s2 = apsBlankOrderDo.getInputreportdescribe();
+//            if (!s1.equals(s2)) {
+//                return R.error("该批次号" + s + "物料:" + s1 + "不是该坯料计划所需的坯料" + s2 + "");
+//            }
 
-            //如果在制品的坯料类型不等于坯料计划的坯料类型,
-            // 则错误提示:该批次号{批次号}物料:{在制品的作业输出物料}不是该坯料计划所需的坯料类型
-            if (!apsWorkInProgressInventoryDo.getBlanktype().equals(apsBlankOrderDo.getBlanktype())) {
-                return R.error("该批次号" + s + "物料:" + s1 + "不是该坯料计划所需的坯料类型");
+            /*
+            如果“{在制品的坯料类型} {在制品的作业输出物料} {在制品的计划输出卷重}吨”
+            与“{坯料计划的坯料类型} {坯料输入物料描述} {坯料的卷重}吨”不相同,
+            则提示确认:该批次号{批次号}物料:
+            “{在制品的坯料类型} {在制品的作业输出物料} {在制品的计划输出卷重}吨”与该坯料计划所需的坯料“{坯料计划的坯料类型} {坯料输入物料描述} {坯料的卷重}吨”不相同,确认领料吗?
+             */
+            String a = apsWorkInProgressInventoryDo.getBlanktype() + " " + apsWorkInProgressInventoryDo.getJoboutputmaterial() + " " + CXCommonUtils.removeExtraZerosAndDecimal(apsWorkInProgressInventoryDo.getPlansinglerollweight()) + "吨";
+            String b = apsBlankOrderDo.getBlanktype() + " " + apsBlankOrderDo.getInputreportdescribe() + " " + CXCommonUtils.removeExtraZerosAndDecimal(apsBlankOrderDo.getSinglerollweight()) + "吨";
+            if (!a.equals(b)) {
+                onLineBatchNumberWarnList.add("该批次号" + s + "物料:'" + a + "'与该坯料计划所需的坯料:'" + b + "'不相同,确认领料吗?");
             }
 
-            //如果在制品的计划输出卷重不等于坯料的卷重,
-            // 提示确认:批次号{批次号1,批次号2}物料卷重与坯料需求的卷重不同,确认领料吗?
-            if (!apsWorkInProgressInventoryDo.getPlansinglerollweight().equals(apsBlankOrderDo.getSinglerollweight())) {
-                onLineBatchNumberWarnList.add(s);
-            }
+//            //如果在制品的坯料类型不等于坯料计划的坯料类型,
+//            // 则错误提示:该批次号{批次号}物料:{在制品的作业输出物料}不是该坯料计划所需的坯料类型
+//            if (!apsWorkInProgressInventoryDo.getBlanktype().equals(apsBlankOrderDo.getBlanktype())) {
+//                return R.error("该批次号" + s + "物料:" + s1 + "不是该坯料计划所需的坯料类型");
+//            }
+//
+//            //如果在制品的计划输出卷重不等于坯料的卷重,
+//            // 提示确认:批次号{批次号1,批次号2}物料卷重与坯料需求的卷重不同,确认领料吗?
+//            if (!apsWorkInProgressInventoryDo.getPlansinglerollweight().equals(apsBlankOrderDo.getSinglerollweight())) {
+//                onLineBatchNumberWarnList.add(s);
+//            }
         }
 
         String res = "";
@@ -3470,7 +3520,9 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
             res = "<b>" + String.join(",", offLineBatchNumberList) + "是线下批次号,确认领料吗?</b><br>";
         }
         if (ObjectUtil.isNotEmpty(onLineBatchNumberWarnList)) {
-            res = res + "<b>批次号" + String.join(",", onLineBatchNumberWarnList) + "物料卷重与坯料需求的卷重不同,确认领料吗?</b>";
+            for (String s : onLineBatchNumberWarnList) {
+                res = res + "<b>" + s + "</b>";
+            }
         }
 
         return R.ok(res);

+ 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!= null&&!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;
     }

+ 54 - 0
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/GanttServiceImpl.java

@@ -384,6 +384,60 @@ public class GanttServiceImpl implements GanttService {
                         data.setOutputnumber(number.split(DEFAULT_SPLIT)[1]);
                     }
                 });
+                Date actualStartDate = null;
+                Date actualFinishDate = null;
+                //查询实际开工时间不为空的列表
+                List<GanttVos> noNullActualDateList = ganttVos.stream()
+                        .filter(g -> g.getActualstartdate() != null)
+                        .collect(Collectors.toList());
+                if (!noNullActualDateList.isEmpty()){
+                    //取出最早实际开工时间
+                    Optional<GanttVos> minDate = noNullActualDateList.stream()
+                            .min(Comparator.comparing(GanttVos::getActualstartdate));
+                    if(minDate.get().getActualstartdate()!= null){
+                        actualStartDate = minDate.get().getActualstartdate();
+                    }
+                }
+                //查询实际完工时间为空的列表
+                List<GanttVos> nullActualFinishDateList = ganttVos.stream().filter(g -> g.getActualfinishdate() == null)
+                        .collect(Collectors.toList());
+                if (nullActualFinishDateList.isEmpty()){
+                    //取出最晚实际完工时间
+                    Optional<GanttVos> maxDate = ganttVos.stream()
+                            .max(Comparator.comparing(GanttVos::getActualfinishdate));
+                    if(maxDate.isPresent()&&maxDate.get().getActualfinishdate()!= null){
+                        actualFinishDate = maxDate.get().getActualfinishdate();
+                    }
+                }
+                String workstatus = "";
+                Map<String, Integer> keyValueMap = new HashMap<>(16);
+                // 向键值对数组中添加元素
+                keyValueMap.put("待开工", 30);
+                keyValueMap.put("加工中", 40);
+                keyValueMap.put("已完工", 50);
+                //查询出所有不为空的状态列表
+                List<GanttVos> filteredWorkStatus = ganttVos.stream()
+                        .filter(g -> g.getWorkstatus() != null && !g.getWorkstatus().isEmpty())
+                        .collect(Collectors.toList());
+                if (!filteredWorkStatus.isEmpty()){
+                    GanttVos minWorkStatus = (filteredWorkStatus.stream()
+                            .min(Comparator.comparingInt(p -> keyValueMap.get(p.getWorkstatus())))
+                            .orElse(null));
+                    //取出最早实际开工时间
+                    workstatus = minWorkStatus.getWorkstatus();
+                }
+                String finalWorkStatus = workstatus;
+                Date finalActualStartDate = actualStartDate;
+                Date finalActualFinishDate = actualFinishDate;
+                ganttVos.forEach(item -> {
+                    if ("20".equals(item.getProcessstatus())){
+                        item.setGanttprocessstatus(TO_BE_PUBLISHED);
+                    }else {
+                        item.setGanttprocessstatus(GANTT_PROCESS_STATUS_MAP.getOrDefault(finalWorkStatus, ""));
+                    }
+                    item.setActualstartdate(finalActualStartDate);
+                    item.setActualfinishdate(finalActualFinishDate);
+                });
 //                List<String> itemNames = new ArrayList<>();
                 // 按照工序作业明细ID 进行分组 并且获取 图列的 名称和描述
 //                LinkedHashMap<String, List<GanttVos>> collect = ganttVos.stream().collect(Collectors.groupingBy(GanttVos::getId, LinkedHashMap::new, Collectors.toList()));

+ 2 - 2
cx-aps/cx-aps-common/src/main/resources/mybatis/ApsProcessOperationProcessEquDao.xml

@@ -168,8 +168,8 @@
         a2.ID as processid,
         a2.PLANINPUT AS INMATERCONDITION,
         a2.PROCESSSTATUS,
-        a2.ACTUALSTARTDATE,
-        a2.ACTUALFINISHDATE,
+        a1.ACTUALSTARTDATE,
+        a1.ACTUALFINISHDATE,
         a2.PROCESSNAME,
         a2.LOCKMARK,
         a2.PROCESSWAY,

+ 9 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/ScheduleGanttVo.java

@@ -135,4 +135,13 @@ public class ScheduleGanttVo {
      * 详细对象
      */
     private List<GanttVos> ganttVos;
+
+    /**
+     * 实际开工时间
+     */
+    private Date actualstartdate;
+    /**
+     * 实际完工时间
+     */
+    private Date actualfinishdate;
 }

+ 19 - 15
cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/dao/EquMaintenanceReportDao.java

@@ -11,35 +11,36 @@ import java.util.List;
 
 public interface EquMaintenanceReportDao extends BaseMapper<EquMaintenanceReportDo> {
 
-    @Select("SELECT DISTINCT\n" +
+    @Select("SELECT a.* FROM (\n" +
+            "SELECT DISTINCT\n" +
             "\tu.NAME,\n" +
             "\tu.EMAIL,\n" +
             "\tr.NAME AS roleName \n" +
             "FROM\n" +
             "\tsys_user u\n" +
-            "\tLEFT JOIN sys_user_role ur ON u.ID = ur.USERID\n" +
-            "\tLEFT JOIN sys_role r ON ur.ROLEID = r.ID\n" +
-            "\tLEFT JOIN sys_user_org uo ON u.ID = uo.USERID\n" +
-            "\tLEFT JOIN sys_organization org ON uo.ORGID = org.ID \n" +
+            "    LEFT JOIN sys_user_role ur ON u.ID = ur.USERID AND ur.DELETED = 0  \n" +
+            "    LEFT JOIN sys_role r ON ur.ROLEID = r.ID AND r.DELETED = 0  \n" +
+            "    LEFT JOIN sys_user_org uo ON u.ID = uo.USERID AND uo.DELETED = 0  \n" +
+            "    LEFT JOIN sys_organization org ON uo.ORGID = org.ID  AND org.DELETED = 0  \n" +
             "WHERE\n" +
             "\tu.DELETED = 0 \n" +
-            "\tAND uo.ORGID = #{workshopid} \n" +
+            "\tAND ORGID = #{workshopid}\n" +
             "\tAND ( r.NAME = '车间主任' OR r.NAME = '车间维修主管') \n" +
-            "GROUP BY\n" +
-            "\tu.EMAIL\n" +
+            "\tGROUP BY\n" +
+            "    u.EMAIL\n" +
             "UNION\n" +
             "SELECT DISTINCT\n" +
             "    u.NAME,\n" +
             "    u.EMAIL,\n" +
             "    r.NAME AS roleName \n" +
             "FROM\n" +
-            "    sys_user u\n" +
-            "    LEFT JOIN sys_user_role ur ON u.ID = ur.USERID\n" +
-            "    LEFT JOIN sys_role r ON ur.ROLEID = r.ID\n" +
-            "    LEFT JOIN sys_user_org uo ON u.ID = uo.USERID\n" +
-            "    LEFT JOIN sys_organization org ON uo.ORGID = org.ID \n" +
+            "    sys_user u \n" +
+            "    LEFT JOIN sys_user_role ur ON u.ID = ur.USERID AND ur.DELETED = 0  \n" +
+            "    LEFT JOIN sys_role r ON ur.ROLEID = r.ID AND r.DELETED = 0  \n" +
+            "    LEFT JOIN sys_user_org uo ON u.ID = uo.USERID AND uo.DELETED = 0  \n" +
+            "    LEFT JOIN sys_organization org ON uo.ORGID = org.ID  AND org.DELETED = 0  \n" +
             "WHERE\n" +
-            "    u.DELETED = 0 \n" +
+            "    u.DELETED = 0  \n" +
             "    AND org.FULLPID LIKE CONCAT('%', (\n" +
             "        SELECT \n" +
             "            SUBSTRING_INDEX(\n" +
@@ -52,8 +53,11 @@ public interface EquMaintenanceReportDao extends BaseMapper<EquMaintenanceReport
             "            )\n" +
             "        ), '%')\n" +
             "    AND r.NAME = '生产计划主任'\n" +
+            "\t\tGROUP BY\n" +
+            "    u.EMAIL\n" +
+            ") a\n" +
             "GROUP BY\n" +
-            "    u.EMAIL")
+            "    a.EMAIL\n")
     List<SysUserDo> selectEmailList( @Param("workshopid") String workshopid);