Jelajahi Sumber

新模型合并

fangpy 4 bulan lalu
induk
melakukan
ef40d8617c

+ 5 - 0
rw-aps-server/src/main/java/com/rongwei/rwapsserver/aps/taskassigning/service/impl/DdApsTaServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import com.rongwei.rwapsserver.aps.domain.ApsFurnaceInstallationDo;
 import com.rongwei.rwapsserver.aps.domain.EquipmentRunTime;
+import com.rongwei.rwapsserver.aps.domain.ProductionProcesses;
 import com.rongwei.rwapsserver.aps.taskassigning.service.DdApsTaService;
 import com.rongwei.rwapsserver.aps.taskassigning.tado.EquipmentTa;
 import com.rongwei.rwapsserver.aps.taskassigning.tado.ProductionProcessesTa;
@@ -820,6 +821,10 @@ public class DdApsTaServiceImpl implements DdApsTaService {
             if(rootPro.getPreviousProcesses() != null && rootPro.getPreviousProcesses().size()>0){
                 if(rootPro.getPreviousProcesses().size()>1){
                     notMerge = false;
+                }else{
+                    if(rootPro.getPreviousProcesses().get(0).getNextProcesses().size()>1){
+                        notMerge = false;
+                    }
                 }
             }
 

+ 101 - 75
rw-aps-server/src/main/java/com/rongwei/rwapsserver/aps/taskassigning/service/impl/ProductionScheduleTaServiceImpl.java

@@ -55,10 +55,10 @@ public class ProductionScheduleTaServiceImpl implements ProductionScheduleTaServ
     public ProductionScheduleRetTaVo productionSchedule(ProductionScheduleTaVo productionScheduleVo) throws Exception{
         log.info("*************** 排程开始(productionLxSchedule):"+productionScheduleVo.getProductionScheduleId()+" *******************");
 
-        /*List<ProductionProcessesTa> pdps = productionScheduleVo.getProcesses().stream().filter(v ->
-                !v.getProduceOrder().get(0).getId().equals("53bf294756e3457fac9a0e0e174314b3"))
+        List<ProductionProcessesTa> pdps = productionScheduleVo.getProcesses().stream().filter(v ->
+                v.getProduceOrder().get(0).getId().equals("85e8e1938b7445939713f70f00401333"))
                 .collect(Collectors.toList());
-        productionScheduleVo.setProcesses(pdps);*/
+        productionScheduleVo.setProcesses(pdps);
         // 排程结果对象
         ApsUtils apsUtils = new ApsUtils();
         ProductionScheduleRetTaVo productionScheduleRetVo = new ProductionScheduleRetTaVo();
@@ -115,22 +115,7 @@ public class ProductionScheduleTaServiceImpl implements ProductionScheduleTaServ
         }
         apsSolution.setProcessesList(notLocks);
 
-        // 取每个坯料计划的第一道待排序
-        List<ProductionProcessesTa> firstpros = apsSolution.getProcessesList().stream().filter(v -> {
-            boolean firstpro = true;
-            List<ProductionProcessesTa> previousProcesses = v.getPreviousProcesses();
-            if (previousProcesses != null && previousProcesses.size() > 0) {
-                for (ProductionProcessesTa previousProcess : previousProcesses) {
-                    if (!previousProcess.getIfLock()) {
-                        firstpro = false;
-                        break;
-                    }
-                }
-            }
-            return firstpro;
-        }).collect(Collectors.toList());
-        apsSolution.setProcessesList(firstpros);
-
+        // 求解器初始化
         String cores = Runtime.getRuntime().availableProcessors() + "";
         SolverFactory<ApsSolutionTa> solverFactory = SolverFactory.create(new SolverConfig()
                         .withEnvironmentMode(EnvironmentMode.REPRODUCIBLE)
@@ -178,9 +163,59 @@ public class ProductionScheduleTaServiceImpl implements ProductionScheduleTaServ
             }
         });
 
