Explorar o código

退火合并优化

fangpy hai 2 meses
pai
achega
8b94f9b7e6

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

@@ -504,14 +504,29 @@ public class ApsServiceImpl implements ApsService {
         Map<String,List<ProductionProcesses>> thGroup = new HashMap<>();
         DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
         for (ProductionProcesses process : solvedBalance1.getProcessesList()) {
-            String thkey = process.getEquipment().getId() + format.format(process.getStartTime());
-            if(thGroup.containsKey(thkey)){
-                thGroup.get(thkey).add(process);
-            }else{
-                List<ProductionProcesses> thpros = new ArrayList<>();
-                thpros.add(process);
-                thGroup.put(thkey,thpros);
+            // 判断是否和历史数据合炉
+            boolean mergeHisTh = false;
+            List<EquipmentRunTime> equipmentRunTimes = process.getEquipment().getEquipmentRunTimes();
+            if(equipmentRunTimes != null && equipmentRunTimes.size()>0){
+                for (EquipmentRunTime equipmentRunTime : equipmentRunTimes) {
+                    if(equipmentRunTime.getStartRunTime().compareTo(process.getStartTime()) == 0){
+                        mergeHisTh = true;
+                        break;
+                    }
+                }
+            }
+            // 未和历史数据合炉的不需要锁定当前设备当前时间
+            if(!mergeHisTh){
+                String thkey = process.getEquipment().getId() + format.format(process.getStartTime());
+                if(thGroup.containsKey(thkey)){
+                    thGroup.get(thkey).add(process);
+                }else{
+                    List<ProductionProcesses> thpros = new ArrayList<>();
+                    thpros.add(process);
+                    thGroup.put(thkey,thpros);
+                }
             }
+
             // 先全部还原退火的关联关系
             List<ProductionProcesses> collect = apsSolution.getProcessesList().stream().filter(vp -> vp.getId().equals(process.getId())).collect(Collectors.toList());
             if(collect != null && collect.size()>0){
@@ -524,6 +539,50 @@ public class ApsServiceImpl implements ApsService {
                         productionProcesses.setPreviousProcesses(stringListMap.get("pres"));
                         productionProcesses.setNextProcesses(stringListMap.get("nexts"));
                     }
+
+                    // 和历史数据合炉的需要锁定当前设备当前时间
+                    if(mergeHisTh){
+                        List<EquipmentRunTime> runTimes = new ArrayList<>();
+
+                        productionProcesses.setStartTime(process.getStartTime());
+                        productionProcesses.setEndTime(process.getEndTime());
+                        productionProcesses.setEquipmentId(process.getEquipmentId());
+                        productionProcesses.setEquipment(process.getEquipment());
+                        productionProcesses.setDelay(process.getDelay());
+                        productionProcesses.setIfLock(true);
+                        // 前后道工序设置
+                        if(relPros.containsKey(productionProcesses.getId())){
+                            Map<String, List<ProductionProcesses>> stringListMap = relPros.get(productionProcesses.getId());
+                            productionProcesses.setPreviousProcesses(stringListMap.get("pres"));
+                            productionProcesses.setNextProcesses(stringListMap.get("nexts"));
+                        }
+                        // 递归推理前道工序
+                        proMaxTimeSet(productionProcesses,productionProcesses,0);
+                        // 添加锁定工序设备占用时间
+                        EquipmentRunTime pper = new EquipmentRunTime();
+                        pper.setStartRunTime(productionProcesses.getStartTime());
+                        pper.setEndRunTime(productionProcesses.getEndTime());
+                        pper.setSeriesProduceMark(productionProcesses.getSeriesProduceMark());
+                        pper.setProcessType(productionProcesses.getProcessType());
+                        pper.setVolumeMetal(productionProcesses.getVolumeMetal());
+                        pper.setTotalVolumeWidth(productionProcesses.getVolumeWidth());
+                        pper.setTotalSinglerollweight(productionProcesses.getSinglerollweight());
+                        pper.setTotalThickness(productionProcesses.getVolumeThickness());
+                        pper.setProducttype(productionProcesses.getProducttype());
+                        pper.setOnceprocessmin(productionProcesses.getProduceTime());
+                        pper.setPcNum(productionProcesses.getOpeProducePcNum());
+                        pper.setOccupyType("process");
+                        runTimes.add(pper);
+                        // 退火锁定的工序添加到待排程的设备占用时间中
+                        if(runTimes.size()>0){
+                            if(productionProcesses.getEquipment().getEquipmentRunTimes() == null){
+                                productionProcesses.getEquipment().setEquipmentRunTimes(runTimes);
+                            }else{
+                                productionProcesses.getEquipment().getEquipmentRunTimes().addAll(runTimes);
+                            }
+                            equipmentRunTimeMerge(productionProcesses.getEquipment(),productionProcesses.getApsOverallConfig().getFurnaceInstallations());
+                        }
+                    }
                 }
             }
         }
@@ -556,54 +615,6 @@ public class ApsServiceImpl implements ApsService {
             }
 
             if(orderids.size()>1){
-                /*List<EquipmentRunTime> equipmentRunTimes = new ArrayList<>();
-                for (ProductionProcesses process : v) {
-                    List<ProductionProcesses> collect = apsSolution.getProcessesList().stream().filter(vp -> vp.getId().equals(process.getId())).collect(Collectors.toList());
-                    if(collect != null && collect.size()>0){
-                        for (ProductionProcesses productionProcesses : collect) {
-                            productionProcesses.setStartTime(process.getStartTime());
-                            productionProcesses.setEndTime(process.getEndTime());
-                            productionProcesses.setEquipmentId(process.getEquipmentId());
-                            productionProcesses.setEquipment(process.getEquipment());
-                            productionProcesses.setDelay(process.getDelay());
-                            productionProcesses.setIfLock(true);
-                            // 前后道工序设置
-                            if(relPros.containsKey(productionProcesses.getId())){
-                                Map<String, List<ProductionProcesses>> stringListMap = relPros.get(productionProcesses.getId());
-                                productionProcesses.setPreviousProcesses(stringListMap.get("pres"));
-                                productionProcesses.setNextProcesses(stringListMap.get("nexts"));
-                            }
-                            // 递归推理前道工序
-                            proMaxTimeSet(productionProcesses,productionProcesses,0);
-                            // 添加锁定工序设备占用时间
-                            EquipmentRunTime pper = new EquipmentRunTime();
-                            pper.setStartRunTime(productionProcesses.getStartTime());
-                            pper.setEndRunTime(productionProcesses.getEndTime());
-                            pper.setSeriesProduceMark(productionProcesses.getSeriesProduceMark());
-                            pper.setProcessType(productionProcesses.getProcessType());
-                            pper.setVolumeMetal(productionProcesses.getVolumeMetal());
-                            pper.setTotalVolumeWidth(productionProcesses.getVolumeWidth());
-                            pper.setTotalSinglerollweight(productionProcesses.getSinglerollweight());
-                            pper.setTotalThickness(productionProcesses.getVolumeThickness());
-                            pper.setProducttype(productionProcesses.getProducttype());
-                            pper.setOnceprocessmin(productionProcesses.getProduceTime());
-                            pper.setPcNum(productionProcesses.getOpeProducePcNum());
-                            pper.setOccupyType("process");
-                            equipmentRunTimes.add(pper);
-                        }
-                    }
-                }
-                // 退火锁定的工序添加到待排程的设备占用时间中
-                if(equipmentRunTimes.size()>0){
-                    if(v.get(0).getEquipment().getEquipmentRunTimes() == null){
-                        v.get(0).getEquipment().setEquipmentRunTimes(equipmentRunTimes);
-                    }else{
-                        v.get(0).getEquipment().getEquipmentRunTimes().addAll(equipmentRunTimes);
-                    }
-                    equipmentRunTimeMerge(v.get(0).getEquipment(),v.get(0).getApsOverallConfig().getFurnaceInstallations());
-                }*/
-
-
                 // 合并不同订单退火
                 List<String> hbThIds = v.stream().map(ProductionProcesses::getId).collect(Collectors.toList());
                 List<ProductionProcesses> hbThPros = apsSolution.getProcessesList().stream().filter(vp -> hbThIds.contains(vp.getId())).collect(Collectors.toList());