| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- package com.uas.eis.entity.vwms.req;
- import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
- import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
- import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
- import com.uas.eis.utils.StringUtil;
- import lombok.Data;
- import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
- import java.util.ArrayList;
- import java.util.List;
- @Data
- @JacksonXmlRootElement(localName = "request")
- @JsonIgnoreProperties(ignoreUnknown = true) // 忽略未知字段
- public class OUTConfirm {
- @JacksonXmlProperty(localName = "deliveryOrder")
- private DeliveryOrder deliveryOrder;
- @JacksonXmlProperty(localName = "orderLines")
- private OrderLines orderLines;
- @Data
- @JsonIgnoreProperties(ignoreUnknown = true) // 忽略未知字段
- public static class DeliveryOrder {
- /** 出库单号 长度:50 */
- private String deliveryOrderCode;
- /** 仓储系统出库单号 长度:50 条件必填 */
- private String deliveryOrderId;
- private String warehouseCode; // 出库仓库编码(物理仓)
- private String inWarehouseCode; // 调入仓库编码(物理仓) 条件必填,调拨出库业务类型该字段必填
- /** 货主代码 长度:50 */
- private String ownerCode;
- private String ownerName;
- private String inOwnerCode; // 目标货主编码 转库目标账套编码
- /** 客户编码 长度:50 */
- private String transceiverCode;
- private String transceiverName;
- /** 出库单类型 长度:50 例如: YPCK=样品出库、DHCK=大货出库、CGTH=退货出库、DBCK=调拨出库、QTCK=其他出库、LYCK=领用出库、JSCK=寄售出库 */
- private String orderType;
- /** 出库单状态 长度:50 NEW-未开始处理, ACCEPT-仓库接单, PARTDELIVERED-部分发货完成, DELIVERED-发货完成, EXCEPTION-异常, CANCELED-取消, CLOSED-关闭, REJECT-拒单, CANCELEDFAIL-取消失败,只传英文编码*/
- private String status;
- /** 支持出库单多次发货 多次发货确认时 0=发货单最终状态确认: 1=发货单中间状态确认 */
- private Integer confirmType;
- /** 物流公司编码 长度:50 SF=顺丰、EMS=标准快递、EYB=经济快件、ZJS=宅急送、YTO=圆通 、ZTO=中通 (ZTO) 、HTKY=百世汇通、BSKY=百世快运、UC=优速、STO=申通、TTKDEX=天天快递 、QFKD=全峰、FAST=快捷、POSTB=邮政小包 、GTO=国通、YUNDA=韵达、JD=京东配送、DD=当当宅配、AMAZON=亚马逊物流、DBWL=德邦物流、DBKD=德邦快递、DBKY=德邦快运、RRS=日日顺、OTHER=其他 ,(只传英文编码) 如果没有购买OMS系统请不要传OTHER,可以传其他自定义的 */
- private String logisticsCode;
- /*物流公司名称(包括干线物流公司等)*/
- private String logisticsName;
- /** 运单号 长度:50 */
- private String expressCode;
- /** 订单完成时间 长度:19 YYYY-MM-DD HH:MM:SS */
- private String orderConfirmTime;
- private String operateTime;//当前状态操作时间, string (19) , YYYY-MM-DD HH:MM:SS
- /*当前状态操作员姓名, string (50)*/
- private String operatorName;
- }
- @Data
- @JsonIgnoreProperties(ignoreUnknown = true)
- public static class OrderLines {
- @JacksonXmlElementWrapper(useWrapping = false) // 去掉外层的包装
- @JacksonXmlProperty(localName = "orderLine")
- private List<OrderLine> orderLine;
- @Data
- @JsonIgnoreProperties(ignoreUnknown = true)
- public static class OrderLine {
- /** 外部业务编码 长度:50 消息ID, 用于去重, 因为网络等原因导致重复传输, 请求不会被重复处理 */
- private String outBizCode;
- /** 行号 */
- private Integer orderLineNo;
- /** 货品代码 长度:50 */
- private String itemCode;
- private String itemId;
- private String itemName;
- /** 预期货品数量 类型:float */
- private Float planQty;
- /** 实发货品数量 类型:float */
- private Float actualQty;
- private String ownerCode;
- private String logicWarehouseCode;
- private String inLogicWarehouseCode;
- }
- }
- public String getMasterCode() {
- if(StringUtil.hasText(deliveryOrder.getOwnerCode())){
- return deliveryOrder.getOwnerCode();
- } else {
- if(orderLines != null && orderLines.getOrderLine() != null && orderLines.getOrderLine().size() > 0){
- return orderLines.getOrderLine().get(0).getOwnerCode();
- }
- }
- 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(deliveryOrder.getDeliveryOrderCode(), "")).append("' ORDERCODE, ")
- .append("'").append(StringUtil.nvl(deliveryOrder.getOwnerCode(), "")).append("' OWNERCODE, ")
- .append("'").append(StringUtil.nvl(deliveryOrder.getInOwnerCode(), "")).append("' inOwnerCode, ")
- .append("'").append(StringUtil.nvl(deliveryOrder.getWarehouseCode(), "")).append("' WAREHOUSECODE, ")
- .append("'").append(StringUtil.nvl(deliveryOrder.getInWarehouseCode(), "")).append("' inWarehouseCode, ")
- .append("'").append(StringUtil.nvl(deliveryOrder.getDeliveryOrderId(), "")).append("' WMSORDERID, ")
- .append("'").append(StringUtil.nvl(deliveryOrder.getOrderType(), "")).append("' WMSORDERTYPE, ")
- .append(StringUtil.nvl(deliveryOrder.getConfirmType(), "0")).append(" CONFIRMTYPE, ")
- .append("'").append(StringUtil.nvl(deliveryOrder.getStatus(), "")).append("' STATUS, ")
- .append("'").append(StringUtil.nvl(deliveryOrder.getLogisticsCode(), "")).append("' logisticsCode, ")
- .append("'").append(StringUtil.nvl(deliveryOrder.getLogisticsName(), "")).append("' logisticsName, ")
- .append("'").append(StringUtil.nvl(deliveryOrder.getExpressCode(), "")).append("' expressCode, ")
- .append((StringUtil.hasText(deliveryOrder.getOrderConfirmTime()) ? "to_date('" + deliveryOrder.getOrderConfirmTime() + "','yyyy-mm-dd hh24:mi:ss')" : "null")).append(" orderConfirmTime, ")
- .append((StringUtil.hasText(deliveryOrder.getOperateTime()) ? "to_date('" + deliveryOrder.getOperateTime() + "','yyyy-mm-dd hh24:mi:ss')" : "null")).append(" operateTime, ")
- .append("'").append(StringUtil.nvl(deliveryOrder.getOperatorName(), "")).append("' operatorName ")
- .append("FROM dual) doc ON (wmsl.PIID = doc.PIID AND wmsl.PIINOUTNO = doc.PIINOUTNO) ")
- .append("WHEN MATCHED THEN UPDATE SET ")
- .append("wmsl.ORDERCODE = doc.ORDERCODE, ")
- // .append("wmsl.OWNERCODE = doc.OWNERCODE, ")
- // .append("wmsl.inOwnerCode = doc.inOwnerCode, ")
- // .append("wmsl.WAREHOUSECODE = doc.WAREHOUSECODE, ")
- // .append("wmsl.inWarehouseCode = doc.inWarehouseCode, ")
- // .append("wmsl.WMSORDERID = doc.WMSORDERID, ")
- // .append("wmsl.WMSORDERTYPE = doc.WMSORDERTYPE, ")
- .append("wmsl.OUTBIZCODE = doc.OUTBIZCODE, ")
- .append("wmsl.CONFIRMTYPE = doc.CONFIRMTYPE, ")
- .append("wmsl.STATUS = doc.STATUS, ")
- .append("wmsl.logisticsCode = doc.logisticsCode, ")
- .append("wmsl.logisticsName = doc.logisticsName, ")
- .append("wmsl.expressCode = doc.expressCode, ")
- .append("wmsl.ORDERFINISHEDTIME = doc.orderConfirmTime, ")
- .append("wmsl.operateTime = doc.operateTime, ")
- .append("wmsl.operatorName = doc.operatorName, ")
- .append("wmsl.UTIME = SYSDATE ")
- .append("WHEN NOT MATCHED THEN INSERT (ITIME,PIID, PIINOUTNO, ORDERCODE, OWNERCODE,TOOWNERCODE, WAREHOUSECODE,INWAREHOUSECODE, WMSORDERID, WMSORDERTYPE, OUTBIZCODE, CONFIRMTYPE, STATUS" +
- ", ORDERFINISHEDTIME, operatorName, OPERATETIME,logisticsCode,logisticsName,expressCode) ")
- .append("VALUES (SYSDATE,doc.PIID, doc.PIINOUTNO, doc.ORDERCODE, doc.OWNERCODE,doc.inOwnerCode,doc.WAREHOUSECODE,doc.inWarehouseCode,doc.WMSORDERID,doc.OUTBIZCODE,doc.CONFIRMTYPE,doc.STATUS" +
- " ,doc.orderConfirmTime,doc.operatorName,doc.operateTime,doc.logisticsCode,doc.logisticsName,doc.expressCode" +
- ")");
- return sql.toString();
- }
- public List<String> getGenerateLinesSql() {
- List<String> sqls = new ArrayList<>();
- sqls.add("UPDATE @MASTERCODE.prodiowms_Lines SET ACTUALQTY=0 WHERE PL_PIID = @PIID");
- for (OUTConfirm.OrderLines.OrderLine line : orderLines.getOrderLine()) {
- sqls.add(getGenerateLinesSql(line));
- }
- return sqls;
- }
- public String getGenerateLinesSql(OUTConfirm.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("'").append(line.getOutBizCode()).append("' OUTBIZCODE, ")
- .append(line.getOrderLineNo()).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("FROM dual) doc ON (wmsl.PL_PIID = doc.PIID AND wmsl.LINENO = doc.LINENO) ")
- .append("WHEN MATCHED THEN UPDATE SET ")
- .append("wmsl.OUTBIZCODE = doc.OUTBIZCODE, ")
- .append("wmsl.ACTUALQTY = NVL(msl.ACTUALQTY,0)+doc.ACTUALQTY, ")
- .append("wmsl.UTIME = SYSDATE ")
- .append("WHEN NOT MATCHED THEN INSERT (PL_PIID,OUTBIZCODE,LINENO, ITEMCODE, PLANQTY,ACTUALQTY) ")
- .append("VALUES (doc.PIID,doc.OUTBIZCODE, doc.LINENO, doc.ITEMCODE, doc.PLANQTY, doc.ACTUALQTY)");
- return sql.toString();
- }
- }
|