|
|
@@ -0,0 +1,271 @@
|
|
|
+package com.uas.eis.entity.vwms.req;
|
|
|
+
|
|
|
+import com.uas.eis.utils.StringUtil;
|
|
|
+import lombok.Data;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+@Data
|
|
|
+public class IOConfirm {
|
|
|
+ private EntryOrder entryOrder;
|
|
|
+ private OrderLines orderLines;
|
|
|
+ private OrderDetails orderDetails;
|
|
|
+
|
|
|
+ @Data
|
|
|
+ public static class EntryOrder {
|
|
|
+ /** 入库单号 */
|
|
|
+ private String entryOrderCode;
|
|
|
+ /** 货主代码 */
|
|
|
+ private String ownerCode;
|
|
|
+ /** 仓库代码 */
|
|
|
+ private String warehouseCode;
|
|
|
+ /** 仓储系统入库单ID */
|
|
|
+ private String entryOrderId;
|
|
|
+ /** 入库单类型 例如: CGRK=采购入库、DBRK=调拨入库 、THRK=退货入库, QTRK=其他入库等(只传英文代码) */
|
|
|
+ private String entryOrderType;
|
|
|
+ /** 外部业务代码 消息ID, 用于去重, 因为网络等原因导致重复传输, 请求不会被重复处理。一单需要多次确认时条件必填 */
|
|
|
+ private String outBizCode;
|
|
|
+ /** 支持入库单多次收货 多次收货后确认时 0=入库单最终状态确认, 1=入库单中间状态确认, 每次入库传入的数量为增量, 特殊情况, 同一入库单, 如果先收到0, 后又收到1, 允许修改收货的数量 */
|
|
|
+ private Integer confirmType;
|
|
|
+ /** 入库单状态 , PARTFULFILLED=部分收货完成, FULFILLED=收货完成(只传英文代码) */
|
|
|
+ private String status;
|
|
|
+ /** 订单完成时间 YYYY-MM-DD HH:MM:SS */
|
|
|
+ private String orderFinishedTime;
|
|
|
+ /** 收货人 */
|
|
|
+ private String receiver;
|
|
|
+ /** 备注 */
|
|
|
+ private String remark;
|
|
|
+ /** 用户自定义1 */
|
|
|
+ private String userDefined1;
|
|
|
+ /** 用户自定义2 */
|
|
|
+ private String userDefined2;
|
|
|
+ /** 用户自定义3 */
|
|
|
+ private String userDefined3;
|
|
|
+ /** 用户自定义4 */
|
|
|
+ private String userDefined4;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Data
|
|
|
+ public static class OrderLines {
|
|
|
+ private List<OrderLine> orderLine;
|
|
|
+
|
|
|
+ @Data
|
|
|
+ public static class OrderLine {
|
|
|
+ /** 行号 */
|
|
|
+ private Integer lineNo;
|
|
|
+ /** 货品代码 */
|
|
|
+ private String itemCode;
|
|
|
+ /** 仓储系统商品ID */
|
|
|
+ private String itemId;
|
|
|
+ /** 包装单位 */
|
|
|
+ private String packUom;
|
|
|
+ /** 应收货品数量 */
|
|
|
+ private Double planQty;
|
|
|
+ /** 实收数量 */
|
|
|
+ private Double actualQty;
|
|
|
+ /** 实收包装数量 */
|
|
|
+ private Double actualPackUomQty;
|
|
|
+ /** 拒收数量 */
|
|
|
+ private Double rejectQty;
|
|
|
+ /** 拒收原因 */
|
|
|
+ private String rejectReason;
|
|
|
+ /** 序列号,多个序列号用英文逗号隔开 */
|
|
|
+ private String serialno;
|
|
|
+ private Batchs batchs;
|
|
|
+ /** 自定义字段1 */
|
|
|
+ private String customField1;
|
|
|
+ /** 自定义字段2 */
|
|
|
+ private String customField2;
|
|
|
+ /** 自定义字段3 */
|
|
|
+ private String customField3;
|
|
|
+ /** 自定义字段4 */
|
|
|
+ private String customField4;
|
|
|
+ /** 自定义字段5 */
|
|
|
+ private String customField5;
|
|
|
+ /** 自定义字段6 */
|
|
|
+ private String customField6;
|
|
|
+ /** 自定义字段7 */
|
|
|
+ private String customField7;
|
|
|
+ /** 自定义字段8 */
|
|
|
+ private String customField8;
|
|
|
+
|
|
|
+ @Data
|
|
|
+ public static class Batchs {
|
|
|
+ private List<Batch> batch;
|
|
|
+
|
|
|
+ @Data
|
|
|
+ public static class Batch {
|
|
|
+ /** 实收数量 */
|
|
|
+ private Double actualQty;
|
|
|
+ /** 实收包装数量 */
|
|
|
+ private Double actualPackUomQty;
|
|
|
+ /** 质量状态 ZP=正品, CC=残次, 默认为ZP */
|
|
|
+ private String inventoryType;
|
|
|
+ /** 虚拟仓库 条件必填, 条件为使用虚拟仓库 */
|
|
|
+ private String virtualWarehouse;
|
|
|
+ /** 生产日期 YYYY-MM-DD */
|
|
|
+ private String productDate;
|
|
|
+ /** 失效日期 YYYY-MM-DD */
|
|
|
+ private String expireDate;
|
|
|
+ /** 批次号 */
|
|
|
+ private String batchCode;
|
|
|
+ /** 入库日期 YYYY-MM-DD */
|
|
|
+ private String stockinDate;
|
|
|
+ /** 自定义批次1 入库批次 */
|
|
|
+ private String userDefined1;
|
|
|
+ /** 自定义批次2 */
|
|
|
+ private String userDefined2;
|
|
|
+ /** 自定义批次3 品牌*/
|
|
|
+ private String userDefined3;
|
|
|
+ /** 自定义批次4 账套*/
|
|
|
+ private String userDefined4;
|
|
|
+ /** 容器号 */
|
|
|
+ private String lpn;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Data
|
|
|
+ public static class OrderDetails {
|
|
|
+ private List<Detail> detail;
|
|
|
+
|
|
|
+ @Data
|
|
|
+ public static class Detail {
|
|
|
+ private String boxNo;
|
|
|
+ private String epc;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ public String getMasterName() {
|
|
|
+ if(orderLines.getOrderLine() !=null){//userDefined4
|
|
|
+ return orderLines.getOrderLine().get(0).getBatchs().getBatch().get(0).getUserDefined4();
|
|
|
+ }else {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+public String getGenerateMainSql(String masterCode,Long piid,String inoutno) {
|
|
|
+ if (piid == null||inoutno==null){
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ StringBuilder sql = new StringBuilder("INSERT INTO ");
|
|
|
+ StringBuilder values = new StringBuilder(" VALUES (");
|
|
|
+
|
|
|
+ sql.append(masterCode).append(".prodiowms (");
|
|
|
+ sql.append("piid, "); values.append(piid).append(", ");
|
|
|
+ sql.append("piinoutno, "); values.append("'").append(inoutno).append("', ");
|
|
|
+ sql.append("entryOrderCode, "); values.append("'").append(StringUtil.nvl(entryOrder.getEntryOrderCode(),"")).append("', ");
|
|
|
+ sql.append("ownerCode, "); values.append("'").append(StringUtil.nvl(entryOrder.getOwnerCode(),"")).append("', ");
|
|
|
+ sql.append("warehouseCode, "); values.append("'").append(StringUtil.nvl(entryOrder.getWarehouseCode(),"")).append("', ");
|
|
|
+ sql.append("entryOrderId, "); values.append("'").append(StringUtil.nvl(entryOrder.getEntryOrderId(),"")).append("', ");
|
|
|
+ sql.append("entryOrderType, "); values.append("'").append(StringUtil.nvl(entryOrder.getEntryOrderType(),"")).append("', ");
|
|
|
+ sql.append("outBizCode, "); values.append("'").append(StringUtil.nvl(entryOrder.getOutBizCode(),"")).append("', ");
|
|
|
+ sql.append("confirmType, "); values.append(StringUtil.nvl(entryOrder.getConfirmType(),"0")).append(", ");
|
|
|
+ sql.append("status, "); values.append("'").append(StringUtil.nvl(entryOrder.getStatus(),"")).append("', ");
|
|
|
+ sql.append("orderFinishedTime, ");
|
|
|
+ values.append((StringUtil.hasText(entryOrder.getOrderFinishedTime())?"to_date('"+entryOrder.getOrderFinishedTime()+"','yyyy-mm-dd hh24:mi:ss'),":"")) ;
|
|
|
+ sql.append("receiver, "); values.append("'").append(StringUtil.nvl(entryOrder.getReceiver(),"")).append("', ");
|
|
|
+ sql.append("remark, "); values.append("'").append(StringUtil.nvl(entryOrder.getRemark(),"")).append("', ");
|
|
|
+ sql.append("userDefined1, "); values.append("'").append(StringUtil.nvl(entryOrder.getUserDefined1(),"")).append("', ");
|
|
|
+ sql.append("userDefined2, "); values.append("'").append(StringUtil.nvl(entryOrder.getUserDefined2(),"")).append("', ");
|
|
|
+ sql.append("userDefined3, "); values.append("'").append(StringUtil.nvl(entryOrder.getUserDefined3(),"")).append("', ");
|
|
|
+ sql.append("userDefined4 "); values.append("'").append(StringUtil.nvl(entryOrder.getUserDefined4(),"")).append("'");
|
|
|
+
|
|
|
+ sql.append(")").append(values).append(")");
|
|
|
+ return sql.toString();
|
|
|
+}
|
|
|
+
|
|
|
+public List<String> getGenerateLinesSql(String masterCode,Long piId) {
|
|
|
+ List<String> sqls = new ArrayList<>();
|
|
|
+ for (OrderLines.OrderLine line : orderLines.getOrderLine()) {
|
|
|
+ sqls.add(getGenerateLinesSql(masterCode,piId,line));
|
|
|
+ for (int i = 0; i < line.getBatchs().getBatch().size(); i++) {
|
|
|
+ OrderLines.OrderLine.Batchs.Batch batch = line.getBatchs().getBatch().get(i);
|
|
|
+ sqls.add(getGenerateBatchsSql(masterCode,piId,line.getLineNo(),(i+1),batch));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return sqls;
|
|
|
+}
|
|
|
+ public String getGenerateLinesSql(String masterCode,Long piid,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(line.getItemId()).append("' ITEMID, ")
|
|
|
+ .append("'").append(StringUtil.nvl(line.getPackUom(),"")).append("' PACKUOM, ")
|
|
|
+ .append("'").append(StringUtil.nvl(line.getPlanQty(),"")).append("' PLANQTY, ")
|
|
|
+ .append(StringUtil.nvl(line.getActualQty(),"0")).append(" ACTUALQTY, ")
|
|
|
+ .append(StringUtil.nvl(line.getActualPackUomQty(),"0")).append(" ACTUALPACKUOMQTY, ")
|
|
|
+ .append(StringUtil.nvl(line.getRejectQty(),"0")).append(" REJECTQTY, ")
|
|
|
+ .append("'").append(StringUtil.nvl(line.getRejectReason(),"")).append("' REJECTREASON, ")
|
|
|
+ .append("'").append(StringUtil.nvl(line.getSerialno(),"")).append("' SERIALNO, ")
|
|
|
+ .append("'").append(StringUtil.nvl(line.getCustomField1(),"")).append("' CUSTOMFIELD1, ")
|
|
|
+ .append("'").append(StringUtil.nvl(line.getCustomField2(),"")).append("' CUSTOMFIELD2, ")
|
|
|
+ .append("'").append(StringUtil.nvl(line.getCustomField3(),"")).append("' CUSTOMFIELD3, ")
|
|
|
+ .append("'").append(StringUtil.nvl(line.getCustomField4(),"")).append("' CUSTOMFIELD4, ")
|
|
|
+ .append("'").append(StringUtil.nvl(line.getCustomField5(),"")).append("' CUSTOMFIELD5, ")
|
|
|
+ .append("'").append(StringUtil.nvl(line.getCustomField6(),"")).append("' CUSTOMFIELD6, ")
|
|
|
+ .append("'").append(StringUtil.nvl(line.getCustomField7(),"")).append("' CUSTOMFIELD7, ")
|
|
|
+ .append("'").append(StringUtil.nvl(line.getCustomField8(),"")).append("' CUSTOMFIELD8 ")
|
|
|
+ .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.ACTUALPACKUOMQTY = doc.ACTUALPACKUOMQTY, ")
|
|
|
+ .append("wmsl.REJECTQTY = doc.REJECTQTY, ")
|
|
|
+ .append("wmsl.REJECTREASON = doc.REJECTREASON, ")
|
|
|
+ .append("wmsl.SERIALNO = doc.SERIALNO, ")
|
|
|
+ .append("wmsl.CUSTOMFIELD1 = doc.CUSTOMFIELD1, ")
|
|
|
+ .append("wmsl.CUSTOMFIELD2 = doc.CUSTOMFIELD2, ")
|
|
|
+ .append("wmsl.CUSTOMFIELD3 = doc.CUSTOMFIELD3, ")
|
|
|
+ .append("wmsl.CUSTOMFIELD4 = doc.CUSTOMFIELD4, ")
|
|
|
+ .append("wmsl.CUSTOMFIELD5 = doc.CUSTOMFIELD5, ")
|
|
|
+ .append("wmsl.CUSTOMFIELD6 = doc.CUSTOMFIELD6, ")
|
|
|
+ .append("wmsl.CUSTOMFIELD7 = doc.CUSTOMFIELD7, ")
|
|
|
+ .append("wmsl.CUSTOMFIELD8 = doc.CUSTOMFIELD8 ")
|
|
|
+ .append("WHEN NOT MATCHED THEN INSERT (PL_PIID, LINENO, ITEMCODE, ITEMID, PACKUOM, PLANQTY, ACTUALQTY, ACTUALPACKUOMQTY, REJECTQTY, REJECTREASON, SERIALNO, ")
|
|
|
+ .append("CUSTOMFIELD1, CUSTOMFIELD2, CUSTOMFIELD3, CUSTOMFIELD4, CUSTOMFIELD5, CUSTOMFIELD6, CUSTOMFIELD7, CUSTOMFIELD8) ")
|
|
|
+ .append("VALUES (doc.PIID, doc.LINENO, doc.ITEMCODE, doc.ITEMID, doc.PACKUOM, doc.PLANQTY, doc.ACTUALQTY, doc.ACTUALPACKUOMQTY, ")
|
|
|
+ .append("doc.REJECTQTY, doc.REJECTREASON, doc.SERIALNO, doc.CUSTOMFIELD1, doc.CUSTOMFIELD2, doc.CUSTOMFIELD3, doc.CUSTOMFIELD4, doc.CUSTOMFIELD5, ")
|
|
|
+ .append("doc.CUSTOMFIELD6, doc.CUSTOMFIELD7, doc.CUSTOMFIELD8)");
|
|
|
+ return sql.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ public String getGenerateBatchsSql(String masterCode,Long piid,Integer lineNo,Integer detno,OrderLines.OrderLine.Batchs.Batch batch) {
|
|
|
+ StringBuilder sql = new StringBuilder();
|
|
|
+ sql.append("INSERT INTO ").append(masterCode)
|
|
|
+ .append(".prodiowms_batchs(PB_PIID, PD_DETNO, LINENO, ACTUALQTY, ACTUALPACKUOMQTY, INVENTORYTYPE, VIRTUALWAREHOUSE, PRODUCTDATE, EXPIREDATE, BATCHCODE, STOCKINDATE, USERDEFINED1, USERDEFINED2, USERDEFINED3, USERDEFINED4, LPN) VALUES(");
|
|
|
+ // 添加字段值
|
|
|
+ sql.append(piid).append(", ");
|
|
|
+ sql.append(detno).append(", "); // PD_DETNO
|
|
|
+ sql.append(lineNo).append(", "); // LINENO
|
|
|
+ sql.append(StringUtil.nvl(batch.getActualQty(), "0")).append(", ");
|
|
|
+ sql.append(StringUtil.nvl(batch.getActualPackUomQty(), "0")).append(", ");
|
|
|
+ sql.append("'").append(StringUtil.nvl(batch.getInventoryType(), "")).append("', ");
|
|
|
+ sql.append("'").append(StringUtil.nvl(batch.getVirtualWarehouse(), "")).append("', ");
|
|
|
+ if(StringUtil.hasText(batch.getProductDate())){
|
|
|
+ sql.append("to_date('").append(batch.getProductDate()).append("','yyyy-mm-dd hh24:mi:ss'), ");
|
|
|
+ }else {
|
|
|
+ sql.append("null, ");
|
|
|
+ }
|
|
|
+ if(StringUtil.hasText(batch.getExpireDate())){
|
|
|
+ sql.append("to_date('").append(batch.getExpireDate()).append("','yyyy-mm-dd hh24:mi:ss'), ");
|
|
|
+ }else {
|
|
|
+ sql.append("null, ");
|
|
|
+ }
|
|
|
+ sql.append("'").append(StringUtil.nvl(batch.getBatchCode(), "")).append("', ");
|
|
|
+ if(StringUtil.hasText(batch.getStockinDate())){
|
|
|
+ sql.append("to_date('").append(batch.getStockinDate()).append("','yyyy-mm-dd hh24:mi:ss'), ");
|
|
|
+ }else {
|
|
|
+ sql.append("null, ");
|
|
|
+ }
|
|
|
+ sql.append("'").append(StringUtil.nvl(batch.getUserDefined1(), "")).append("', ");
|
|
|
+ sql.append("'").append(StringUtil.nvl(batch.getUserDefined2(), "")).append("', ");
|
|
|
+ sql.append("'").append(StringUtil.nvl(batch.getUserDefined3(), "")).append("', ");
|
|
|
+ sql.append("'").append(StringUtil.nvl(batch.getUserDefined4(), "")).append("', ");
|
|
|
+ sql.append("'").append(StringUtil.nvl(batch.getLpn(), "")).append("'");
|
|
|
+ sql.append(")");
|
|
|
+ return sql.toString();
|
|
|
+ }
|
|
|
+}
|