Quellcode durchsuchen

APS平台生产排程规划算法

fangpy vor 1 Jahr
Ursprung
Commit
63fc3e4f35

+ 39 - 0
rw-aps-server/src/main/java/com/rongwei/rwapsserver/aps/domain/ProductionProcesses.java

@@ -4,6 +4,7 @@ import org.optaplanner.core.api.domain.entity.PlanningEntity;
 import org.optaplanner.core.api.domain.variable.PlanningVariable;
 
 import java.time.LocalDateTime;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -87,11 +88,19 @@ public class ProductionProcesses extends ApsAbstractPersistable{
      * 上一个工步
      */
     private List<ProductionProcesses> previousProcesses;
+    /**
+     * 上一个工步ID
+     */
+    private List<Long> previousProcessesIds;
 
     /**
      * 下一个工步
      */
     private List<ProductionProcesses> nextProcesses;
+    /**
+     * 下一个工步ID
+     */
+    private List<Long> nextProcessesIds;
 
     public String getEquipmentType() {
         return equipmentType;
@@ -155,6 +164,13 @@ public class ProductionProcesses extends ApsAbstractPersistable{
 
     public void setPreviousProcesses(List<ProductionProcesses> previousProcesses) {
         this.previousProcesses = previousProcesses;
+        if(previousProcesses != null){
+            List<Long> ids = new ArrayList<>();
+            for (ProductionProcesses previousProcess : previousProcesses) {
+                ids.add(previousProcess.getId());
+            }
+            this.previousProcessesIds = ids;
+        }
     }
 
     public List<ProductionProcesses> getNextProcesses() {
@@ -163,6 +179,13 @@ public class ProductionProcesses extends ApsAbstractPersistable{
 
     public void setNextProcesses(List<ProductionProcesses> nextProcesses) {
         this.nextProcesses = nextProcesses;
+        if(nextProcesses != null){
+            List<Long> ids = new ArrayList<>();
+            for (ProductionProcesses nextProcesse : nextProcesses) {
+                ids.add(nextProcesse.getId());
+            }
+            this.nextProcessesIds = ids;
+        }
     }
 
     public List<ProduceOrder> getProduceOrder() {
@@ -212,4 +235,20 @@ public class ProductionProcesses extends ApsAbstractPersistable{
     public void setMergeProcessMark(String mergeProcessMark) {
         this.mergeProcessMark = mergeProcessMark;
     }
+
+    public List<Long> getPreviousProcessesIds() {
+        return previousProcessesIds;
+    }
+
+    public void setPreviousProcessesIds(List<Long> previousProcessesIds) {
+        this.previousProcessesIds = previousProcessesIds;
+    }
+
+    public List<Long> getNextProcessesIds() {
+        return nextProcessesIds;
+    }
+
+    public void setNextProcessesIds(List<Long> nextProcessesIds) {
+        this.nextProcessesIds = nextProcessesIds;
+    }
 }

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

@@ -42,6 +42,13 @@ public class ProductionScheduleServiceImpl implements ProductionScheduleService
         System.out.println(scoreManager.explain(solvedBalance));
         System.out.println("*****************************");
         productionScheduleRetVo.setScoreResult(scoreManager.explain(solvedBalance).toString());
+
+        // 循环引用ProductionProcesses置空
+        for (ProductionProcesses productionProcesses : solvedBalance.getProcessesList()) {
+            productionProcesses.setPreviousProcesses(null);
+            productionProcesses.setNextProcesses(null);
+        }
+        productionScheduleRetVo.setProcesses(solvedBalance.getProcessesList());
         return productionScheduleRetVo;
     }
 
@@ -70,7 +77,7 @@ public class ProductionScheduleServiceImpl implements ProductionScheduleService
         List<ProductionProcesses> processes = new ArrayList<>();
         // 订单初始化
         ProduceOrder produceOrder1 = new ProduceOrder("order1","订单1", DateUtil.parseDateTime("2024-02-29 21:52:12"));
-        ProduceOrder produceOrder2 = new ProduceOrder("order2","订单2", DateUtil.parseDateTime("2024-02-29 19:20:12"));
+        ProduceOrder produceOrder2 = new ProduceOrder("order2","订单2", DateUtil.parseDateTime("2024-02-29 23:20:12"));
         ProductionProcesses p1 = new ProductionProcesses(1,"均热炉", Arrays.asList(new ProduceOrder[]{produceOrder1}),10);
         ProductionProcesses p2 = new ProductionProcesses(2,"卧式分切机",Arrays.asList(new ProduceOrder[]{produceOrder1}),12);
         ProductionProcesses p6 = new ProductionProcesses(6,"氮气保护退火炉",Arrays.asList(new ProduceOrder[]{produceOrder1,produceOrder2}),72);

+ 8 - 0
rw-aps-server/src/main/java/com/rongwei/rwapsserver/aps/vo/ProductionScheduleRetVo.java

@@ -1,10 +1,18 @@
 package com.rongwei.rwapsserver.aps.vo;
 
+import com.rongwei.rwapsserver.aps.domain.ProductionProcesses;
 import lombok.Data;
 
+import java.util.List;
+
 @Data
 public class ProductionScheduleRetVo {
 
     private String scoreResult;
 
+    /**
+     * 排程后的生产工序集合
+     */
+    private List<ProductionProcesses> processes;
+
 }