3D仓库规则引擎优化

yun-zuoyi
许心洁 5 years ago
parent cf1020d82f
commit 6cd70eb695

@ -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<WmsThreeDimenLocateModel> unsolvedLocates;
String organizeCode;
}

@ -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<WmsThreeDimenLocateModel> wmsThreeDimenLocateModelList;
private List<Integer> locationList;
/**
*
*/
@Getter
private int avgLocateFrequence;
private HardSoftScore score;
@ValueRangeProvider(id = "locationRange")
@ProblemFactCollectionProperty
public List<Integer> getLocationList() {
return this.locationList;
}
public void setLocationList(List<Integer> locationList) {
this.locationList = locationList;
}
@PlanningEntityCollectionProperty
public List<WmsThreeDimenLocateModel> getWmsThreeDimenLocateModelList() {
return this.wmsThreeDimenLocateModelList;
}
public void setWmsThreeDimenLocateModelList(List<WmsThreeDimenLocateModel> 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;
}
}

@ -0,0 +1,11 @@
package cn.estsh.i3plus.pojo.model.wms.engine.domain;
import java.util.Comparator;
public class LocateStrengthComparator implements Comparator<WmsThreeDimenLocateModel> {
@Override
public int compare(WmsThreeDimenLocateModel o1, WmsThreeDimenLocateModel o2) {
return o1.getFrequency() - o2.getFrequency();
}
}

@ -0,0 +1,11 @@
package cn.estsh.i3plus.pojo.model.wms.engine.domain;
import java.util.Comparator;
public class LocationStrengthComparator implements Comparator<Integer> {
@Override
public int compare(Integer seq1, Integer seq2) {
return seq1 - seq2;
}
}

@ -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;
}
}

@ -564,9 +564,8 @@ public class WmsHqlPack {
DdlPreparedPack.getInPack(StringUtils.join(new ArrayList<String>(Arrays.asList(wmsLocate.getZoneNo().split(","))), ","), "zoneNo", result); DdlPreparedPack.getInPack(StringUtils.join(new ArrayList<String>(Arrays.asList(wmsLocate.getZoneNo().split(","))), ","), "zoneNo", result);
} }
if (wmsLocate.getLocateNoArr() != null) { 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.getStringEqualPack(wmsLocate.getZoneNo(), "zoneNo", result);
DdlPreparedPack.getNumEqualPack(wmsLocate.getStatus(), "status", result); DdlPreparedPack.getNumEqualPack(wmsLocate.getStatus(), "status", result);

Loading…
Cancel
Save