Преглед на файлове

调度冷轧连续排程优化、以及铸轧重叠bug修改

fangpy преди 5 месеца
родител
ревизия
df251f626a

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

@@ -552,10 +552,10 @@ public class TaskStartTimeListener implements VariableListener<ApsSolution, Prod
 
             toUpdateStartTime = proStartTime;
         }
-        if(process.getId().equals("705bff4021594d62acee248cf51b4ab0") && process.getEquipmentId().equals("0001be252874536843730b100153") && process.getDelay() == 0){
+        if(process.getId().equals("dbb381f7828f438abf0abe1443a1c6eb") && process.getEquipmentId().equals("0001be252874536843730b100180") && process.getDelay() == 0){
             int a = 0;
         }
-        if(process.getId().equals("753e5d7bb985465b92f40e24abc6b91c") || process.getId().equals("24a272fad1dd4fe2ac475dac44803bfe") || process.getId().equals("77594aa518a945c6be28c1bbd38d9cd4")){
+        if(process.getId().equals("dbb381f7828f438abf0abe1443a1c6eb") || process.getId().equals("24a272fad1dd4fe2ac475dac44803bfe") || process.getId().equals("77594aa518a945c6be28c1bbd38d9cd4")){
             int a = 0;
         }
         return toUpdateStartTime;

+ 46 - 10
rw-aps-server/src/main/java/com/rongwei/rwapsserver/aps/score/ApsConstraintProvider.java

@@ -1762,6 +1762,10 @@ public class ApsConstraintProvider implements ConstraintProvider {
                 }
             }
         }
+        if(processes.get(0).getId().equals("72b556a4ba2a4594bfc003b67a5e3e3b") && processes.get(0).getDelay() == 63
+                && processes.get(0).getEquipmentId().equals("0001be252874536843730b100163")){
+            int a = 1;
+        }
         //  检查合并工序是否超过容量
         for (Map.Entry<String,List<ProductionProcesses>> entry: ppMap.entrySet()) {
             List<ProductionProcesses> v = entry.getValue();
@@ -3061,7 +3065,11 @@ public class ApsConstraintProvider implements ConstraintProvider {
                     if(scheduleType == null || scheduleType.getConstraintMode() == null || "th".equals(scheduleType.getConstraintMode())){
                         qz = 1100;
                     }
-                    return ppMap.size()*qz;
+                    int zzdf = ppMap.size()*qz;
+                    if(hasMergeOldKeys != null && hasMergeOldKeys.size()>0){
+                        zzdf = zzdf + hasMergeOldKeys.size();
+                    }
+                    return zzdf;
                 })
                 .asConstraint("mergeTuihuo");
     }
