Browse Source

【华信科】【富勒WMS对接】【库存转移创建、取消;直发订单创建、取消】

wuyx 8 months ago
parent
commit
a2c66e07e4

+ 16 - 0
src/main/java/com/uas/eis/entity/vwms/entity/AdjustmentOrder.java

@@ -0,0 +1,16 @@
+package com.uas.eis.entity.vwms.entity;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Data;
+
+@Data
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class AdjustmentOrder {
+    private String adjustmentOrderCode;  // 转移单号(ERP单号)
+    private String adjustmentOrderType;  // 转移单类型
+    private String warehouseCode;        // 仓库代码
+    private String ownerCode;            // 货主代码
+    private String createTime;           // 创建时间 YYYY-MM-DD HH:MM:SS
+    private String remark;               // 备注
+}
+

+ 43 - 0
src/main/java/com/uas/eis/entity/vwms/entity/OrderLineMove.java

@@ -0,0 +1,43 @@
+package com.uas.eis.entity.vwms.entity;
+
+import lombok.Data;
+
+@Data
+public class OrderLineMove extends OrderLine {
+    private String targetItemCode; // 目标货品代码(旧)
+    private String targetItemId;   // 目标仓储系统货品代码(旧)
+    private Source source;         // 源信息
+    private Target target;         // 目标信息
+    @Data
+    public static class Source {
+        private String warehouseCode;     // ERP仓库代码
+        private String ownerCode;         // ERP货主代码
+        private String inventoryType = "ZP"; // 原质量状态  ZP=正品,  CC=残次,  默认为ZP
+        private String virtualWarehouse;  // 原虚拟仓库
+        private String productDate;       // 原生产日期 YYYY-MM-DD
+        private String expireDate;        // 原失效日期 YYYY-MM-DD
+        private String batchCode;         // 原批次号
+        private String stockinDate;       // 原入库日期 YYYY-MM-DD
+        private String userDefined1;      // 原自定义批次1
+        private String userDefined2;      // 原自定义批次2
+        private String userDefined3;      // 原自定义批次3
+        private String userDefined4;      // 原自定义批次4
+    }
+
+    @Data
+    public static class Target {
+        private String warehouseCode;     // ERP仓库代码
+        private String ownerCode;         // ERP货主代码
+        private String inventoryType = "ZP"; // 目标质量状态 ZP=正品,  CC=残次,  默认为ZP
+        private String virtualWarehouse;  // 目标虚拟仓库
+        private String productDate;       // 目标生产日期 YYYY-MM-DD
+        private String expireDate;        // 目标过期日期 YYYY-MM-DD
+        private String batchCode;         // 目标批次号
+        private String stockinDate;       // 目标入库日期 YYYY-MM-DD
+        private String userDefined1;      // 目标自定义批次1
+        private String userDefined2;      // 目标自定义批次2
+        private String userDefined3;      // 目标自定义批次3
+        private String userDefined4;      // 目标自定义批次4
+    }
+
+}

+ 1 - 0
src/main/java/com/uas/eis/entity/vwms/entity/ProdInout.java

