소스 검색

退火炉合并bug修改

fangpy 5 달 전
부모
커밋
0e4152b251

+ 4 - 1
rw-aps-server/src/main/java/com/rongwei/rwapsserver/aps/score/ApsConstraintProvider.java

@@ -1759,10 +1759,13 @@ public class ApsConstraintProvider implements ConstraintProvider {
         //  检查合并工序是否超过容量
         for (Map.Entry<String,List<ProductionProcesses>> entry: ppMap.entrySet()) {
             List<ProductionProcesses> v = entry.getValue();
+
+            List<ProductionProcesses> vps = v.stream().filter(mv ->
+                    mv.getId().equals("926eb407a68b4a3baa4832678da79a67") || mv.getId().equals("06bd9b6b78da4d8caa131064bf2b8f68")).collect(Collectors.toList());
             if(v.size()>3){
                 int a = 1;
             }
-            if(v.size()>2){
+            if(vps.size()>1){
                 int a = 1;
             }
             if(processes.size()>1){

+ 98 - 90
rw-aps-server/src/main/java/com/rongwei/rwapsserver/aps/service/impl/DdApsServiceImpl.java

@@ -56,111 +56,119 @@ public class DdApsServiceImpl implements DdApsService {
         return lzmergeprocesses;
     }
 
-    private void thOtherAllMergeDg(List<ProductionProcesses> rootProces,List<ProductionProcesses> lzmergeprocesses,List<ProductionProcesses> otherThproces,Map<String,ProductionProcesses> allProMap){
-        if(rootProces != null && rootProces.size()>0){
-            if(rootProces.get(0).getUniqueBsProcessesId().equals("e802cc0ae1154bd0b977b74a07c97b3e")){
+    private void thOtherAllMergeDg(List<ProductionProcesses> rootPreProces,List<ProductionProcesses> lzmergeprocesses,List<ProductionProcesses> otherThproces,Map<String,ProductionProcesses> allProMap){
+        if(rootPreProces != null && rootPreProces.size()>0){
+            if(rootPreProces.get(0).getUniqueBsProcessesId().equals("e802cc0ae1154bd0b977b74a07c97b3e")){
                 int m = 1;
             }
-
-            if((rootProces.get(0).getMaxWaitTime() != null && rootProces.get(0).getMaxWaitTime()>0)
-                    || "成退,中退,小卷成退".contains(rootProces.get(0).getProcessType())){
-                lzmergeprocesses.addAll(rootProces);
-            }else{
-                // 未锁定的作业
-                List<ProductionProcesses> notLocks = rootProces.stream().filter(v -> !v.getIfLock()).collect(Collectors.toList());
-                // 锁定的作业
-                List<ProductionProcesses> locks = rootProces.stream().filter(v -> v.getIfLock()).collect(Collectors.toList());
-                // 锁定的不做任何处理
-                if(locks != null && locks.size()>0){
-                    lzmergeprocesses.addAll(locks);
-                }
-                // 没锁定的合并一个作业
-                if(notLocks != null && notLocks.size()>0){
-                    if(notLocks.size()>1){
-                        boolean ifnull = false;
-                        for (ProductionProcesses notLock : notLocks) {
-                            if(notLock.getRooprocess() == null || notLock.getRooprocess().getStartTime() == null){
-                                ifnull = true;
-                            }
-                        }
-                        // 根据根节点开始时间排序
-                        if(!ifnull){
-                            Collections.sort(notLocks,Comparator.comparing(pro -> pro.getRooprocess().getStartTime()));
+            Map<String, List<ProductionProcesses>> orderProcess = rootPreProces.stream().collect(Collectors.groupingBy(ProductionProcesses::getUniqueBsProcessesId));
+            for (String bsid:orderProcess.keySet()){
+                List<ProductionProcesses> rootProces = orderProcess.get(bsid);
+                if(rootProces != null && rootProces.size()>0){
+                    if((rootProces.get(0).getMaxWaitTime() != null && rootProces.get(0).getMaxWaitTime()>0)
+                            || "成退,中退,小卷成退".contains(rootProces.get(0).getProcessType())){
+                        lzmergeprocesses.addAll(rootProces);
+                    }else{
+                        // 未锁定的作业
+                        List<ProductionProcesses> notLocks = rootProces.stream().filter(v -> !v.getIfLock()).collect(Collectors.toList());
+                        // 锁定的作业
+                        List<ProductionProcesses> locks = rootProces.stream().filter(v -> v.getIfLock()).collect(Collectors.toList());
+                        // 锁定的不做任何处理
+                        if(locks != null && locks.size()>0){
+                            lzmergeprocesses.addAll(locks);
                         }
-                        if(notLocks.size()>0){
-                            // 合并作业
-                            List<ProductionProcesses> mergePres = new ArrayList<>();
-                            mergePres.addAll(notLocks);
-                            Map<String,ProductionProcesses> mergeProNexts = new HashMap<>();
-                            ProductionProcesses mergePro = mergePres.get(0);
-                            List<String> mergeProOrders = new ArrayList<>();
-                            mergeProOrders.add(mergePro.getId());
-                            mergePro.setMergeProOrders(mergeProOrders);
-                            for (int i = 0; i < mergePres.size(); i++) {
-                                if(i>0){
-                                    // 设置待合并退火的主ID
-                                    mergePres.get(i).setMergeThMainId(mergePres.get(0).getId());
-                                    mergePro.getMergeProOrders().add(mergePres.get(i).getId());
-                                    otherThproces.add(mergePres.get(i));
-                                    if(mergePres.get(i).getNextProcesses() != null && mergePres.get(i).getNextProcesses().size()>0){
-                                        for (ProductionProcesses nextProcess : mergePres.get(i).getNextProcesses()) {
-                                            mergeProNexts.put(nextProcess.getId(),nextProcess);
-                                        }
+                        // 没锁定的合并一个作业
+                        if(notLocks != null && notLocks.size()>0){
+                            if(notLocks.size()>1){
+                                boolean ifnull = false;
+                                for (ProductionProcesses notLock : notLocks) {
+                                    if(notLock.getRooprocess() == null || notLock.getRooprocess().getStartTime() == null){
+                                        ifnull = true;
                                     }
-                                    if(mergePro.getPreviousProcesses() != null && mergePro.getPreviousProcesses().size()>0){
-                                        // 合并作业的上一道工序
-                                        mergePro.getPreviousProcesses().addAll(mergePres.get(i).getPreviousProcesses());
-                                        mergePro.getPreviousProcessesIds().addAll(mergePres.get(i).getPreviousProcessesIds());
-                                        // 合并作业上一道工序的下一道工序设置为当前合并作业
-                                        for (ProductionProcesses previousProcess : mergePres.get(i).getPreviousProcesses()) {
-                                            previousProcess.getNextProcesses().clear();
-                                            previousProcess.getNextProcesses().add(mergePro);
-                                            previousProcess.getNextProcessesIds().clear();
-                                            previousProcess.getNextProcessesIds().add(mergePro.getId());
+                                }
+                                // 根据根节点开始时间排序
+                                if(!ifnull){
+                                    Collections.sort(notLocks,Comparator.comparing(pro -> pro.getRooprocess().getStartTime()));
+                                }
+                                if(notLocks.size()>0){
+                                    // 合并作业
+                                    List<ProductionProcesses> mergePres = new ArrayList<>();
+                                    mergePres.addAll(notLocks);
+                                    Map<String,ProductionProcesses> mergeProNexts = new HashMap<>();
+                                    ProductionProcesses mergePro = mergePres.get(0);
+                                    List<String> mergeProOrders = new ArrayList<>();
+                                    mergeProOrders.add(mergePro.getId());
+                                    mergePro.setMergeProOrders(mergeProOrders);
+                                    for (int i = 0; i < mergePres.size(); i++) {
+                                        if(i>0){
+                                            // 设置待合并退火的主ID
+                                            mergePres.get(i).setMergeThMainId(mergePres.get(0).getId());
+                                            mergePro.getMergeProOrders().add(mergePres.get(i).getId());
+                                            otherThproces.add(mergePres.get(i));
+                                            if(mergePres.get(i).getNextProcesses() != null && mergePres.get(i).getNextProcesses().size()>0){
+                                                for (ProductionProcesses nextProcess : mergePres.get(i).getNextProcesses()) {
+                                                    mergeProNexts.put(nextProcess.getId(),nextProcess);
+                                                }
+                                            }
+                                            if(mergePro.getPreviousProcesses() != null && mergePro.getPreviousProcesses().size()>0){
+                                                // 合并作业的上一道工序
+                                                mergePro.getPreviousProcesses().addAll(mergePres.get(i).getPreviousProcesses());
+                                                mergePro.getPreviousProcessesIds().addAll(mergePres.get(i).getPreviousProcessesIds());
+                                                // 合并作业上一道工序的下一道工序设置为当前合并作业
+                                                for (ProductionProcesses previousProcess : mergePres.get(i).getPreviousProcesses()) {
+                                                    previousProcess.getNextProcesses().clear();
+                                                    previousProcess.getNextProcesses().add(mergePro);
+                                                    previousProcess.getNextProcessesIds().clear();
+                                                    previousProcess.getNextProcessesIds().add(mergePro.getId());
+                                                }
+                                            }
                                         }
                                     }
-                                }
-                            }
-                            // 取第一个作业作为合并作业
-                            mergePro.setProduceTime(mergePro.getProduceTime()*mergePres.size());
-                            mergePro.setOpeProducePcNum(mergePres.size());
-                            // 合并作业的下一道工序
-                            if(mergeProNexts.size()>0){
-                                for (String proid:mergeProNexts.keySet()){
-                                    if(!mergePro.getNextProcessesIds().contains(proid)){
-                                        ProductionProcesses propro = mergeProNexts.get(proid);
-                                        mergePro.getNextProcessesIds().add(proid);
-                                        mergePro.getNextProcesses().add(propro);
-                                        // 合并作业下道工序的上道作业设置
-                                        List<ProductionProcesses> nextPrePros = new ArrayList<>();
-                                        nextPrePros.add(mergePro);
-                                        List<String> nextPreProIds = new ArrayList<>();
-                                        nextPreProIds.add(mergePro.getId());
-                                        propro.setPreviousProcessesIds(nextPreProIds);
-                                        propro.setPreviousProcesses(nextPrePros);
+                                    // 取第一个作业作为合并作业
+                                    mergePro.setProduceTime(mergePro.getProduceTime()*mergePres.size());
+                                    mergePro.setOpeProducePcNum(mergePres.size());
+                                    // 合并作业的下一道工序
+                                    if(mergeProNexts.size()>0){
+                                        for (String proid:mergeProNexts.keySet()){
+                                            if(mergePro.getNextProcessesIds() == null){
+                                                int a = 1;
+                                            }
+                                            if(!mergePro.getNextProcessesIds().contains(proid)){
+                                                ProductionProcesses propro = mergeProNexts.get(proid);
+                                                mergePro.getNextProcessesIds().add(proid);
+                                                mergePro.getNextProcesses().add(propro);
+                                                // 合并作业下道工序的上道作业设置
+                                                List<ProductionProcesses> nextPrePros = new ArrayList<>();
+                                                nextPrePros.add(mergePro);
+                                                List<String> nextPreProIds = new ArrayList<>();
+                                                nextPreProIds.add(mergePro.getId());
+                                                propro.setPreviousProcessesIds(nextPreProIds);
+                                                propro.setPreviousProcesses(nextPrePros);
+                                            }
+                                        }
                                     }
+                                    lzmergeprocesses.add(mergePro);
                                 }
+                            }else{
+                                lzmergeprocesses.addAll(notLocks);
                             }
-                            lzmergeprocesses.add(mergePro);
                         }
-                    }else{
-                        lzmergeprocesses.addAll(notLocks);
                     }
-                }
-            }
-            // 递归合并
-            List<ProductionProcesses> nextrootProces = new ArrayList<>();
-            for (ProductionProcesses rootProce : rootProces) {
-                if(rootProce.getNextProcesses() != null && rootProce.getNextProcesses().size()>0){
-                    for (ProductionProcesses nextProcess : rootProce.getNextProcesses()) {
-                        List<ProductionProcesses> hasPro = nextrootProces.stream().filter(v -> v.getId().equals(nextProcess.getId())).collect(Collectors.toList());
-                        if(hasPro == null || hasPro.size() == 0){
-                            nextrootProces.addAll(rootProce.getNextProcesses());
+                    // 递归合并
+                    List<ProductionProcesses> nextrootProces = new ArrayList<>();
+                    for (ProductionProcesses rootProce : rootProces) {
+                        if(rootProce.getNextProcesses() != null && rootProce.getNextProcesses().size()>0){
+                            for (ProductionProcesses nextProcess : rootProce.getNextProcesses()) {
+                                List<ProductionProcesses> hasPro = nextrootProces.stream().filter(v -> v.getId().equals(nextProcess.getId())).collect(Collectors.toList());
+                                if(hasPro == null || hasPro.size() == 0){
+                                    nextrootProces.addAll(rootProce.getNextProcesses());
+                                }
+                            }
                         }
                     }
+                    thOtherAllMergeDg(nextrootProces,lzmergeprocesses,otherThproces,allProMap);
                 }
             }
-            thOtherAllMergeDg(nextrootProces,lzmergeprocesses,otherThproces,allProMap);
         }
     }
 

+ 1 - 1
rw-aps-server/src/main/java/com/rongwei/rwapsserver/aps/service/impl/ProductionScheduleServiceImpl.java

@@ -51,7 +51,7 @@ public class ProductionScheduleServiceImpl implements ProductionScheduleService
     @Override
     public ProductionScheduleRetVo productionSchedule(ProductionScheduleVo productionScheduleVo) throws Exception{
         List<String> blankids = new ArrayList<>();
-        blankids.add("46cdf4f75a694cfaa74fd38096e3438b");
+        blankids.add("ab6d4f7b743242f28311dc9766271d6f");
 //        blankids.add("2f3f48a1c3c74c0481ba06df521fe0d7");
 //        blankids.add("75736c469b1a42568af980260c0689a6");
 //        blankids.add("acf4460f9488459780c0dc7d8038f1f9");