fangpy 1 рік тому
батько
коміт
ec71fdad6e

+ 10 - 0
rw-aps-server/src/main/java/com/rongwei/rwapsserver/aps/domain/ProductionProcesses.java

@@ -54,6 +54,8 @@ public class ProductionProcesses implements Serializable {
         this.produceTime = produceTime;
     }
 
+    private String orderId;
+
     /**
      * 任务类型,默认:processes
      */
@@ -738,6 +740,14 @@ public class ProductionProcesses implements Serializable {
         this.volumeThickness = volumeThickness;
     }
 
+    public String getOrderId() {
+        return orderId;
+    }
+
+    public void setOrderId(String orderId) {
+        this.orderId = orderId;
+    }
+
     public String getSeriSort(){
         String sortStr = this.getId();
         if(this.getStartTime() != null){

+ 4 - 3
rw-aps-server/src/main/java/com/rongwei/rwapsserver/aps/listener/TaskStartTimeListener.java

@@ -477,9 +477,10 @@ public class TaskStartTimeListener implements VariableListener<ApsSolution, Prod
     }
 
     private LocalDateTime startTimeNewSet(ProductionProcesses process,ScoreDirector<ApsSolution> scoreDirector){
-        /*if(process.getBsProcessesId().get(0).equals("ae76af901d0e4811b1b0025ae1fdea00")){
-            System.out.println(process);
-        }*/
+        if(process.getBsProcessesId().get(0).equals("f47f18cac31045f8bb41a9d2c670bd6a")){
+//            System.out.println(process);
+            int a = 0;
+        }
         // 获取所有规划实体对象数据
         ApsSolution workingSolution = scoreDirector.getWorkingSolution();
         // 时间设定

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

@@ -1233,6 +1233,9 @@ public class ApsConstraintProvider implements ConstraintProvider {
             b = b+2;
         }
         for(int i=0;i<hasStartTimeProcess.size()-1;i++){
+            if(hasStartTimeProcess.get(i).getId() == null && hasStartTimeProcess.get(i+1).getId() == null){
+                continue;
+            }
             if(hasStartTimeProcess.get(i).getSeriesProduceMark() != null && hasStartTimeProcess.get(i+1).getSeriesProduceMark() != null){
                 Map<String, String> conflictRoptions1 = hasStartTimeProcess.get(i).getConflictRoptions();
                 Map<String, String> conflictRoptions2 = hasStartTimeProcess.get(i+1).getConflictRoptions();

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

@@ -105,11 +105,11 @@ public class ProductionScheduleServiceImpl implements ProductionScheduleService
         ApsSolution solvedBalance = solver.solve(apsSolution);
         /*List<ProductionProcesses> apsProcess = solvedBalance.getProcessesList();
         solvedBalance.setProcessesList(solvedBalance.getStepBestProcessesList());*/
-        log.info("*****************************");
+        log.info("**************排程评分分析***************");
         SolutionManager<ApsSolution, HardSoftScore> scoreManager = SolutionManager.create(solverFactory);
         ScoreExplanation<ApsSolution, HardSoftScore> explain = scoreManager.explain(solvedBalance);
         log.info(explain.toString());
-        log.info("*****************************");
+        log.info("**************排程评分分析***************");
         /*solvedBalance.setProcessesList(apsProcess);
         ScoreExplanation<ApsSolution, HardSoftScore> explain1 = scoreManager.explain(solvedBalance);
         log.info(explain1.toString());*/
@@ -271,6 +271,7 @@ public class ProductionScheduleServiceImpl implements ProductionScheduleService
             if(StrUtil.isBlank(process.getTaskType())){
                 process.setTaskType("processes");
             }
+            process.setOrderId(process.getProduceOrder().get(0).getId());
             // 前道工序
             if(process.getPreviousProcessesIds() != null && process.getPreviousProcessesIds().size()>0){
                 List<ProductionProcesses> pres = new ArrayList<>();
@@ -396,59 +397,111 @@ public class ProductionScheduleServiceImpl implements ProductionScheduleService
         List<ProductionProcesses> processesSort = sources;
         // 已排序的数据
 //        List<String> bsIds = new ArrayList<>();
-        // 最开始任务
-        List<ProductionProcesses> roots = new ArrayList<>();
-        for (ProductionProcesses productionProcesses : processesSort) {
-            if(productionProcesses.getPreviousProcesses() == null || productionProcesses.getPreviousProcesses().size() == 0){
-                roots.add(productionProcesses);
+
+//        Collections.sort(roots, Comparator.comparing(pro -> pro.getProduceOrder().get(0).getDeliveryDate()));
+        // 按坯料计划分组
+        Map<String, List<ProductionProcesses>> orderProcess = processesSort.stream().collect(Collectors.groupingBy(ProductionProcesses::getOrderId));
+        List<ProduceOrder> produceOrders = new ArrayList<>();
+        orderProcess.forEach((k,v)->{
+            produceOrders.add(v.get(0).getProduceOrder().get(0));
+        });
+        Collections.sort(produceOrders, Comparator.comparing(pro -> pro.getDeliveryDate()));
+        Map<String,Integer> sortMap = new HashMap<>();
+        sortMap.put("sortInt",0);
+        if(produceOrders != null && produceOrders.size()>0){
+            for (ProduceOrder produceOrder : produceOrders) {
+                List<ProductionProcesses> processesList = orderProcess.get(produceOrder.getId());
+                Map<String,List<ProductionProcesses>> bsMap = new HashMap<>();
+                // 最开始任务
+                List<ProductionProcesses> roots = new ArrayList<>();
+                for (ProductionProcesses productionProcesses : processesList) {
+                    if(!bsMap.containsKey(productionProcesses.getUniqueBsProcessesId())){
+                        bsMap.put(productionProcesses.getUniqueBsProcessesId(),new ArrayList<>());
+                    }
+                    bsMap.get(productionProcesses.getUniqueBsProcessesId()).add(productionProcesses);
+                    if(productionProcesses.getPreviousProcesses() == null || productionProcesses.getPreviousProcesses().size() == 0){
+                        roots.add(productionProcesses);
+                    }
+                }
+                if(roots != null && roots.size()>0){
+                    ProductionProcesses rootPro = roots.get(0);
+                    nextProSort(sortMap,bsMap,rootPro.getUniqueBsProcessesId());
+                }
             }
         }
-        Collections.sort(roots, Comparator.comparing(pro -> pro.getProduceOrder().get(0).getDeliveryDate()));
+
         // 订单作业列表
-        Map<String,List<ProductionProcesses>> orderMap = new HashMap<>();
+        /*Map<String,Integer> orderMap = new HashMap<>();
+        orderMap.put("orderMark",0);
         for (ProductionProcesses root : roots) {
-            Integer i = 1;
-            root.setOrderMark(i);
-            setProcessSort(root,i);
+            orderMap.put("orderMark",orderMap.get("orderMark")+1);
+            root.setOrderMark(orderMap.get("orderMark"));
+            setProcessSort(root,orderMap);
         }
         for (ProductionProcesses source : sources) {
             if(source.getOrderMark() == null){
                 System.out.println(source);
             }
-        }
+        }*/
         sources.sort(Comparator.comparing(ProductionProcesses::getOrderMark));
 
-        /*for (ProductionProcesses root : roots) {
-            List<Integer> repeatPro = new ArrayList<>();
-            Map<Integer,Integer> repeatProMap = new HashMap<>();
-            List<ProductionProcesses> subprocesses = new ArrayList<>();
-            subprocesses.add(root);
-            getNextProcess(root,subprocesses,repeatPro,processes,repeatProMap);
+        return processes;
+    }
 
-            if(repeatPro != null && repeatPro.size()>0){
-                Collections.sort(repeatPro);
-                int a = 0;
-                for (Integer integer : repeatPro) {
-                    for(int i=integer-1;i>=a;i--){
-                        int finalI = i;
-                        List<ProductionProcesses> ps = processes.stream().filter(v -> v.getId().equals(subprocesses.get(finalI).getId())).collect(Collectors.toList());
-                        if(ps == null || ps .size() == 0){
-                            processes.add(repeatProMap.get(integer),subprocesses.get(i));
-                        }
+    private void nextProSort(Map<String,Integer> sortMap,Map<String,List<ProductionProcesses>> bsMap,String uniqueBsProcessesId){
+        List<ProductionProcesses> processesList1 = bsMap.get(uniqueBsProcessesId);
+        if(processesList1 != null && processesList1.size()>0){
+            if(processesList1.get(0).getProcessType().equals("成退") || processesList1.get(0).getProcessType().equals("中退")){
+                List<ProductionProcesses> pres = bsMap.get(processesList1.get(0).getPreviousProcesses().get(0).getUniqueBsProcessesId());
+                if(processesList1.get(0).getPreviousProcesses() != null && processesList1.get(0).getPreviousProcesses().size()>0){
+                    for (ProductionProcesses productionProcesses : processesList1) {
+                        productionProcesses.setOrderMark(productionProcesses.getPreviousProcesses().get(0).getOrderMark());
+                    }
+                    processesList1.sort(Comparator.comparing(ProductionProcesses::getOrderMark));
+                    for (int i = processesList1.size()-1;i >= 0;i--) {
+                        ProductionProcesses productionProcesses = processesList1.get(i);
+                        sortMap.put("sortInt",sortMap.get("sortInt")+1);
+                        productionProcesses.setOrderMark(sortMap.get("sortInt"));
+                    }
+                }else{
+                    for (int i = 0;i<processesList1.size();i++) {
+                        ProductionProcesses productionProcesses = processesList1.get(i);
+                        sortMap.put("sortInt",sortMap.get("sortInt")+1);
+                        productionProcesses.setOrderMark(sortMap.get("sortInt"));
                     }
                 }
+
             }else{
-                processes.addAll(subprocesses);
+                for (int i = 0;i<processesList1.size();i++) {
+                    ProductionProcesses productionProcesses = processesList1.get(i);
+                    sortMap.put("sortInt",sortMap.get("sortInt")+1);
+                    productionProcesses.setOrderMark(sortMap.get("sortInt"));
+                }
             }
-        }*/
-        return processes;
+            Set<String> uniqueBsProcessesIdSet = new HashSet<>();
+            for (ProductionProcesses productionProcesses : processesList1) {
+                if(productionProcesses.getNextProcesses() != null && productionProcesses.getNextProcesses().size()>0){
+                    for (ProductionProcesses nextProcess : productionProcesses.getNextProcesses()) {
+                        uniqueBsProcessesIdSet.add(nextProcess.getUniqueBsProcessesId());
+                    }
+                }
+            }
+            if(uniqueBsProcessesIdSet != null && uniqueBsProcessesIdSet.size()>0){
+                for (String psid : uniqueBsProcessesIdSet) {
+                    nextProSort(sortMap,bsMap,psid);
+                }
+            }
+        }
     }
 
-    private void setProcessSort(ProductionProcesses proces,Integer i){
-        i++;
+    private void setProcessSort(ProductionProcesses proces,Map<String,Integer> orderMap){
         if(proces.getNextProcesses() != null && proces.getNextProcesses().size()>0){
             for (ProductionProcesses nextProcess : proces.getNextProcesses()) {
-                if(nextProcess.getOrderMark() != null && nextProcess.getOrderMark()>0){
+                orderMap.put("orderMark",orderMap.get("orderMark")+1);
+                nextProcess.setOrderMark(orderMap.get("orderMark"));
+                setProcessSort(nextProcess,orderMap);
+
+                /*if(nextProcess.getOrderMark() != null && nextProcess.getOrderMark()>0){
                     if(i>nextProcess.getOrderMark()){
                         nextProcess.setOrderMark(i);
                         setProcessSort(nextProcess,i);
@@ -456,7 +509,7 @@ public class ProductionScheduleServiceImpl implements ProductionScheduleService
                 }else{
                     nextProcess.setOrderMark(i);
                     setProcessSort(nextProcess,i);
-                }
+                }*/
             }
         }
     }