Przeglądaj źródła

Merge branch 'mode-min-unit' into mode-min-unit-sc

sucheng 6 miesięcy temu
rodzic
commit
388cfed0b3

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

@@ -568,7 +568,8 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                     inspectionEquipmentIsAvailable(apsProcessOperationProcessEquDo,
                             apsProcessOperationProcessEquDo.getProcessdeviceid(),
                             apsProcessOperationProcessEquDo.getPlanstartdate(),
-                            apsProcessOperationProcessEquDo.getPlanenddate());
+                            apsProcessOperationProcessEquDo.getPlanenddate(),
+                            affectedIdList);
                 });
             }
             List<String> aboutIds = affectedIdList.stream().distinct().collect(Collectors.toList());
@@ -586,7 +587,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
         }
     }
 
-    private void checkSomeNewInspection(ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo) {
+    private void checkSomeNewInspection(ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo,List<String> affectedIdList) {
         /*
         如果加工设备不是工序作业指定的可选设备,记录冲突:加工设备不是工艺要求的可选设备
         如果作业明细计划开工时间<前道作业明细计划完工时间,记录冲突:计划开工时间早于前道计划完工时间
@@ -675,6 +676,80 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                 newConflictdes = removeConflictsDesc(newConflictdes, SMALL_THAN_MIN_RETURN_TIME);
             }
         }
+        //存在后道工序作业明细
+        if (StringUtils.isNotBlank(apsProcessOperationProcessEquDo.getNextprocessesids())) {
+            for (String nextProcessEquId : apsProcessOperationProcessEquDo.getNextprocessesids().split(",")) {
+                affectedIdList.add(nextProcessEquId);
+                //此时前道的明细为当前明细
+                ApsProcessOperationProcessEquDo previousProcessEqu = apsProcessOperationProcessEquDo;
+                //查询后道的明细
+                ApsProcessOperationProcessEquDo nextProcessEqu = this.getById(nextProcessEquId);
+                //查询后道的工序作业
+                ApsProcessOperationDo nextProcessOperation = apsProcessOperationService.getById(nextProcessEqu.getProcessid());
+                //后道的冲突
+                String nextNewConflictdes = nextProcessEqu.getConflictdes();
+                //如果作业计划开工时间<前道作业计划完工时间,记录冲突:计划开工时间早于前道计划完工时间
+                if (nextProcessEqu.getPlanstartdate().compareTo(previousProcessEqu.getPlanenddate()) < 0) {
+                    apsConflictLogService.recordLog(nextProcessEqu.getId(),
+                            "作业明细计划开工时间:" + nextProcessEqu.getPlanstartdate() + ",前道作业明细计划完工时间:" + previousProcessEqu.getPlanenddate(), PREVIOUS_ENDTIME_AFTER_NOW, 1, null);
+                    nextNewConflictdes = addNewConflictsDesc(nextNewConflictdes, PREVIOUS_ENDTIME_AFTER_NOW);
+                } else {
+                    apsConflictLogService.recordLog(nextProcessEqu.getId(),
+                            "作业明细计划开工时间:" + nextProcessEqu.getPlanstartdate() + ",前道作业明细计划完工时间:" + previousProcessEqu.getPlanenddate(), PREVIOUS_ENDTIME_AFTER_NOW, 2, null);
+                    nextNewConflictdes = removeConflictsDesc(nextNewConflictdes, PREVIOUS_ENDTIME_AFTER_NOW);
+                }
+
+                //与前道作业明细间隔时间=该作业明细计划开工时间-前道作业明细计划完工时间
+                long betweenPrevious = DateUtil.between(nextProcessEqu.getPlanstartdate(), previousProcessEqu.getPlanenddate(), DateUnit.MINUTE);
+                /*
+                 * 如果作业明细加工设备相同,则该作业最小流转时间=取其大(排程设置的机台流转时间,作业的最小流转等待时间)
+                 * 如果作业明细加工车间不同,则该作业最小流转时间=取其大(排程设置的车间流转时间,作业的最小流转等待时间)
+                 * 如果作业明细加工工厂不同,则该作业最小流转时间=取其大(排程设置的工厂流转时间,作业的最小流转等待时间)
+                 */
+                //排程设置
+                ApsScheduleConfigDo apsScheduleConfigDo = apsScheduleConfigService.getById("1");
+                //最小流转时间
+                long minReturnTime = nextProcessOperation.getMinflowwaitmin().longValue();
+                //作业明细加工设备相同
+                if (!previousProcessEqu.getProcessdeviceid().equals(nextProcessEqu.getProcessdeviceid())) {
+                    if (apsScheduleConfigDo.getWorkshopin().longValue() > minReturnTime) {
+                        minReturnTime = apsScheduleConfigDo.getWorkshopin().longValue();
+                    }
+                }
+                //作业明细加工车间不同
+                if (!previousProcessEqu.getProcessworkshopid().equals(nextProcessEqu.getProcessworkshopid())) {
+                    if (apsScheduleConfigDo.getWorkshopcross().longValue() > minReturnTime) {
+                        minReturnTime = apsScheduleConfigDo.getWorkshopcross().longValue();
+                    }
+                }
+                //作业明细加工工厂不同
+                AspCheckItemsDo equ1 = aspCheckItemsService.getById(previousProcessEqu.getProcessdeviceid());
+                AspCheckItemsDo equ2 = aspCheckItemsService.getById(nextProcessEqu.getProcessdeviceid());
+                if (!equ1.getTenantid().equals(equ2.getTenantid())) {
+                    if (apsScheduleConfigDo.getFactorycross().longValue() > minReturnTime) {
+                        minReturnTime = apsScheduleConfigDo.getFactorycross().longValue();
+                    }
+                }
+                //如果与前道工序作业间隔时间<作业最小流转时间,则记录冲突:与前道间隔时间小于作业最小流转时间
+                if (betweenPrevious < minReturnTime) {
+                    apsConflictLogService.recordLog(nextProcessEqu.getId(),
+                            "与前道工序作业间隔时间:" + betweenPrevious + ",作业最小流转时间:" + minReturnTime, SMALL_THAN_MIN_RETURN_TIME, 1, null);
+                    nextNewConflictdes = addNewConflictsDesc(nextNewConflictdes, SMALL_THAN_MIN_RETURN_TIME);
+                } else {
+                    apsConflictLogService.recordLog(nextProcessEqu.getId(),
+                            "与前道工序作业间隔时间:" + betweenPrevious + ",作业最小流转时间:" + minReturnTime, SMALL_THAN_MIN_RETURN_TIME, 2, null);
+                    nextNewConflictdes = removeConflictsDesc(nextNewConflictdes, SMALL_THAN_MIN_RETURN_TIME);
+                }
+                this.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
+                        .eq(ApsProcessOperationProcessEquDo::getId, nextProcessEqu.getId())
+                        .set(ApsProcessOperationProcessEquDo::getConflictdes, nextNewConflictdes)
+                        .set(BaseDo::getModifydate, new Date())
+                        .set(ApsProcessOperationProcessEquDo::getHasconflict, StringUtils.isBlank(nextNewConflictdes) &&
+                                StringUtils.isBlank(nextProcessEqu.getSoftconflictdes()) ? LOCKMARK_N : LOCKMARK_Y)
+                );
+            }
+        }
+
         //查询坯料计划信息
         ApsBlankOrderDo apsBlankOrderDo = apsBlankOrderService.getById(apsProcessOperationProcessEquDo.getBlankid());
         //如果作业明细计划完工时间超出订单期望交货期,记录警告:完工时间超出订单交货期