+        List<ProductionProcessesTa> notaps = new ArrayList<>();
+        List<String> hasids = new ArrayList<>();
+        // 所有分批排程
+        List<List<ProductionProcessesTa>> allSteppros = new ArrayList<>();
+        // 取每个坯料计划的第一道待排序
+        List<ProductionProcessesTa> firstpros = apsSolution.getProcessesList().stream().filter(v -> {
+            boolean firstpro = true;
+            List<ProductionProcessesTa> previousProcesses = v.getPreviousProcesses();
+            if (previousProcesses != null && previousProcesses.size() > 0) {
+                for (ProductionProcessesTa previousProcess : previousProcesses) {
+                    if (!previousProcess.getIfLock()) {
+                        firstpro = false;
+                        break;
+                    }
+                }
+            }
+            if (firstpro){
+                hasids.add(v.getId());
+            }
+            return firstpro;
+        }).collect(Collectors.toList());
+        allSteppros.add(firstpros);
+        // 从第一批开始遍历每一批的数据
+        List<ProductionProcessesTa> midPros = firstpros;
+        while (midPros != null && midPros.size()>0){
+            List<ProductionProcessesTa> nextSteps = new ArrayList<>();
+            for (ProductionProcessesTa midPro : midPros) {
+                if(midPro.getNextProcesses() != null && midPro.getNextProcesses().size()>0){
+                    for (ProductionProcessesTa nextProcess : midPro.getNextProcesses()) {
+                        if(!nextProcess.getIfLock()){
+                            nextSteps.add(nextProcess);
+                            hasids.add(nextProcess.getId());
+                        }
+                    }
+                }
+            }
+            if(nextSteps != null && nextSteps.size()>0){
+                allSteppros.add(nextSteps);
+            }
+            midPros = nextSteps;
+        }
+        for (ProductionProcessesTa productionProcessesTa : apsSolution.getProcessesList()) {
+            if(!hasids.contains(productionProcessesTa.getId())){
+                notaps.add(productionProcessesTa);
+            }
+        }
+
+        ApsSolutionTa apsSolution1 = new ApsSolutionTa();
+        apsSolution1.setStartTime(apsSolution.getStartTime());
+        apsSolution1.setProcessesList(firstpros);
         // 根据可选设备分组排程
         Map<String,List<ProductionProcessesTa>> equPros = new HashMap<>();
-        apsUtils.groupProsByEqu(apsSolution.getProcessesList(),equPros);
+        apsUtils.groupProsByEqu(apsSolution1.getProcessesList(),equPros);
         // 分批排程
         ApsSolutionTa solvedBalance = new ApsSolutionTa();
         solvedBalance.setProcessesList(new ArrayList<>());
@@ -196,10 +231,10 @@ public class ProductionScheduleTaServiceImpl implements ProductionScheduleTaServ
                 }
 
             }
-            apsSolution.setEquipmentList(equipments);
-            apsSolution.setProcessesList(vv);
+            apsSolution1.setEquipmentList(equipments);
+            apsSolution1.setProcessesList(vv);
 
