Browse Source

aps-调度修改

sucheng 4 tháng trước cách đây
mục cha
commit
8950265037

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

@@ -4827,6 +4827,8 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
 
         //调度之前的连续开始,需要推导后续连续去清除需要解锁的明细
         List<ApsProcessOperationProcessEquDo> cleanNeedUnLockList = new LinkedList<>();
+        //后道工序在当前工序之前,并且不参与排程,则需要将后道工序和其所有的后道工序都不解锁
+        List<ApsProcessOperationProcessEquDo> cleanNeedUnLockList2 = new LinkedList<>();
 
         for (ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo : needScheduleList) {
             //前道作业明细ID不为空
@@ -4922,7 +4924,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
             if (ObjectUtil.isNotEmpty(apsProcessOperationProcessEquDo.getNextprocessesids())) {
                 //当前工序作业
                 ApsProcessOperationDo nowProcess = allProcessList.stream().filter(item -> item.getId().equals(apsProcessOperationProcessEquDo.getProcessid())).findFirst().orElse(null);
-                getNextProcess(apsProcessOperationProcessEquDo.getNextprocessesids(), nowProcess, needScheduleList, needScheduleIdList, allProcessEquList, allProcessEquIdList, needUnLockList, allProcessList);
+                getNextProcess(apsProcessOperationProcessEquDo.getNextprocessesids(), nowProcess, needScheduleList, needScheduleIdList, allProcessEquList, allProcessEquIdList, needUnLockList, allProcessList, cleanNeedUnLockList2);
             }
         }
         //查询需要清除的明细及其后续 连续的明细
@@ -4932,16 +4934,24 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                 getCleanNextProcess(apsProcessOperationProcessEquDo, apsProcessOperationProcessEquDo.getNextprocessesids(), allProcessEquList, allProcessEquIdList, notNeedUnLockList, allProcessList, processOperationEquDoList);
             }
         }
+        //清除记录的所有后道工序
+        for (ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo : cleanNeedUnLockList2) {
+            if (ObjectUtil.isNotEmpty(apsProcessOperationProcessEquDo.getNextprocessesids())) {
+                notNeedUnLockList.add(apsProcessOperationProcessEquDo);
+                getCleanNextProcess2(apsProcessOperationProcessEquDo, apsProcessOperationProcessEquDo.getNextprocessesids(), allProcessEquList, allProcessEquIdList, notNeedUnLockList, allProcessList, processOperationEquDoList);
+            }
+        }
+        notNeedUnLockList = notNeedUnLockList.stream().distinct().collect(Collectors.toList());
+        //不需要解锁的作业ID
+        List<String> notNeedUnLockProcessIdList = notNeedUnLockList.stream().map(ApsProcessOperationProcessEquDo::getProcessid).distinct().collect(Collectors.toList());
 
         //需要解锁的明细ID过滤掉所有不需要解锁的明细ID
-        needUnLockList.removeAll(notNeedUnLockList);
+        needUnLockList = needUnLockList.stream().filter(item -> !notNeedUnLockProcessIdList.contains(item.getId())).collect(Collectors.toList());
 
         //需要解锁的明细ID
         List<String> needUnLockProcessEquIdList = needUnLockList.stream().map(ApsProcessOperationProcessEquDo::getId).distinct().collect(Collectors.toList());
         //需要解锁的作业ID
         List<String> needUnLockProcessIdList = needUnLockList.stream().map(ApsProcessOperationProcessEquDo::getProcessid).distinct().collect(Collectors.toList());
-        //不需要解锁的作业ID
-        List<String> notNeedUnLockProcessIdList = notNeedUnLockList.stream().map(ApsProcessOperationProcessEquDo::getProcessid).distinct().collect(Collectors.toList());
         log.info("解锁的作业明细:{}", needUnLockList);
         log.info("解锁的作业明细ID:{}", needUnLockProcessEquIdList);
         log.info("解锁的作业ID:{}", needUnLockProcessIdList);
@@ -5037,7 +5047,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                 //是连续
                 if (isConnect) {
                     //下道不解锁,继续迭代
-                    notNeedUnLockList.add(nowEqu);
+                    notNeedUnLockList.add(nextEqu);
                     if (ObjectUtil.isNotEmpty(nextEqu.getNextprocessesids())) {
                         String nextNewProcessesids = nextEqu.getNextprocessesids();
                         getCleanNextProcess(nextEqu, nextNewProcessesids, allProcessEquList, allProcessEquIdList, notNeedUnLockList, allProcessList, processOperationEquDoList);
@@ -5050,6 +5060,24 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         }
     }
 
