diff --git a/modules/i3plus-pojo-model/src/main/java/cn/estsh/i3plus/pojo/model/wms/WmsLocateListModel.java b/modules/i3plus-pojo-model/src/main/java/cn/estsh/i3plus/pojo/model/wms/WmsLocateListModel.java new file mode 100644 index 0000000..00439af --- /dev/null +++ b/modules/i3plus-pojo-model/src/main/java/cn/estsh/i3plus/pojo/model/wms/WmsLocateListModel.java @@ -0,0 +1,23 @@ +package cn.estsh.i3plus.pojo.model.wms; + +import cn.estsh.i3plus.pojo.model.wms.engine.domain.WmsThreeDimenLocateModel; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * @Description 3D仓库-库位优化模型 + * @Reference + * @Author dragon + * @CreateDate 2020/6/1 14:22 + * @Modify + */ +@Data +public class WmsLocateListModel implements Serializable { + private static final long serialVersionUID = -2672721389336190491L; + + List unsolvedLocates; + + String organizeCode; +} diff --git a/modules/i3plus-pojo-model/src/main/java/cn/estsh/i3plus/pojo/model/wms/engine/domain/LocateAssign.java b/modules/i3plus-pojo-model/src/main/java/cn/estsh/i3plus/pojo/model/wms/engine/domain/LocateAssign.java new file mode 100644 index 0000000..32d4268 --- /dev/null +++ b/modules/i3plus-pojo-model/src/main/java/cn/estsh/i3plus/pojo/model/wms/engine/domain/LocateAssign.java @@ -0,0 +1,61 @@ +package cn.estsh.i3plus.pojo.model.wms.engine.domain; + +import lombok.Getter; +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.drools.ProblemFactCollectionProperty; +import org.optaplanner.core.api.domain.valuerange.ValueRangeProvider; +import org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScore; + +import java.util.List; + +@PlanningSolution +public class LocateAssign { + + private List wmsThreeDimenLocateModelList; + private List locationList; + /** + * 平均进出库次数,用于分数计算 + */ + @Getter + private int avgLocateFrequence; + + private HardSoftScore score; + + @ValueRangeProvider(id = "locationRange") + @ProblemFactCollectionProperty + public List getLocationList() { + return this.locationList; + } + + public void setLocationList(List locationList) { + this.locationList = locationList; + } + + @PlanningEntityCollectionProperty + public List getWmsThreeDimenLocateModelList() { + return this.wmsThreeDimenLocateModelList; + } + + public void setWmsThreeDimenLocateModelList(List wmsThreeDimenLocateModelList) { + this.wmsThreeDimenLocateModelList = wmsThreeDimenLocateModelList; + + long totalFrequence = 0; + + for (WmsThreeDimenLocateModel wmsThreeDimenLocateModel : wmsThreeDimenLocateModelList) { + totalFrequence += wmsThreeDimenLocateModel.getFrequency(); + } + // 计算平均进出库次数 + this.avgLocateFrequence = (int)(totalFrequence / wmsThreeDimenLocateModelList.size()); + } + + @PlanningScore + public HardSoftScore getScore() { + return this.score; + } + + public void setScore(HardSoftScore score) { + this.score = score; + } +} diff --git a/modules/i3plus-pojo-model/src/main/java/cn/estsh/i3plus/pojo/model/wms/engine/domain/LocateStrengthComparator.java b/modules/i3plus-pojo-model/src/main/java/cn/estsh/i3plus/pojo/model/wms/engine/domain/LocateStrengthComparator.java new file mode 100644 index 0000000..c1d191f --- /dev/null +++ b/modules/i3plus-pojo-model/src/main/java/cn/estsh/i3plus/pojo/model/wms/engine/domain/LocateStrengthComparator.java @@ -0,0 +1,11 @@ +package cn.estsh.i3plus.pojo.model.wms.engine.domain; + + +import java.util.Comparator; + +public class LocateStrengthComparator implements Comparator { + @Override + public int compare(WmsThreeDimenLocateModel o1, WmsThreeDimenLocateModel o2) { + return o1.getFrequency() - o2.getFrequency(); + } +} diff --git a/modules/i3plus-pojo-model/src/main/java/cn/estsh/i3plus/pojo/model/wms/engine/domain/LocationStrengthComparator.java b/modules/i3plus-pojo-model/src/main/java/cn/estsh/i3plus/pojo/model/wms/engine/domain/LocationStrengthComparator.java new file mode 100644 index 0000000..d097975 --- /dev/null +++ b/modules/i3plus-pojo-model/src/main/java/cn/estsh/i3plus/pojo/model/wms/engine/domain/LocationStrengthComparator.java @@ -0,0 +1,11 @@ +package cn.estsh.i3plus.pojo.model.wms.engine.domain; + + +import java.util.Comparator; + +public class LocationStrengthComparator implements Comparator { + @Override + public int compare(Integer seq1, Integer seq2) { + return seq1 - seq2; + } +} diff --git a/modules/i3plus-pojo-model/src/main/java/cn/estsh/i3plus/pojo/model/wms/engine/domain/WmsThreeDimenLocateModel.java b/modules/i3plus-pojo-model/src/main/java/cn/estsh/i3plus/pojo/model/wms/engine/domain/WmsThreeDimenLocateModel.java new file mode 100644 index 0000000..8167e1f --- /dev/null +++ b/modules/i3plus-pojo-model/src/main/java/cn/estsh/i3plus/pojo/model/wms/engine/domain/WmsThreeDimenLocateModel.java @@ -0,0 +1,114 @@ +package cn.estsh.i3plus.pojo.model.wms.engine.domain; + +import lombok.Getter; +import lombok.Setter; +import org.optaplanner.core.api.domain.entity.PlanningEntity; +import org.optaplanner.core.api.domain.lookup.PlanningId; +import org.optaplanner.core.api.domain.variable.PlanningVariable; + + +/** + * 库位 + */ +@PlanningEntity(difficultyComparatorClass = LocateStrengthComparator.class) +public class WmsThreeDimenLocateModel { + /** + * 工厂代码 + */ + @Getter + @Setter + private String organizeCode; + /** + * 仓库编码 + */ + @Getter + @Setter + private String whNo; + /** + * 存储区编码 + */ + @Getter + @Setter + private String zoneNo; + /** + * 家具编码 + */ + @Getter + @Setter + private String furnitureNo; + /** + * 库位代码 + */ + @Getter + @Setter + @PlanningId + private String locateNo; + /** + * X + */ + @Getter + @Setter + private int x; + + /** + * X + */ + @Getter + @Setter + private int y; + + /** + * X + */ + @Getter + @Setter + private int z; + /* + 库位在指定时间内的移动频率 + */ + @Getter + @Setter + private int frequency; + /** + * 库位的原始坐标 + */ + @Getter + @Setter + private int originSeq; + /** + * 库位当前的坐标,此处只用了一纬坐标,二维坐标需要映射到一纬空间内 + */ + private int destSeq; + + + public WmsThreeDimenLocateModel() { + } + + //3D仓库-库位移动频率热力图 + public WmsThreeDimenLocateModel(String organizeCode, String whNo, String zoneNo, + String locateNo, Integer seq, Long frequency, String furnitureNo, + Integer x, Integer y, Integer z) { + this.organizeCode = organizeCode; + this.whNo = whNo; + this.zoneNo = zoneNo; + this.locateNo = locateNo; + this.originSeq = seq; + this.destSeq = seq; + this.frequency = Integer.parseInt(frequency.toString()); + this.furnitureNo = furnitureNo; + this.x = x; + this.y = y; + this.z = z; + } + + @PlanningVariable(valueRangeProviderRefs = {"locationRange"}, + strengthComparatorClass = LocationStrengthComparator.class) + public Integer getDestSeq() { + return this.destSeq; + } + + public void setDestSeq(Integer destSeq) { + this.destSeq = destSeq; + } + +} diff --git a/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/sqlpack/WmsHqlPack.java b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/sqlpack/WmsHqlPack.java index bb526fb..4a0f756 100644 --- a/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/sqlpack/WmsHqlPack.java +++ b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/sqlpack/WmsHqlPack.java @@ -564,9 +564,8 @@ public class WmsHqlPack { DdlPreparedPack.getInPack(StringUtils.join(new ArrayList(Arrays.asList(wmsLocate.getZoneNo().split(","))), ","), "zoneNo", result); } if (wmsLocate.getLocateNoArr() != null) { - DdlPreparedPack.getInPack(StringUtils.join(wmsLocate.getLocateNoArr()), "locateNo", result); + DdlPreparedPack.getInPackArray(wmsLocate.getLocateNoArr(), "locateNo", result); } - // DdlPreparedPack.getStringEqualPack(wmsLocate.getZoneNo(), "zoneNo", result); DdlPreparedPack.getNumEqualPack(wmsLocate.getStatus(), "status", result);