|
|
@@ -0,0 +1,199 @@
|
|
|
+package com.uas.eis.entity.vwms.req;
|
|
|
+
|
|
|
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
|
|
+import com.uas.eis.utils.StringUtil;
|
|
|
+import lombok.Data;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+@Data
|
|
|
+@JsonIgnoreProperties(ignoreUnknown = true)
|
|
|
+public class AdjustConfirm {
|
|
|
+ private AdjustmentOrder adjustmentOrder;
|
|
|
+ private OrderLines orderLines;
|
|
|
+
|
|
|
+ @Data
|
|
|
+ @JsonIgnoreProperties(ignoreUnknown = true)
|
|
|
+ public static class AdjustmentOrder {
|
|
|
+ /** 转移单号(ERP单号) 长度:50 */
|
|
|
+ private String adjustmentOrderCode;
|
|
|
+ /** 仓储系统转移单号 长度:50 */
|
|
|
+ private String adjustmentOrderId;
|
|
|
+ /** 转移单类型 长度:50 例如: ZCTZ=转仓调整单, KCYK=库存移库 */
|
|
|
+ private String adjustmentOrderType;
|
|
|
+ /** 仓库代码 长度:50 */
|
|
|
+ private String warehouseCode;
|
|
|
+ /** 货主代码 长度:50 */
|
|
|
+ private String ownerCode;
|
|
|
+ /** 外部业务代码 长度:50 消息ID, 用于去重 */
|
|
|
+ private String outBizCode;
|
|
|
+ /** 订单完成时间 长度:19 YYYY-MM-DD HH:MM:SS */
|
|
|
+ private String orderConfirmTime;
|
|
|
+ /** 操作人 长度:20 */
|
|
|
+ private String updateCode;
|
|
|
+ /** 备注 长度:500 */
|
|
|
+ private String remark;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Data
|
|
|
+ @JsonIgnoreProperties(ignoreUnknown = true)
|
|
|
+ public static class OrderLines {
|
|
|
+ private List<OrderLine> orderLine;
|
|
|
+
|
|
|
+ @Data
|
|
|
+ @JsonIgnoreProperties(ignoreUnknown = true)
|
|
|
+ public static class OrderLine {
|
|
|
+ /** 货品代码 长度:50 */
|
|
|
+ private String itemCode;
|
|
|
+ /** 仓储系统货品代码 长度:50 */
|
|
|
+ private String itemId;
|
|
|
+ /** 货品名称 长度:200 */
|
|
|
+ private String itemName;
|
|
|
+ /** 计划数量 */
|
|
|
+ private Integer planQty;
|
|
|
+ /** 实际数量 */
|
|
|
+ private Integer actualQty;
|
|
|
+ /** 行号 */
|
|
|
+ private Integer lineNo;
|
|
|
+ /** 序列号,多个序列号用英文逗号隔开 */
|
|
|
+ private String serialNo;
|
|
|
+ /** 原信息 */
|
|
|
+ private Source source;
|
|
|
+ /** 目标信息 */
|
|
|
+ private Target target;
|
|
|
+
|
|
|
+ @Data
|
|
|
+ @JsonIgnoreProperties(ignoreUnknown = true)
|
|
|
+ public static class Source {
|
|
|
+ /** 原质量状态 长度:50 ZP=正品, CC=残次, 默认为ZP */
|
|
|
+ private String inventoryType;
|
|
|
+ /** 原虚拟仓库 长度:50 */
|
|
|
+ private String virtualWarehouse;
|
|
|
+ /** 原生产日期 长度:10 YYYY-MM-DD */
|
|
|
+ private String productDate;
|
|
|
+ /** 原失效日期 长度:10 YYYY-MM-DD */
|
|
|
+ private String expireDate;
|
|
|
+ /** 原批次号 长度:50 */
|
|
|
+ private String batchCode;
|
|
|
+ /** 原入库日期 长度:10 YYYY-MM-DD */
|
|
|
+ private String stockinDate;
|
|
|
+ /** 原自定义批次1 长度:50 */
|
|
|
+ private String userDefined1;
|
|
|
+ /** 原自定义批次2 长度:50 */
|
|
|
+ private String userDefined2;
|
|
|
+ /** 原自定义批次3 长度:50 */
|
|
|
+ private String userDefined3;
|
|
|
+ /** 原自定义批次4 长度:50 */
|
|
|
+ private String userDefined4;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Data
|
|
|
+ @JsonIgnoreProperties(ignoreUnknown = true)
|
|
|
+ public static class Target {
|
|
|
+ /** 目标质量状态 长度:50 ZP=正品, CC=残次, 默认为ZP */
|
|
|
+ private String inventoryType;
|
|
|
+ /** 目标虚拟仓库 长度:50 */
|
|
|
+ private String virtualWarehouse;
|
|
|
+ /** 目标生产日期 长度:10 YYYY-MM-DD */
|
|
|
+ private String productDate;
|
|
|
+ /** 目标失效日期 长度:10 YYYY-MM-DD */
|
|
|
+ private String expireDate;
|
|
|
+ /** 目标批次号 长度:50 */
|
|
|
+ private String batchCode;
|
|
|
+ /** 目标入库日期 长度:10 YYYY-MM-DD */
|
|
|
+ private String stockinDate;
|
|
|
+ /** 目标自定义批次1 长度:50 */
|
|
|
+ private String userDefined1;
|
|
|
+ /** 目标自定义批次2 长度:50 */
|
|
|
+ private String userDefined2;
|
|
|
+ /** 目标自定义批次3 长度:50 */
|
|
|
+ private String userDefined3;
|
|
|
+ /** 目标自定义批次4 长度:50 */
|
|
|
+ private String userDefined4;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public String getMasterName() {
|
|
|
+ if (orderLines.getOrderLine() != null) {//账套名称
|
|
|
+ return orderLines.getOrderLine().get(0).getSource().getUserDefined1();
|
|
|
+ } else {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public String getGenerateMainSql() {
|
|
|
+ StringBuilder sql = new StringBuilder("MERGE INTO @MASTERCODE.prodiowms wmsl USING (")
|
|
|
+ .append("SELECT ")
|
|
|
+ .append("@PIID").append(" PIID, ")
|
|
|
+ .append("'").append("@INOUTNO").append("' PIINOUTNO, ")
|
|
|
+ .append("'").append(StringUtil.nvl(adjustmentOrder.getOwnerCode(), "")).append("' OWNERCODE, ")
|
|
|
+ .append("'").append(StringUtil.nvl(adjustmentOrder.getWarehouseCode(), "")).append("' WAREHOUSECODE, ")
|
|
|
+ .append("'").append(StringUtil.nvl(adjustmentOrder.getAdjustmentOrderCode(), "")).append("' WMSORDERID, ")
|
|
|
+ .append("'").append(StringUtil.nvl(adjustmentOrder.getAdjustmentOrderType(), "")).append("' WMSORDERTYPE, ")
|
|
|
+ .append("'").append(StringUtil.nvl(adjustmentOrder.getOutBizCode(), "")).append("' OUTBIZCODE, ")
|
|
|
+ .append((StringUtil.hasText(adjustmentOrder.getOrderConfirmTime()) ? "to_date('" + adjustmentOrder.getOrderConfirmTime() + "','yyyy-mm-dd hh24:mi:ss')" : "null")).append(" deliveryTime, ")
|
|
|
+ .append("FROM dual) doc ON (wmsl.PIID = doc.PIID AND wmsl.PIINOUTNO = doc.PIINOUTNO) ")
|
|
|
+ .append("WHEN MATCHED THEN UPDATE SET ")
|
|
|
+ .append("wmsl.OWNERCODE = doc.OWNERCODE, ")
|
|
|
+ .append("wmsl.WAREHOUSECODE = doc.WAREHOUSECODE, ")
|
|
|
+ .append("wmsl.WMSORDERID = doc.WMSORDERID, ")
|
|
|
+ .append("wmsl.WMSORDERTYPE = doc.WMSORDERTYPE, ")
|
|
|
+ .append("wmsl.OUTBIZCODE = doc.OUTBIZCODE, ")
|
|
|
+ .append("wmsl.deliveryTime = doc.deliveryTime, ")
|
|
|
+ .append("wmsl.UTIME = SYSDATE ")
|
|
|
+ .append("WHEN NOT MATCHED THEN INSERT (ITIME,PIID, PIINOUTNO, OWNERCODE, WAREHOUSECODE, WMSORDERID, WMSORDERTYPE, OUTBIZCODE, deliveryTime) ")
|
|
|
+ .append("VALUES (SYSDATE,doc.PIID, doc.PIINOUTNO, doc.OWNERCODE, doc.WAREHOUSECODE, doc.WMSORDERID, doc.WMSORDERTYPE, doc.OUTBIZCODE, doc.deliveryTime)");
|
|
|
+ return sql.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ public List<String> getGenerateLinesSql() {
|
|
|
+ List<String> sqls = new ArrayList<>();
|
|
|
+ for (AdjustConfirm.OrderLines.OrderLine line : orderLines.getOrderLine()) {
|
|
|
+ sqls.add(getGenerateLinesSql(line));
|
|
|
+ }
|
|
|
+ return sqls;
|
|
|
+ }
|
|
|
+
|
|
|
+ public String getGenerateLinesSql(AdjustConfirm.OrderLines.OrderLine line) {
|
|
|
+ StringBuilder sql = new StringBuilder();
|
|
|
+ sql.append("MERGE INTO ").append("@MASTERCODE").append(".prodiowms_Lines wmsl USING (")
|
|
|
+ .append("SELECT ")
|
|
|
+ .append("@PIID").append(" PIID, ")
|
|
|
+ .append(line.getLineNo()).append(" LINENO, ")
|
|
|
+ .append("'").append(line.getItemCode()).append("' ITEMCODE, ")
|
|
|
+ .append("'").append(StringUtil.nvl(line.getPlanQty(), "")).append("' PLANQTY, ")
|
|
|
+ .append(StringUtil.nvl(line.getActualQty(), "0")).append(" ACTUALQTY, ")
|
|
|
+ .append("'").append(StringUtil.nvl(line.getSerialNo(), "")).append("' SERIALNO, ")
|
|
|
+
|
|
|
+ .append("'").append(StringUtil.nvl(line.getSource().getVirtualWarehouse(), "")).append("' S_VIRTUALWAREHOUSE, ")
|
|
|
+ .append("'").append(StringUtil.nvl(line.getSource().getUserDefined1(), "")).append("' S_USERDEFINED1, ")
|
|
|
+ .append("'").append(StringUtil.nvl(line.getSource().getUserDefined3(), "")).append("' S_USERDEFINED3, ")
|
|
|
+ .append("'").append(StringUtil.nvl(line.getSource().getUserDefined4(), "")).append("' S_USERDEFINED4, ")
|
|
|
+
|
|
|
+ .append("'").append(StringUtil.nvl(line.getTarget().getVirtualWarehouse(), "")).append("' T_VIRTUALWAREHOUSE, ")
|
|
|
+ .append("'").append(StringUtil.nvl(line.getTarget().getUserDefined1(), "")).append("' T_USERDEFINED1, ")
|
|
|
+ .append("'").append(StringUtil.nvl(line.getTarget().getUserDefined3(), "")).append("' T_USERDEFINED3, ")
|
|
|
+ .append("'").append(StringUtil.nvl(line.getTarget().getUserDefined4(), "")).append("' T_USERDEFINED4 ")
|
|
|
+ .append("FROM dual) doc ON (wmsl.PL_PIID = doc.PIID AND wmsl.LINENO = doc.LINENO AND wmsl.ITEMCODE = doc.ITEMCODE) ")
|
|
|
+ .append("WHEN MATCHED THEN UPDATE SET ")
|
|
|
+ .append("wmsl.ACTUALQTY = doc.ACTUALQTY, ")
|
|
|
+ .append("wmsl.SERIALNO = doc.SERIALNO, ")
|
|
|
+ .append("wmsl.S_VIRTUALWAREHOUSE = doc.S_VIRTUALWAREHOUSE, ")
|
|
|
+ .append("wmsl.S_USERDEFINED1 = doc.S_USERDEFINED1, ")
|
|
|
+ .append("wmsl.S_USERDEFINED3 = doc.S_USERDEFINED3, ")
|
|
|
+ .append("wmsl.S_USERDEFINED4 = doc.S_USERDEFINED4, ")
|
|
|
+ .append("wmsl.T_VIRTUALWAREHOUSE = doc.T_VIRTUALWAREHOUSE, ")
|
|
|
+ .append("wmsl.T_USERDEFINED1 = doc.T_USERDEFINED1, ")
|
|
|
+ .append("wmsl.T_USERDEFINED3 = doc.T_USERDEFINED3, ")
|
|
|
+ .append("wmsl.T_USERDEFINED4 = doc.T_USERDEFINED4, ")
|
|
|
+ .append("wmsl.UTIME = SYSDATE ")
|
|
|
+ .append("WHEN NOT MATCHED THEN INSERT (ITIME,PL_PIID, LINENO, ITEMCODE, PLANQTY, ACTUALQTY, ACTUALPACKUOMQTY, SERIALNO ")
|
|
|
+ .append(",S_VIRTUALWAREHOUSE,S_USERDEFINED1,S_USERDEFINED3,S_USERDEFINED4,T_VIRTUALWAREHOUSE,T_USERDEFINED1,T_USERDEFINED3,T_USERDEFINED4) ")
|
|
|
+ .append("VALUES (SYSDATE,doc.PIID, doc.LINENO, doc.ITEMCODE, doc.PLANQTY, doc.ACTUALQTY,doc.ACTUALPACKUOMQTY,doc.SERIALNO")
|
|
|
+ .append(" ")
|
|
|
+ .append(",S_VIRTUALWAREHOUSE,S_USERDEFINED1,S_USERDEFINED3,S_USERDEFINED4,T_VIRTUALWAREHOUSE,T_USERDEFINED1,T_USERDEFINED3,T_USERDEFINED4)");
|
|
|
+ return sql.toString();
|
|
|
+ }
|
|
|
+}
|