|
|
@@ -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;
|
|
|
+ }
|
|
|
+}
|