@@ -840,7 +915,8 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
             inspectionEquipmentIsAvailable(apsProcessOperationProcessEquDo,
                     apsProcessOperationProcessEquDo.getProcessdeviceid(),
                     apsProcessOperationProcessEquDo.getPlanstartdate(),
-                    apsProcessOperationProcessEquDo.getPlanenddate());
+                    apsProcessOperationProcessEquDo.getPlanenddate(),
+                    affectedIdList);
         });
 //        blankIdSet.forEach(blankId -> {
 //            // 更新坯料交货期
@@ -930,24 +1006,22 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
             });
             //避免合并加工时,找到除去本身之外同一计划开工日期同一设备‘更新时间’更改之后存在冲突的工序作业明细
             this.updateBatchById(changeApsProcessEquList);
-            ApsProcessOperationProcessEquDo finalApsProcessOperationProcessEquDo = apsProcessOperationProcessEquDo;
-            changeApsProcessEquList.forEach(detail -> {
+            for (ApsProcessOperationProcessEquDo detail : changeApsProcessEquList) {
                 //当工序作业为合并加工时处理工序作业明细冲突
-                String oldEquId = finalApsProcessOperationProcessEquDo.getProcessdeviceid();
-                Date oldPlanstartdate = finalApsProcessOperationProcessEquDo.getPlanstartdate();
-                Date oldPlanenddate = finalApsProcessOperationProcessEquDo.getPlanenddate();
-                this.updateById(finalApsProcessOperationProcessEquDo);
+                String oldEquId = apsProcessOperationProcessEquDo.getProcessdeviceid();
+                Date oldPlanstartdate = apsProcessOperationProcessEquDo.getPlanstartdate();
+                Date oldPlanenddate = apsProcessOperationProcessEquDo.getPlanenddate();
                 // 增加受影响的工序作业信息
                 affectedIdList.addAll(checkProcessingTimeConflict(detail, oldPlanstartdate,
                         oldPlanenddate, oldEquId, apsProcessOperationDo.getProcessway(), new ArrayList<>()));
                 // 判断是否存在设备不可用
-                detail = this.getById(detail.getId());
                 inspectionEquipmentIsAvailable(detail, detail.getProcessdeviceid()
-                        , detail.getPlanstartdate(), detail.getPlanenddate());
-                if (!detail.getId().equals(finalApsProcessOperationProcessEquDo.getId())) {
+                        , detail.getPlanstartdate(), detail.getPlanenddate(),
+                        affectedIdList);
+                if (!detail.getId().equals(apsProcessOperationProcessEquDo.getId())) {
                     mergeWorkerIdList.add(detail.getId());
                 }
-            });
+            }
         } else {
             // 更新开工时间 jobDetailsVo
             String equId = jobDetailsVo.getEquId();
@@ -977,12 +1051,15 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                 // 增加受影响的工序作业信息
                 affectedIdList.addAll(checkProcessingTimeConflict(apsProcessOperationProcessEquDo, oldPlanstartdate,
                         oldPlanenddate, oldEquId, apsProcessOperationDo.getProcessway(), new ArrayList<>()));
+            }else {
+                this.updateById(apsProcessOperationProcessEquDo);
             }
 //            this.updateById(apsProcessOperationProcessEquDo);
             // 判断是否存在设备不可用
             apsProcessOperationProcessEquDo = this.getById(apsProcessOperationProcessEquDo.getId());
             inspectionEquipmentIsAvailable(apsProcessOperationProcessEquDo, apsProcessOperationProcessEquDo.getProcessdeviceid()
-                    , apsProcessOperationProcessEquDo.getPlanstartdate(), apsProcessOperationProcessEquDo.getPlanenddate());
+                    , apsProcessOperationProcessEquDo.getPlanstartdate(), apsProcessOperationProcessEquDo.getPlanenddate(),
+                    affectedIdList);
         }
         // 更新坯料交货期
 //        apsBlankOrderService.updateBlankDeliveryDate(null, apsProcessOperationDo.getBlankid());
