فهرست منبع

退火合并优化

fangpengyuan 2 ماه پیش
والد
کامیت
2943c44886

+ 60 - 18
rw-aps-server/src/main/java/com/rongwei/rwapsserver/aps/domain/ProductionProcesses.java

@@ -131,6 +131,11 @@ public class ProductionProcesses implements Serializable {
      */
     private Integer delay;
 
+    /**
+     * 延迟分钟数据(步长5分钟)
+     */
+    private List<Integer> thFzdDelays;
+
     private Step previousStep;
 
     /**
@@ -468,28 +473,45 @@ public class ProductionProcesses implements Serializable {
         return optionalProviderEquipments;
     }
 
-    @ValueRangeProvider
+    /*@ValueRangeProvider
     @JsonIgnore
     public CountableValueRange<Integer> getDelayRange() {
-        /*if(this.getPreviousProcesses() != null && this.getPreviousProcesses().size()>0){
-            Integer maxWaitTime = null;
-            for (ProductionProcesses previousProcess : this.getPreviousProcesses()) {
-                if(previousProcess.getMaxWaitTime() != null && previousProcess.getMaxWaitTime()>0){
-                    if(maxWaitTime == null){
-                        maxWaitTime = previousProcess.getMaxWaitTime();
-                    }else{
-                        if(previousProcess.getMaxWaitTime() > maxWaitTime){
-                            maxWaitTime = previousProcess.getMaxWaitTime();
-                        }
-                    }
+        Integer maxDelay = 1;
+        if(!this.ifLock){
+            if(this.processType.equals("成退") || this.processType.equals("中退") || this.processType.equals("小卷成退")){
+                if("dd".equals(apsOverallConfig.getScheduleType().getScheduleType())){
+                    maxDelay = 500;
+                }else{
+                    maxDelay = 800;
                 }
+            }else if(this.processType.equals("铸轧")){
+                maxDelay = 5000;
+            } else if (this.processType.equals("冷轧")) {
+                if("dd".equals(apsOverallConfig.getScheduleType().getScheduleType())){
+                    maxDelay = 800;
+                }else{
+                    maxDelay = 2000;
+                }
+            }else if (this.processType.equals("箔轧")) {
+                if("dd".equals(apsOverallConfig.getScheduleType().getScheduleType())){
+                    maxDelay = 800;
+                }else{
+                    maxDelay = 2000;
+                }
+            } else{
+                maxDelay = 500;
             }
-            if(maxWaitTime != null && maxWaitTime>0){
-                int maxrange = (maxWaitTime / 20) + 1;
-                return ValueRangeFactory.createIntValueRange(0, maxrange);
-            }
-        }*/
+        }
+        return ValueRangeFactory.createIntValueRange(0, maxDelay);
+    }*/
+
+    @ValueRangeProvider
+    @JsonIgnore
+    public List<Integer> getDelayRange() {
+        List<Integer> delays = new ArrayList<>();
+        delays.add(0);
         Integer maxDelay = 1;
+        Integer bc = 1;
         if(!this.ifLock){
             if(this.processType.equals("成退") || this.processType.equals("中退") || this.processType.equals("小卷成退")){
                 if("dd".equals(apsOverallConfig.getScheduleType().getScheduleType())){
@@ -497,25 +519,37 @@ public class ProductionProcesses implements Serializable {
                 }else{
                     maxDelay = 800;
                 }
+                bc = 60;
             }else if(this.processType.equals("铸轧")){
                 maxDelay = 5000;
+                bc = 10;
             } else if (this.processType.equals("冷轧")) {
                 if("dd".equals(apsOverallConfig.getScheduleType().getScheduleType())){
                     maxDelay = 800;
                 }else{
                     maxDelay = 2000;
                 }
+                bc = 10;
             }else if (this.processType.equals("箔轧")) {
                 if("dd".equals(apsOverallConfig.getScheduleType().getScheduleType())){
                     maxDelay = 800;
                 }else{
                     maxDelay = 2000;
                 }
+                bc = 10;
             } else{
                 maxDelay = 500;
+                bc = 10;
             }
         }
-        return ValueRangeFactory.createIntValueRange(0, maxDelay);
+
+        for (Integer i = 1; i <= maxDelay; i++) {
+            delays.add(i*bc);
+        }
+        if(thFzdDelays != null && thFzdDelays.size()>0){
+            delays.addAll(thFzdDelays);
+        }
+        return delays;
     }
 
     public void setOptionalProviderEquipments(List<Equipment> optionalProviderEquipments) {
@@ -1203,6 +1237,14 @@ public class ProductionProcesses implements Serializable {
         this.lastHistoryEquipmentId = lastHistoryEquipmentId;
     }
 
+    public List<Integer> getThFzdDelays() {
+        return thFzdDelays;
+    }
+
+    public void setThFzdDelays(List<Integer> thFzdDelays) {
+        this.thFzdDelays = thFzdDelays;
+    }
+
     public String getSeriSort(){
         String sortStr = this.getId();
         if(this.getStartTime() != null){

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

@@ -90,7 +90,7 @@ public class TaskStartTimeListener implements VariableListener<ApsSolution, Prod
                 LocalDateTime startDateTime = startTimeNewSet(process,scoreDirector);
 
                 // 随机延时时间处理
-                if(process.getProcessType().equals("成退") || process.getProcessType().equals("中退") || process.getProcessType().equals("小卷成退")){
+                /*if(process.getProcessType().equals("成退") || process.getProcessType().equals("中退") || process.getProcessType().equals("小卷成退")){
                     startDateTime = startDateTime.plusMinutes(process.getDelay() * 60);
                 } else if (process.getProcessType().equals("铸轧")) {
                     startDateTime = startDateTime.plusMinutes(process.getDelay() * 10);
@@ -98,7 +98,13 @@ public class TaskStartTimeListener implements VariableListener<ApsSolution, Prod
                     startDateTime = startDateTime.plusMinutes(process.getDelay() * 10);
                 } else{
                     startDateTime = startDateTime.plusMinutes(process.getDelay() * 10);
+                }*/
+                if("6a6b5a45723b4d9694c1ac2bff48aab9".equals(process.getId())){
+                    int aa = 1;
                 }
+
+                startDateTime = startDateTime.plusMinutes(process.getDelay());
+
                 scoreDirector.beforeVariableChanged(process, "startTime");
                 process.setStartTime(startDateTime);
                 scoreDirector.afterVariableChanged(process, "startTime");
@@ -281,12 +287,14 @@ public class TaskStartTimeListener implements VariableListener<ApsSolution, Prod
             if(proStartTime.compareTo(process.getApsOverallConfig().getStartTime())<0){
                 proStartTime = process.getApsOverallConfig().getStartTime();
             }
-            if(process.getProcessType().equals("成退") || process.getProcessType().equals("中退") || process.getProcessType().equals("小卷成退")){
-                proStartTime = proStartTime.minusSeconds(proStartTime.getSecond()) // 减去当前秒数
-                        .minusNanos(proStartTime.getNano()) // 减去当前纳秒数
-                        .plusMinutes(-proStartTime.getMinute() % 60) // 减去当前分钟数的余数,向下调整到最近的10的倍数
-                        .plusMinutes(60);
-            }
+            /*if(process.getProcessType().equals("成退") || process.getProcessType().equals("中退") || process.getProcessType().equals("小卷成退")){
+                if(proStartTime.getSecond()>0 || proStartTime.getMinute()>0){
+                    proStartTime = proStartTime.minusSeconds(proStartTime.getSecond()) // 减去当前秒数
+                            .minusNanos(proStartTime.getNano()) // 减去当前纳秒数
+                            .plusMinutes(-proStartTime.getMinute() % 60) // 减去当前分钟数的余数,向下调整到最近的10的倍数
+                            .plusMinutes(60);
+                }
+            }*/
 
             LocalDateTime proEndTime = proStartTime.plusMinutes(process.getProduceTime());
             // 当前工序最大开始时间、结束时间

+ 5 - 1
rw-aps-server/src/main/java/com/rongwei/rwapsserver/aps/score/ApsConstraintProvider.java

@@ -1369,7 +1369,11 @@ public class ApsConstraintProvider implements ConstraintProvider {
         if(processes != null && processes.size()>0){
             equipment = processes.get(0).getEquipment();
         }
-        if(equipment.getId().equals("7b2ffd8c722d4d5a85b55fc32de99366")){
+        if(equipment.getId().equals("31a679cbadf4434b8e5920afc8838f0a")){
+            List<ProductionProcesses> p1 = processes.stream().filter(v -> v.getId().equals("6a6b5a45723b4d9694c1ac2bff48aab9")).collect(Collectors.toList());
+            if(p1 != null && p1.size()>0 && p1.get(0).getDelay() == 426){
+                int a12 = 12;
+            }
             int a = 2;
         }
         // 设备承重

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

@@ -1843,7 +1843,7 @@ public class ProductionScheduleServiceImpl implements ProductionScheduleService
         ).collect(Collectors.toList());
         productionScheduleVo.setProcesses(collect);*/
 
-        log.info("*************** 退火调度排程开始:"+productionScheduleVo.getProductionScheduleId()+" *******************");
+        log.info("*************** 退火调度排程开始(老模型):"+productionScheduleVo.getProductionScheduleId()+" *******************");
         if(productionScheduleVo.getScheduleType().getScheduleType() == null){
             productionScheduleVo.getScheduleType().setScheduleType("default");
         }