Kaynağa Gözat

调度排程优化

fangpy 5 ay önce
ebeveyn
işleme
c46272205d

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

@@ -2177,7 +2177,12 @@ public class ApsConstraintProvider implements ConstraintProvider {
                             process.getConflictRoptions().remove("soft-seriesProduceZz");
                             process.getConflictRoptions().remove("soft-seriesProduceLz");
                         }
-                        return true;
+                        if(!"dd".equals(processes.get(0).getApsOverallConfig().getScheduleType().getScheduleType())
+                                && ("冷轧".equals(processes.get(0).getProcessType()) || "箔轧".equals(processes.get(0).getProcessType()))){
+                            return false;
+                        }else{
+                            return true;
+                        }
                     }else{
                         return false;
                     }

+ 123 - 189
rw-aps-server/src/main/java/com/rongwei/rwapsserver/aps/service/impl/ApsServiceImpl.java

@@ -335,76 +335,39 @@ public class ApsServiceImpl implements ApsService {
         Solver<ApsSolution> solver1 = solverFactory1.buildSolver();
         // 按照宽度排序
 //        apsSolutionTh.getProcessesList().sort(Comparator.comparing(ProductionProcesses::getSeriesProduceMark));
-        if("dd".equals(productionScheduleVo.getScheduleType().getScheduleType())){
-            Collections.sort(apsSolutionTh.getProcessesList(),(v1,v2)->{
-                int a = 0;
+        Collections.sort(apsSolutionTh.getProcessesList(),(v1,v2)->{
+            int a = 0;
+            // 合金
+            String alloy1 = v1.getVolumeMetal();
+            String alloy2 = v2.getVolumeMetal();
+            // 合金状态
+            String alloystatus1 = v1.getVolumeMetalstate();
+            String alloystatus2 = v2.getVolumeMetalstate();
+            // 宽度
+            BigDecimal prowidth1 = v1.getVolumeWidth();
+            BigDecimal prowidth2 = v2.getVolumeWidth();
+            if(prowidth1.compareTo(prowidth2) == 0){
                 // 合金
-                String alloy1 = v1.getVolumeMetal();
-                String alloy2 = v2.getVolumeMetal();
-                // 合金状态
-                String alloystatus1 = v1.getVolumeMetalstate();
-                String alloystatus2 = v2.getVolumeMetalstate();
-                // 宽度
-                BigDecimal prowidth1 = v1.getVolumeWidth();
-                BigDecimal prowidth2 = v2.getVolumeWidth();
-                /*if(prowidth1.compareTo(prowidth2) == 0){*/
-                    // 合金
-                    if(alloy1.compareTo(alloy2) == 0){
-                        // 合金状态
-                        if(alloystatus1 == null || alloystatus2 == null || alloystatus1.compareTo(alloystatus2) == 0){
-                            if(v1.getApsOverallConfig().getStartTime().compareTo(v2.getApsOverallConfig().getStartTime()) == 0){
-                                a = v2.getVolumeWidth().compareTo(v1.getVolumeWidth());
-//                                a = 0;
-                            }else{
-                                a = v2.getApsOverallConfig().getStartTime().compareTo(v1.getApsOverallConfig().getStartTime());
-                            }
-                        }else{
-                            a = alloystatus1.compareTo(alloystatus2);
-                        }
-                    }else{
-                        a = alloy1.compareTo(alloy2);
-                    }
-                /*}else{
-                    a = prowidth2.compareTo(prowidth1);
-                }*/
-                return a;
-            });
-        }else{
-            Collections.sort(apsSolutionTh.getProcessesList(),(v1,v2)->{
-                int a = 0;
-                // 合金
-                String alloy1 = v1.getVolumeMetal();
-                String alloy2 = v2.getVolumeMetal();
-                // 合金状态
-                String alloystatus1 = v1.getVolumeMetalstate();
-                String alloystatus2 = v2.getVolumeMetalstate();
-                // 宽度
-                BigDecimal prowidth1 = v1.getVolumeWidth();
-                BigDecimal prowidth2 = v2.getVolumeWidth();
-                if(prowidth1.compareTo(prowidth2) == 0){
-                    // 合金
-                    if(alloy1.compareTo(alloy2) == 0){
-                        // 合金状态
-                        if(alloystatus1 == null || alloystatus2 == null || alloystatus1.compareTo(alloystatus2) == 0){
-                            if(v1.getApsOverallConfig().getStartTime().compareTo(v2.getApsOverallConfig().getStartTime()) == 0){
+                if(alloy1.compareTo(alloy2) == 0){
+                    // 合金状态
+                    if(alloystatus1 == null || alloystatus2 == null || alloystatus1.compareTo(alloystatus2) == 0){
+                        if(v1.getApsOverallConfig().getStartTime().compareTo(v2.getApsOverallConfig().getStartTime()) == 0){
 //                            a = v2.getVolumeWidth().compareTo(v1.getVolumeWidth());
-                                a = 0;
-                            }else{
-                                a = v2.getApsOverallConfig().getStartTime().compareTo(v1.getApsOverallConfig().getStartTime());
-                            }
+                            a = 0;
                         }else{
-                            a = alloystatus1.compareTo(alloystatus2);
+                            a = v2.getApsOverallConfig().getStartTime().compareTo(v1.getApsOverallConfig().getStartTime());
                         }
                     }else{
-                        a = alloy1.compareTo(alloy2);
+                        a = alloystatus1.compareTo(alloystatus2);
                     }
                 }else{
-                    a = prowidth2.compareTo(prowidth1);
+                    a = alloy1.compareTo(alloy2);
                 }
-                return a;
-            });
-        }
-
+            }else{
+                a = prowidth2.compareTo(prowidth1);
+            }
+            return a;
+        });
         ApsSolution solvedBalance1 = solver1.solve(apsSolutionTh);
         /*for (ProductionProcesses productionProcesses : solvedBalance1.getProcessesList()) {
             DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
@@ -1101,9 +1064,9 @@ public class ApsServiceImpl implements ApsService {
             for (ProductionProcesses process : orderpss) {
                 if("成退".equals(process.getProcessType()) || "中退".equals(process.getProcessType()) || "小卷成退".equals(process.getProcessType())){
                     // 锁定的不参与合并
-//                    if(process.getIfLock()){
-//                        mergeprocesses.add(process);
-//                    }else{
+                    if(process.getIfLock()){
+                        mergeprocesses.add(process);
+                    }else{
                         String bsproid = process.getBsProcessesId().get(0);
                         List<ProductionProcesses> bsprocess = thproMap.get(bsproid);
                         if(bsprocess == null){
@@ -1111,7 +1074,7 @@ public class ApsServiceImpl implements ApsService {
                         }
                         bsprocess.add(process);
                         thproMap.put(bsproid,bsprocess);
-//                    }
+                    }
                 }else{
                     mergeprocesses.add(process);
 
@@ -1182,7 +1145,7 @@ public class ApsServiceImpl implements ApsService {
                                 Map<String, List<ProductionProcesses>> map = new TreeMap<>();
                                 for (ProductionProcesses productionProcesses : lockpps) {
                                     DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-                                    String startStr = productionProcesses.getEquipmentId()+"!"+productionProcesses.getStartTime().format(formatter);
+                                    String startStr = productionProcesses.getStartTime().format(formatter);
                                     if(map.containsKey(startStr)){
                                         map.get(startStr).add(productionProcesses);
                                     }else{
@@ -1414,7 +1377,7 @@ public class ApsServiceImpl implements ApsService {
         // 根据订单分组
         Map<String, List<ProductionProcesses>> orderProcess = mergeprocesses.stream().collect(Collectors.groupingBy(ProductionProcesses::getOrderId));
         orderProcess.forEach((k,processes)->{
-            if("34a32ead88984c7a848f1530d987bfdf".equals(k)){
+            if("6639310eb2204f77ac9d36a2f289039c".equals(k)){
                 int a = 1;
             }
             // 退火工序过滤
@@ -1436,9 +1399,17 @@ public class ApsServiceImpl implements ApsService {
                 } else if (mergeprocess.getProcessType().equals("铸轧")) {
                     othermergeprocesses.add(mergeprocess);
                 } else {
-                    if((("是".equals(mergeprocess.getIssubsection()) && mergeprocess.getNextProcesses() != null && mergeprocess.getNextProcesses().size()>0
-                     && !mergeprocess.getNextProcesses().get(0).getProcessType().equals("小卷成退") && !"dd".equals(mergeprocess.getApsOverallConfig().getScheduleType().getScheduleType()))
-                            || mergeprocess.getIfLock())){
+                    boolean hasnotxjct = false;
+                    if(mergeprocess.getNextProcesses() != null && mergeprocess.getNextProcesses().size()>0){
+                        for (ProductionProcesses nextProcess : mergeprocess.getNextProcesses()) {
+                            if(!nextProcess.getProcessType().equals("小卷成退")){
+                                hasnotxjct = true;
+                                break;
+                            }
+                        }
+                    }
+                    if(("是".equals(mergeprocess.getIssubsection()) && mergeprocess.getNextProcesses() != null && mergeprocess.getNextProcesses().size()>0
+                     && hasnotxjct) || mergeprocess.getIfLock()){
                         othermergeprocesses.add(mergeprocess);
                     }else {
                         /*if(mergeprocess.getPreviousProcessesIds() == null || mergeprocess.getPreviousProcessesIds().size() == 0){
@@ -1457,7 +1428,9 @@ public class ApsServiceImpl implements ApsService {
             }
             // 两次退火卷数不一样、退火后道工序需要特殊处理
             List<ProductionProcesses> thNexts = new ArrayList<>();
-
+            /*if(othermergeprocesses != null && othermergeprocesses.size()>0){
+                hasMerge.addAll(othermergeprocesses.stream().map(ProductionProcesses::getId).collect(Collectors.toList()));
+            }*/
             // 根据退火合并作业
             if(thpros != null && thpros.size()>0){
                 for (ProductionProcesses thpro : thpros) {
@@ -1615,9 +1588,6 @@ public class ApsServiceImpl implements ApsService {
                             }
                             // 记录分卷已合并作业
                             List<String> proids = processesList.stream().map(ProductionProcesses::getId).collect(Collectors.toList());
-                            if(proids.contains("16b50912ce0e4c7bb22b03dbdb6df652")){
-                                int a = 1;
-                            }
                             hasMerge.addAll(proids);
                         }
                     }
@@ -1679,7 +1649,6 @@ public class ApsServiceImpl implements ApsService {
             ,Map<String,List<ProductionProcesses>> bsProceses,List<String> hasMerge,Map<String,ProductionProcesses> allProMap){
         List<ProductionProcesses> nextProcesses = thps.getNextProcesses();
         if(nextProcesses != null && nextProcesses.size()>0){
-            List<ProductionProcesses> notlocknexts = nextProcesses.stream().filter(v -> !v.getIfLock()).collect(Collectors.toList());
             if(!nextProcesses.get(0).getProcessType().equals("铸轧") && !nextProcesses.get(0).getProcessType().equals("成退")
                     && !nextProcesses.get(0).getProcessType().equals("中退") && !nextProcesses.get(0).getProcessType().equals("小卷成退")
 //                    && nextProcesses.get(0).getPreviousProcessesIds() != null && nextProcesses.get(0).getPreviousProcessesIds().size()>0
@@ -1687,7 +1656,7 @@ public class ApsServiceImpl implements ApsService {
                 // 分卷工序
                 if(("是".equals(nextProcesses.get(0).getIssubsection()) && nextProcesses.get(0).getNextProcesses() != null && nextProcesses.get(0).getNextProcesses().size()>0
                         && !nextProcesses.get(0).getNextProcesses().get(0).getProcessType().equals("小卷成退"))
-                        || notlocknexts == null || notlocknexts.size() == 0){
+                        || nextProcesses.get(0).getIfLock()){
                     for (ProductionProcesses nextProcess : nextProcesses) {
                         List<ProductionProcesses> pres = new ArrayList<>();
                         List<String> preids = new ArrayList<>();
@@ -1700,23 +1669,16 @@ public class ApsServiceImpl implements ApsService {
                     if(processesList != null && processesList.size()>0){
                         // 如果未合并则合并,并记录已合并的作业
                         if(!hasMerge.contains(processesList.get(0).getId())){
-                            if("是".equals(nextProcesses.get(0).getIssubsection()) && nextProcesses.get(0).getNextProcesses() != null && nextProcesses.get(0).getNextProcesses().size()>0
-                                    && !nextProcesses.get(0).getNextProcesses().get(0).getProcessType().equals("小卷成退")
-                                    && (nextProcesses.get(0).getApsOverallConfig().getScheduleType().getScheduleType() == null || !"dd".equals(nextProcesses.get(0).getApsOverallConfig().getScheduleType().getScheduleType()))){
-                                // 分卷的工序从此到工序的下一道工序开始合并,默认4卷
-                                fjNextMerge(processesList.get(0).getUniqueBsProcessesId(),notMergeProces,mergeprocesses,bsProceses,hasMerge,allProMap);
-                                // 记录合并作业ID
-                                List<String> proids = processesList.stream().map(ProductionProcesses::getId).collect(Collectors.toList());
-                                if(proids.contains("16b50912ce0e4c7bb22b03dbdb6df652")){
-                                    int a = 1;
-                                }
-                                hasMerge.addAll(proids);
-                            }
+                            // 分卷的工序从此到工序的上一道工序开始合并,默认4卷
+                            fjNextMerge(processesList.get(0).getUniqueBsProcessesId(),notMergeProces,mergeprocesses,bsProceses,hasMerge,allProMap);
+                            // 记录合并作业ID
+                            List<String> proids = processesList.stream().map(ProductionProcesses::getId).collect(Collectors.toList());
+                            hasMerge.addAll(proids);
                         }
                     }
                 }else{
                     List<ProductionProcesses> mergePres = new ArrayList<>();
-                    mergePres.addAll(notlocknexts);
+                    mergePres.addAll(nextProcesses);
                     // 按照铸轧时间排序
                     if(mergePres.get(0).getRooprocess() != null && mergePres.get(0).getRooprocess().getStartTime() != null){
                         Collections.sort(mergePres,Comparator.comparing(pro -> pro.getRooprocess().getStartTime()));
@@ -1774,9 +1736,6 @@ public class ApsServiceImpl implements ApsService {
                         // 记录已合并的作业
                         if(!hasMerge.contains(mergePres.get(0).getId())){
                             List<String> proids = mergePres.stream().map(ProductionProcesses::getId).collect(Collectors.toList());
-                            if(proids.contains("16b50912ce0e4c7bb22b03dbdb6df652")){
-                                int a = 1;
-                            }
                             hasMerge.addAll(proids);
                         }
                         // 递归按照退火合并
@@ -1798,21 +1757,23 @@ public class ApsServiceImpl implements ApsService {
     private void thPreProMerge(ProductionProcesses thps,List<ProductionProcesses> notMergeProces,List<ProductionProcesses> mergeprocesses
             ,Map<String,List<ProductionProcesses>> bsProceses,List<String> hasMerge,Map<String,ProductionProcesses> allProMap,List<ProductionProcesses> thNexts){
         List<ProductionProcesses> previousProcesses = thps.getPreviousProcesses();
-
-        /*List<ProductionProcesses> test1s = previousProcesses.stream().filter(v -> v.getId().equals("e0d6df86e8ea4f14a26b8b6642d5e50e")).collect(Collectors.toList());
-        if(test1s != null && test1s.size()>0){
-            int m = 1;
-        }*/
         if(previousProcesses != null && previousProcesses.size()>0){
-            List<ProductionProcesses> notlockPres = previousProcesses.stream().filter(v -> !v.getIfLock()).collect(Collectors.toList());
             // 铸轧、退火、和第一道工序不合并
             if(!previousProcesses.get(0).getProcessType().equals("铸轧") && !previousProcesses.get(0).getProcessType().equals("成退")
                     && !previousProcesses.get(0).getProcessType().equals("中退") && !previousProcesses.get(0).getProcessType().equals("小卷成退")
 //                    && previousProcesses.get(0).getPreviousProcessesIds() != null && previousProcesses.get(0).getPreviousProcessesIds().size()>0
             ){
+                boolean hasnotxjct = false;
+                if(previousProcesses.get(0).getNextProcesses() != null && previousProcesses.get(0).getNextProcesses().size()>0){
+                    for (ProductionProcesses nextProcess : previousProcesses.get(0).getNextProcesses()) {
+                        if(!nextProcess.getProcessType().equals("小卷成退")){
+                            hasnotxjct = true;
+                            break;
+                        }
+                    }
+                }
                 // 分卷工序
-                if((previousProcesses.get(0).getApsOverallConfig().getScheduleType().getScheduleType() == null || !"dd".equals(previousProcesses.get(0).getApsOverallConfig().getScheduleType().getScheduleType()))
-                        && (("是".equals(previousProcesses.get(0).getIssubsection()) && !thps.getProcessType().equals("小卷成退")) || notlockPres == null || notlockPres.size() == 0)){
+                if(("是".equals(previousProcesses.get(0).getIssubsection()) && hasnotxjct) || previousProcesses.get(0).getIfLock()){
                     for (ProductionProcesses preProcess : previousProcesses) {
                         List<ProductionProcesses> nexts = new ArrayList<>();
                         if(preProcess.getNextProcesses().size()>1){
@@ -1833,98 +1794,77 @@ public class ApsServiceImpl implements ApsService {
                     if(processesList != null && processesList.size()>0){
                         // 如果未合并则合并,并记录已合并的作业
                         if(!hasMerge.contains(processesList.get(0).getId())){
-                            if("是".equals(previousProcesses.get(0).getIssubsection()) && !thps.getProcessType().equals("小卷成退")
-                                    && (previousProcesses.get(0).getApsOverallConfig().getScheduleType().getScheduleType() == null || !"dd".equals(previousProcesses.get(0).getApsOverallConfig().getScheduleType().getScheduleType()))){
-                                // 分卷的工序从此到工序的上一道工序开始合并,默认4卷
-                                fjMerge(processesList.get(0).getUniqueBsProcessesId(),notMergeProces,mergeprocesses,bsProceses,hasMerge,allProMap,thNexts);
-                                // 记录合并作业ID
-                                List<String> proids = processesList.stream().map(ProductionProcesses::getId).collect(Collectors.toList());
-                                if(proids.contains("16b50912ce0e4c7bb22b03dbdb6df652")){
-                                    int a = 1;
-                                }
-                                hasMerge.addAll(proids);
-                            }else{
-
-                            }
+                            // 分卷的工序从此到工序的上一道工序开始合并,默认4卷
+                            fjMerge(processesList.get(0).getUniqueBsProcessesId(),notMergeProces,mergeprocesses,bsProceses,hasMerge,allProMap,thNexts);
+                            // 记录合并作业ID
+                            List<String> proids = processesList.stream().map(ProductionProcesses::getId).collect(Collectors.toList());
+                            hasMerge.addAll(proids);
                         }
                     }
                 }else{
-                    //  && notlockPres.size() == previousProcesses.size()
-                    if(notlockPres != null && notlockPres.size()>0){
-                        List<ProductionProcesses> mergePres = new ArrayList<>();
-                        mergePres.addAll(notlockPres);
-                        // 按照铸轧时间排序
-                        if(mergePres.get(0).getRooprocess() != null && mergePres.get(0).getRooprocess().getStartTime() != null){
-                            Collections.sort(mergePres,Comparator.comparing(pro -> pro.getRooprocess().getStartTime()));
-                        }
-                        if(!hasMerge.contains(mergePres.get(0).getId())){
-                            ProductionProcesses mergePro = mergePres.get(0);
-                            Map<String,ProductionProcesses> mergeProPres = new HashMap<>();
-                            if(mergePres.size()>1){
-                                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());
-                                        notMergeProces.add(mergePres.get(i));
-                                        if(mergePres.get(i).getPreviousProcesses() != null && mergePres.get(i).getPreviousProcesses().size()>0){
-                                            for (ProductionProcesses previousProcess : mergePres.get(i).getPreviousProcesses()) {
-                                                mergeProPres.put(previousProcess.getId(),previousProcess);
-                                            }
-                                        }
-                                    }
-                                }
-                                // 取第一个作业作为合并作业
-                                mergePro.setProduceTime(mergePro.getProduceTime()*mergePres.size());
-                                mergePro.setOpeProducePcNum(mergePres.size());
-                                List<String> nextids = new ArrayList<>();
-                                List<String> preids = new ArrayList<>();
-                                List<ProductionProcesses> nextpss = new ArrayList<>();
-                                List<ProductionProcesses> prepss = new ArrayList<>();
-                                nextpss.add(thps);
-                                nextids.add(thps.getId());
-                                mergePro.setNextProcesses(nextpss);
-                                mergePro.setNextProcessesIds(nextids);
-                                preids.add(mergePro.getId());
-                                prepss.add(mergePro);
-                                thps.setPreviousProcessesIds(preids);
-                                thps.setPreviousProcesses(prepss);
-                                // 合并作业的上一道工序
-                                if(mergeProPres.size()>0){
-                                    for (String proid:mergeProPres.keySet()){
-                                        if(!mergePro.getPreviousProcessesIds().contains(proid)){
-                                            ProductionProcesses propro = mergeProPres.get(proid);
-                                            mergePro.getPreviousProcessesIds().add(proid);
-                                            mergePro.getPreviousProcesses().add(propro);
-
-                                            List<ProductionProcesses> prenextpss = new ArrayList<>();
-                                            List<String> prenextids = new ArrayList<>();
-                                            prenextpss.add(mergePro);
-                                            prenextids.add(mergePro.getId());
-                                            propro.setNextProcessesIds(prenextids);
-                                            propro.setNextProcesses(prenextpss);
+                    List<ProductionProcesses> mergePres = new ArrayList<>();
+                    mergePres.addAll(previousProcesses);
+                    // 按照铸轧时间排序
+                    if(mergePres.get(0).getRooprocess() != null && mergePres.get(0).getRooprocess().getStartTime() != null){
+                        Collections.sort(mergePres,Comparator.comparing(pro -> pro.getRooprocess().getStartTime()));
+                    }
+                    if(!hasMerge.contains(mergePres.get(0).getId())){
+                        ProductionProcesses mergePro = mergePres.get(0);
+                        Map<String,ProductionProcesses> mergeProPres = new HashMap<>();
+                        if(mergePres.size()>1){
+                            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());
+                                    notMergeProces.add(mergePres.get(i));
+                                    if(mergePres.get(i).getPreviousProcesses() != null && mergePres.get(i).getPreviousProcesses().size()>0){
+                                        for (ProductionProcesses previousProcess : mergePres.get(i).getPreviousProcesses()) {
+                                            mergeProPres.put(previousProcess.getId(),previousProcess);
                                         }
                                     }
                                 }
-
-                                mergeprocesses.add(mergePro);
-                            }else{
-                                mergeprocesses.addAll(mergePres);
                             }
-                            // 记录已合并的作业
-                            if(!hasMerge.contains(mergePres.get(0).getId())){
-                                List<String> proids = mergePres.stream().map(ProductionProcesses::getId).collect(Collectors.toList());
-                                if(proids.contains("16b50912ce0e4c7bb22b03dbdb6df652")){
-                                    int a = 1;
+                            // 取第一个作业作为合并作业
+                            mergePro.setProduceTime(mergePro.getProduceTime()*mergePres.size());
+                            mergePro.setOpeProducePcNum(mergePres.size());
+                            List<String> nextids = new ArrayList<>();
+                            List<String> preids = new ArrayList<>();
+                            List<ProductionProcesses> nextpss = new ArrayList<>();
+                            List<ProductionProcesses> prepss = new ArrayList<>();
+                            nextpss.add(thps);
+                            nextids.add(thps.getId());
+                            mergePro.setNextProcesses(nextpss);
+                            mergePro.setNextProcessesIds(nextids);
+                            preids.add(mergePro.getId());
+                            prepss.add(mergePro);
+                            thps.setPreviousProcessesIds(preids);
+                            thps.setPreviousProcesses(prepss);
+                            // 合并作业的上一道工序
+                            if(mergeProPres.size()>0){
+                                for (String proid:mergeProPres.keySet()){
+                                    if(!mergePro.getPreviousProcessesIds().contains(proid)){
+                                        ProductionProcesses propro = mergeProPres.get(proid);
+                                        mergePro.getPreviousProcessesIds().add(proid);
+                                        mergePro.getPreviousProcesses().add(propro);
+                                    }
                                 }
-                                hasMerge.addAll(proids);
                             }
-                            // 递归按照退火合并
-                            thPreProMerge(mergePro,notMergeProces,mergeprocesses,bsProceses,hasMerge,allProMap,thNexts);
+
+                            mergeprocesses.add(mergePro);
+                        }else{
+                            mergeprocesses.addAll(mergePres);
                         }
+                        // 记录已合并的作业
+                        if(!hasMerge.contains(mergePres.get(0).getId())){
+                            List<String> proids = mergePres.stream().map(ProductionProcesses::getId).collect(Collectors.toList());
+                            hasMerge.addAll(proids);
+                        }
+                        // 递归按照退火合并
+                        thPreProMerge(mergePro,notMergeProces,mergeprocesses,bsProceses,hasMerge,allProMap,thNexts);
                     }
                 }
             }else{
@@ -2070,9 +2010,6 @@ public class ApsServiceImpl implements ApsService {
                         }
                         // 记录分卷已合并作业
                         List<String> proids = processesList.stream().map(ProductionProcesses::getId).collect(Collectors.toList());
-                        if(proids.contains("16b50912ce0e4c7bb22b03dbdb6df652")){
-                            int a = 1;
-                        }
                         hasMerge.addAll(proids);
                     }
                     // 递归合并分卷前的作业
@@ -2229,9 +2166,6 @@ public class ApsServiceImpl implements ApsService {
                         }
                         // 记录分卷已合并作业
                         List<String> proids = processesList.stream().map(ProductionProcesses::getId).collect(Collectors.toList());
-                        if(proids.contains("16b50912ce0e4c7bb22b03dbdb6df652")){
-                            int a = 1;
-                        }
                         hasMerge.addAll(proids);
                     }
                     // 递归合并分卷后的作业

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

@@ -47,7 +47,7 @@ public class ProductionScheduleServiceImpl implements ProductionScheduleService
      */
     @Override
     public ProductionScheduleRetVo productionSchedule(ProductionScheduleVo productionScheduleVo) throws Exception{
-        /*List<ProductionProcesses> collect = productionScheduleVo.getProcesses().stream().filter(v -> "ce3e5144a02442e9abbb0f7090c512d7".equals(v.getProduceOrder().get(0).getId())).collect(Collectors.toList());
+        /*List<ProductionProcesses> collect = productionScheduleVo.getProcesses().stream().filter(v -> "567919265a804029bd32bcb4e2f2c19e".equals(v.getProduceOrder().get(0).getId())).collect(Collectors.toList());
         productionScheduleVo.setProcesses(collect);*/
         log.info("*************** 排程开始:"+productionScheduleVo.getProductionScheduleId()+" *******************");
         if(productionScheduleVo.getScheduleType().getScheduleType() == null){