@@ -1263,7 +1340,8 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
             newDataList.forEach(newDo -> {
                 // 判断是否存在设备不可用
                 inspectionEquipmentIsAvailable(newDo, newDo.getProcessdeviceid()
-                        , newDo.getPlanstartdate(), newDo.getPlanenddate());
+                        , newDo.getPlanstartdate(), newDo.getPlanenddate(),
+                        affectedIdList);
             });
             List<String> aboutIds = affectedIdList.stream().distinct().collect(Collectors.toList());
             apsProcessOperationDos.forEach(data -> {
@@ -1630,7 +1708,8 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
      * @param endDate
      */
     public void inspectionEquipmentIsAvailable(ApsProcessOperationProcessEquDo processEquDo,
-                                               String equId, Date startDate, Date endDate) {
+                                               String equId, Date startDate, Date endDate,
+                                               List<String> affectedIdList) {
         // 查询当前设备是否存在不可以用设备的停机时间为空的数据
         List<ApsEquipmentCalendarDo> nullSdTimeList = apsEquipmentCalendarService.list(new LambdaQueryWrapper<ApsEquipmentCalendarDo>()
                 .eq(ApsEquipmentCalendarDo::getProcessdeviceid, equId)
@@ -1669,7 +1748,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
         );
         processEquDo.setConflictdes(newConflictdes);
         //新增的冲突判断
-        checkSomeNewInspection(processEquDo);
+        checkSomeNewInspection(processEquDo,affectedIdList);
     }
 
     /**