fangpy 5 mesiacov pred
rodič
commit
6c21b689b0

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

@@ -234,6 +234,10 @@ public class ApsConstraintProvider implements ConstraintProvider {
                     if(productionProcesses.getId().equals("d6ea246661804ca5982b81b9a691a34e")){
                         int a1 = 0;
                     }
+                    if(productionProcesses.getApsOverallConfig().getScheduleType() != null && productionProcesses.getApsOverallConfig().getScheduleType().getScheduleType() != null
+                            && "dd".equals(productionProcesses.getApsOverallConfig().getScheduleType().getScheduleType())){
+                        return false;
+                    }
                     boolean bln = false;
                     List<ProductionProcesses> nextProcesses = productionProcesses.getNextProcesses();
                     if(nextProcesses != null && nextProcesses.size()>0){

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

@@ -1101,9 +1101,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 +1111,7 @@ public class ApsServiceImpl implements ApsService {
                         }
                         bsprocess.add(process);
                         thproMap.put(bsproid,bsprocess);
-                    }
+//                    }
                 }else{
                     mergeprocesses.add(process);
 
@@ -1182,7 +1182,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.getStartTime().format(formatter);
+                                    String startStr = productionProcesses.getEquipmentId()+"!"+productionProcesses.getStartTime().format(formatter);
                                     if(map.containsKey(startStr)){
                                         map.get(startStr).add(productionProcesses);
                                     }else{
@@ -1414,7 +1414,7 @@ public class ApsServiceImpl implements ApsService {
         // 根据订单分组
         Map<String, List<ProductionProcesses>> orderProcess = mergeprocesses.stream().collect(Collectors.groupingBy(ProductionProcesses::getOrderId));
         orderProcess.forEach((k,processes)->{
-            if("6639310eb2204f77ac9d36a2f289039c".equals(k)){
+            if("34a32ead88984c7a848f1530d987bfdf".equals(k)){
                 int a = 1;
             }
             // 退火工序过滤
@@ -1436,8 +1436,9 @@ 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("小卷成退")) || mergeprocess.getIfLock()){
+                    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())){
                         othermergeprocesses.add(mergeprocess);
                     }else {
                         /*if(mergeprocess.getPreviousProcessesIds() == null || mergeprocess.getPreviousProcessesIds().size() == 0){
@@ -1614,6 +1615,9 @@ 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);
                         }
                     }
@@ -1675,6 +1679,7 @@ 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
@@ -1682,7 +1687,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("小卷成退"))
-                        || nextProcesses.get(0).getIfLock()){
+                        || notlocknexts == null || notlocknexts.size() == 0){
                     for (ProductionProcesses nextProcess : nextProcesses) {
                         List<ProductionProcesses> pres = new ArrayList<>();
                         List<String> preids = new ArrayList<>();
@@ -1695,16 +1700,23 @@ public class ApsServiceImpl implements ApsService {
                     if(processesList != null && processesList.size()>0){
                         // 如果未合并则合并,并记录已合并的作业
                         if(!hasMerge.contains(processesList.get(0).getId())){
-                            // 分卷的工序从此到工序的上一道工序开始合并,默认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);
+                            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);
+                            }
                         }
                     }
                 }else{
                     List<ProductionProcesses> mergePres = new ArrayList<>();
-                    mergePres.addAll(nextProcesses);
+                    mergePres.addAll(notlocknexts);
                     // 按照铸轧时间排序
                     if(mergePres.get(0).getRooprocess() != null && mergePres.get(0).getRooprocess().getStartTime() != null){
                         Collections.sort(mergePres,Comparator.comparing(pro -> pro.getRooprocess().getStartTime()));
@@ -1762,6 +1774,9 @@ 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);
                         }
                         // 递归按照退火合并
@@ -1783,14 +1798,21 @@ 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
             ){
                 // 分卷工序
-                if(("是".equals(previousProcesses.get(0).getIssubsection()) && !thps.getProcessType().equals("小卷成退")) || previousProcesses.get(0).getIfLock()){
+                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)){
                     for (ProductionProcesses preProcess : previousProcesses) {
                         List<ProductionProcesses> nexts = new ArrayList<>();
                         if(preProcess.getNextProcesses().size()>1){
@@ -1811,77 +1833,98 @@ public class ApsServiceImpl implements ApsService {
                     if(processesList != null && processesList.size()>0){
                         // 如果未合并则合并,并记录已合并的作业
                         if(!hasMerge.contains(processesList.get(0).getId())){
-                            // 分卷的工序从此到工序的上一道工序开始合并,默认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);
+                            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{
+
+                            }
                         }
                     }
                 }else{
-                    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);
+                    //  && 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);
+                                // 取第一个作业作为合并作业
+                                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);
+                                        }
                                     }
                                 }
-                            }
 
-                            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);
+                                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;
+                                }
+                                hasMerge.addAll(proids);
+                            }
+                            // 递归按照退火合并
+                            thPreProMerge(mergePro,notMergeProces,mergeprocesses,bsProceses,hasMerge,allProMap,thNexts);
                         }
-                        // 递归按照退火合并
-                        thPreProMerge(mergePro,notMergeProces,mergeprocesses,bsProceses,hasMerge,allProMap,thNexts);
                     }
                 }
             }else{
@@ -2027,6 +2070,9 @@ 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);
                     }
                     // 递归合并分卷前的作业
@@ -2183,6 +2229,9 @@ 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);
                     }
                     // 递归合并分卷后的作业

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

@@ -47,7 +47,12 @@ 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());
+        productionScheduleVo.setProcesses(collect);*/
         log.info("*************** 排程开始:"+productionScheduleVo.getProductionScheduleId()+" *******************");
+        if(productionScheduleVo.getScheduleType().getScheduleType() == null){
+            productionScheduleVo.getScheduleType().setScheduleType("default");
+        }
         // 排程结果对象
         ProductionScheduleRetVo productionScheduleRetVo = new ProductionScheduleRetVo();
         // 排程校验
@@ -1557,6 +1562,11 @@ public class ProductionScheduleServiceImpl implements ProductionScheduleService
             }
         }
         if(sortType == 1){
+            for (ProductionProcesses source : sources) {
+                if(source.getOrderMark() == null && source.getIfLock()){
+                    source.setOrderMark(0);
+                }
+            }
             sources.sort(Comparator.comparing(ProductionProcesses::getOrderMark));
         }
         return processes;