Parcourir la source

退火合并bug修复

fangpy il y a 5 mois
Parent
commit
b35f15ceba

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

@@ -658,79 +658,118 @@ public class DdApsServiceImpl implements DdApsService {
     @Override
     public List<ProductionProcesses> seriesLzBzMerge(List<ProductionProcesses> mergeprocesses,List<ProductionProcesses> otherSerProces){
         List<ProductionProcesses> retPros = new ArrayList<>();
-        if(mergeprocesses != null && mergeprocesses.size()>0){
-            // 获取所有根节点
-            List<ProductionProcesses> rootPros = new ArrayList<>();
-            for (ProductionProcesses mergeprocess : mergeprocesses) {
-                if(mergeprocess.getPreviousProcesses() == null || mergeprocess.getPreviousProcesses().size() == 0){
-                    rootPros.add(mergeprocess);
-                }
-            }
-            // 被合并的作业
-            List<ProductionProcesses> lzbzMergeOthers = new ArrayList<>();
-            // 根据根节点逐级查询是否可合并的作业
-            if(rootPros != null && rootPros.size()>0){
-                Map<String,List<ProductionProcesses>> lzbzMerges = new HashMap<>();
-                // 已合并处理过作业ID
-                List<String> hasMid = new ArrayList<>();
-                for (ProductionProcesses rootPro : rootPros) {
-                    getNotLockLzBzSeries(rootPro,lzbzMerges,hasMid);
-                }
-                if(lzbzMerges != null && lzbzMerges.size()>0){
-                    for (String k:lzbzMerges.keySet()){
-                        List<ProductionProcesses> serPros = lzbzMerges.get(k);
-                        // 连续冷轧或箔轧超过1个,则合并
-                        if(serPros != null && serPros.size()>1){
-                            ProductionProcesses fMergePro = serPros.get(0);
-                            if(fMergePro.getMergeProOrders() == null){
-                                fMergePro.setMergeProOrders(new ArrayList<>());
-                                fMergePro.getMergeProOrders().add(fMergePro.getId());
-                            }
-                            // 按顺序依次合并
-                            for (int i = 0; i < serPros.size(); i++) {
-                                if(i>0){
-                                    serPros.get(i).setMergeThMainId(fMergePro.getId());
-                                    if(serPros.get(i).getMergeProOrders() == null){
-                                        fMergePro.getMergeProOrders().add(serPros.get(i).getId());
-                                    }else{
-                                        fMergePro.getMergeProOrders().addAll(serPros.get(i).getMergeProOrders());
+        // 根据订单分组
+        Map<String, List<ProductionProcesses>> orderProcess = mergeprocesses.stream().collect(Collectors.groupingBy(ProductionProcesses::getOrderId));
+        orderProcess.forEach((pk,processes)->{
+            try{
+                if(processes != null && processes.size()>0){
+                    // 获取所有根节点
+                    List<ProductionProcesses> rootPros = new ArrayList<>();
+                    for (ProductionProcesses mergeprocess : processes) {
+                        if(mergeprocess.getPreviousProcesses() == null || mergeprocess.getPreviousProcesses().size() == 0){
+                            rootPros.add(mergeprocess);
+                        }
+                    }
+                    // 获取第一道未锁定工序数据
+                    List<ProductionProcesses> firstNotLockPros = new ArrayList<>();
+                    getFirstNotLockPros(rootPros,firstNotLockPros);
+                    // 被合并的作业
+                    List<ProductionProcesses> lzbzMergeOthers = new ArrayList<>();
+                    // 根据根节点逐级查询是否可合并的作业
+                    if(firstNotLockPros != null && firstNotLockPros.size()>0){
+                        Map<String,List<ProductionProcesses>> lzbzMerges = new HashMap<>();
+                        // 已合并处理过作业ID
+                        List<String> hasMid = new ArrayList<>();
+                        for (ProductionProcesses rootPro : firstNotLockPros) {
+                            getNotLockLzBzSeries(rootPro,lzbzMerges,hasMid);
+                        }
+                        if(lzbzMerges != null && lzbzMerges.size()>0){
+                            for (String k:lzbzMerges.keySet()){
+                                List<ProductionProcesses> serPros = lzbzMerges.get(k);
+                                // 连续冷轧或箔轧超过1个,则合并
+                                if(serPros != null && serPros.size()>1){
+                                    ProductionProcesses fMergePro = serPros.get(0);
+                                    if(fMergePro.getMergeProOrders() == null){
+                                        fMergePro.setMergeProOrders(new ArrayList<>());
+                                        fMergePro.getMergeProOrders().add(fMergePro.getId());
                                     }
-                                    fMergePro.setProduceTime(fMergePro.getProduceTime()+serPros.get(i).getProduceTime());
-                                    // 连续生产合并作业设置下道工序,以及合并后下道作业的上道工序
-                                    if(i == serPros.size()-1){
-                                        fMergePro.setNextProcesses(serPros.get(i).getNextProcesses());
-                                        fMergePro.setNextProcessesIds(serPros.get(i).getNextProcessesIds());
-                                        if(fMergePro.getNextProcesses() != null && fMergePro.getNextProcesses().size()>0){
-                                            for (ProductionProcesses nextProcess : fMergePro.getNextProcesses()) {
-                                                List<ProductionProcesses> pres = new ArrayList<>();
-                                                List<String> preids = new ArrayList<>();
-                                                pres.add(fMergePro);
-                                                preids.add(fMergePro.getId());
-                                                nextProcess.setPreviousProcesses(pres);
-                                                nextProcess.setPreviousProcessesIds(preids);
+                                    // 按顺序依次合并
+                                    for (int i = 0; i < serPros.size(); i++) {
+                                        if(i>0){
+                                            serPros.get(i).setMergeThMainId(fMergePro.getId());
+                                            if(serPros.get(i).getMergeProOrders() == null){
+                                                fMergePro.getMergeProOrders().add(serPros.get(i).getId());
+                                            }else{
+                                                fMergePro.getMergeProOrders().addAll(serPros.get(i).getMergeProOrders());
                                             }
+                                            fMergePro.setProduceTime(fMergePro.getProduceTime()+serPros.get(i).getProduceTime());
+                                            // 连续生产合并作业设置下道工序,以及合并后下道作业的上道工序
+                                            if(i == serPros.size()-1){
+                                                fMergePro.setNextProcesses(serPros.get(i).getNextProcesses());
+                                                fMergePro.setNextProcessesIds(serPros.get(i).getNextProcessesIds());
+                                                if(fMergePro.getNextProcesses() != null && fMergePro.getNextProcesses().size()>0){
+                                                    for (ProductionProcesses nextProcess : fMergePro.getNextProcesses()) {
+                                                        List<ProductionProcesses> pres = new ArrayList<>();
+                                                        List<String> preids = new ArrayList<>();
+                                                        pres.add(fMergePro);
+                                                        preids.add(fMergePro.getId());
+                                                        nextProcess.setPreviousProcesses(pres);
+                                                        nextProcess.setPreviousProcessesIds(preids);
+                                                    }
+                                                }
+                                            }
+                                            lzbzMergeOthers.add(serPros.get(i));
                                         }
                                     }
-                                    lzbzMergeOthers.add(serPros.get(i));
                                 }
                             }
                         }
                     }
+                    // 除去被合并的作业
+                    if(lzbzMergeOthers != null && lzbzMergeOthers.size()>0){
+                        List<String> lzbzMergeOtherIds = lzbzMergeOthers.stream().map(ProductionProcesses::getId).collect(Collectors.toList());
+                        for (ProductionProcesses mergeprocess : mergeprocesses) {
+                            if(!lzbzMergeOtherIds.contains(mergeprocess.getId())){
+                                retPros.add(mergeprocess);
+                            }
+                        }
+                    }else{
+                        retPros.addAll(mergeprocesses);
+                    }
                 }
+            }catch (Exception e){
+                log.error("连续冷轧箔轧作业合并",e);
             }
-            // 除去被合并的作业
-            if(lzbzMergeOthers != null && lzbzMergeOthers.size()>0){
-                List<String> lzbzMergeOtherIds = lzbzMergeOthers.stream().map(ProductionProcesses::getId).collect(Collectors.toList());
-                for (ProductionProcesses mergeprocess : mergeprocesses) {
-                    if(!lzbzMergeOtherIds.contains(mergeprocess.getId())){
-                        retPros.add(mergeprocess);
+        });
+        return retPros;
+    }
+
+    /**
+     * 获取第一道未锁定工序作业
+     * @param rootPros
+     */
+    private void getFirstNotLockPros(List<ProductionProcesses> rootPros,List<ProductionProcesses> firstNotLockPros){
+        if(rootPros != null && rootPros.size()>0){
+            List<ProductionProcesses> notlocks = rootPros.stream().filter(v -> !v.getIfLock()).collect(Collectors.toList());
+            if(notlocks != null && notlocks.size()>0){
+                firstNotLockPros.addAll(notlocks);
+            }else{
+                List<ProductionProcesses> nextRootPros = new ArrayList<>();
+                for (ProductionProcesses rootPro : rootPros) {
+                    if(rootPro.getNextProcesses() != null && rootPro.getNextProcesses().size()>0){
+                        for (ProductionProcesses nextProcess : rootPro.getNextProcesses()) {
+                            List<ProductionProcesses> haspros = nextRootPros.stream().filter(v -> v.getId().equals(nextProcess.getId())).collect(Collectors.toList());
+                            if(haspros == null || haspros.size() == 0){
+                                nextRootPros.add(nextProcess);
+                            }
+                        }
                     }
                 }
-            }else{
-                retPros.addAll(mergeprocesses);
+                if(nextRootPros != null &&nextRootPros.size()>0){
+                    getFirstNotLockPros(nextRootPros,firstNotLockPros);
+                }
             }
         }
-        return retPros;
     }
 
     private void getNotLockLzBzSeries(ProductionProcesses rootPro,Map<String,List<ProductionProcesses>> lzbzMerges,List<String> hasMid){

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

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