diff --git a/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/enumutil/MesEnumUtil.java b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/enumutil/MesEnumUtil.java index 754960f..161c474 100644 --- a/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/enumutil/MesEnumUtil.java +++ b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/enumutil/MesEnumUtil.java @@ -1919,7 +1919,8 @@ public class MesEnumUtil { NEW_SCATTER_BOM(460, "scatterBomCfgExcelService", "新散件BOM导入"), ENCODE_RULE_MAP(470, "mesEncodeRuleMapExcelService", "编码规则映射导入"), SCATTER_PART_PROD_CFG(480, "scatterPartProdCfgExcelService", "散件零件生产配置"), - MES_WORK_ORDER_PAINT_ZS(490, "planZSOrderExcelService", "生产工单-注塑"); + MES_WORK_ORDER_PAINT_ZS(490, "planZSOrderExcelService", "生产工单-注塑"), + MES_KP_DATA(500, "kpDataExcelService", "物料关键数据关系"); private int value; private String service; @@ -5805,6 +5806,15 @@ public class MesEnumUtil { } return tmp; } + public static String codeOfValue(String code) { + String tmp = null; + for (int i = 0; i < values().length; i++) { + if (values()[i].code.equals(code)) { + tmp = values()[i].value; + } + } + return tmp; + } } /** diff --git a/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/enumutil/WmsEnumUtil.java b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/enumutil/WmsEnumUtil.java index c801a52..b911540 100644 --- a/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/enumutil/WmsEnumUtil.java +++ b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/enumutil/WmsEnumUtil.java @@ -8274,11 +8274,12 @@ public class WmsEnumUtil { /** - * 自动入库任务类型 + * 自动入库任务 */ @JsonFormat(shape = JsonFormat.Shape.OBJECT) public enum AUTO_FORK_TASK_TYPE { - MOVE(10, "W05", "W05"); + START(10, "start", "start"), + END(20, "end", "end"); private int value; private String code; @@ -8326,4 +8327,51 @@ public class WmsEnumUtil { return valueOf(val); } } + + + /** + * 发运看板状态 + */ + @JsonFormat(shape = JsonFormat.Shape.OBJECT) + public enum AUTO_FORK_TASK_STATUS { + CREATE(10, "新建"), + PROCESSING(20, "处理中"), + COMPLETE(30, "已完成"), + ERROR(40, "处理异常"); + + private int value; + private String description; + + AUTO_FORK_TASK_STATUS(int value, String description) { + this.value = value; + this.description = description; + } + + public int getValue() { + return value; + } + + public String getDescription() { + return description; + } + + public static AUTO_FORK_TASK_STATUS codeOf(int value) { + for (int i = 0; i < values().length; i++) { + if (values()[i].value == value) { + return values()[i]; + } + } + return null; + } + + public static String valueOf(int val) { + String tmp = null; + for (int i = 0; i < values().length; i++) { + if (values()[i].value == val) { + tmp = values()[i].description; + } + } + return tmp; + } + } } diff --git a/modules/i3plus-pojo-mes/src/main/java/cn/estsh/i3plus/pojo/mes/bean/MesKpData.java b/modules/i3plus-pojo-mes/src/main/java/cn/estsh/i3plus/pojo/mes/bean/MesKpData.java index 5dd8c97..752cdd2 100644 --- a/modules/i3plus-pojo-mes/src/main/java/cn/estsh/i3plus/pojo/mes/bean/MesKpData.java +++ b/modules/i3plus-pojo-mes/src/main/java/cn/estsh/i3plus/pojo/mes/bean/MesKpData.java @@ -55,6 +55,10 @@ public class MesKpData extends BaseBean implements Serializable { @ApiParam("数据下限") private Double lowerLimit; + @Column(name = "WORK_CENTER_CODE") + @ApiParam("工作中心代码") + private String workCenterCode; + @Column(name = "WORK_CELL_CODE") @ApiParam("工位") private String workCellCode; diff --git a/modules/i3plus-pojo-mes/src/main/java/cn/estsh/i3plus/pojo/mes/bean/MesPartCheck.java b/modules/i3plus-pojo-mes/src/main/java/cn/estsh/i3plus/pojo/mes/bean/MesPartCheck.java index 76ee1d5..8cbe1c3 100644 --- a/modules/i3plus-pojo-mes/src/main/java/cn/estsh/i3plus/pojo/mes/bean/MesPartCheck.java +++ b/modules/i3plus-pojo-mes/src/main/java/cn/estsh/i3plus/pojo/mes/bean/MesPartCheck.java @@ -65,7 +65,7 @@ public class MesPartCheck extends BaseBean implements Serializable { @ApiParam("对象名称") private String objectCodeName; - @Transient + @Column(name = "WORK_CENTER_CODE") @ApiParam("产线") private String workCenterCode; } diff --git a/modules/i3plus-pojo-model/pom.xml b/modules/i3plus-pojo-model/pom.xml index d65e031..8171a4d 100644 --- a/modules/i3plus-pojo-model/pom.xml +++ b/modules/i3plus-pojo-model/pom.xml @@ -59,6 +59,19 @@ i3plus-pojo-lac + + + org.optaplanner + optaplanner-core + 7.36.0.Final + + + + org.optaplanner + optaplanner-persistence-jpa + 7.36.0.Final + + 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/pom.xml b/modules/i3plus-pojo-wms/pom.xml index b2eedd4..d221913 100644 --- a/modules/i3plus-pojo-wms/pom.xml +++ b/modules/i3plus-pojo-wms/pom.xml @@ -22,6 +22,20 @@ + + + + org.optaplanner + optaplanner-core + 7.36.0.Final + + + + org.optaplanner + optaplanner-persistence-jpa + 7.36.0.Final + + diff --git a/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/WmsAutoForkCallBackDetails.java b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/WmsAutoForkCallBackDetails.java new file mode 100644 index 0000000..062d2eb --- /dev/null +++ b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/WmsAutoForkCallBackDetails.java @@ -0,0 +1,103 @@ +package cn.estsh.i3plus.pojo.wms.bean; + +import cn.estsh.i3plus.pojo.base.annotation.DynamicField; +import cn.estsh.i3plus.pojo.base.bean.BaseBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiParam; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Index; +import javax.persistence.Table; + + +/** + * @Description : 北京海纳川任务明细 + * @Reference : + * @Author : puxiao.liao + * @CreateDate : 2018-11-17 14:50 + * @Modify: + **/ +@Data +@Entity +@Table(name = "WMS_AUTO_FORK_CALL_BACK_DETAILS", indexes = { + @Index(columnList = "TASK_CODE") +}) +@DynamicInsert +@DynamicUpdate +@EqualsAndHashCode(callSuper = true) +@Api(value = "无人叉车任务明细", description = "喜德无人叉车任务明细") +public class WmsAutoForkCallBackDetails extends BaseBean { + private static final long serialVersionUID = -8103992000562208799L; + + @Column(name = "REQ_CODE") + @ApiParam(value = "请求编号") + @DynamicField(webFieldType = CommonEnumUtil.FIELD_TYPE.TEXT) + private String reqCode; + + + @Column(name = "REQ_TIME") + @ApiParam(value = "请求时间") + @DynamicField(webFieldType = CommonEnumUtil.FIELD_TYPE.TEXT) + private String reqTime; + + @Column(name = "CLIENT_CODE") + @ApiParam(value = "客服端编号") + @DynamicField(webFieldType = CommonEnumUtil.FIELD_TYPE.TEXT) + private String clientCode; + + @Column(name = "TOKEN_CODE") + @ApiParam(value = "令牌号") + @DynamicField(webFieldType = CommonEnumUtil.FIELD_TYPE.TEXT) + private String tokenCode; + + @Column(name = "INTERFACE_NAME") + @ApiParam(value = "接口名称") + @DynamicField(webFieldType = CommonEnumUtil.FIELD_TYPE.TEXT) + private String interfaceName; + + @Column(name = "METHOD") + @ApiParam(value = "方法名称") + @DynamicField(webFieldType = CommonEnumUtil.FIELD_TYPE.TEXT) + private String method; + + @Column(name = "TASK_CODE") + @ApiParam(value = "任务单号") + @DynamicField(webFieldType = CommonEnumUtil.FIELD_TYPE.TEXT) + private String taskCode; + + @Column(name = "WB_CODE") + @ApiParam(value = "工作为") + @DynamicField(webFieldType = CommonEnumUtil.FIELD_TYPE.TEXT) + private String wbCode; + + @Column(name = "POD_CODE") + @ApiParam(value = "货架编号") + @DynamicField(webFieldType = CommonEnumUtil.FIELD_TYPE.TEXT) + private String podCode; + + @Column(name = "CURRENT_POSITION_CODE") + @ApiParam(value = "子任务的位置编号") + @DynamicField(webFieldType = CommonEnumUtil.FIELD_TYPE.TEXT) + private String currentPositionCode; + + @Column(name = "ROBOT_CODE") + @ApiParam(value = "执行任务的VGA编号") + @DynamicField(webFieldType = CommonEnumUtil.FIELD_TYPE.TEXT) + private String robotCode; + + //10=新建,20=已处理,30=处理出错 + @Column(name = "STATUS", nullable = false) + @ApiParam("处理标准") + public Integer status; + + @Column(name = "REMARK", nullable = false) + @ApiParam("备注") + public String remark; + +} diff --git a/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/WmsAutoTaskLog.java b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/WmsAutoTaskLog.java index 10ccc90..153e954 100644 --- a/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/WmsAutoTaskLog.java +++ b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/WmsAutoTaskLog.java @@ -37,6 +37,14 @@ public class WmsAutoTaskLog extends BaseBean { @ApiParam("业务类型") public String busiType; + @Column(name = "STRATEGY_NO") + @ApiParam("策略代码") + public String strategyNo; + + @Column(name = "STRATEGY_ACTION") + @ApiParam("策略动作") + public String strategyAction; + @Column(name = "ERROR_MSG") @ApiParam("错误信息") public String errorMsg; diff --git a/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/modelbean/WmsAutoTaskModel.java b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/modelbean/WmsAutoTaskModel.java index 9ace250..bbfaa61 100644 --- a/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/modelbean/WmsAutoTaskModel.java +++ b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/modelbean/WmsAutoTaskModel.java @@ -25,6 +25,9 @@ public class WmsAutoTaskModel { @ApiParam("存储区") private String zoneNo; + @ApiParam("单据号") + private String orderNo; + @ApiParam("物料集合") private List partList; @@ -37,6 +40,9 @@ public class WmsAutoTaskModel { @ApiParam("锁定库位") private String lockLocacte; + @ApiParam("锁定源库位") + private String srcLockLocacte; + @ApiParam("方向") private Integer direction; @@ -46,9 +52,27 @@ public class WmsAutoTaskModel { @ApiParam("锁定料车") private String lockCar; - @ApiParam("物料对应的明细集合") - Map partNoDetailsList; + @ApiParam("预存锁定料车") + private String prestoreLockCar; + + @ApiParam("物料对应的单据明细集合") + private Map partNoDetailsList; + + @ApiParam("锁定物料对应的条码") + private Map> partNoGroupListMap; @ApiParam("锁定条码") - HashMap> stringListHashMap; + private List lockStockSnList; + + @ApiParam("任务生成数量") + private Double taskQty; + + @ApiParam("返回错误信息") + public String errorMsg; + + @ApiParam("策略代码") + public String strategyNo; + + @ApiParam("策略动作") + public String strategyAction; } diff --git a/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/repository/WmsAutoForkCallBackDetailsRepository.java b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/repository/WmsAutoForkCallBackDetailsRepository.java new file mode 100644 index 0000000..0123583 --- /dev/null +++ b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/repository/WmsAutoForkCallBackDetailsRepository.java @@ -0,0 +1,17 @@ +package cn.estsh.i3plus.pojo.wms.repository; + +import cn.estsh.i3plus.pojo.base.jpa.dao.BaseRepository; +import cn.estsh.i3plus.pojo.wms.bean.WmsAutoForkCallBackDetails; +import org.springframework.stereotype.Repository; + + +/** + * @Description :北京海纳川回调任务明细 + * @Reference : + * @Author : puxiao.lioa + * @CreateDate : 2018-11-13 10:19 + * @Modify: + **/ +@Repository +public interface WmsAutoForkCallBackDetailsRepository extends BaseRepository { +} 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); diff --git a/sonar-project.properties b/sonar-project.properties index 55e4e84..932bdd9 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -6,7 +6,7 @@ sonar.projectKey=i3plus.pojo:i3plus-pojo # defaults to project key sonar.projectName=i3plus-pojo # defaults to 'not provided' -sonar.projectVersion=1.0-DEV-SNAPSHOT +sonar.projectVersion=1.0-TEST-SNAPSHOT # Path is relative to the sonar-project.properties file. Defaults to . #sonar.sources=./