Ver código fonte

taskassigning新模型

fangpy 6 meses atrás
pai
commit
a14906fe14

+ 96 - 0
rw-aps-server/src/main/java/com/rongwei/rwapsserver/aps/domain/taskassigning/ApsSolutionTa.java

@@ -0,0 +1,96 @@
+package com.rongwei.rwapsserver.aps.domain.taskassigning;
+
+import com.rongwei.rwapsserver.aps.domain.ApsAbstractPersistable;
+import com.rongwei.rwapsserver.aps.domain.Equipment;
+import com.rongwei.rwapsserver.aps.domain.ProductionProcesses;
+import lombok.*;
+import org.optaplanner.core.api.domain.solution.PlanningEntityCollectionProperty;
+import org.optaplanner.core.api.domain.solution.PlanningScore;
+import org.optaplanner.core.api.domain.solution.PlanningSolution;
+import org.optaplanner.core.api.domain.solution.ProblemFactCollectionProperty;
+import org.optaplanner.core.api.domain.valuerange.CountableValueRange;
+import org.optaplanner.core.api.domain.valuerange.ValueRangeFactory;
+import org.optaplanner.core.api.domain.valuerange.ValueRangeProvider;
+import org.optaplanner.core.api.score.buildin.hardmediumsoft.HardMediumSoftScore;
+
+import java.time.LocalDateTime;
+import java.time.temporal.ChronoUnit;
+import java.util.List;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+@NoArgsConstructor
+@PlanningSolution
+public class ApsSolutionTa extends ApsAbstractPersistable {
+
+    @Getter(value = AccessLevel.NONE)
+    private List<ProductionProcesses> processesList;
+
+    @Getter(value = AccessLevel.NONE)
+    private List<Equipment> equipmentList;
+
+    @Getter(value = AccessLevel.NONE)
+    private HardMediumSoftScore score;
+
+    private Long incrementUnitAmount;
+
+    public LocalDateTime startTime;
+    // 每一步骤最优规划实体
+    private List<ProductionProcesses> stepBestProcessesList;
+    // 是否初始结束
+    private boolean constructionHeuristicEnd;
+
+    public ApsSolutionTa(String id, List<ProductionProcesses> processesList, List<Equipment> equipmentList) {
+        super(id);
+        this.processesList = processesList;
+        this.equipmentList = equipmentList;
+    }
+
+    @ValueRangeProvider(id="taskRange")
+    @PlanningEntityCollectionProperty
+    public List<ProductionProcesses> getProcessesList() {
+        return processesList;
+    }
+
+    @ProblemFactCollectionProperty
+    public List<Equipment> getEquipmentList() {
+        return equipmentList;
+    }
+
+    @ValueRangeProvider(id="timeRange")
+    public CountableValueRange<LocalDateTime> getxRange(){
+        Long produceTimeTotal = 0L;
+        for (ProductionProcesses productionProcesses : processesList) {
+            produceTimeTotal = produceTimeTotal + productionProcesses.getProduceTime();
+        }
+        LocalDateTime fromTime = LocalDateTime.now();
+        if(startTime != null){
+            fromTime = startTime;
+        }
+        Long incrementUnit = this.incrementUnitAmount;
+        if(incrementUnit == null){
+            incrementUnit = 5L;
+        }
+
+        long sy = produceTimeTotal % incrementUnit;
+        if(sy>0){
+            produceTimeTotal = produceTimeTotal - sy;
+        }
+
+        System.out.println("startTime:"+startTime);
+        return ValueRangeFactory.createLocalDateTimeValueRange(fromTime,fromTime.plusMinutes(produceTimeTotal),incrementUnit, ChronoUnit.MINUTES);
+    }
+
+    @PlanningScore
+    public HardMediumSoftScore getScore() {
+        return score;
+    }
+
+    public Long getIncrementUnitAmount() {
+        return incrementUnitAmount;
+    }
+
+    public void setIncrementUnitAmount(Long incrementUnitAmount) {
+        this.incrementUnitAmount = incrementUnitAmount;
+    }
+}

+ 158 - 0
rw-aps-server/src/main/java/com/rongwei/rwapsserver/aps/domain/taskassigning/EquipmentTa.java

@@ -0,0 +1,158 @@
+package com.rongwei.rwapsserver.aps.domain.taskassigning;
+
+import com.rongwei.rwapsserver.aps.domain.EquipmentParameter;
+import com.rongwei.rwapsserver.aps.domain.EquipmentRunTime;
+import com.rongwei.rwapsserver.aps.domain.ProductionProcesses;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.optaplanner.core.api.domain.lookup.PlanningId;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 设备
+ */
+@NoArgsConstructor
+@Data
+//@PlanningEntity
+public class EquipmentTa implements Serializable {
+
+    private String id;
+
+    @PlanningId
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    /**
+     * 业务表订单工序ID
+     */
+    private String bsEquipmentId;
+
+    /**
+     * 设备名称
+     */
+    private String equipmentName;
+
+    /**
+     * 设备类型
+     */
+    private String equipmentType;
+
+    /**
+     * 设备优先级
+     */
+    private Integer eqOrder;
+
+    /**
+     * 设备所属工厂id
+     */
+    private String factoryid;
+
+    /**
+     * 设备所属工厂
+     */
+    private String factory;
+
+    /**
+     * 设备所属车间ID
+     */
+    private String workshopid;
+
+    /**
+     * 设备所属车间
+     */
+    private String workshopname;
+
+    /**
+     * 设备满负荷物料
+     */
+    private BigDecimal fullMaterial;
+
+    /**
+     * 单位时间生产产品的时间
+     */
+    private Integer unitProductTime;
+
+    /**
+     * 设备运行时间段
+     */
+    private List<EquipmentRunTime> equipmentRunTimes;
+
+    /**
+     * 设备参数实体类
+     */
+    private EquipmentParameter equipmentParameter;
+
+    /**
+     * 设备零件已运行时长
+     */
+    private Integer eqPartRunTime;
+
+    /**
+     * 当前设备最后连续生产标识
+     */
+    private String lastSeriesProduceMark;
+
+    /**
+     * 当前设备最后工序类型
+     */
+    private String lastProcessType;
+
+    /**
+     * 当前设备最后工序结束时间
+     */
+    private Date lastProcessEndTime;
+
+    /**
+     * 当前设备最后工序的下机收尾时间
+     */
+    private Integer lastProcessCutfinishmin;
+
+    /**
+     * 当前设备最后工序的单卷加工时间
+     */
+    private Integer onceprocessmin;
+
+    /**
+     * 当前设备最后工序的已立板总重量
+     */
+    private BigDecimal lastSerialLbWeight;
+
+    /**
+     * 当前设备最后工序的单卷重量
+     */
+    private BigDecimal lastSinglerollweight;
+
+    /**
+     * 关联设备,铸轧机关联的熔炼炉
+     */
+    private String equassociated;
+
+    /**
+     * 当前设备最后工序的轧机使用辊ID
+     */
+    private String lastZjgid;
+
+    /**
+     * 设备上排产的工序
+     */
+    private List<ProductionProcesses> processesList;
+
+    public EquipmentTa(String id, String equipmentType) {
+        this.id = id;
+        this.equipmentType = equipmentType;
+    }
+
+    @Override
+    public String toString() {
+        return getClass().getName().replaceAll(".*\\.", "") + "-" + id;
+    }
+}

Diferenças do arquivo suprimidas por serem muito extensas
+ 1099 - 0
rw-aps-server/src/main/java/com/rongwei/rwapsserver/aps/domain/taskassigning/ProductionProcessesTa.java