@@ -3089,19 +3097,43 @@ public class ApsConstraintProvider implements ConstraintProvider {
 
                     Equipment equipment = processes.get(0).getEquipment();
                     List<EquipmentRunTime> equipmentRunTimes = equipment.getEquipmentRunTimes();
-                    List<ProductionProcesses> hasStartTimeProcess = processes.stream().filter(v -> v.getStartTime() != null).collect(Collectors.toList());
+                    List<ProductionProcesses> hasStartTimeProcess = new ArrayList<>();
+                    List<ProductionProcesses> hasStartTimeProcess1 = processes.stream().filter(v -> v.getStartTime() != null).collect(Collectors.toList());
+                    if(hasStartTimeProcess1 != null && hasStartTimeProcess1.size()>0){
+                        for (ProductionProcesses productionProcesses : hasStartTimeProcess1) {
+                            ProductionProcesses pp = new ProductionProcesses();
+                            pp.setId(productionProcesses.getId());
+                            pp.setStartTime(productionProcesses.getStartTime());
+                            pp.setEndTime(productionProcesses.getEndTime());
+                            pp.setSeriesProduceMark(productionProcesses.getSeriesProduceMark());
+                            pp.setProcessType(productionProcesses.getProcessType());
+                            pp.setBsProcessesId(productionProcesses.getBsProcessesId());
+                            pp.setConflictRoptions(productionProcesses.getConflictRoptions());
+                            hasStartTimeProcess.add(pp);
+                        }
+                    }
+
                     // 设备占用时间参与连续生产排程
                     if(equipment != null && equipment.getEquipmentRunTimes() != null && equipment.getEquipmentRunTimes().size()>0){
                         for (EquipmentRunTime equipmentRunTime : equipment.getEquipmentRunTimes()) {
                             if(equipmentRunTime.getOccupyType().equals("process")){
-                                ProductionProcesses pp = new ProductionProcesses();
-                                pp.setStartTime(equipmentRunTime.getStartRunTime());
-                                pp.setEndTime(equipmentRunTime.getEndRunTime());
-                                pp.setSeriesProduceMark(equipmentRunTime.getSeriesProduceMark());
-                                pp.setProcessType(equipmentRunTime.getProcessType());
-                                pp.setBsProcessesId(Arrays.asList(new String[]{"haspcprocess"}));
-                                pp.setConflictRoptions(new HashMap<>());
-                                hasStartTimeProcess.add(pp);
+                                List<ProductionProcesses> samestartTime = hasStartTimeProcess.stream().filter(v -> v.getStartTime().compareTo(equipmentRunTime.getStartRunTime()) == 0).collect(Collectors.toList());
+                                if(samestartTime != null && samestartTime.size()>0){
+                                    for (ProductionProcesses productionProcesses : samestartTime) {
+                                        if(productionProcesses.getEndTime().compareTo(equipmentRunTime.getEndRunTime())<0){
+                                            productionProcesses.setEndTime(equipmentRunTime.getEndRunTime());
+                                        }
+                                    }
+                                }else{
+                                    ProductionProcesses pp = new ProductionProcesses();
+                                    pp.setStartTime(equipmentRunTime.getStartRunTime());
+                                    pp.setEndTime(equipmentRunTime.getEndRunTime());
+                                    pp.setSeriesProduceMark(equipmentRunTime.getSeriesProduceMark());
+                                    pp.setProcessType(equipmentRunTime.getProcessType());
+                                    pp.setBsProcessesId(Arrays.asList(new String[]{"haspcprocess"}));
+                                    pp.setConflictRoptions(new HashMap<>());
+                                    hasStartTimeProcess.add(pp);
+                                }
                             }
                         }
                     }
@@ -3141,6 +3173,10 @@ public class ApsConstraintProvider implements ConstraintProvider {
                 .groupBy(ProductionProcesses::getEquipmentId,ConstraintCollectors.toList())
                 .filter((equipmentId,processes) -> {
                     if(processes != null && processes.size()>0){
+                        if(processes.get(0).getApsOverallConfig().getScheduleType() != null && processes.get(0).getApsOverallConfig().getScheduleType().getScheduleType() != null
+                                && !"dd".equals(processes.get(0).getApsOverallConfig().getScheduleType().getScheduleType())){
+                            return false;
+                        }
                         return true;
                     }else{
                         return false;

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

@@ -646,6 +646,9 @@ public class ApsServiceImpl implements ApsService {
                             // 合并后关联关系重置
                             if(!prepro.getNextProcessesIds().contains(thps.get(0).getId())){
                                 int i1 = prepro.getNextProcessesIds().indexOf(thps.get(i).getId());
+                                if(i1 == -1){
+                                    int aa = 0;
+                                }
                                 prepro.getNextProcessesIds().set(i1,thps.get(0).getId());
                             }
                             List<String> list = new ArrayList<>();

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

@@ -30,6 +30,7 @@ import java.math.BigDecimal;
 import java.time.Duration;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.Collectors;
@@ -365,6 +366,25 @@ public class ProductionScheduleServiceImpl implements ProductionScheduleService
                         ScoreExplanation<ApsSolution, HardSoftScore> explain = scoreManager.explain(solvedBalance1);
                         log.info(explain.toString());
                         log.info("**************排程评分分析***************");
+
+                        /*log.info("**************调整测试排程评分分析***************");
+                        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+                        for (ProductionProcesses productionProcesses : solvedBalance1.getProcessesList()) {
+                            if(productionProcesses.getId().equals("72b556a4ba2a4594bfc003b67a5e3e3b")){
+                                productionProcesses.setDelay(34);
+                                LocalDateTime parsedDateTime = LocalDateTime.parse("2025-03-25 19:00:00", formatter);
+                                productionProcesses.setStartTime(parsedDateTime);
+                                for (Equipment optionalProviderEquipment : productionProcesses.getOptionalProviderEquipments()) {
+                                    if(optionalProviderEquipment.getId().equals("0001be252874536843730b100163")){
+                                        productionProcesses.setEquipment(optionalProviderEquipment);
+                                    }
+                                }
+                            }
+                        }
+                        ScoreExplanation<ApsSolution, HardSoftScore> explain2 = scoreManager.explain(solvedBalance1);
+                        log.info(explain2.toString());
+                        log.info("**************调整测试排程评分分析***************");*/
+
                         productionScheduleRetVo.setScoreResult(scoreManager.explain(solvedBalance1).toString());
                         // 得分分析
                         softExplain(explain,solvedBalance1.getProcessesList());