-            ApsSolutionTa solvedBalance1  = solver.solve(apsSolution);
+            ApsSolutionTa solvedBalance1  = solver.solve(apsSolution1);
             for (ProductionProcessesTa productionProcesses : solvedBalance1.getProcessesList()) {
                 if(productionProcesses.getOptionalEquipmentZg() != null && productionProcesses.getOptionalEquipmentZg().size()>0){
                     productionProcesses.setProZg(productionProcesses.getOptionalEquipmentZg().get(productionProcesses.getEquipment().getId()));
@@ -380,11 +415,49 @@ public class ProductionScheduleTaServiceImpl implements ProductionScheduleTaServ
 
     }
 
-    private void testOne(ProductionProcessesTa root){
-        System.out.println(root.getId()+"-"+root.getOrderMark());
-        if(root.getNextProcesses() != null && root.getNextProcesses().size()>0){
-            for (ProductionProcessesTa nextProcess : root.getNextProcesses()) {
-                testOne(nextProcess);
+    /**
+     * 排程结束数据手动添加到设备占用列表中
+     * @param pps
+     */
+    private void setEqRunTimes(List<ProductionProcessesTa> pps){
+        if(pps != null && pps.size()>0){
+            for (ProductionProcessesTa productionProcesses : pps) {
+                // 添加锁定工序设备占用时间
+                List<EquipmentRunTime> equipmentRunTimes = new ArrayList<>();
+                EquipmentRunTime pper = new EquipmentRunTime();
+                pper.setStartRunTime(productionProcesses.getStartTime());
+                pper.setEndRunTime(productionProcesses.getEndTime());
+                pper.setSeriesProduceMark(productionProcesses.getSeriesProduceMark());
+                pper.setProcessType(productionProcesses.getProcessType());
+                pper.setVolumeMetal(productionProcesses.getVolumeMetal());
+                if("小卷成退,小卷包装".contains(productionProcesses.getProcessType())){
+                    pper.setTotalVolumeWidth(productionProcesses.getVolumeWidth());
+                }else{
+                    pper.setTotalVolumeWidth(productionProcesses.getVolumeWidth().multiply(new BigDecimal(productionProcesses.getOpeProducePcNum())));
+                }
+                pper.setTotalSinglerollweight(productionProcesses.getTotalSinglerollweight());
+                pper.setTotalThickness(productionProcesses.getVolumeThickness());
+                pper.setMaxSinglerollweight(productionProcesses.getSinglerollweight());
+                pper.setMinSinglerollweight(productionProcesses.getSinglerollweight());
+                pper.setMaxVolumeWidth(productionProcesses.getVolumeWidth());
+                pper.setMinVolumeWidth(productionProcesses.getVolumeWidth());
+                pper.setMaxThickness(productionProcesses.getVolumeThickness());
+                pper.setMinThickness(productionProcesses.getVolumeThickness());
+                pper.setProducttype(productionProcesses.getProducttype());
+                pper.setOnceprocessmin(productionProcesses.getProduceTime());
+                pper.setPcNum(productionProcesses.getOpeProducePcNum());
+                pper.setZjgid(productionProcesses.getProZg());
+                pper.setOccupyType("process");
+                equipmentRunTimes.add(pper);
+
+                if(equipmentRunTimes.size()>0){
+                    if(productionProcesses.getEquipment().getEquipmentRunTimes() == null){
+                        productionProcesses.getEquipment().setEquipmentRunTimes(equipmentRunTimes);
+                    }else{
+                        productionProcesses.getEquipment().getEquipmentRunTimes().addAll(equipmentRunTimes);
+                    }
+//                    apsService.equipmentRunTimeMerge(productionProcesses.getEquipment(),productionProcesses.getApsOverallConfig().getFurnaceInstallations());
+                }
             }
         }
     }
@@ -475,53 +548,6 @@ public class ProductionScheduleTaServiceImpl implements ProductionScheduleTaServ
         }
     }
 
-    /**
-     * 排程结束数据手动添加到设备占用列表中
-     * @param pps
-     */
-    private void setEqRunTimes(List<ProductionProcessesTa> pps){
-        if(pps != null && pps.size()>0){
-            for (ProductionProcessesTa productionProcesses : pps) {
-                // 添加锁定工序设备占用时间
-                List<EquipmentRunTime> equipmentRunTimes = new ArrayList<>();
-                EquipmentRunTime pper = new EquipmentRunTime();
-                pper.setStartRunTime(productionProcesses.getStartTime());
-                pper.setEndRunTime(productionProcesses.getEndTime());
-                pper.setSeriesProduceMark(productionProcesses.getSeriesProduceMark());
-                pper.setProcessType(productionProcesses.getProcessType());
-                pper.setVolumeMetal(productionProcesses.getVolumeMetal());
-                if("小卷成退,小卷包装".contains(productionProcesses.getProcessType())){
-                    pper.setTotalVolumeWidth(productionProcesses.getVolumeWidth());
-                }else{
-                    pper.setTotalVolumeWidth(productionProcesses.getVolumeWidth().multiply(new BigDecimal(productionProcesses.getOpeProducePcNum())));
-                }
-                pper.setTotalSinglerollweight(productionProcesses.getTotalSinglerollweight());
-                pper.setTotalThickness(productionProcesses.getVolumeThickness());
-                pper.setMaxSinglerollweight(productionProcesses.getSinglerollweight());
-                pper.setMinSinglerollweight(productionProcesses.getSinglerollweight());
-                pper.setMaxVolumeWidth(productionProcesses.getVolumeWidth());
-                pper.setMinVolumeWidth(productionProcesses.getVolumeWidth());
-                pper.setMaxThickness(productionProcesses.getVolumeThickness());
-                pper.setMinThickness(productionProcesses.getVolumeThickness());
-                pper.setProducttype(productionProcesses.getProducttype());
-                pper.setOnceprocessmin(productionProcesses.getProduceTime());
-                pper.setPcNum(productionProcesses.getOpeProducePcNum());
-                pper.setZjgid(productionProcesses.getProZg());
-                pper.setOccupyType("process");
-                equipmentRunTimes.add(pper);
-
-                if(equipmentRunTimes.size()>0){
-                    if(productionProcesses.getEquipment().getEquipmentRunTimes() == null){
-                        productionProcesses.getEquipment().setEquipmentRunTimes(equipmentRunTimes);
-                    }else{
-                        productionProcesses.getEquipment().getEquipmentRunTimes().addAll(equipmentRunTimes);
-                    }
-                    ddApsService.equipmentRunTimeMerge(productionProcesses.getEquipment(),productionProcesses.getApsOverallConfig().getFurnaceInstallations());
-                }
-            }
-        }
-    }
-
     private ProductionProcessesTa maxWaitTimeCheck(ProductionProcessesTa process,List<ProductionProcessesTa> maxSetPros,List<ProductionProcessesTa> processes,List<EquipmentTa> equipments){
         ProductionProcessesTa newPre = null;
         List<ProductionProcessesTa> previousProcesses = process.getPreviousProcesses();