Преглед изворни кода

APS平台新模型约束优化

fangpy пре 1 година
родитељ
комит
f3e8fec565

+ 39 - 2
rw-aps-server/src/main/java/com/rongwei/rwapsserver/aps/listener/TaskStartTimeListener.java

@@ -249,8 +249,45 @@ public class TaskStartTimeListener implements VariableListener<ApsSolution, Prod
                             }
                         }
                     }
-                    // 开始时间不小于最大的最小等待时间、不大于最小的最大等待时间
-                    toUpdateStartTime = lastMaxStartTime;
+                    // 对比设备已运行时间(包括排程中添加的作业)来修正时间
+                    LocalDateTime proStartTime = lastMaxStartTime;
+                    /*LocalDateTime proEndTime = proStartTime.plusMinutes(process.getProduceTime());
+                    List<EquipmentRunTime> equipmentRunTimes = process.getEquipment().getEquipmentRunTimes();
+                    List<EquipmentRunTime> allRunTimes = new ArrayList<>();
+                    if(equipmentRunTimes != null && equipmentRunTimes.size()>0){
+                        for (EquipmentRunTime equipmentRunTime : equipmentRunTimes) {
+                            EquipmentRunTime copy = new EquipmentRunTime();
+                            copy.setStartRunTime(equipmentRunTime.getStartRunTime());
+                            copy.setEndRunTime(equipmentRunTime.getEndRunTime());
+                            allRunTimes.add(copy);
+                        }
+                    }
+                    if(process.getEquipment().getProcessesList() != null && process.getEquipment().getProcessesList().size()>0){
+//                            System.out.println("process.getEquipment().getProcessesList():"+process.getEquipment().getProcessesList().size());
+                        for (ProductionProcesses productionProcesses : process.getEquipment().getProcessesList()) {
+                            if(productionProcesses.getStartTime() != null && productionProcesses.getEndTime() != null){
+                                EquipmentRunTime copy = new EquipmentRunTime();
+                                copy.setStartRunTime(productionProcesses.getStartTime());
+                                copy.setEndRunTime(productionProcesses.getEndTime());
+                                allRunTimes.add(copy);
+                            }
+                        }
+                    }
+                    // 按照开始时间排序
+                    allRunTimes.sort(Comparator.comparing(EquipmentRunTime::getStartRunTime));
+
+                    if(allRunTimes.size()>0){
+                        for (EquipmentRunTime equipmentRunTime : allRunTimes) {
+                            if(proStartTime.compareTo(equipmentRunTime.getEndRunTime())>0 || proEndTime.compareTo(equipmentRunTime.getStartRunTime())<0){
+                                continue;
+                            }else{
+                                proStartTime = equipmentRunTime.getEndRunTime().plusMinutes(1);
+                                proEndTime = proStartTime.plusMinutes(process.getProduceTime());
+                            }
+                        }
+                    }*/
+
+                    toUpdateStartTime = proStartTime;
                 }
                 // 非瓶颈工序,非瓶颈工序,默认前道工序只有一个
                 else{