@@ -19,6 +19,7 @@ public class ProdInout {
     private String piRemark;
     private List<Prodiodetail> details = new ArrayList<>();
 
+    private String currentMasterName;
     private String piOrderType;
     private Integer piSendwmsflag;
     private String piWmsInType;

+ 16 - 0
src/main/java/com/uas/eis/entity/vwms/entity/Prodiodetail.java

@@ -17,4 +17,20 @@ public class Prodiodetail {
     private String pdCustprodcode;
     private String pdCustprodcode1;
     private String pdPocode;
+    //BCCK 拨出、拨入单
+    private String pdWhcodeTo;
+    private String pdWhnameTo;
+    //出账套
+    private String postMasterCode;
+    private String postMasterName;
+    //入账套
+    private String sourceMasterCode;
+    private String sourceMasterName;
+
+    //pd_prodcode1_user 新物料编号
+    private String pdProdcodeTo;
+    private String pdBrandNameTo;
+
+
+
 }

+ 19 - 0
src/main/java/com/uas/eis/entity/vwms/req/AdjustmentAndDetRequest.java

@@ -0,0 +1,19 @@
+package com.uas.eis.entity.vwms.req;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.uas.eis.entity.vwms.entity.OrderLineMove;
+import com.uas.eis.entity.vwms.entity.OrderLineOut;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class AdjustmentAndDetRequest extends AdjustmentRequest{
+    OutOrderLines orderLines;
+    @Data
+    public static class OutOrderLines{
+        List<OrderLineMove> orderLine;
+    }
+
+}

+ 12 - 0
src/main/java/com/uas/eis/entity/vwms/req/AdjustmentRequest.java

@@ -0,0 +1,12 @@
+package com.uas.eis.entity.vwms.req;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.uas.eis.entity.vwms.entity.AdjustmentOrder;
+import com.uas.eis.entity.vwms.entity.DeliveryOrder;
+import lombok.Data;
+
+@Data
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class AdjustmentRequest {
+    AdjustmentOrder adjustmentOrder;
+}

+ 0 - 1
src/main/java/com/uas/eis/entity/vwms/req/EntryOrderAndDetRequest.java

@@ -1,7 +1,6 @@
 package com.uas.eis.entity.vwms.req;
 
 import com.uas.eis.entity.vwms.entity.OrderLineIn;
-import com.uas.eis.entity.vwms.entity.OrderLineOut;
 import lombok.Data;
 
 import java.util.List;

+ 1 - 0
src/main/java/com/uas/eis/entity/vwms/resp/BaseVastResp.java

@@ -17,6 +17,7 @@ public class BaseVastResp {
         private String message;
         private String entryOrderId;//入库单仓储系统代码
         private String deliveryOrderId;//出库单仓储系统代码
+        private String adjustmentOrderId;//仓储系统转移单号
         private String createTime; //订单创建时间  YYYY-MM-DD HH:MM:SS
         private Items items;
         private Orders orders;  // 新增字段,用于第一种格式

+ 19 - 0
src/main/java/com/uas/eis/service/DocCommonService.java

@@ -0,0 +1,19 @@
+package com.uas.eis.service;
+
+
+
+import com.uas.eis.entity.vwms.entity.ProdInout;
+
+import java.util.Map;
+
+/**
+ * @author wuyx
+ * @email wuyx@usoftchina.com
+ * @date 2025-03-04
+ */
+public interface DocCommonService {
+    ProdInout getIO(String master,String id,boolean onlyMain);
+    String sendOMoveToWms(ProdInout prodInOut, String masterName);
+    String sendOutToWms(ProdInout prodInOut, String masterName);
+    String sendInToWms(ProdInout prodInOut, String masterName);
+}

+ 456 - 0
src/main/java/com/uas/eis/service/Impl/DocCommonServiceImpl.java

@@ -0,0 +1,456 @@
+package com.uas.eis.service.Impl;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.uas.eis.config.VwmsConfig;
+import com.uas.eis.dao.BaseDao;
+import com.uas.eis.dao.SqlRowList;
+import com.uas.eis.entity.vwms.entity.*;
+import com.uas.eis.entity.vwms.req.*;
+import com.uas.eis.entity.vwms.resp.BaseVastResp;
+import com.uas.eis.service.DocCommonService;
+import com.uas.eis.service.ERPService;
+import com.uas.eis.utils.CollectionUtil;
+import com.uas.eis.utils.HttpUtil;
+import com.uas.eis.utils.StringUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @author wuyx
+ * @email wuyx@usoftchina.com
+ * @date 2025-03-04
+ */
+@Service
+public class DocCommonServiceImpl implements DocCommonService {
+    private final Logger logger = LoggerFactory.getLogger(this.getClass());
+    @Autowired
+    private BaseDao baseDao;
+
+    @Autowired
+    private VwmsConfig vwmsConfig;
+
+    @Autowired
+    private ObjectMapper objectMapper;  // 注入Jackson的ObjectMapper
+
+    @Override
+    public ProdInout getIO(String master,String id,boolean onlyMain){
+        // 查询主表信息
+        ProdInout prodInOut = queryMainTable(master, id);
+        if (!onlyMain) {
+            // 构建明细查询SQL
+            String detSql = buildDetailSql(master, prodInOut);
+            // 查询明细数据
+            List<Prodiodetail> details = queryDetails(master, detSql);
+            prodInOut.setDetails(details);
+            // 更新WMS相关表
+            if (!prodInOut.getPiWmsstatus().equals("已确认")) {
+                updateWmsTables(master, prodInOut, detSql);
+            }
+        }
+        return prodInOut;
+    }
+
+    private ProdInout queryMainTable(String master, String id) {
+        String sql = new StringBuilder()
+                .append("select pi_Wmsordertype piOrderType,pi_id piId,pi_inoutno piInoutno,pi_class piClass,pi_type piType,")
+                .append("to_char(pi_recorddate,'yyyy-mm-dd hh24:mi:ss') piDate,pi_Cardcode piCardcode,pi_Title piTitle,")
+                .append("pi_Recordman piRecordman,to_char(pi_recorddate,'yyyy-mm-dd hh24:mi:ss') piRecorddate,pi_Remark piRemark,")
+                .append("abs(nvl(pi_sendwmsflag,0)) piSendwmsflag,nvl(pi_WmsInType,'in') piWmsInType,pi_wmsstatus piWmsstatus,")
+                .append("pi_invostatuscode piInvoStatusCode,pi_lxr_user piLxr,pi_lxdh_user piLxdh,pi_shrsj_user piShrsj,pi_khdz_user piKhdz,ma_function currentMasterName ")
+                .append("from ").append(master).append(".prodinout left join DATACENTER_P.MASTER on MA_USER = '").append(master).append("' where pi_id = ").append(id)
+                .toString();
+        List<ProdInout> prodInOuts = baseDao.getJdbcTemplate().query(sql,
+                new BeanPropertyRowMapper<>(ProdInout.class));
+        return prodInOuts.get(0);
+    }
+    private String buildDetailSql(String master, ProdInout prodInOut) {
+        StringBuilder sqlBuilder = new StringBuilder();
+        if ("out".equals(prodInOut.getPiWmsInType())) {
+            sqlBuilder.append("select pd_piid pdPiid,min(pd_id) pdId,min(pd_pdno) pdPdno,pd_prodcode pdProdcode,")
+                    .append("pr_detail pdProdname,pr_brand pdBrandName,sum(nvl(pd_inqty,0)+nvl(pd_outqty,0)) pdQty,")
+                    .append("pd_whcode pdWhcode,wh_description pdWhname,pd_description pdInBatch,")
+                    .append("pd_custprodcode pdCustprodcode,pd_custprodcode1_user pdCustprodcode1, pd_pocode pdPocode ")
+                    .append("from ").append(master).append(".prodiodetail LEFT JOIN ").append(master).append(".product on pr_code = pd_prodcode ")
+                    .append("left join ").append(master).append(".productbrand on pb_name = pr_brand ")
+                    .append("left join ").append(master).append(".warehouse on wh_Code = pd_whcode ")
+                    .append("where pd_piid = ").append(prodInOut.getPiId()).append(" and pb_sendwms = -1 ")
+                    .append("group by pd_piid,pd_prodcode,pr_detail,pr_brand,pd_whcode,wh_description,pd_description,")
+                    .append("pd_custprodcode,pd_custprodcode1_user,pd_pocode order by MIN(pd_pdno)");
+        } else if ("move".equals(prodInOut.getPiWmsInType())) {
+            String orderType = prodInOut.getPiOrderType();
+            //NBZK 内部转库(出货单) QTCK 其他出库(其它出库单) NBZKZF: 内部转库-直发(其它出库单、出货单、采购验退单)
+            if("NBZK".equals(orderType)||"QTCK".equals(orderType)||"NBZKZF".equals(orderType)){
+                sqlBuilder.append("select pd_piid pdPiid,min(pd_id) pdId,min(pd_pdno) pdPdno,pd_prodcode pdProdcode,pr_detail pdProdname,pr_brand pdBrandName" +
+                        ",sum(nvl(pd_inqty,0)+nvl(pd_outqty,0)) pdQty" +
+                        ",pd_whcode pdWhcode,owh.wh_description pdWhname,pd_description pdInBatch" +
+                        ",pi_custwhcode_user pdWhcodeTo,iwh.wh_description pdWhnameTo" +
+                        ",pi_postmastercode postMasterCode,ma_function postMasterName " +
+                        ",pd_prodcode pdProdcodeTo,pr_brand pdBrandNameTo" +
+                        " from "+master+".prodiodetail left join "+master+".prodinout on pi_id = pd_piid " +
+                        " left join "+master+".product on pr_code = pd_prodcode left join  "+master+".productbrand on pb_name = pr_brand " +
+                        " left join "+master+".warehouse owh on owh.wh_Code = pd_whcode " +
+                        " left join "+master+".warehouse iwh on iwh.wh_Code = pi_custwhcode_user" +
+                        " left join DATACENTER_P.MASTER ON MA_USER = pi_postmastercode "+
+                        " where pd_piid = "+prodInOut.getPiId()+" and pb_sendwms = -1 " +
+                        " group by pd_piid,pd_prodcode,pr_detail,pr_brand,pd_whcode,owh.wh_description,pd_description" +
+                        "   ,pi_custwhcode_user,iwh.wh_description,pi_postmastercode,ma_function" +
+                        " order by MIN(pd_pdno) ");
+            }
+            //BCCK 拨出、拨入单 BCCKZF 库存转移-直发(拨出、拨入)
+            if("BCCK".equals(prodInOut.getPiOrderType())||"BCCKZF".equals(prodInOut.getPiOrderType())){
+                sqlBuilder.append("select pd_piid pdPiid,min(pd_id) pdId,min(pd_pdno) pdPdno,pd_prodcode pdProdcode,pr_detail pdProdname,pr_brand pdBrandName" +
+                        ",sum(nvl(pd_inqty,0)+nvl(pd_outqty,0)) pdQty" +
+                        ",pd_whcode pdWhcode,owh.wh_description pdWhname,pd_description pdInBatch" +
+                        ",pd_inwhcode pdWhcodeTo,iwh.wh_description pdWhnameTo" +
+                        ",'"+master+"' postMasterCode,'"+prodInOut.getCurrentMasterName()+"' postMasterName " +
+                        ",pd_prodcode pdProdcodeTo,pr_brand pdBrandNameTo" +
+                        " from "+master+".prodiodetail LEFT JOIN "+master+".product on pr_code = pd_prodcode left join  "+master+".productbrand on pb_name = pr_brand " +
+                        " left join "+master+".warehouse owh on owh.wh_Code = pd_whcode " +
+                        " left join "+master+".warehouse iwh on iwh.wh_Code = pd_inwhcode " +
+                        " where pd_piid = "+prodInOut.getPiId()+" and pb_sendwms = -1 " +
+                        " group by pd_piid,pd_prodcode,pr_detail,pr_brand,pd_whcode,owh.wh_description,pd_description" +
+                        "   ,pd_inwhcode,iwh.wh_description" +
+                        " order by MIN(pd_pdno) ");
+            }
+            //XHTZ 型号调整(其它出库单) XHTZZF 型号调整-直发(其它出库单)
+            if("XHTZ".equals(prodInOut.getPiOrderType())||"XHTZZF".equals(prodInOut.getPiOrderType())){
+                sqlBuilder.append("select pd_piid pdPiid,min(pd_id) pdId,min(pd_pdno) pdPdno,pd_prodcode pdProdcode,ipr.pr_detail pdProdname,obr.pr_brand pdBrandName" +
+                        ",sum(nvl(pd_inqty,0)+nvl(pd_outqty,0)) pdQty" +
+                        ",pd_whcode pdWhcode,owh.wh_description pdWhname,pd_description pdInBatch" +
+                        ",pd_postwhcode pdWhcodeTo,iwh.wh_description pdWhnameTo" +
+                        ",'"+master+"' postMasterCode,'"+prodInOut.getCurrentMasterName()+"' postMasterName " +
+                        ",pd_prodcode1_user pdProdcodeTo,ibr.pr_brand pdBrandNameTo" +
+                        " from "+master+".prodiodetail " +
+                        " LEFT JOIN "+master+".product ipr on ipr.pr_code = pd_prodcode left join "+master+".productbrand ibr on ibr.pb_name = ipr.pr_brand " +
+                        " LEFT JOIN "+master+".product opr on opr.pr_code = pd_prodcode left join "+master+".productbrand obr on obr.pb_name = opr.pr_brand " +
+                        " left join "+master+".warehouse owh on owh.wh_Code = pd_whcode " +
+                        " left join "+master+".warehouse iwh on iwh.wh_Code = pd_postwhcode " +
+                        " where pd_piid = "+prodInOut.getPiId()+" and obr.pb_sendwms = -1 and ibr.pb_sendwms = -1 " +
+                        " group by pd_piid,pd_prodcode,opr.pr_detail,opr.pr_brand,pd_whcode,owh.wh_description,pd_description" +
+                        "   ,pd_postwhcode,iwh.wh_description,pd_prodcode1_user,ibr.pr_brand" +
+                        " order by MIN(pd_pdno) ");
+            }
+        } else {
+            sqlBuilder.append("select pd_piid pdPiid,min(pd_id) pdId,min(pd_pdno) pdPdno,pd_prodcode pdProdcode,pr_detail pdProdname,pr_brand pdBrandName" +
+                    ",sum(nvl(pd_inqty,0)+nvl(pd_outqty,0)) pdQty" +
+                    ",pd_whcode pdWhcode,wh_description pdWhname,pd_description pdInBatch" +
+                    " from "+master+".prodiodetail LEFT JOIN "+master+".product on pr_code = pd_prodcode left join  "+master+".productbrand on pb_name = pr_brand " +
+                    " left join "+master+".warehouse on wh_Code = pd_whcode " +
+                    " where pd_piid = "+prodInOut.getPiId()+" and pb_sendwms = -1 " +
+                    " group by pd_piid,pd_prodcode,pr_detail,pr_brand,pd_whcode,wh_description,pd_description" +
+                    " order by MIN(pd_pdno) ");
+        }
+
+        return sqlBuilder.toString();
+    }
+
+    private List<Prodiodetail> queryDetails(String master, String sql) {
+        return baseDao.getJdbcTemplate().query(sql,
+                new BeanPropertyRowMapper<>(Prodiodetail.class));
+    }
+
+    private void updateWmsTables(String master, ProdInout prodInOut, String detSql) {
+        Long piId = prodInOut.getPiId();
+        // 删除旧数据
+        String deleteMainSql = "delete from " + master + ".prodiowms where PIID = " + piId;
+        String deleteDetailSql = "delete from " + master + ".prodiowms_lines where pl_piid = " + piId;
+        baseDao.execute(deleteMainSql);
+        baseDao.execute(deleteDetailSql);
+
+        // 插入主表数据
+        String sql = new StringBuilder()
+                .append("INSERT INTO ").append(master).append(".prodiowms(ITIME,PIID, PIINOUTNO, ORDERCODE, OWNERCODE, WAREHOUSECODE, WMSORDERID, WMSORDERTYPE)")
+                .append(" select sysdate,pi_id,pi_inoutno,pi_inoutno,'")
+                .append(vwmsConfig.getOwnerCode()).append("','")
+                .append(vwmsConfig.getWarehouseCode()).append("',PI_WMSORDERCODE,PI_WMSORDERTYPE")
+                .append(" from ").append(master).append(".prodinout where pi_id = ").append(prodInOut.getPiId())
+                .toString();
+        baseDao.execute(sql);
+        // 插入明细数据
+        if ("out".equals(prodInOut.getPiWmsInType())) {
+            String insertDetailSql = new StringBuilder()
+                    .append("INSERT INTO ").append(master).append(".prodiowms_Lines(ITIME,PL_PIID,LINENO, ITEMCODE, PLANQTY,virtualWarehouse, USERDEFINED1,userDefined3,USERDEFINED4,customField1,customField2,customField3)")
+                    .append(" select sysdate,pdPiid,pdPdno,pdProdcode,pdQty,pdWhname,pdInBatch,pdBrandName,'")
+                    .append(master).append("',pdCustprodcode,pdCustprodcode1,pdPocode from (").append(detSql).append(")")
+                    .toString();
+            baseDao.execute(insertDetailSql);
+        } else if ("move".equals(prodInOut.getPiWmsInType())) {
+            //NBZK 内部转库(出货单) QTCK 其他出库(其它出库单) NBZKZF: 内部转库-直发(其它出库单、出货单、采购验退单)
+            //BCCK: 拨出、拨入单 BCCKZF: 库存转移-直发(拨出、拨入)
+            //XHTZ: 型号调整(其它出库单) XHTZZF: 型号调整-直发(其它出库单)
+            String insertDetailSql = new StringBuilder()
+                    .append("INSERT INTO ").append(master).append(".prodiowms_Lines(ITIME,PL_PIID,LINENO, ITEMCODE, PLANQTY,virtualWarehouse")
+                    .append(" ,targetItemCode,s_userdefined1,s_userdefined3,s_userdefined4,t_userdefined1,t_userdefined3,t_userdefined4)")
+                    .append("select sysdate,pdPiid,pdPdno,pdProdcode,pdQty,pdWhname")
+                    .append("   ,pdProdcodeTo,pdInBatch,pdBrandName,'").append(master).append("',pdInBatch,pdBrandNameTo,postMasterCode")
+                    .append(" from (").append(detSql).append(")")
+                    .toString();
+            baseDao.execute(insertDetailSql);
+        } else {
+            String insertDetailSql = new StringBuilder()
+                    .append("INSERT INTO ").append(master).append(".prodiowms_Lines(ITIME,PL_PIID,LINENO, ITEMCODE, PLANQTY,virtualWarehouse, USERDEFINED1,userDefined3,USERDEFINED4)")
+                    .append(" select sysdate,pdPiid,pdPdno,pdProdcode,pdQty,pdWhname,pdInBatch,pdBrandName,'")
+                    .append(master).append("' from (").append(detSql).append(")")
+                    .toString();
+            baseDao.execute(insertDetailSql);
+        }
+    }
+
+    private List<? extends OrderLine> getOrderLines(ProdInout prodInOut,String masterName) {
+        List<OrderLine> orderLineList = new ArrayList<>();
+        String orderType = prodInOut.getPiOrderType();
+        for (Prodiodetail detail : prodInOut.getDetails()) {
+            OrderLine orderLine;
+            if ("in".equals(prodInOut.getPiWmsInType())) {
+                orderLine = new OrderLineIn(); // 创建入库订单行对象
+                ((OrderLineIn) orderLine).setStockinDate(prodInOut.getPiDate()); // 设置入库日期
+            }else if ("out".equals(prodInOut.getPiWmsInType())) {
+                orderLine = new OrderLineOut(); // 创建普通订单行对象
+                ((OrderLineOut) orderLine).setCustomField1(detail.getPdCustprodcode());
+                ((OrderLineOut) orderLine).setCustomField2(detail.getPdCustprodcode1());
+                ((OrderLineOut) orderLine).setCustomField3(detail.getPdPocode());
+            }else {//move
+                orderLine = new OrderLineMove(); // 创建普通订单行对象
+                OrderLineMove.Source moveSource = new OrderLineMove.Source();
+                moveSource.setVirtualWarehouse(detail.getPdWhname());
+                moveSource.setUserDefined1(detail.getPdInBatch());
+                moveSource.setUserDefined3(detail.getPdBrandName());
+                moveSource.setUserDefined4(prodInOut.getCurrentMasterName());
+                ((OrderLineMove) orderLine).setSource(moveSource);
+                OrderLineMove.Target moveTarget = new OrderLineMove.Target();
+                moveTarget.setVirtualWarehouse(detail.getPdWhnameTo());
+                moveTarget.setUserDefined1(detail.getPdInBatch());
+                moveTarget.setUserDefined3(detail.getPdBrandName());
+                moveTarget.setUserDefined4(detail.getPostMasterName());
+                ((OrderLineMove) orderLine).setTarget(moveTarget);
+                //型号调整(其它出库单)	XHTZ 型号调整-直发(其它出库单)	XHTZZF
+                if("XHTZ".equals(orderType)||"XHTZZF".equals(orderType)){
+                    ((OrderLineMove) orderLine).setTargetItemCode(detail.getPdProdcodeTo());
+                }
+            }
+            // 设置通用属性
+            orderLine.setLineNo(String.valueOf(detail.getPdPdno()));// 行号
+            orderLine.setItemCode(detail.getPdProdcode());// 商品编码
+            orderLine.setItemName(detail.getPdProdname());// 商品名称
+            orderLine.setPlanQty(detail.getPdQty());// 数量
+            if (!"move".equals(prodInOut.getPiWmsInType())) {
+                orderLine.setOwnerCode(vwmsConfig.getOwnerCode());// 货主编码
+                orderLine.setVirtualWarehouse(detail.getPdWhname());// 虚拟仓库编号
+                orderLine.setUserDefined1(detail.getPdInBatch());// 入库批次
+                orderLine.setUserDefined3(detail.getPdBrandName());// 品牌
+                orderLine.setUserDefined4(masterName);//账套
+            }
+            orderLineList.add(orderLine);
+        }
+        return orderLineList;
+    }
+
+    @Override
+    public String sendOMoveToWms(ProdInout prodInOut, String masterName) {
+        AdjustmentAndDetRequest adjustmentRequest = new AdjustmentAndDetRequest();
+        //写入主表
+        AdjustmentOrder adjustmentOrder = new AdjustmentOrder();
+        adjustmentOrder.setAdjustmentOrderCode(prodInOut.getPiInoutno());// 转移单号(ERP单号)
+        adjustmentOrder.setAdjustmentOrderType(prodInOut.getPiOrderType());// 转移单类型
+        adjustmentOrder.setOwnerCode(vwmsConfig.getOwnerCode());// 货主编码
+        adjustmentOrder.setWarehouseCode(vwmsConfig.getWarehouseCode());// 仓库编码
+        adjustmentOrder.setCreateTime(prodInOut.getPiRecordDate());
+        adjustmentOrder.setRemark(prodInOut.getPiRemark());
+        adjustmentRequest.setAdjustmentOrder(adjustmentOrder);
+        //写入明细表
+        List<OrderLineMove> orderLineMoves = (List<OrderLineMove>) getOrderLines(prodInOut, masterName);
+        AdjustmentAndDetRequest.OutOrderLines orderLines = new AdjustmentAndDetRequest.OutOrderLines();
+        orderLines.setOrderLine(orderLineMoves);
+        adjustmentRequest.setOrderLines(orderLines);
+        //转换为JSON字符串
+        String json = null;
+        String method = null;
+        BaseReq<AdjustmentRequest> req = new BaseReq();
+        req.setRequest(adjustmentRequest);
+        method = "openapi.adjustmentorder.create";
+        try {
+            json = objectMapper.writeValueAsString(req);
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+            return "JSON转换失败";
+        }
+        return doSendOrderToWms(json,method);
+    }
+
+    @Override
+    public String sendOutToWms(ProdInout prodInOut, String masterName) {
+        StockOutAndDetRequest stockOutAndDetRequest = new StockOutAndDetRequest();
+        DeliveryOrder deliveryOrder = new DeliveryOrder();
+        deliveryOrder.setOutBizCode(prodInOut.getPiOrderType()+"-"+System.currentTimeMillis());// 外部业务代码 消息ID, 用于去重, 因为网络等原因导致重复传输, 请求不会被重复处理
+        deliveryOrder.setDeliveryOrderCode(prodInOut.getPiInoutno());// 出库单号
+        deliveryOrder.setOwnerCode(vwmsConfig.getOwnerCode());// 货主编码
+        deliveryOrder.setWarehouseCode(vwmsConfig.getWarehouseCode());// 仓库编码
+        deliveryOrder.setPlacedAt(prodInOut.getPiDate());// 订单创建时间
+        deliveryOrder.setOrderType(prodInOut.getPiOrderType());// 订单类型
+        deliveryOrder.setCustomerCode(prodInOut.getPiCardCode());// 客户编码
+        deliveryOrder.setCustomer(prodInOut.getPiTitle());// 客户名称
+        /*
+         * 提交对接创建-> 0=未释放
+         * 审核 -> 1=已释放
+         * prodInOut.getPiInvoStatusCode().equals("COMMITED") &&
+         *  */
+        if(prodInOut.getPiSendwmsflag()>0){
+            deliveryOrder.setIsRelease("1");
+        }else {
+            deliveryOrder.setIsRelease("0");
+        }
+        deliveryOrder.setDocumentMaker(prodInOut.getPiRecordman());// 制单人
+        deliveryOrder.setCreateTime(prodInOut.getPiRecordDate());
+        deliveryOrder.setRemark(prodInOut.getPiRemark());// 备注
+        DeliveryOrder.ReceiverInfo receiverInfo = new DeliveryOrder.ReceiverInfo();
+        receiverInfo.setName(StringUtil.nvl(prodInOut.getPiLxr(),"无"));
+        receiverInfo.setMobile(StringUtil.nvl(prodInOut.getPiLxdh(),prodInOut.getPiShrsj()));
+        receiverInfo.setDetailAddress(StringUtil.nvl(prodInOut.getPiKhdz(),"无"));
+        deliveryOrder.setReceiverInfo(receiverInfo);
+        //写入明细表
+        List<OrderLineOut> orderLineOuts = (List<OrderLineOut>) getOrderLines(prodInOut, masterName);
+        stockOutAndDetRequest.setDeliveryOrder(deliveryOrder);
+        StockOutAndDetRequest.OutOrderLines orderLines = new StockOutAndDetRequest.OutOrderLines();
+        orderLines.setOrderLine(orderLineOuts);
+        stockOutAndDetRequest.setOrderLines(orderLines);
+        //转换为JSON字符串
+        String json = null;
+        String method = null;
+        if(prodInOut.getPiSendwmsflag() == 0){
+            BaseReq<StockOutAndDetRequest> req = new BaseReq();
+            req.setRequest(stockOutAndDetRequest);
+            method = "openapi.stockout.create";
+            try {
+                json = objectMapper.writeValueAsString(req);
+            } catch (JsonProcessingException e) {
+                e.printStackTrace();
+                return "JSON转换失败";
+            }
+        }else {
+            method = "openapi.stockout.batchupdate";
+            BaseReq<OrderVastRequest<StockOutAndDetRequest>> req = new BaseReq();
+            OrderVastRequest<StockOutAndDetRequest> vastReq = new OrderVastRequest();
+            OrderVastRequest.OrdersRequest<StockOutAndDetRequest> orders = new OrderVastRequest.OrdersRequest<StockOutAndDetRequest>();
+            orders.setOrder(Arrays.asList(stockOutAndDetRequest));
+            vastReq.setOutBizCode(stockOutAndDetRequest.getDeliveryOrder().getOutBizCode());
+            vastReq.setOrders(orders);
+            req.setRequest(vastReq);
+            try {
+                json = objectMapper.writeValueAsString(req);
+            } catch (JsonProcessingException e) {
+                e.printStackTrace();
+                return "JSON转换失败";
+            }
+        }
+        return doSendOrderToWms(json,method);
+    }
+
+    @Override
+    public String sendInToWms(ProdInout prodInOut,String masterName){
+        EntryOrder entryOrder = new EntryOrder();
+        entryOrder.setOutBizCode(prodInOut.getPiOrderType()+"-"+System.currentTimeMillis());// 外部业务代码 消息ID, 用于去重, 因为网络等原因导致重复传输, 请求不会被重复处理
+        entryOrder.setEntryOrderCode(prodInOut.getPiInoutno());// 入库单号
+        entryOrder.setOwnerCode(vwmsConfig.getOwnerCode());// 货主编码
+        entryOrder.setWarehouseCode(vwmsConfig.getWarehouseCode());// 仓库编码
+        entryOrder.setOrderCreateTime(prodInOut.getPiRecordDate());// 订单创建时间
+        entryOrder.setOrderType(prodInOut.getPiOrderType());// 订单类型
+        entryOrder.setSupplierCode(prodInOut.getPiCardCode());// 供应商编码
+        entryOrder.setSupplierName(prodInOut.getPiTitle());// 供应商名称
+        entryOrder.setDocumentMaker(prodInOut.getPiRecordman());// 制单人
+        entryOrder.setRemark(prodInOut.getPiRemark());// 备注
+        List<OrderLineIn> orderList = (List<OrderLineIn>) getOrderLines(prodInOut, masterName);
+        EntryOrderAndDetRequest entryOrderAndDetRequest = new EntryOrderAndDetRequest();
+        EntryOrderAndDetRequest.InOrderLines orderLineIns = new EntryOrderAndDetRequest.InOrderLines();
+        orderLineIns.setOrderLine(orderList);
+        entryOrderAndDetRequest.setEntryOrder(entryOrder);
+        entryOrderAndDetRequest.setOrderLines(orderLineIns);
+        //转换为JSON字符串
+        String json = null;
+        String method = null;
+        if(prodInOut.getPiSendwmsflag() == 0){
+            method = "openapi.entryorder.create";
+            BaseReq<EntryOrderAndDetRequest> req = new BaseReq();
+            req.setRequest(entryOrderAndDetRequest);
+            try {
+                json = objectMapper.writeValueAsString(req);
+            } catch (JsonProcessingException e) {
+                e.printStackTrace();
+                return "JSON转换失败";
+            }
+            //TODO 写入表:WMS_IO_RECORD_SEQ
+        }else {
+            method = "openapi.entryorder.batchupdate";
+            BaseReq<OrderVastRequest<EntryOrderAndDetRequest>> req = new BaseReq();
+            OrderVastRequest<EntryOrderAndDetRequest> vastReq = new OrderVastRequest();
+            OrderVastRequest.OrdersRequest<EntryOrderAndDetRequest> orders = new OrderVastRequest.OrdersRequest<EntryOrderAndDetRequest>();
+            orders.setOrder(Arrays.asList(entryOrderAndDetRequest));
+            vastReq.setOutBizCode(entryOrderAndDetRequest.getEntryOrder().getOutBizCode());
+            vastReq.setOrders(orders);
+            req.setRequest(vastReq);
+            try {
+                json = objectMapper.writeValueAsString(req);
+            } catch (JsonProcessingException e) {
+                e.printStackTrace();
+                return "JSON转换失败";
+            }
+        }
+        return doSendOrderToWms(json,method);
+    }
+
+    private String doSendOrderToWms(String json,String method){
+        String eMsg = null;
+        try {
+            logger.info("doSendInOrderToWms method:{} json: {}",method, json);
+            HttpUtil.Response response = HttpUtil.doPostToVWMS(method, json,vwmsConfig);
+            if(!String.valueOf(response.getStatusCode()).startsWith("2")){
+                eMsg = "("+response.getStatusCode()+")"+StringUtil.nvl(response.getResponseText(),"未知").replaceAll("'","''");
+            }else {
+                BaseVastResp baseVastResp = new ObjectMapper().readValue(response.getResponseText(), BaseVastResp.class);
+                BaseVastResp.Response baseVastRespResponse= baseVastResp.getResponse();
+                if(baseVastRespResponse!=null){
+                    if("success".equals(baseVastRespResponse.getFlag())){
+                        String orderId = "";
+                        if("openapi.entryorder.create".equals(method)){
+                            orderId = baseVastRespResponse.getEntryOrderId();
+                            eMsg = "OrderId:"+orderId;
+                        }
+                        if("openapi.stockout.create".equals(method)){
+                            orderId = baseVastRespResponse.getDeliveryOrderId();
+                            eMsg = "OrderId:"+orderId;
+                        }
+                        if("openapi.adjustmentorder.create".equals(method)){
+                            orderId = baseVastRespResponse.getAdjustmentOrderId();
+                            eMsg = "OrderId:"+orderId;
+                        }
+                        logger.info("doSendInOrderToWms-resp-s code: {} method {} OrderId {} message: {}", baseVastRespResponse.getCode(),method,orderId,baseVastRespResponse.getMessage());
+                    }else {
+                        eMsg = "(" + baseVastRespResponse.getCode() + ")";
+                        String errorMessage = baseVastRespResponse.getMessage();
+                        if (baseVastRespResponse.getOrders() != null &&
+                                !CollectionUtil.isEmpty(baseVastRespResponse.getOrders().getOrder())) {
+                            errorMessage = StringUtil.nvl(baseVastRespResponse.getOrders().getOrder().get(0).getMessage(),baseVastRespResponse.getMessage());
+                        }
+                        eMsg += StringUtil.nvl(errorMessage, "未知").replaceAll("'", "''");
+                    }
+                }else {
+                    eMsg = "RespJSON转换失败:"+response.getStatusCode()+":"+response.getResponseText();
+                }
+            }
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+            eMsg = "JSON转换失败";
+        } catch (Exception e) {
+            e.printStackTrace();
+            eMsg = StringUtil.nvl(e.getMessage(),"无").replaceAll("'","''");
+        }
+        return eMsg;
+    }
+}

+ 13 - 247
src/main/java/com/uas/eis/service/Impl/ERPServiceImpl.java

@@ -7,6 +7,7 @@ import com.uas.eis.dao.*;
 import com.uas.eis.entity.vwms.entity.*;
 import com.uas.eis.entity.vwms.req.*;
 import com.uas.eis.entity.vwms.resp.BaseVastResp;
+import com.uas.eis.service.DocCommonService;
 import com.uas.eis.service.ERPService;
 import com.uas.eis.utils.CollectionUtil;
 import com.uas.eis.utils.HttpUtil;
@@ -38,6 +39,9 @@ public class ERPServiceImpl implements ERPService {
     @Autowired
     private ObjectMapper objectMapper;  // 注入Jackson的ObjectMapper
 
+    @Autowired
+    private DocCommonService docCommonService;
+
     @Override
     public Map<String, Object> sendProd(String master, String ids,String emCode,String caller) {
         Map<String,Object> retMap = new HashMap<>();
@@ -657,7 +661,7 @@ public class ERPServiceImpl implements ERPService {
             retMap.put("message","没有需要对接的明细。");
             return retMap;
         }
-        ProdInout prodInOut = getIO(master,id,false);
+        ProdInout prodInOut = docCommonService.getIO(master,id,false);
         if(CollectionUtil.isEmpty(prodInOut.getDetails())){
             retMap.put("success",false);
             retMap.put("message","没有需要同步的明细。");
@@ -679,19 +683,22 @@ public class ERPServiceImpl implements ERPService {
             return retMap;
         }
         //构建请求主体
-        String masterName = baseDao.queryForObject("select max(ma_function) masterName from DATACENTER_P.master where ma_user = '"+master+"' ",String.class);
+        String masterName = prodInOut.getCurrentMasterName();
         Long piId = prodInOut.getPiId();
         String errMsg = null;
         if("in".equals(prodInOut.getPiWmsInType())){
-            errMsg = sendInToWms(prodInOut,masterName);
+            errMsg = docCommonService.sendInToWms(prodInOut,masterName);
         }
         if("out".equals(prodInOut.getPiWmsInType())){
-            errMsg = sendOutToWms(prodInOut,masterName);
+            errMsg = docCommonService.sendOutToWms(prodInOut,masterName);
+        }
+        if("move".equals(prodInOut.getPiWmsInType())){
+            errMsg = docCommonService.sendOMoveToWms(prodInOut,masterName);
         }
         if(errMsg!=null){
             if(errMsg.startsWith("OrderId:")){
                 retMap.put("OrderId",errMsg.replaceAll("OrderId:",""));
-                logger.info("sendIO-End-Sucess master {} piid {} OrderId {}",master,piId,errMsg.replaceAll("EntryOrderId:",""));
+                logger.info("sendIO-End-Sucess master {} piid {} OrderId {}",master,piId,errMsg.replaceAll("OrderId:",""));
             }else {
                 errMsg =  errMsg.replaceAll("'","''");
                 logger.info("sendIO-End-failure master {} piid {} errorTip {}",master,piId,errMsg);
@@ -704,168 +711,6 @@ public class ERPServiceImpl implements ERPService {
         return retMap;
     }
 
-    private String sendOutToWms(ProdInout prodInOut, String masterName) {
-        StockOutAndDetRequest stockOutAndDetRequest = new StockOutAndDetRequest();
-        DeliveryOrder deliveryOrder = new DeliveryOrder();
-        deliveryOrder.setOutBizCode(prodInOut.getPiOrderType()+"-"+System.currentTimeMillis());// 外部业务代码 消息ID, 用于去重, 因为网络等原因导致重复传输, 请求不会被重复处理
-        deliveryOrder.setDeliveryOrderCode(prodInOut.getPiInoutno());// 出库单号
-        deliveryOrder.setOwnerCode(vwmsConfig.getOwnerCode());// 货主编码
-        deliveryOrder.setWarehouseCode(vwmsConfig.getWarehouseCode());// 仓库编码
-        deliveryOrder.setPlacedAt(prodInOut.getPiDate());// 订单创建时间
-        deliveryOrder.setOrderType(prodInOut.getPiOrderType());// 订单类型
-        deliveryOrder.setCustomerCode(prodInOut.getPiCardCode());// 客户编码
-        deliveryOrder.setCustomer(prodInOut.getPiTitle());// 客户名称
-        /*
-         * 提交对接创建-> 0=未释放
-         * 审核 -> 1=已释放
-         * prodInOut.getPiInvoStatusCode().equals("COMMITED") &&
-         *  */
-        if(prodInOut.getPiSendwmsflag()>0){
-            deliveryOrder.setIsRelease("1");
-        }else {
-            deliveryOrder.setIsRelease("0");
-        }
-        deliveryOrder.setDocumentMaker(prodInOut.getPiRecordman());// 制单人
-        deliveryOrder.setCreateTime(prodInOut.getPiRecordDate());
-        deliveryOrder.setRemark(prodInOut.getPiRemark());// 备注
-        DeliveryOrder.ReceiverInfo receiverInfo = new DeliveryOrder.ReceiverInfo();
-        receiverInfo.setName(StringUtil.nvl(prodInOut.getPiLxr(),"无"));
-        receiverInfo.setMobile(StringUtil.nvl(prodInOut.getPiLxdh(),prodInOut.getPiShrsj()));
-        receiverInfo.setDetailAddress(StringUtil.nvl(prodInOut.getPiKhdz(),"无"));
-        deliveryOrder.setReceiverInfo(receiverInfo);
-        //写入明细表
-        List<OrderLineOut> orderLineOuts = (List<OrderLineOut>) getOrderLines(prodInOut, masterName);
-        stockOutAndDetRequest.setDeliveryOrder(deliveryOrder);
-        StockOutAndDetRequest.OutOrderLines orderLines = new StockOutAndDetRequest.OutOrderLines();
-        orderLines.setOrderLine(orderLineOuts);
-        stockOutAndDetRequest.setOrderLines(orderLines);
-        //转换为JSON字符串
-        String json = null;
-        String method = null;
-        if(prodInOut.getPiSendwmsflag() == 0){
-            BaseReq<StockOutAndDetRequest> req = new BaseReq();
-            req.setRequest(stockOutAndDetRequest);
-            method = "openapi.stockout.create";
-            try {
-                json = objectMapper.writeValueAsString(req);
-            } catch (JsonProcessingException e) {
-                e.printStackTrace();
-                return "JSON转换失败";
-            }
-        }else {
-            method = "openapi.stockout.batchupdate";
-            BaseReq<OrderVastRequest<StockOutAndDetRequest>> req = new BaseReq();
-            OrderVastRequest<StockOutAndDetRequest> vastReq = new OrderVastRequest();
-            OrderVastRequest.OrdersRequest<StockOutAndDetRequest> orders = new OrderVastRequest.OrdersRequest<StockOutAndDetRequest>();
-            orders.setOrder(Arrays.asList(stockOutAndDetRequest));
-            vastReq.setOutBizCode(stockOutAndDetRequest.getDeliveryOrder().getOutBizCode());
-            vastReq.setOrders(orders);
-            req.setRequest(vastReq);
-            try {
-                json = objectMapper.writeValueAsString(req);
-            } catch (JsonProcessingException e) {
-                e.printStackTrace();
-                return "JSON转换失败";
-            }
-        }
-        return doSendOrderToWms(json,method);
-    }
-
-    private String sendInToWms(ProdInout prodInOut,String masterName){
-        EntryOrder entryOrder = new EntryOrder();
-        entryOrder.setOutBizCode(prodInOut.getPiOrderType()+"-"+System.currentTimeMillis());// 外部业务代码 消息ID, 用于去重, 因为网络等原因导致重复传输, 请求不会被重复处理
-        entryOrder.setEntryOrderCode(prodInOut.getPiInoutno());// 入库单号
-        entryOrder.setOwnerCode(vwmsConfig.getOwnerCode());// 货主编码
-        entryOrder.setWarehouseCode(vwmsConfig.getWarehouseCode());// 仓库编码
-        entryOrder.setOrderCreateTime(prodInOut.getPiRecordDate());// 订单创建时间
-        entryOrder.setOrderType(prodInOut.getPiOrderType());// 订单类型
-        entryOrder.setSupplierCode(prodInOut.getPiCardCode());// 供应商编码
-        entryOrder.setSupplierName(prodInOut.getPiTitle());// 供应商名称
-        entryOrder.setDocumentMaker(prodInOut.getPiRecordman());// 制单人
-        entryOrder.setRemark(prodInOut.getPiRemark());// 备注
-        List<OrderLineIn> orderList = (List<OrderLineIn>) getOrderLines(prodInOut, masterName);
-        EntryOrderAndDetRequest entryOrderAndDetRequest = new EntryOrderAndDetRequest();
-        EntryOrderAndDetRequest.InOrderLines orderLineIns = new EntryOrderAndDetRequest.InOrderLines();
-        orderLineIns.setOrderLine(orderList);
-        entryOrderAndDetRequest.setEntryOrder(entryOrder);
-        entryOrderAndDetRequest.setOrderLines(orderLineIns);
-        //转换为JSON字符串
-        String json = null;
-        String method = null;
-        if(prodInOut.getPiSendwmsflag() == 0){
-            method = "openapi.entryorder.create";
-            BaseReq<EntryOrderAndDetRequest> req = new BaseReq();
-            req.setRequest(entryOrderAndDetRequest);
-            try {
-                json = objectMapper.writeValueAsString(req);
-            } catch (JsonProcessingException e) {
-                e.printStackTrace();
-                return "JSON转换失败";
-            }
-            //TODO 写入表:WMS_IO_RECORD_SEQ
-        }else {
-            method = "openapi.entryorder.batchupdate";
-            BaseReq<OrderVastRequest<EntryOrderAndDetRequest>> req = new BaseReq();
-            OrderVastRequest<EntryOrderAndDetRequest> vastReq = new OrderVastRequest();
-            OrderVastRequest.OrdersRequest<EntryOrderAndDetRequest> orders = new OrderVastRequest.OrdersRequest<EntryOrderAndDetRequest>();
-            orders.setOrder(Arrays.asList(entryOrderAndDetRequest));
-            vastReq.setOutBizCode(entryOrderAndDetRequest.getEntryOrder().getOutBizCode());
-            vastReq.setOrders(orders);
-            req.setRequest(vastReq);
-            try {
-                json = objectMapper.writeValueAsString(req);
-            } catch (JsonProcessingException e) {
-                e.printStackTrace();
-                return "JSON转换失败";
-            }
-        }
-        return doSendOrderToWms(json,method);
-    }
-    private String doSendOrderToWms(String json,String method){
-        String eMsg = null;
-        try {
-            logger.info("doSendInOrderToWms method:{} json: {}",method, json);
-            HttpUtil.Response response = HttpUtil.doPostToVWMS(method, json,vwmsConfig);
-            if(!String.valueOf(response.getStatusCode()).startsWith("2")){
-                eMsg = "("+response.getStatusCode()+")"+StringUtil.nvl(response.getResponseText(),"未知").replaceAll("'","''");
-            }else {
-                BaseVastResp baseVastResp = new ObjectMapper().readValue(response.getResponseText(), BaseVastResp.class);
-                BaseVastResp.Response baseVastRespResponse= baseVastResp.getResponse();
-                if(baseVastRespResponse!=null){
-                    if("success".equals(baseVastRespResponse.getFlag())){
-                        String orderId = "";
-                        if("openapi.entryorder.create".equals(method)){
-                            orderId = baseVastRespResponse.getEntryOrderId();
-                            eMsg = "OrderId:"+orderId;
-                        }
-                        if("openapi.stockout.create".equals(method)){
-                            orderId = baseVastRespResponse.getDeliveryOrderId();
-                            eMsg = "OrderId:"+orderId;
-                        }
-                        logger.info("doSendInOrderToWms-resp-s code: {} method {} OrderId {} message: {}", baseVastRespResponse.getCode(),method,orderId,baseVastRespResponse.getMessage());
-                    }else {
-                        eMsg = "(" + baseVastRespResponse.getCode() + ")";
-                        String errorMessage = baseVastRespResponse.getMessage();
-                        if (baseVastRespResponse.getOrders() != null &&
-                                !CollectionUtil.isEmpty(baseVastRespResponse.getOrders().getOrder())) {
-                            errorMessage = StringUtil.nvl(baseVastRespResponse.getOrders().getOrder().get(0).getMessage(),baseVastRespResponse.getMessage());
-                        }
-                        eMsg += StringUtil.nvl(errorMessage, "未知").replaceAll("'", "''");
-                    }
-                }else {
-                    eMsg = "RespJSON转换失败:"+response.getStatusCode()+":"+response.getResponseText();
-                }
-            }
-        } catch (JsonProcessingException e) {
-            e.printStackTrace();
-            eMsg = "JSON转换失败";
-        } catch (Exception e) {
-            e.printStackTrace();
-            eMsg = StringUtil.nvl(e.getMessage(),"无").replaceAll("'","''");
-        }
-        return eMsg;
-    }
-
     @Override
     public Map<String, Object> cancelIO(String master, String id, String emCode, String caller,String cancelReason) {
         Map<String,Object> retMap = new HashMap<>();
@@ -880,7 +725,7 @@ public class ERPServiceImpl implements ERPService {
             retMap.put("message","单据不存在或尚未同步到WMS。");
             return retMap;
         }
-        ProdInout prodInOut = getIO(master,id,true);
+        ProdInout prodInOut = docCommonService.getIO(master,id,true);
         if(prodInOut.getPiWmsstatus().equals("已确认")){
             retMap.put("success",false);
             retMap.put("message","单据已确认采集,不允许取消。");
@@ -953,84 +798,5 @@ public class ERPServiceImpl implements ERPService {
         return orders;
     }
 
-    private ProdInout getIO(String master,String id,boolean onlyMain){
-        List<ProdInout> prodInOuts = baseDao.getJdbcTemplate().query(
-                "select pi_Wmsordertype piOrderType,pi_id piId,pi_inoutno piInoutno,pi_class piClass,pi_type piType,to_char(pi_recorddate,'yyyy-mm-dd hh24:mi:ss') piDate" +
-                        ",pi_Cardcode piCardcode,pi_Title piTitle,pi_Recordman piRecordman,to_char(pi_recorddate,'yyyy-mm-dd hh24:mi:ss') piRecorddate,pi_Remark piRemark" +
-                        ",abs(nvl(pi_sendwmsflag,0)) piSendwmsflag,nvl(pi_WmsInType,'in') piWmsInType,pi_wmsstatus piWmsstatus" +
-                        ",pi_invostatuscode piInvoStatusCode,pi_lxr_user piLxr,pi_lxdh_user piLxdh,pi_shrsj_user piShrsj,pi_khdz_user piKhdz " +
-                        " from "+master+".prodinout where pi_id = "+id,
-                new BeanPropertyRowMapper<ProdInout>(ProdInout.class));
-        ProdInout prodInOut = prodInOuts.get(0);
-        if(!onlyMain){
-            String detSql = "select pd_piid pdPiid,min(pd_id) pdId,min(pd_pdno) pdPdno,pd_prodcode pdProdcode,pr_detail pdProdname,pr_brand pdBrandName" +
-                    ",sum(nvl(pd_inqty,0)+nvl(pd_outqty,0)) pdQty" +
-                    ",pd_whcode pdWhcode,wh_description pdWhname,pd_description pdInBatch" +
-                    " from "+master+".prodiodetail LEFT JOIN "+master+".product on pr_code = pd_prodcode left join  "+master+".productbrand on pb_name = pr_brand " +
-                    " left join "+master+".warehouse on wh_Code = pd_whcode " +
-                    " where pd_piid = "+prodInOut.getPiId()+" and pb_sendwms = -1 " +
-                    " group by pd_piid,pd_prodcode,pr_detail,pr_brand,pd_whcode,wh_description,pd_description" +
-                    " order by MIN(pd_pdno) ";
-            if("out".equals(prodInOut.getPiWmsInType())){
-                detSql = "select pd_piid pdPiid,min(pd_id) pdId,min(pd_pdno) pdPdno,pd_prodcode pdProdcode,pr_detail pdProdname,pr_brand pdBrandName" +
-                        ",sum(nvl(pd_inqty,0)+nvl(pd_outqty,0)) pdQty" +
-                        ",pd_whcode pdWhcode,wh_description pdWhname,pd_description pdInBatch" +
-                        ",pd_custprodcode pdCustprodcode,pd_custprodcode1_user pdCustprodcode1, pd_pocode pdPocode" +
-                        " from "+master+".prodiodetail LEFT JOIN "+master+".product on pr_code = pd_prodcode left join  "+master+".productbrand on pb_name = pr_brand " +
-                        " left join "+master+".warehouse on wh_Code = pd_whcode " +
-                        " where pd_piid = "+prodInOut.getPiId()+" and pb_sendwms = -1 " +
-                        " group by pd_piid,pd_prodcode,pr_detail,pr_brand,pd_whcode,wh_description,pd_description,pd_custprodcode,pd_custprodcode1_user,pd_pocode" +
-                        " order by MIN(pd_pdno) ";
-            }
-            List<Prodiodetail> details = baseDao.getJdbcTemplate().query(detSql,
-                    new BeanPropertyRowMapper<Prodiodetail>(Prodiodetail.class));
-            prodInOut.setDetails(details);
-            //未确认前根据明细更新prodiowms
-            if(!prodInOut.getPiWmsstatus().equals("已确认")){
-                baseDao.execute("delete from "+master+".prodiowms where PIID = "+prodInOut.getPiId());
-                baseDao.execute("INSERT INTO "+master+".prodiowms(ITIME,PIID, PIINOUTNO, ORDERCODE, OWNERCODE, WAREHOUSECODE, WMSORDERID, WMSORDERTYPE" +
-                        ")" +
-                        "select sysdate,pi_id,pi_inoutno,pi_inoutno,'"+vwmsConfig.getOwnerCode()+"','"+vwmsConfig.getWarehouseCode()+"',PI_WMSORDERCODE,PI_WMSORDERTYPE" +
-                        " from "+master+".prodinout where pi_id = "+prodInOut.getPiId());
-                //写入 prodiowms_Lines 账套
-                baseDao.execute("delete from "+master+".prodiowms_lines where pl_piid = "+prodInOut.getPiId());
-                if("out".equals(prodInOut.getPiWmsInType())){
-                    baseDao.execute("INSERT INTO "+master+".prodiowms_Lines(ITIME,PL_PIID,LINENO, ITEMCODE, PLANQTY,virtualWarehouse, USERDEFINED1,userDefined3,USERDEFINED4,customField1,customField2,customField3)" +
-                            "select sysdate,pdPiid,pdPdno,pdProdcode,pdQty,pdWhname,pdInBatch,pdBrandName,'"+master+"',pdCustprodcode,pdCustprodcode1,pdPocode from ("+detSql+") ");
-                }else {
-                    baseDao.execute("INSERT INTO "+master+".prodiowms_Lines(ITIME,PL_PIID,LINENO, ITEMCODE, PLANQTY,virtualWarehouse, USERDEFINED1,userDefined3,USERDEFINED4)" +
-                            "select sysdate,pdPiid,pdPdno,pdProdcode,pdQty,pdWhname,pdInBatch,pdBrandName,'"+master+"' from ("+detSql+") ");
-                }
-            }
-        }
-        return prodInOut;
-    }
 
-    private List<? extends OrderLine> getOrderLines(ProdInout prodInOut,String masterName) {
-        List<OrderLine> orderLineList = new ArrayList<>();
-        for (Prodiodetail detail : prodInOut.getDetails()) {
-            OrderLine orderLine;
-            if ("in".equals(prodInOut.getPiWmsInType())) {
-                orderLine = new OrderLineIn(); // 创建入库订单行对象
-                ((OrderLineIn) orderLine).setStockinDate(prodInOut.getPiDate()); // 设置入库日期
-            } else {
-                orderLine = new OrderLineOut(); // 创建普通订单行对象
-                ((OrderLineOut) orderLine).setCustomField1(detail.getPdCustprodcode());
-                ((OrderLineOut) orderLine).setCustomField2(detail.getPdCustprodcode1());
-                ((OrderLineOut) orderLine).setCustomField3(detail.getPdPocode());
-            }
-            // 设置通用属性
-            orderLine.setLineNo(String.valueOf(detail.getPdPdno()));// 行号
-            orderLine.setOwnerCode(vwmsConfig.getOwnerCode());// 货主编码
-            orderLine.setItemCode(detail.getPdProdcode());// 商品编码
-            orderLine.setItemName(detail.getPdProdname());// 商品名称
-            orderLine.setPlanQty(detail.getPdQty());// 数量
-            orderLine.setVirtualWarehouse(detail.getPdWhname());// 虚拟仓库编号
-            orderLine.setUserDefined1(detail.getPdInBatch());// 入库批次
-            orderLine.setUserDefined3(detail.getPdBrandName());// 品牌
-            orderLine.setUserDefined4(masterName);//账套
-            orderLineList.add(orderLine);
-        }
-        return orderLineList;
-    }
 }

+ 14 - 53
src/test/java/com/uas/eis/UasEisApplicationTests.java

@@ -75,10 +75,11 @@ public class UasEisApplicationTests {
 	public void testSendCancelCGYS(){
 		// 设置测试数据
 		String master = "HUAXK";
-		String id = "50735621";
+		String id = "50735836";
 		String emCode = "test";
-		String caller = "ProdInOut!PurcCheckin";
-		Map<String, Object> result = erpService.cancelIO(master, id, emCode,caller,"反审核");
+//		String caller = "ProdInOut!PurcCheckin";
+		String caller = "ProdInOut!Sale";
+		Map<String, Object> result = erpService.cancelIO(master, id, emCode,caller,"反提交");
 		System.out.println("result:"+result.toString());
 	}
 
@@ -86,62 +87,22 @@ public class UasEisApplicationTests {
 	public void testSendAddXSCH(){
 		// 设置测试数据
 		String master = "HUAXK";
-		String id = "50735826";
+		String id = "50735836";
 		String emCode = "test";
 		String caller = "ProdInOut!Sale";
 		Map<String, Object> result = erpService.sendIO(master, id, emCode,caller);
 		System.out.println("result:"+result.toString());
 	}
 
-	@Test
-	public void testYS() throws UnsupportedEncodingException {
-		try (Scanner scanner = new Scanner(new File("D:\\testimg.txt"))) {
-			while (scanner.hasNextLine()) {
-				String a =scanner.nextLine();
-				System.out.println(a.length());
-			byte[] compressed = null;
-			try {
-				compressed = compress(a.getBytes("UTF-8"));
-			} catch (Exception e) {
-				throw new RuntimeException(e);
-			}
-			System.out.println("压缩后长度: " + compressed.length);
-			String compressedStr= Base64.getEncoder().encodeToString(compressed);
-			System.out.println("压缩后内容长度: " + compressedStr.length());
-//			System.out.println("压缩后内容: " + compressedStr);
-			//解压
-			byte[] decompressed = compressedStr.getBytes("UTF-8");
-			try {
-				decompressed = decompress(compressed);
-			} catch (Exception e) {
-				throw new RuntimeException(e);
-			}
-//				System.out.println("解压后长度: " + decompressed.length);
-//				String decompressedStr= Base64.getEncoder().encodeToString(decompressed);
-//				System.out.println("解压后内容长度: " + decompressedStr.length());
-//				System.out.println("解压后内容: " + decompressedStr);
-			}
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-	}
-
-
-	private static byte[] compress(byte[] data) throws Exception {
-		ByteArrayOutputStream out = new ByteArrayOutputStream();
-		try (DeflaterOutputStream deflater = new DeflaterOutputStream(out)) {
-			deflater.write(data);
-		}
-		return out.toByteArray();
-	}
-
 
-
-	private static byte[] decompress(byte[] data) throws Exception {
-		ByteArrayOutputStream out = new ByteArrayOutputStream();
-		try (InflaterOutputStream inflater = new InflaterOutputStream(out)) {
-			inflater.write(data);
-		}
-		return out.toByteArray();
+	@Test
+	public void testSendAddBCCK(){
+		// 设置测试数据
+		String master = "HUAXK";
+		String id = "50735998";
+		String emCode = "test";
+		String caller = "ProdInOut!AppropriationOut";
+		Map<String, Object> result = erpService.sendIO(master, id, emCode,caller);
+		System.out.println("result:"+result.toString());
 	}
 }