diff --git a/modules/i3plus-pojo-aps/src/main/java/cn/estsh/i3plus/pojo/aps/bean/Material.java b/modules/i3plus-pojo-aps/src/main/java/cn/estsh/i3plus/pojo/aps/bean/Material.java index 7710c55..0b1ec28 100644 --- a/modules/i3plus-pojo-aps/src/main/java/cn/estsh/i3plus/pojo/aps/bean/Material.java +++ b/modules/i3plus-pojo-aps/src/main/java/cn/estsh/i3plus/pojo/aps/bean/Material.java @@ -65,10 +65,10 @@ public class Material extends BaseAPS { @FieldAnnotation(editType = ApsEnumUtil.EDIT_TYPE.DURATION) private String purchaseLeadTime; - @Column(name="MANUF_LEAD_TIME") + @Column(name="PRODUCT_LEAD_TIME") @ApiParam(value ="生产提前期") @FieldAnnotation(editType = ApsEnumUtil.EDIT_TYPE.DURATION) - private String manufLeadTime; + private String productLeadTime; @Column(name="SHIPMENT_LEAD_TIME") @ApiParam(value ="配送提前期") @@ -79,9 +79,9 @@ public class Material extends BaseAPS { @ApiParam(value ="单位采购量") private Integer unitPurchase; - @Column(name="UNIT_MANUF") + @Column(name="UNIT_PRODUCT") @ApiParam(value ="单位生产量") - private Integer unitManuf; + private Integer unitProduct; @Column(name="UNIT_SHIPMENT") @ApiParam(value ="单位配送量") @@ -109,7 +109,7 @@ public class Material extends BaseAPS { @Column(name="UNIT_PRODUCT_BATCH", columnDefinition = "decimal(18,8)") @ApiParam(value ="生产批量单位") - private Double UnitProductBatch; + private Double unitProductBatch; @Column(name="MAX_PUR_BATCH", columnDefinition = "decimal(18,8)") @ApiParam(value ="最大采购批量") diff --git a/modules/i3plus-pojo-aps/src/main/java/cn/estsh/i3plus/pojo/aps/bean/Work.java b/modules/i3plus-pojo-aps/src/main/java/cn/estsh/i3plus/pojo/aps/bean/Work.java index 9b898b5..619bbf8 100644 --- a/modules/i3plus-pojo-aps/src/main/java/cn/estsh/i3plus/pojo/aps/bean/Work.java +++ b/modules/i3plus-pojo-aps/src/main/java/cn/estsh/i3plus/pojo/aps/bean/Work.java @@ -84,7 +84,7 @@ public class Work extends BaseAPS { private Long specifyResourceId; @Column(name="SPECIFY_PRODUCE_TIME") - @ApiParam(value ="指定制造时间") + @ApiParam(value ="指定生产时间") private String specifyProduceTime; @Column(name="SPECIFY_PREV_TIME") 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..998da89 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; + } } /** @@ -6428,4 +6438,40 @@ public class MesEnumUtil { return tmp; } } + + /** + * 客户JIT预装队列状态 + */ + @JsonFormat(shape = JsonFormat.Shape.OBJECT) + public enum QUEUE_JIT_PLAN_STATUS { + CREATE(10, "创建"), + RELEASED(20, "已释放"), + ERROR(999, "异常"); + + private Integer value; + private String description; + + QUEUE_JIT_PLAN_STATUS(Integer value, String description) { + this.value = value; + this.description = description; + } + + public Integer getValue() { + return value; + } + + public String getDescription() { + return description; + } + + public static String valueOfDescription(Integer value) { + String tmp = null; + for (int i = 0; i < values().length; i++) { + if (values()[i].value.equals(value)) { + tmp = values()[i].description; + } + } + return tmp; + } + } } diff --git a/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/enumutil/MesPcnEnumUtil.java b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/enumutil/MesPcnEnumUtil.java index 0ff1771..19f6de5 100644 --- a/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/enumutil/MesPcnEnumUtil.java +++ b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/enumutil/MesPcnEnumUtil.java @@ -4266,8 +4266,8 @@ public class MesPcnEnumUtil { public enum BAD_HANDLE_TYPE { BACK_SPRAY(10, "BACK_SPRAY", "返喷"), SCRAPPED(20, "SCRAPPED", "报废"), - POLISH(30, "POLISH", "抛光"), - DETERMINED(40, "DETERMINED", "待定"); + POLISHING(30, "POLISHING", "抛光"), + DETERMIND(40, "DETERMIND", "待定"); private int value; private String code; 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/MesPackage.java b/modules/i3plus-pojo-mes/src/main/java/cn/estsh/i3plus/pojo/mes/bean/MesPackage.java index 541d461..a46c53d 100644 --- a/modules/i3plus-pojo-mes/src/main/java/cn/estsh/i3plus/pojo/mes/bean/MesPackage.java +++ b/modules/i3plus-pojo-mes/src/main/java/cn/estsh/i3plus/pojo/mes/bean/MesPackage.java @@ -123,6 +123,11 @@ public class MesPackage extends BaseBean implements Serializable { @ApiParam("包装标签模板") private String packageLabelTemplate; + // 二维码 + @Column(name = "QR_CODE") + @ApiParam("包装二维码") + private String qrCode; + public MesPackage() { } 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-mes/src/main/java/cn/estsh/i3plus/pojo/mes/bean/MesQueueJitPlan.java b/modules/i3plus-pojo-mes/src/main/java/cn/estsh/i3plus/pojo/mes/bean/MesQueueJitPlan.java index d982dab..dee2d14 100644 --- a/modules/i3plus-pojo-mes/src/main/java/cn/estsh/i3plus/pojo/mes/bean/MesQueueJitPlan.java +++ b/modules/i3plus-pojo-mes/src/main/java/cn/estsh/i3plus/pojo/mes/bean/MesQueueJitPlan.java @@ -11,6 +11,7 @@ import org.hibernate.annotations.DynamicUpdate; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; +import javax.persistence.Transient; import java.io.Serializable; /** @@ -74,4 +75,40 @@ public class MesQueueJitPlan extends BaseBean implements Serializable { @Column(name = "VERSION") @ApiParam("版本号") private String version; + + @Column(name = "JIT_SEQ") + @ApiParam("JIT排序号") + private String jitSeq; + + @Column(name = "PROD_CFG_TYPE_CODE") + @ApiParam("项目代码") + private String prodCfgTypeCode; + + @Column(name = "MEMO") + @ApiParam("备注") + private String memo; + + @Column(name = "SUPPLIER_CODE") + @ApiParam("供应商编号") + private String supplierCode; + + @Column(name = "SUPPLIER_NAME") + @ApiParam("供应商名称") + private String supplierName; + + @Column(name = "FILE_NAME") + @ApiParam("解析文件名") + private String fileName; + + @Column(name = "FILE_URL") + @ApiParam("解析文件路径") + private String fileUrl; + + @Transient + @ApiParam("计划上线开始时间") + private String planStartDate; + + @Transient + @ApiParam("计划上线结束时间") + private String planEndDate; } diff --git a/modules/i3plus-pojo-mes/src/main/java/cn/estsh/i3plus/pojo/mes/bean/MesQueueJitPlanBom.java b/modules/i3plus-pojo-mes/src/main/java/cn/estsh/i3plus/pojo/mes/bean/MesQueueJitPlanBom.java index 1d9faad..bba33d4 100644 --- a/modules/i3plus-pojo-mes/src/main/java/cn/estsh/i3plus/pojo/mes/bean/MesQueueJitPlanBom.java +++ b/modules/i3plus-pojo-mes/src/main/java/cn/estsh/i3plus/pojo/mes/bean/MesQueueJitPlanBom.java @@ -50,4 +50,8 @@ public class MesQueueJitPlanBom extends BaseBean implements Serializable { @Column(name = "QTY") @ApiParam("用量") private Double qty; + + @Column(name = "PRODUCE_CTGY_CODE") + @ApiParam("产品位置代码") + private String produceCtgyCode; } diff --git a/modules/i3plus-pojo-mes/src/main/java/cn/estsh/i3plus/pojo/mes/bean/MesQueueJitPlanDetail.java b/modules/i3plus-pojo-mes/src/main/java/cn/estsh/i3plus/pojo/mes/bean/MesQueueJitPlanDetail.java index 7111b75..402d4c6 100644 --- a/modules/i3plus-pojo-mes/src/main/java/cn/estsh/i3plus/pojo/mes/bean/MesQueueJitPlanDetail.java +++ b/modules/i3plus-pojo-mes/src/main/java/cn/estsh/i3plus/pojo/mes/bean/MesQueueJitPlanDetail.java @@ -46,4 +46,16 @@ public class MesQueueJitPlanDetail extends BaseBean implements Serializable { @Column(name = "PART_NAME") @ApiParam("产品名称") private String partName; + + @Column(name = "PRODUCE_CTGY_CODE") + @ApiParam("产品位置代码") + private String produceCtgyCode; + + @Column(name = "CUST_PART_NO") + @ApiParam("客户物料号") + private String custPartNo; + + @Column(name = "FORMULA_CONTENT") + @ApiParam("配方内容") + private String formulaContent; } diff --git a/modules/i3plus-pojo-mes/src/main/java/cn/estsh/i3plus/pojo/mes/model/PaintCheckModel.java b/modules/i3plus-pojo-mes/src/main/java/cn/estsh/i3plus/pojo/mes/model/PaintCheckModel.java index 80c483b..8dfadf4 100644 --- a/modules/i3plus-pojo-mes/src/main/java/cn/estsh/i3plus/pojo/mes/model/PaintCheckModel.java +++ b/modules/i3plus-pojo-mes/src/main/java/cn/estsh/i3plus/pojo/mes/model/PaintCheckModel.java @@ -1,12 +1,12 @@ package cn.estsh.i3plus.pojo.mes.model; +import cn.estsh.i3plus.pojo.mes.bean.MesDefect; import cn.estsh.i3plus.pojo.mes.bean.MesWindowModuleParam; import io.swagger.annotations.Api; import io.swagger.annotations.ApiParam; import lombok.Data; -import javax.persistence.Column; import java.util.List; /** @@ -39,22 +39,18 @@ public class PaintCheckModel { @ApiParam("界面编号") private String windowNo; - @ApiParam("缺陷类型") - private String defectType; - - @ApiParam("缺陷描述") - private String defectDesc; - @ApiParam("缺陷标识值") private String defectFlagValue; @ApiParam("不良品处理类型") private Integer defectActionType; - @Column(name = "PROD_CFG_TYPE_CODE") @ApiParam("项目代码") private String prodCfgTypeCode; + @ApiParam("缺陷列表") + private List defectList; + @ApiParam("界面组件参数数据") List windowModuleParamList; } diff --git a/modules/i3plus-pojo-mes/src/main/java/cn/estsh/i3plus/pojo/mes/sqlpack/MesHqlPack.java b/modules/i3plus-pojo-mes/src/main/java/cn/estsh/i3plus/pojo/mes/sqlpack/MesHqlPack.java index 3178eee..767ad06 100644 --- a/modules/i3plus-pojo-mes/src/main/java/cn/estsh/i3plus/pojo/mes/sqlpack/MesHqlPack.java +++ b/modules/i3plus-pojo-mes/src/main/java/cn/estsh/i3plus/pojo/mes/sqlpack/MesHqlPack.java @@ -3130,4 +3130,72 @@ public class MesHqlPack { } return packBean; } + + /** + * 客户JIT预装队列 + * @param queueJitPlan + * @param organizeCode + * @return + */ + public static DdlPackBean getMesQueueJitPlan(MesQueueJitPlan queueJitPlan, String organizeCode) { + DdlPackBean packBean = getAllBaseDataByNormalPro(queueJitPlan, organizeCode); + if (!StringUtils.isEmpty(queueJitPlan.getJisPlanNo())) { + DdlPreparedPack.getStringLikerPack(queueJitPlan.getJisPlanNo(), "jisPlanNo", packBean); + } + if (!StringUtils.isEmpty(queueJitPlan.getCustPlantCode())) { + DdlPreparedPack.getStringLikerPack(queueJitPlan.getCustPlantCode(), "custPlantCode", packBean); + } + if (!StringUtils.isEmpty(queueJitPlan.getCustFlagNo())) { + DdlPreparedPack.getStringLikerPack(queueJitPlan.getCustFlagNo(), "custFlagNo", packBean); + } + if (!StringUtils.isEmpty(queueJitPlan.getVinCode())) { + DdlPreparedPack.getStringLikerPack(queueJitPlan.getVinCode(), "vinCode", packBean); + } + if (queueJitPlan.getStatus() != null) { + DdlPreparedPack.getNumEqualPack(queueJitPlan.getStatus(), "status", packBean); + } + if (!StringUtils.isEmpty(queueJitPlan.getCreateDateTimeStart()) || !StringUtils.isEmpty(queueJitPlan.getCreateDateTimeEnd())) { + DdlPreparedPack.timeBuilder(queueJitPlan.getCreateDateTimeStart(), queueJitPlan.getCreateDateTimeEnd(), + "createDatetime", packBean, true); + } + if (!StringUtils.isEmpty(queueJitPlan.getCreateDateTimeStart()) || !StringUtils.isEmpty(queueJitPlan.getCreateDateTimeEnd())) { + DdlPreparedPack.timeBuilder(queueJitPlan.getCreateDateTimeStart(), queueJitPlan.getCreateDateTimeEnd(), + "createDatetime", packBean, true); + } + return packBean; + } + + /** + * 客户JIT预装队列明细 + * @param queueJitPlanDetail + * @param organizeCode + * @return + */ + public static DdlPackBean getMesQueueJitPlanDetail(MesQueueJitPlanDetail queueJitPlanDetail, String organizeCode) { + DdlPackBean packBean = getAllBaseDataByNormalPro(queueJitPlanDetail, organizeCode); + if (!StringUtils.isEmpty(queueJitPlanDetail.getJisPlanNo())) { + DdlPreparedPack.getStringLikerPack(queueJitPlanDetail.getJisPlanNo(), "jisPlanNo", packBean); + } + if (!StringUtils.isEmpty(queueJitPlanDetail.getPartNo())) { + DdlPreparedPack.getStringLikerPack(queueJitPlanDetail.getPartNo(), "partNo", packBean); + } + return packBean; + } + + /** + * 客户JIT预装队列BOM + * @param queueJitPlanBom + * @param organizeCode + * @return + */ + public static DdlPackBean getMesQueueJitPlanBom(MesQueueJitPlanBom queueJitPlanBom, String organizeCode) { + DdlPackBean packBean = getAllBaseDataByNormalPro(queueJitPlanBom, organizeCode); + if (!StringUtils.isEmpty(queueJitPlanBom.getJisPlanNo())) { + DdlPreparedPack.getStringLikerPack(queueJitPlanBom.getJisPlanNo(), "jisPlanNo", packBean); + } + if (!StringUtils.isEmpty(queueJitPlanBom.getPartNo())) { + DdlPreparedPack.getStringLikerPack(queueJitPlanBom.getPartNo(), "partNo", packBean); + } + return packBean; + } } 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);