+    private void getCleanNextProcess2(ApsProcessOperationProcessEquDo nowEqu, String nextprocessesids, List<ApsProcessOperationProcessEquDo> allProcessEquList, List<String> allProcessEquIdList, List<ApsProcessOperationProcessEquDo> notNeedUnLockList, List<ApsProcessOperationDo> allProcessList, List<ApsProcessOperationEquDo> processOperationEquDoList) {
+        if (ObjectUtil.isEmpty(nextprocessesids)) {
+            return;
+        }
+        for (String nextProcessEquId : nextprocessesids.split(",")) {
+            //下一个明细
+            ApsProcessOperationProcessEquDo nextEqu = allProcessEquList.stream().filter(item -> item.getId().equals(nextProcessEquId)).findFirst().orElse(null);
+            if (ObjectUtil.isNotEmpty(nextEqu)) {
+                //下道不解锁,继续迭代
+                notNeedUnLockList.add(nextEqu);
+                if (ObjectUtil.isNotEmpty(nextEqu.getNextprocessesids())) {
+                    String nextNewProcessesids = nextEqu.getNextprocessesids();
+                    getCleanNextProcess2(nextEqu, nextNewProcessesids, allProcessEquList, allProcessEquIdList, notNeedUnLockList, allProcessList, processOperationEquDoList);
+                }
+            }
+        }
+    }
+
     //迭代处理寻找下道明细
     private void getNextProcess(String nextprocessesids,
                                 ApsProcessOperationDo nowProcess,
@@ -5058,7 +5086,8 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                                 List<ApsProcessOperationProcessEquDo> allProcessEquList,
                                 List<String> allProcessEquIdList,
                                 List<ApsProcessOperationProcessEquDo> needUnLockList,
-                                List<ApsProcessOperationDo> allProcessList) {
+                                List<ApsProcessOperationDo> allProcessList,
+                                List<ApsProcessOperationProcessEquDo> cleanNeedUnLockList2) {
         if (ObjectUtil.isEmpty(nextprocessesids)) {
             return;
         }
@@ -5071,13 +5100,19 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                     String nextNewProcessesids = nextEqu.getNextprocessesids();
                     //查询对应明细的工序作业
                     ApsProcessOperationDo nextProcess = allProcessList.stream().filter(item -> item.getId().equals(nextEqu.getProcessid())).findFirst().orElse(null);
-                    if (ObjectUtil.isNotEmpty(nextProcess)
-                            && !Arrays.asList("铸轧", "成退", "小卷成退", "中退").contains(nextProcess.getProcess())
-                            && !(ObjectUtil.isNotEmpty(nextProcess.getMinflowwaitmin()) && nextProcess.getMinflowwaitmin().compareTo(new BigDecimal("1440")) >= 0)) {
-                        needUnLockList.add(nextEqu);
-                        if (ObjectUtil.isNotEmpty(nextEqu.getNextprocessesids())) {
-                            getNextProcess(nextNewProcessesids, nextProcess, needScheduleList, needScheduleIdList, allProcessEquList, allProcessEquIdList, needUnLockList, allProcessList);
+
+                    if (ObjectUtil.isNotEmpty(nextProcess)) {
+                        if (!Arrays.asList("铸轧", "成退", "小卷成退", "中退").contains(nextProcess.getProcess())
+                                && !(ObjectUtil.isNotEmpty(nextProcess.getMinflowwaitmin())
+                                && nextProcess.getMinflowwaitmin().compareTo(new BigDecimal("1440")) >= 0)) {
+                            needUnLockList.add(nextEqu);
+                            if (ObjectUtil.isNotEmpty(nextEqu.getNextprocessesids())) {
+                                getNextProcess(nextNewProcessesids, nextProcess, needScheduleList, needScheduleIdList, allProcessEquList, allProcessEquIdList, needUnLockList, allProcessList, cleanNeedUnLockList2);
+                            }
+                        } else {
+                            cleanNeedUnLockList2.add(nextEqu);
                         }
+
                         return;
                     }
                 }