AdjustConfirm.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. package com.uas.eis.entity.vwms.req;
  2. import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
  3. import com.uas.eis.utils.StringUtil;
  4. import lombok.Data;
  5. import java.util.ArrayList;
  6. import java.util.List;
  7. @Data
  8. @JsonIgnoreProperties(ignoreUnknown = true)
  9. public class AdjustConfirm {
  10. private AdjustmentOrder adjustmentOrder;
  11. private OrderLines orderLines;
  12. @Data
  13. @JsonIgnoreProperties(ignoreUnknown = true)
  14. public static class AdjustmentOrder {
  15. /** 转移单号(ERP单号) 长度:50 */
  16. private String adjustmentOrderCode;
  17. /** 仓储系统转移单号 长度:50 */
  18. private String adjustmentOrderId;
  19. /** 转移单类型 长度:50 例如: ZCTZ=转仓调整单, KCYK=库存移库 */
  20. private String adjustmentOrderType;
  21. /** 仓库代码 长度:50 */
  22. private String warehouseCode;
  23. /** 货主代码 长度:50 */
  24. private String ownerCode;
  25. /** 外部业务代码 长度:50 消息ID, 用于去重 */
  26. private String outBizCode;
  27. /** 订单完成时间 长度:19 YYYY-MM-DD HH:MM:SS */
  28. private String orderConfirmTime;
  29. /** 操作人 长度:20 */
  30. private String updateCode;
  31. /** 备注 长度:500 */
  32. private String remark;
  33. }
  34. @Data
  35. @JsonIgnoreProperties(ignoreUnknown = true)
  36. public static class OrderLines {
  37. private List<OrderLine> orderLine;
  38. @Data
  39. @JsonIgnoreProperties(ignoreUnknown = true)
  40. public static class OrderLine {
  41. /** 货品代码 长度:50 */
  42. private String itemCode;
  43. /** 仓储系统货品代码 长度:50 */
  44. private String itemId;
  45. /** 货品名称 长度:200 */
  46. private String itemName;
  47. /** 计划数量 */
  48. private Integer planQty;
  49. /** 实际数量 */
  50. private Integer actualQty;
  51. /** 行号 */
  52. private Integer lineNo;
  53. /** 序列号,多个序列号用英文逗号隔开 */
  54. private String serialNo;
  55. /** 原信息 */
  56. private Source source;
  57. /** 目标信息 */
  58. private Target target;
  59. @Data
  60. @JsonIgnoreProperties(ignoreUnknown = true)
  61. public static class Source {
  62. /** 原质量状态 长度:50 ZP=正品, CC=残次, 默认为ZP */
  63. private String inventoryType;
  64. /** 原虚拟仓库 长度:50 */
  65. private String virtualWarehouse;
  66. /** 原生产日期 长度:10 YYYY-MM-DD */
  67. private String productDate;
  68. /** 原失效日期 长度:10 YYYY-MM-DD */
  69. private String expireDate;
  70. /** 原批次号 长度:50 */
  71. private String batchCode;
  72. /** 原入库日期 长度:10 YYYY-MM-DD */
  73. private String stockinDate;
  74. /** 原自定义批次1 长度:50 */
  75. private String userDefined1;
  76. /** 原自定义批次2 长度:50 */
  77. private String userDefined2;
  78. /** 原自定义批次3 长度:50 */
  79. private String userDefined3;
  80. /** 原自定义批次4 长度:50 */
  81. private String userDefined4;
  82. }
  83. @Data
  84. @JsonIgnoreProperties(ignoreUnknown = true)
  85. public static class Target {
  86. /** 目标质量状态 长度:50 ZP=正品, CC=残次, 默认为ZP */
  87. private String inventoryType;
  88. /** 目标虚拟仓库 长度:50 */
  89. private String virtualWarehouse;
  90. /** 目标生产日期 长度:10 YYYY-MM-DD */
  91. private String productDate;
  92. /** 目标失效日期 长度:10 YYYY-MM-DD */
  93. private String expireDate;
  94. /** 目标批次号 长度:50 */
  95. private String batchCode;
  96. /** 目标入库日期 长度:10 YYYY-MM-DD */
  97. private String stockinDate;
  98. /** 目标自定义批次1 长度:50 */
  99. private String userDefined1;
  100. /** 目标自定义批次2 长度:50 */
  101. private String userDefined2;
  102. /** 目标自定义批次3 长度:50 */
  103. private String userDefined3;
  104. /** 目标自定义批次4 长度:50 */
  105. private String userDefined4;
  106. }
  107. }
  108. }
  109. public String getMasterName() {
  110. if (orderLines.getOrderLine() != null) {//账套名称
  111. return orderLines.getOrderLine().get(0).getSource().getUserDefined4();
  112. } else {
  113. return null;
  114. }
  115. }
  116. public String getGenerateMainSql() {
  117. StringBuilder sql = new StringBuilder("MERGE INTO @MASTERCODE.prodiowms wmsl USING (")
  118. .append("SELECT ")
  119. .append("@PIID").append(" PIID, ")
  120. .append("'").append("@INOUTNO").append("' PIINOUTNO, ")
  121. .append("'").append(StringUtil.nvl(adjustmentOrder.getOwnerCode(), "")).append("' OWNERCODE, ")
  122. .append("'").append(StringUtil.nvl(adjustmentOrder.getWarehouseCode(), "")).append("' WAREHOUSECODE, ")
  123. .append("'").append(StringUtil.nvl(adjustmentOrder.getAdjustmentOrderCode(), "")).append("' WMSORDERID, ")
  124. .append("'").append(StringUtil.nvl(adjustmentOrder.getAdjustmentOrderType(), "")).append("' WMSORDERTYPE, ")
  125. .append("'").append(StringUtil.nvl(adjustmentOrder.getOutBizCode(), "")).append("' OUTBIZCODE, ")
  126. .append((StringUtil.hasText(adjustmentOrder.getOrderConfirmTime()) ? "to_date('" + adjustmentOrder.getOrderConfirmTime() + "','yyyy-mm-dd hh24:mi:ss')" : "null")).append(" deliveryTime ")
  127. .append("FROM dual) doc ON (wmsl.PIID = doc.PIID AND wmsl.PIINOUTNO = doc.PIINOUTNO) ")
  128. .append("WHEN MATCHED THEN UPDATE SET ")
  129. .append("wmsl.OWNERCODE = doc.OWNERCODE, ")
  130. .append("wmsl.WAREHOUSECODE = doc.WAREHOUSECODE, ")
  131. .append("wmsl.WMSORDERID = doc.WMSORDERID, ")
  132. .append("wmsl.WMSORDERTYPE = doc.WMSORDERTYPE, ")
  133. .append("wmsl.OUTBIZCODE = doc.OUTBIZCODE, ")
  134. .append("wmsl.deliveryTime = doc.deliveryTime, ")
  135. .append("wmsl.UTIME = SYSDATE ")
  136. .append("WHEN NOT MATCHED THEN INSERT (ITIME,PIID, PIINOUTNO, OWNERCODE, WAREHOUSECODE, WMSORDERID, WMSORDERTYPE, OUTBIZCODE, deliveryTime) ")
  137. .append("VALUES (SYSDATE,doc.PIID, doc.PIINOUTNO, doc.OWNERCODE, doc.WAREHOUSECODE, doc.WMSORDERID, doc.WMSORDERTYPE, doc.OUTBIZCODE, doc.deliveryTime)");
  138. return sql.toString();
  139. }
  140. public List<String> getGenerateLinesSql() {
  141. List<String> sqls = new ArrayList<>();
  142. for (AdjustConfirm.OrderLines.OrderLine line : orderLines.getOrderLine()) {
  143. sqls.add(getGenerateLinesSql(line));
  144. }
  145. return sqls;
  146. }
  147. public String getGenerateLinesSql(AdjustConfirm.OrderLines.OrderLine line) {
  148. StringBuilder sql = new StringBuilder();
  149. sql.append("MERGE INTO ").append("@MASTERCODE").append(".prodiowms_Lines wmsl USING (")
  150. .append("SELECT ")
  151. .append("@PIID").append(" PIID, ")
  152. .append(line.getLineNo()).append(" LINENO, ")
  153. .append("'").append(line.getItemCode()).append("' ITEMCODE, ")
  154. .append("'").append(StringUtil.nvl(line.getPlanQty(), "")).append("' PLANQTY, ")
  155. .append(StringUtil.nvl(line.getActualQty(), "0")).append(" ACTUALQTY, ")
  156. .append("'").append(StringUtil.nvl(line.getSerialNo(), "")).append("' SERIALNO, ")
  157. .append("'").append(StringUtil.nvl(line.getSource().getVirtualWarehouse(), "")).append("' S_VIRTUALWAREHOUSE, ")
  158. .append("'").append(StringUtil.nvl(line.getSource().getUserDefined1(), "")).append("' S_USERDEFINED1, ")
  159. .append("'").append(StringUtil.nvl(line.getSource().getUserDefined3(), "")).append("' S_USERDEFINED3, ")
  160. .append("'").append(StringUtil.nvl(line.getSource().getUserDefined4(), "")).append("' S_USERDEFINED4, ")
  161. .append("'").append(StringUtil.nvl(line.getTarget().getVirtualWarehouse(), "")).append("' T_VIRTUALWAREHOUSE, ")
  162. .append("'").append(StringUtil.nvl(line.getTarget().getUserDefined1(), "")).append("' T_USERDEFINED1, ")
  163. .append("'").append(StringUtil.nvl(line.getTarget().getUserDefined3(), "")).append("' T_USERDEFINED3, ")
  164. .append("'").append(StringUtil.nvl(line.getTarget().getUserDefined4(), "")).append("' T_USERDEFINED4 ")
  165. .append("FROM dual) doc ON (wmsl.PL_PIID = doc.PIID AND wmsl.LINENO = doc.LINENO AND wmsl.ITEMCODE = doc.ITEMCODE) ")
  166. .append("WHEN MATCHED THEN UPDATE SET ")
  167. .append("wmsl.ACTUALQTY = doc.ACTUALQTY, ")
  168. .append("wmsl.SERIALNO = doc.SERIALNO, ")
  169. .append("wmsl.S_VIRTUALWAREHOUSE = doc.S_VIRTUALWAREHOUSE, ")
  170. .append("wmsl.S_USERDEFINED1 = doc.S_USERDEFINED1, ")
  171. .append("wmsl.S_USERDEFINED3 = doc.S_USERDEFINED3, ")
  172. .append("wmsl.S_USERDEFINED4 = doc.S_USERDEFINED4, ")
  173. .append("wmsl.T_VIRTUALWAREHOUSE = doc.T_VIRTUALWAREHOUSE, ")
  174. .append("wmsl.T_USERDEFINED1 = doc.T_USERDEFINED1, ")
  175. .append("wmsl.T_USERDEFINED3 = doc.T_USERDEFINED3, ")
  176. .append("wmsl.T_USERDEFINED4 = doc.T_USERDEFINED4, ")
  177. .append("wmsl.UTIME = SYSDATE ")
  178. .append("WHEN NOT MATCHED THEN INSERT (ITIME,PL_PIID, LINENO, ITEMCODE, PLANQTY, ACTUALQTY,SERIALNO ")
  179. .append(",S_VIRTUALWAREHOUSE,S_USERDEFINED1,S_USERDEFINED3,S_USERDEFINED4,T_VIRTUALWAREHOUSE,T_USERDEFINED1,T_USERDEFINED3,T_USERDEFINED4) ")
  180. .append("VALUES (SYSDATE,doc.PIID, doc.LINENO, doc.ITEMCODE, doc.PLANQTY, doc.ACTUALQTY,doc.SERIALNO")
  181. .append(" ")
  182. .append(",doc.S_VIRTUALWAREHOUSE,doc.S_USERDEFINED1,doc.S_USERDEFINED3,doc.S_USERDEFINED4,doc.T_VIRTUALWAREHOUSE,doc.T_USERDEFINED1,doc.T_USERDEFINED3,doc.T_USERDEFINED4)");
  183. return sql.toString();
  184. }
  185. }