Просмотр исходного кода

【华信科】【富勒WMS对接】【物料资料对接】

wuyx 10 месяцев назад
Родитель
Сommit
80f0ee0c97

+ 0 - 6
src/main/java/com/uas/eis/config/VwmsConfig.java

@@ -12,12 +12,6 @@ public class VwmsConfig {
     @Value("${api_url}")
     private String apiUrl;
 
-    @Value("${app_secret}")
-    private String appSecret;
-
-    @Value("${partner_id}")
-    private String partnerId;
-
     @Value("${app_key}")
     private String appKey;
 

+ 0 - 18
src/main/java/com/uas/eis/controller/ERPController.java

@@ -29,24 +29,6 @@ public class ERPController {
         return erpService.sendProd(master,ids,emCode,caller);
     }
 
-    /**
-     * 发送供应商信息
-     */
-    @RequestMapping(value="/erp/sendVend",method=RequestMethod.POST)
-    @ResponseBody
-    public Map<String, Object> sendVend(String master, String ids,String emCode,String caller){
-        return erpService.sendVend(master,ids,emCode,caller);
-    }
-
-    /**
-     * 发送客户信息
-     */
-    @RequestMapping(value="/erp/sendCust",method=RequestMethod.POST)
-    @ResponseBody
-    public Map<String, Object> sendCust(String master, String ids,String emCode,String caller){
-        return erpService.sendCust(master,ids,emCode,caller);
-    }
-
 
     /**
      * 发送出入库信息

+ 5 - 5
src/main/java/com/uas/eis/core/support/ApiSignLoginInterceptor.java

@@ -131,7 +131,7 @@ public class ApiSignLoginInterceptor extends HandlerInterceptorAdapter {
         }
     }
     private boolean verificationSign(String method,String timestamp,String originSign,String body) throws UnsupportedEncodingException {
-        String appSecret = vwmsConfig.getAppSecret();
+        String appSecret = vwmsConfig.getAppKey();
         String customerId = vwmsConfig.getCustomerId();
         String appKey = vwmsConfig.getAppKey();
         Map<String, Object> params = new HashMap<String, Object>();
@@ -142,18 +142,18 @@ public class ApiSignLoginInterceptor extends HandlerInterceptorAdapter {
         params.put("sign_method","md5");
         params.put(TIMESTAMP_KEY,timestamp);
         params.put("v", "2.0");
-        String sign = createSign(params,body, appSecret);
+        String sign = createSign(params,body,appSecret);
         System.out.println("传入的sign:"+originSign);
         System.out.println("生成的sign:"+sign);
         return sign.equals(originSign);
     }
     //{secretkey}app_key{app_key}customerId{customerId}formatxmlmethod{openapi_name}sign_methodmd5timestamp2015-04-26 00:00:07v2.0{body}{secretkey}
-    private String createSign(Map<String, Object> params,String body, String accessSecret) throws UnsupportedEncodingException {
+    private String createSign(Map<String, Object> params,String body,String appSecret) throws UnsupportedEncodingException {
         Set<String> keysSet = params.keySet();
         Object[] keys = keysSet.toArray();
         Arrays.sort(keys);
         StringBuilder temp = new StringBuilder();
-        temp.append(accessSecret);
+        temp.append(appSecret);
         for (Object key : keys) {
             Object value = params.get(key);
             String valueString = "";
@@ -162,7 +162,7 @@ public class ApiSignLoginInterceptor extends HandlerInterceptorAdapter {
             }
             temp.append(valueString);
         }
-        temp.append(body).append(accessSecret);
+        temp.append(body).append(appSecret);
         System.out.println("加密串:"+temp);
 //        System.out.println(MD5Util.encrypt32Up(temp.toString()));
         return MD5Util.encrypt32Up(temp.toString());

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

@@ -0,0 +1,16 @@
+package com.uas.eis.entity.vwms.req;
+
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
+import lombok.Data;
+
+@Data
+@JacksonXmlRootElement(localName = "request")
+public class BaseItemReq<T> {
+    private String actionType;
+    private String warehouseCode;
+    private String ownerCode;
+//    private String outBizCode;
+    @JacksonXmlProperty(localName = "item")
+    private T item;
+}

+ 9 - 95
src/main/java/com/uas/eis/entity/vwms/req/ProductReq.java

@@ -5,100 +5,14 @@ import lombok.Data;
 // 创建ProductReq类
 @Data
 public class ProductReq {
-    private String itemId;
-    private String itemCode;
-    private String barCode;
-    private String itemName;
-    private String shortName;
-    private String goodsCode;
-    private String categoryName;
-    private String brandName;
-    private String stockUnit;
-    private String itemType = "ZC";
-    private ExtendProps extendProps;
-
-    // 省略getter/setter方法
-
-    public static class Builder {
-        private String itemId;
-        private String itemCode;
-        private String barCode;
-        private String itemName;
-        private String shortName;
-        private String goodsCode;
-        private String categoryName;
-        private String brandName;
-        private String stockUnit;
-        private String itemType = "ZC";
-        private ExtendProps extendProps;
-
-        public Builder itemId(String itemId) {
-            this.itemId = itemId;
-            return this;
-        }
-
-        public Builder itemCode(String itemCode) {
-            this.itemCode = itemCode;
-            return this;
-        }
-
-        public Builder barCode(String barCode) {
-            this.barCode = barCode;
-            return this;
-        }
-
-        public Builder itemName(String itemName) {
-            this.itemName = itemName;
-            return this;
-        }
-        public Builder shortName(String shortName) {
-            this.shortName = shortName;
-            return this;
-        }
-        public Builder goodsCode(String goodsCode) {
-            this.goodsCode = goodsCode;
-            return this;
-        }
-
-        public Builder categoryName(String categoryName) {
-            this.categoryName = categoryName;
-            return this;
-        }
-        public Builder brandName(String brandName) {
-            this.brandName = brandName;
-            return this;
-        }
-
-        public Builder itemType(String itemType) {
-            this.itemType = itemType;
-            return this;
-        }
-        public Builder stockUnit(String stockUnit) {
-            this.stockUnit = stockUnit;
-            return this;
-        }
-        public Builder ExtendProps(ExtendProps extendProps) {
-            this.extendProps = extendProps;
-            return this;
-        }
-
-        public ProductReq build() {
-            ProductReq productReq = new ProductReq();
-            productReq.itemId = this.itemId;
-            productReq.itemCode = this.itemCode;
-            productReq.barCode = this.barCode;
-            productReq.itemName = this.itemName;
-            productReq.shortName = this.shortName;
-            productReq.goodsCode = this.goodsCode;
-            productReq.categoryName = this.categoryName;
-            productReq.brandName = this.brandName;
-            productReq.itemType = this.itemType;
-            productReq.stockUnit = this.stockUnit;
-            productReq.extendProps = this.extendProps;
-            return productReq;
-        }
-    }
-
+    private String itemCode;//物料编号 pr_code
+    private String itemName;//名称 pr_detail
+    private String brandName;//品牌 pr_brand
+    private Long boxQuantity;//箱 pr_xsl_user
+    private Long secondQuantity;//盒 pr_hsl_user
+    private Long thirdQuantity;//盘 pr_psl_user
+    private String skuProperty;//规格型号 pr_spec
+  /*  private ExtendProps extendProps;
     @Data
     public static class ExtendProps {
         private String key1;
@@ -106,5 +20,5 @@ public class ProductReq {
         private String key3;
         private String key4;
         private String key5;
-    }
+    }*/
 }

+ 0 - 2
src/main/java/com/uas/eis/service/ERPService.java

@@ -11,8 +11,6 @@ import java.util.Map;
  */
 public interface ERPService {
     Map<String, Object> sendProd(String master, String ids,String emCode,String caller);
-    Map<String, Object> sendVend(String master, String ids,String emCode,String caller);
-    Map<String, Object> sendCust(String master, String ids, String emCode,String caller);
 
     Map<String, Object> sendIO(String master, String id, String emCode, String caller);
 

+ 88 - 526
src/main/java/com/uas/eis/service/Impl/ERPServiceImpl.java

@@ -2,6 +2,7 @@ package com.uas.eis.service.Impl;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.dataformat.xml.XmlMapper;
 import com.uas.eis.config.VwmsConfig;
 import com.uas.eis.dao.*;
 import com.uas.eis.entity.vwms.entity.*;
@@ -47,8 +48,8 @@ public class ERPServiceImpl implements ERPService {
         logger.info("sendProd-Begin:master {} ids {}",master,ids);
 //        SpObserver.putSp(master);//没有用
         // 执行查询
-        SqlRowList docMsg = baseDao.queryForRowSet(" select pr_id,pr_code,pr_ycxh,pr_ycxhin,pr_detail,pr_orispeccode,pr_brand,pr_unit,pr_zxbzs,nvl(pr_sendwmsflag,0) pr_sendwmsflag " +
-                " from "+master+".product left join "+master+".productbrand on pb_name = pr_brand where pr_id in ("+ids+") and pb_sendwms = -1 ");
+        SqlRowList docMsg = baseDao.queryForRowSet(" select nvl(pr_sendwmsflag,0) pr_sendwmsflag,pr_id,pr_code,pr_detail,pr_spec,pr_brand,pr_xsl_user,pr_hsl_user,pr_psl_user " +
+                " from "+master+".product where pr_id in ("+ids+") ");
         if(!docMsg.hasNext()){
             baseDao.execute("update "+master+".product set pr_sendwmsstatus='同步失败',pr_sendwmserr='没有需要同步的商品(品牌需设置对接MWS)。' where pr_id IN ("+ids+")");
             retMap.put("success",false);
@@ -88,563 +89,124 @@ public class ERPServiceImpl implements ERPService {
         return retMap;
     }
     private Map<String, Object> sendProdSigle(String master,String actionType,List<Map<String, Object>> list){
-        List<ProductReq> prodList = new ArrayList<>();
         List<Object> docCodes = new ArrayList<>();
         String prCodes = "";
         StringBuffer errMsg = new StringBuffer();
         String eMsg = "";
         Map<String, Object> retMap = new HashMap<>();
+        retMap.put("success",true);
         if(CollectionUtil.isEmpty(list)){
             retMap.put("success",false);
             retMap.put("message","没有需要同步的商品(品牌需设置对接MWS)。");
             return retMap;
         }
         for (Map<String, Object> map : list) {
+            String prCode = map.get("pr_code").toString();
             // 创建ProductReq对象
             docCodes.add(map.get("pr_code"));
-            logger.info("sendProd-test: id {} code {}",map.get("pr_id"),map.get("pr_code"));
+            logger.info("sendProd-test: id {} code {}",map.get("pr_id"),prCode);
             // 创建ProductReq对象
-            String ycxh = StringUtil.nvl(map.get("pr_ycxh"),"");
-            ycxh = (StringUtil.hasText(ycxh)?ycxh+";":"")+StringUtil.nvl(map.get("pr_ycxhin"),"");
-            ProductReq productReq = new ProductReq.Builder()
-                    .itemId(map.get("pr_code").toString())
-                    .itemCode(map.get("pr_code").toString())
-                    .barCode(ycxh)
-                    .itemName(StringUtil.nvl(map.get("pr_detail")," "))
-                    .goodsCode(StringUtil.nvl(map.get("pr_orispeccode")," "))
-                    .brandName(StringUtil.nvl(map.get("pr_brand")," "))
-                    .categoryName(StringUtil.nvl(map.get("pr_brand")," "))
-                    .stockUnit(StringUtil.nvl(map.get("pr_unit")," "))
-                    .ExtendProps(new ProductReq.ExtendProps() {{
-                        setKey1(StringUtil.nvl(map.get("pr_zxbzs"),"0.0"));
-                    }})
-                    .build();
-            prodList.add(productReq);
-        }
-        prCodes = "'"+docCodes.stream()
-                .map(String::valueOf)
-                .collect(Collectors.joining("','"))+"'";
-        // 创建BaseReq对象
-        BaseItemsReq<ProductReq> prodBaseItemsReq = new BaseItemsReq();
-        prodBaseItemsReq.setActionType(actionType);
-        prodBaseItemsReq.setWarehouseCode(vwmsConfig.getWarehouseCode());
-        prodBaseItemsReq.setOwnerCode(vwmsConfig.getOwnerCode());
-        prodBaseItemsReq.setOutBizCode("sendProd-"+System.currentTimeMillis());
-        // 创建BaseVastItem对象
-        BaseItemsReq.BaseItems prodBaseItems = new BaseItemsReq<ProductReq>().new BaseItems<ProductReq>();
-        // 设置BaseVastItem的item属性
-        prodBaseItems.setItem(prodList);
-        prodBaseItemsReq.setItems(prodBaseItems);
-        // 创建RequestWrapper对象
-        BaseReq<BaseItemsReq<ProductReq>> prodBaseReq = new BaseReq();
-        prodBaseReq.setRequest(prodBaseItemsReq);
-        try {
-            // 将wrapper对象转换为JSON字符串
-            String json = objectMapper.writeValueAsString(prodBaseReq);
-            logger.info("Request JSON: {}", json);
-            //{{testapiurl}}?method=openapi.singleitem.synchronize&timestamp=2025-03-04 15:45:00
-            // &format={{format}}&app_key={{app_key}}&v=2.0&sign=B21FFFE48507569E72D573359856B19B
-            // &sign_method=md5&customerId={{customerId}}
-            HttpUtil.Response response = HttpUtil.doPostToVWMS("openapi.items.synchronize", json,vwmsConfig);
-//            logger.info("response code: {} text: {}", response.getStatusCode(),response.getResponseText());
-            if(!String.valueOf(response.getStatusCode()).startsWith("2")){
-                eMsg = StringUtil.nvl(response.getResponseText(),"未知");
-                retMap.put("success", false);
-                retMap.put("message", "请求失败:"+response.getStatusCode()+":"+eMsg);
-                baseDao.execute("update "+master+".product set pr_sendwmsstatus='同步失败',pr_sendwmserr=('操作:"+actionType+":"+eMsg.replaceAll("'","''")+"') " +
+            ProductReq productReq = new ProductReq();
+            productReq.setItemCode(prCode.toString());
+            productReq.setItemName(StringUtil.nvl(map.get("pr_detail")," "));
+            productReq.setBrandName(StringUtil.nvl(map.get("pr_brand")," "));
+            productReq.setBoxQuantity(Long.valueOf(StringUtil.nvl(map.get("pr_xsl_user"),"0")));
+            productReq.setSecondQuantity(Long.valueOf(StringUtil.nvl(map.get("pr_hsl_user"),"0")));
+            productReq.setThirdQuantity(Long.valueOf(StringUtil.nvl(map.get("pr_psl_user"),"0")));
+            productReq.setSkuProperty(StringUtil.nvl(map.get("pr_spec")," "));
+            // 创建BaseReq对象
+            BaseItemReq<ProductReq> prodBaseItemReq = new BaseItemReq();
+            prodBaseItemReq.setActionType(actionType);
+            prodBaseItemReq.setWarehouseCode(vwmsConfig.getWarehouseCode());
+            prodBaseItemReq.setOwnerCode(vwmsConfig.getOwnerCode());
+//            prodBaseItemReq.setOutBizCode("sendProd-"+System.currentTimeMillis());
+            prodBaseItemReq.setItem(productReq);
+            try {
+                // 创建XmlMapper实例
+                XmlMapper xmlMapper = new XmlMapper();
+                String xml = xmlMapper.writeValueAsString(prodBaseItemReq);
+                logger.info("Request XML: {}", xml);
+               HttpUtil.Response response= HttpUtil.postXmlToVWMS("singleitem.synchronize",xml, "UTF-8",vwmsConfig);
+//             System.out.println("responseText:"+responseText);
+                // 解析XML响应
+                if(!String.valueOf(response.getStatusCode()).startsWith("2")){
+                    eMsg = StringUtil.nvl(response.getResponseText(),"未知");
+                    retMap.put("success", false);
+                    retMap.put("message", "请求失败:"+response.getStatusCode()+":"+eMsg);
+                    baseDao.execute("update "+master+".product set pr_sendwmsstatus='同步失败',pr_sendwmserr=('操作:"+actionType+":"+eMsg.replaceAll("'","''")+"') " +
                             " where pr_code IN ("+prCodes+")");
-            }else {
-                retMap.put("success",true);
-                List<String> sqls = new ArrayList<>();
-                BaseVastResp baseVastResp = new ObjectMapper().readValue(response.getResponseText(), BaseVastResp.class);
-                BaseVastResp.Response baseVastRespResponse= baseVastResp.getResponse();
-                if(baseVastRespResponse!=null){
-                    //默认成功
-                    baseDao.execute("update  "+master+".product set pr_sendwmsstatus='同步成功' ,pr_sendwmserr=null where pr_code in ("+prCodes+")");
-                    if("success".equals(baseVastRespResponse.getFlag())){
-                        logger.info("response-success code: {} message: {}", baseVastRespResponse.getCode(),baseVastRespResponse.getMessage());
-                    }else {
-                        retMap.put("success",false);
-                        logger.info("response-failure code: {} message: {}", baseVastRespResponse.getCode(),baseVastRespResponse.getMessage());
-                        //不一定全部失败,此处只会返回失败提示
-                        BaseVastResp.Items items = baseVastRespResponse.getItems();
-                        if(items!=null&&!CollectionUtil.isEmpty(items.getItem())){
-                            for (BaseVastResp.Item item : items.getItem()) {
-                                eMsg = item.getMessage();
-                                if(!eMsg.equals("The goods don't exists, you can't update it.")){//提示异常但是实际会自动创建 可以认定为请求成功
-                                    logger.info("response-failure-item code: {} message: {}", item.getItemCode(),item.getMessage());
-                                    sqls.add("update "+master+".product set pr_sendwmsstatus='同步失败',pr_sendwmserr=('操作:"+actionType+":"+eMsg.replaceAll("'","''")+"') where pr_code ='"+item.getItemCode()+"'");
-                                    if(errMsg.length()>0){
-                                        errMsg.append("</br>");
-                                        errMsg.append("物料编号:"+item.getItemCode()+",失败原因:"+eMsg);
-                                    }
-                                }
-                            }
-                            if(!CollectionUtil.isEmpty(sqls)){
-                                baseDao.execute(sqls);
-                                retMap.put("message", errMsg.toString());
-                            }else {
-                                logger.info("response-failure-item all message: {}", "The goods don't exists, you can't update it.");
-                                retMap.put("success",true);//全部提示失败但实际创建成功
-                            }
-                        }else {
-                            eMsg = StringUtil.nvl(baseVastRespResponse.getMessage(),"无");
-                            baseDao.execute("update "+master+".product set pr_sendwmsstatus='同步失败',pr_sendwmserr=('操作:"+actionType+":"+eMsg.replaceAll("'","''")+"') " +
-                                    " where pr_code IN ("+prCodes+")");
-                            retMap.put("message", eMsg);
-                        }
-                    }
-                    baseDao.execute("update  "+master+".product set pr_sendwmsflag=-1 where pr_code in ("+prCodes+") AND NVL(pr_sendwmsflag,0) = 0 AND pr_sendwmsstatus='同步成功'");
                 }else {
-                    retMap.put("success", false);
-                    retMap.put("message", "转换失败:"+response.getStatusCode()+":"+response.getResponseText());
-                }
-            }
-            //TODO 考虑记录日志
-            return retMap;
-        } catch (JsonProcessingException e) {
-            e.printStackTrace();
-            logger.info("sendProd-Error:JSON转换失败 codes {} ",prCodes);
-            retMap.put("success", false);
-            retMap.put("message", "JSON转换失败");
-            return retMap;
-        } catch (Exception e) {
-            e.printStackTrace();
-            eMsg = StringUtil.nvl(e.getMessage(),"无");
-            baseDao.execute("update "+master+".product set pr_sendwmsstatus='同步失败' ,pr_sendwmserr='操作:"+actionType+":"+eMsg+"' where pr_code in ("+prCodes+")");
-            throw new RuntimeException(e);
-        }
-    }
-
-
-    @Override
-    public Map<String, Object> sendVend(String master, String ids,String emCode,String caller) {
-        Map<String,Object> retMap = new HashMap<>();
-        retMap.put("success",true);
-        logger.info("sendVend-Begin:master {} ids {}",master,ids);
-        // 执行查询
-        SqlRowList docMsg = baseDao.queryForRowSet(" select nvl(ve_sendwmsflag,0) sendwmsflag,ve_id,ve_code,ve_name,ve_shortname,ve_add1," +
-                "vc_id,(case when nvl(vc_isvendor,0) = 0 then 0 else 1 end ) vc_isvendor,vc_name,vc_officeemail,vc_mobile " +
-                "from "+master+".vendor left join "+master+".VendorContact on ve_id = vc_veid " +
-                "where ve_id in ("+ids+") order by ve_id,vc_id");
-        if(!docMsg.hasNext()){
-            retMap.put("success",false);
-            retMap.put("message","供应商资料不存在。");
-            return retMap;
-        }
-        List<Map<String, Object>> docMsgResultList = docMsg.getResultList();
-        // 按 sendwmsflag 分组
-        Map<Object, List<Map<String, Object>>> groupedByFlag = docMsgResultList.stream()
-                .collect(Collectors.groupingBy(map -> map.get("sendwmsflag")));
-        StringBuffer errMsg = new StringBuffer();
-        // 处理分组后的数据
-        groupedByFlag.forEach((sendflag, list) -> {
-            logger.info("Flag: {}, Count: {}", sendflag, list.size());
-            // 其他处理逻辑
-            String actionType = "update";
-            String actionTypeName = "更新";
-            if("0".equals(String.valueOf(sendflag))){
-                actionType = "add";
-                actionTypeName = "创建";
-            }
-//            // 按ve_id和vc_id升序排序
-//            list.sort(Comparator
-//                    .comparing(m -> (Long) m.get("ve_id"))
-//                    .thenComparing(m -> (Long) m.get("vc_id")));
-            // 拆分主从表 按ve_id分组
-            // 按ve_id分组
-            Map<Long, Vendor> vendorMap = new HashMap<>();
-            for (Map<String, Object> map : list) {
-                Long veId =  ((BigDecimal) map.get("ve_id")).longValue();
-
-                // 获取或创建主表对象
-                Vendor main = vendorMap.computeIfAbsent(veId, k -> {
-                    Vendor v = new Vendor();
-                    v.setVeId(veId);
-                    v.setVeCode((String) map.get("ve_code"));
-                    v.setVeName((String) map.get("ve_name"));
-                    v.setVeShortname((String) map.get("ve_shortname"));
-                    v.setVeAdd1((String) map.get("ve_add1"));
-                    return v;
-                });
-
-                // 创建从表对象
-                if(map.get("vc_id") != null){
-                    VendorContact contact = new VendorContact();
-                    contact.setVcId(((BigDecimal) map.get("vc_id")).longValue());
-                    contact.setVcIsvendor(((BigDecimal) map.get("vc_isvendor")).intValue());
-                    contact.setVcName((String) map.get("vc_name"));
-                    contact.setVcOfficeemail((String) map.get("vc_officeemail"));
-                    contact.setVcMobile((String) map.get("vc_mobile"));
-                    // 将联系人添加到主表
-                    main.getVendorContacts().add(contact);
-                }
-            }
-            // 返回按ve_id分组的VendorMain列表
-            List<Vendor> vList =  new ArrayList<>(vendorMap.values());
-            Map<String, Object> res = sendVendSigle(master,actionType,vList);
-            if(!res.get("success").equals(true)){
-                if(errMsg.length()>0){
-                    errMsg.append("</br>");
-                }
-                errMsg.append("执行:"+actionTypeName+"操作失败:"+res.get("message"));
-            }
-        });
-        if(errMsg.length()>0){
-            retMap.put("success",false);
-            retMap.put("message",errMsg.toString());
-            return retMap;
-        }
-        logger.info("sendVend-End:master {} ids {}",master,ids);
-        retMap.put("message","同步成功。");
-        return retMap;
-    }
-
-    private Map<String, Object> sendVendSigle(String master,String actionType,List<Vendor> list){
-        List<PartnersReq> regList = new ArrayList<>();
-        List<Object> docCodes = new ArrayList<>();
-        String codes = "";
-        StringBuffer errMsg = new StringBuffer();
-        String eMsg = "";
-        Map<String, Object> retMap = new HashMap<>();
-        if(CollectionUtil.isEmpty(list)){
-            retMap.put("success",false);
-            retMap.put("message","没有需要同步的商品(品牌需设置对接MWS)。");
-            return retMap;
-        }
-        for (Vendor vend : list) {
-            // 创建Req对象
-            docCodes.add(vend.getVeCode());
-            logger.info("sendVend-test: id {} code {}",vend.getVeId(),vend.getVeCode());
-            // 创建ProductReq对象
-            PartnersReq req = PartnersReq.builder()
-                    .partnerCode(vend.getVeCode())
-                    .name(vend.getVeName())
-                    .cnShortName(vend.getVeShortname())
-                    .enCompanyType("supplier")
-                   /* .customField1("自定义2")
-                    .customField2("自定义2")
-                    .customField3("自定义3")
-                    .customField4("自定义4")
-                    .customField5("自定义5")
-                    .remark("备注注")*/
-                    .contactsInfos(PartnersReq.ContactsInfos.builder()
-                            .contactsInfo(Optional.ofNullable(vend.getVendorContacts())
-                                    .orElse(Collections.emptyList())
-                                    .stream()
-                                    .map(contact -> PartnersReq.ContactsInfo.builder()
-                                            .isDefault(contact.getVcIsvendor())
-                                            .name(contact.getVcName())
-                                            .email(contact.getVcOfficeemail())
-                                            .mobile(contact.getVcMobile())
-                                            .address(vend.getVeAdd1())
-                                            .build())
-                                    .collect(Collectors.toList()))
-                            .build())
-                    .build();
-            regList.add(req);
-        }
-        codes = "'"+docCodes.stream()
-                .map(String::valueOf)
-                .collect(Collectors.joining("','"))+"'";
-        // 创建BaseReq对象
-        BaseItemsReq<PartnersReq> vendBaseItemsReq = new BaseItemsReq();
-        vendBaseItemsReq.setActionType(actionType);
-        vendBaseItemsReq.setWarehouseCode(vwmsConfig.getWarehouseCode());
-        vendBaseItemsReq.setOwnerCode(vwmsConfig.getOwnerCode());
-        vendBaseItemsReq.setOutBizCode("sendVend-"+System.currentTimeMillis());
-        // 创建BaseVastItem对象
-        BaseItemsReq.BaseItems vendBaseItems = new BaseItemsReq<PartnersReq>().new BaseItems<PartnersReq>();
-        // 设置BaseVastItem的item属性
-        vendBaseItems.setItem(regList);
-        vendBaseItemsReq.setItems(vendBaseItems);
-        // 创建BaseReq对象
-        BaseReq<BaseItemsReq<PartnersReq>> vendBaseReq = new BaseReq();
-        vendBaseReq.setRequest(vendBaseItemsReq);
-        try {
-            // 将wrapper对象转换为JSON字符串
-            String json = objectMapper.writeValueAsString(vendBaseReq);
-            logger.info("Request JSON: {}", json);
-            HttpUtil.Response response = HttpUtil.doPostToVWMS("openapi.partners.batchcreate", json,vwmsConfig);
-            if(!String.valueOf(response.getStatusCode()).startsWith("2")){
-                eMsg = StringUtil.nvl(response.getResponseText(),"未知");
-                retMap.put("success", false);
-                retMap.put("message", "请求失败:"+response.getStatusCode()+":"+eMsg);
-                baseDao.execute("update "+master+".vendor set ve_sendwmsstatus='同步失败',ve_sendwmserr=('操作:"+actionType+":"+eMsg.replaceAll("'","''")+"') " +
-                        " where ve_code IN ("+codes+")");
-            }else {
-                retMap.put("success",true);
-                List<String> sqls = new ArrayList<>();
-                BaseVastResp baseVastResp = new ObjectMapper().readValue(response.getResponseText(), BaseVastResp.class);
-                BaseVastResp.Response baseVastRespResponse= baseVastResp.getResponse();
-                if(baseVastRespResponse!=null){
-                    //默认成功
-                    baseDao.execute("update  "+master+".vendor set ve_sendwmsstatus='同步成功' ,ve_sendwmserr=null where ve_code in ("+codes+")");
-                    if("success".equals(baseVastRespResponse.getFlag())){
-                        logger.info("response-success code: {} message: {}", baseVastRespResponse.getCode(),baseVastRespResponse.getMessage());
-                    }else {
-                        retMap.put("success",false);
-                        logger.info("response-failure code: {} message: {}", baseVastRespResponse.getCode(),baseVastRespResponse.getMessage());
-                        //不一定全部失败,此处只会返回失败提示
-                        BaseVastResp.Items items = baseVastRespResponse.getItems();
-                        if(items!=null&&!CollectionUtil.isEmpty(items.getItem())){
-                            for (BaseVastResp.Item item : items.getItem()) {
-                                eMsg = item.getMessage();
-                                if(!eMsg.equals("The goods don't exists, you can't update it.")){//提示异常但是实际会自动创建 可以认定为请求成功
-                                    logger.info("response-failure-item code: {} message: {}", item.getItemCode(),item.getMessage());
-                                    sqls.add("update "+master+".vendor set ve_sendwmsstatus='同步失败',ve_sendwmserr=('操作:"+actionType+":"+eMsg.replaceAll("'","''")+"') where ve_code ='"+item.getItemCode()+"'");
-                                    if(errMsg.length()>0){
-                                        errMsg.append("</br>");
-                                        errMsg.append("物料编号:"+item.getItemCode()+",失败原因:"+eMsg);
+                    retMap.put("success",true);
+                    List<String> sqls = new ArrayList<>();
+                    BaseVastResp baseVastResp = xmlMapper.readValue(response.getResponseText(), BaseVastResp.class);
+                    BaseVastResp.Response baseVastRespResponse= baseVastResp.getResponse();
+                    if(baseVastRespResponse!=null){
+                        //默认成功
+                        baseDao.execute("update  "+master+".product set pr_sendwmsstatus='同步成功' ,pr_sendwmserr=null where pr_code in ("+prCodes+")");
+                        if("success".equals(baseVastRespResponse.getFlag())){
+                            logger.info("response-success code: {} message: {}", baseVastRespResponse.getCode(),baseVastRespResponse.getMessage());
+                        }else {
+                            retMap.put("success",false);
+                            logger.info("response-failure code: {} message: {}", baseVastRespResponse.getCode(),baseVastRespResponse.getMessage());
+                            //不一定全部失败,此处只会返回失败提示
+                            BaseVastResp.Items items = baseVastRespResponse.getItems();
+                            if(items!=null&&!CollectionUtil.isEmpty(items.getItem())){
+                                for (BaseVastResp.Item item : items.getItem()) {
+                                    eMsg = item.getMessage();
+                                    if(!eMsg.equals("The goods don't exists, you can't update it.")){//提示异常但是实际会自动创建 可以认定为请求成功
+                                        logger.info("response-failure-item code: {} message: {}", item.getItemCode(),item.getMessage());
+                                        sqls.add("update "+master+".product set pr_sendwmsstatus='同步失败',pr_sendwmserr=('操作:"+actionType+":"+eMsg.replaceAll("'","''")+"') where pr_code ='"+item.getItemCode()+"'");
+                                        if(errMsg.length()>0){
+                                            errMsg.append("</br>");
+                                            errMsg.append("物料编号:"+item.getItemCode()+",失败原因:"+eMsg);
+                                        }
                                     }
                                 }
-                            }
-                            if(!CollectionUtil.isEmpty(sqls)){
-                                baseDao.execute(sqls);
-                                retMap.put("message", errMsg.toString());
+                                if(!CollectionUtil.isEmpty(sqls)){
+                                    baseDao.execute(sqls);
+                                    retMap.put("message", errMsg.toString());
+                                }else {
+                                    logger.info("response-failure-item all message: {}", "The goods don't exists, you can't update it.");
+                                    retMap.put("success",true);//全部提示失败但实际创建成功
+                                }
                             }else {
-                                logger.info("response-failure-item all message: {}", "The goods don't exists, you can't update it.");
-                                retMap.put("success",true);//全部提示失败但实际创建成功
+                                eMsg = StringUtil.nvl(baseVastRespResponse.getMessage(),"无");
+                                baseDao.execute("update "+master+".product set pr_sendwmsstatus='同步失败',pr_sendwmserr=('操作:"+actionType+":"+eMsg.replaceAll("'","''")+"') " +
+                                        " where pr_code IN ("+prCodes+")");
+                                retMap.put("message", eMsg);
                             }
-                        }else {
-                            eMsg = StringUtil.nvl(baseVastRespResponse.getMessage(),"无");
-                            baseDao.execute("update "+master+".vendor set ve_sendwmsstatus='同步失败',ve_sendwmserr=('操作:"+actionType+":"+eMsg.replaceAll("'","''")+"') " +
-                                    " where ve_code IN ("+codes+")");
-                            retMap.put("message", eMsg);
                         }
+                        baseDao.execute("update  "+master+".product set pr_sendwmsflag=-1 where pr_code in ("+prCodes+") AND NVL(pr_sendwmsflag,0) = 0 AND pr_sendwmsstatus='同步成功'");
+                    }else {
+                        retMap.put("success", false);
+                        retMap.put("message", "转换失败:"+response.getStatusCode()+":"+response.getResponseText());
                     }
-                    baseDao.execute("update  "+master+".vendor set ve_sendwmsflag=-1 where ve_code in ("+codes+") AND NVL(ve_sendwmsflag,0) = 0 AND ve_sendwmsstatus='同步成功'");
-                }else {
-                    retMap.put("success", false);
-                    retMap.put("message", "转换失败:"+response.getStatusCode()+":"+response.getResponseText());
-                }
-            }
-            //TODO 考虑记录日志
-            return retMap;
-        } catch (JsonProcessingException e) {
-            e.printStackTrace();
-            logger.info("sendProd-Error:JSON转换失败 codes {} ",codes);
-            retMap.put("success", false);
-            retMap.put("message", "JSON转换失败");
-            return retMap;
-        } catch (Exception e) {
-            e.printStackTrace();
-            eMsg = StringUtil.nvl(e.getMessage(),"无");
-            baseDao.execute("update "+master+".vendor set ve_sendwmsstatus='同步失败' ,ve_sendwmserr='操作:"+actionType+":"+eMsg+"' where ve_code in ("+codes+")");
-            throw new RuntimeException(e);
-        }
-    }
-
-    @Override
-    public Map<String, Object> sendCust(String master, String ids, String emCode,String caller) {
-        Map<String,Object> retMap = new HashMap<>();
-        retMap.put("success",true);
-        logger.info("sendCust-Begin:master {} ids {}",master,ids);
-        // 执行查询
-        SqlRowList docMsg = baseDao.queryForRowSet(" select nvl(cu_sendwmsflag,0) sendwmsflag,cu_id,cu_code,cu_name,cu_shortname," +
-                "ca_id,(case when nvl(ca_remark,' ') = '是' then 1 else 0 end ) isDefault,ca_person,ca_phone,ca_address " +
-                "from "+master+".customer left join "+master+".CustomerAddress on cu_id = ca_cuid " +
-                "where cu_id in ("+ids+") order by cu_id,ca_detno,ca_id");
-        if(!docMsg.hasNext()){
-            retMap.put("success",false);
-            retMap.put("message","客户资料不存在。");
-            return retMap;
-        }
-        List<Map<String, Object>> docMsgResultList = docMsg.getResultList();
-        // 按 sendwmsflag 分组
-        Map<Object, List<Map<String, Object>>> groupedByFlag = docMsgResultList.stream()
-                .collect(Collectors.groupingBy(map -> map.get("sendwmsflag")));
-        StringBuffer errMsg = new StringBuffer();
-        // 处理分组后的数据
-        groupedByFlag.forEach((sendflag, list) -> {
-            logger.info("Flag: {}, Count: {}", sendflag, list.size());
-            // 其他处理逻辑
-            String actionType = "update";
-            String actionTypeName = "更新";
-            if("0".equals(String.valueOf(sendflag))){
-                actionType = "add";
-                actionTypeName = "创建";
-            }
-            // 按cu_id和vc_id升序排序
-            // 按cu_id分组
-            Map<Long, Customer> custMap = new HashMap<>();
-            for (Map<String, Object> map : list) {
-                Long cuId =  ((BigDecimal) map.get("cu_id")).longValue();
-
-                // 获取或创建主表对象
-                Customer main = custMap.computeIfAbsent(cuId, k -> {
-                    Customer v = new Customer();
-                    v.setCuId(cuId);
-                    v.setCuCode((String) map.get("cu_code"));
-                    v.setCuName((String) map.get("cu_name"));
-                    v.setCuShortname((String) map.get("cu_shortname"));
-                    return v;
-                });
-
-                // 创建从表对象
-                if(map.get("ca_id") != null){
-                    CustomerAddress customerAddress = new CustomerAddress();
-                    customerAddress.setCaId(((BigDecimal) map.get("ca_id")).longValue());
-                    customerAddress.setIsDefault(((BigDecimal) map.get("isDefault")).intValue());
-                    customerAddress.setCaPhone((String) map.get("ca_person"));
-                    customerAddress.setCaPhone((String) map.get("ca_phone"));
-                    customerAddress.setCaAddress((String) map.get("ca_address"));
-                    // 将联系人添加到主表
-                    main.getCustomerAddresses().add(customerAddress);
                 }
+                //TODO 考虑记录日志
+            } catch (JsonProcessingException e) {
+                e.printStackTrace();
+                logger.info("sendProd-Error:JSON转换失败 codes {} ",prCodes);
+                retMap.put("success", false);
+                retMap.put("message", "JSON转换失败");
+            } catch (Exception e) {
+                e.printStackTrace();
+                eMsg = StringUtil.nvl(e.getMessage(),"无");
+                baseDao.execute("update "+master+".product set pr_sendwmsstatus='同步失败' ,pr_sendwmserr='操作:"+actionType+":"+eMsg+"' where pr_code = ’"+prCode+"'");
+                throw new RuntimeException(e);
             }
-            // 返回按ve_id分组的VendorMain列表
-            List<Customer> vList =  new ArrayList<>(custMap.values());
-            Map<String, Object> res = sendCustSigle(master,actionType,vList);
-            if(!res.get("success").equals(true)){
-                if(errMsg.length()>0){
-                    errMsg.append("</br>");
-                }
-                errMsg.append("执行:"+actionTypeName+"操作失败:"+res.get("message"));
+            if(eMsg!=null){
+                errMsg.append("物料编号:").append(prCode).append(eMsg);
             }
-        });
+        }
         if(errMsg.length()>0){
             retMap.put("success",false);
             retMap.put("message",errMsg.toString());
             return retMap;
         }
-        logger.info("sendCust-End:master {} ids {}",master,ids);
-        retMap.put("message","同步成功。");
         return retMap;
     }
 
-    private Map<String, Object> sendCustSigle(String master,String actionType,List<Customer> list){
-        List<PartnersReq> custList = new ArrayList<>();
-        List<Object> docCodes = new ArrayList<>();
-        String codes = "";
-        StringBuffer errMsg = new StringBuffer();
-        String eMsg = "";
-        Map<String, Object> retMap = new HashMap<>();
-        if(CollectionUtil.isEmpty(list)){
-            retMap.put("success",false);
-            retMap.put("message","没有需要同步的客户。");
-            return retMap;
-        }
-        for (Customer cust : list) {
-            // 创建Req对象
-            docCodes.add(cust.getCuCode());
-            logger.info("sendVend-test: id {} code {}",cust.getCuId(),cust.getCuCode());
-            // 创建ProductReq对象
-            PartnersReq req = PartnersReq.builder()
-                    .partnerCode(cust.getCuCode())
-                    .name(cust.getCuName())
-                    .cnShortName(cust.getCuShortname())
-                    .enCompanyType("customer")
-                    /* .customField1("自定义2")
-                     .customField2("自定义2")
-                     .customField3("自定义3")
-                     .customField4("自定义4")
-                     .customField5("自定义5")
-                     .remark("备注注")*/
-                    .contactsInfos(PartnersReq.ContactsInfos.builder()
-                            .contactsInfo(Optional.ofNullable(cust.getCustomerAddresses())
-                                    .orElse(Collections.emptyList())
-                                    .stream()
-                                    .map(customerAddress -> PartnersReq.ContactsInfo.builder()
-                                            .isDefault(customerAddress.getIsDefault())
-                                            .name(customerAddress.getCaPerson())
-                                            .mobile(customerAddress.getCaPhone() )
-                                            .address(customerAddress.getCaAddress())
-                                            .build())
-                                    .collect(Collectors.toList()))
-                            .build())
-                    .build();
-            custList.add(req);
-        }
-        codes = "'"+docCodes.stream()
-                .map(String::valueOf)
-                .collect(Collectors.joining("','"))+"'";
-        // 创建BaseReq对象
-        BaseItemsReq<PartnersReq> custBaseItemsReq = new BaseItemsReq();
-        custBaseItemsReq.setActionType(actionType);
-        custBaseItemsReq.setWarehouseCode(vwmsConfig.getWarehouseCode());
-        custBaseItemsReq.setOwnerCode(vwmsConfig.getOwnerCode());
-        custBaseItemsReq.setOutBizCode("sendCust-"+System.currentTimeMillis());
-        // 创建BaseVastItem对象
-        BaseItemsReq.BaseItems custBaseItems = new BaseItemsReq<PartnersReq>().new BaseItems<PartnersReq>();
-        // 设置BaseVastItem的item属性
-        custBaseItems.setItem(custList);
-        custBaseItemsReq.setItems(custBaseItems);
-        // 创建BaseReq对象
-        BaseReq<BaseItemsReq<PartnersReq>> custBaseReq = new BaseReq();
-        custBaseReq.setRequest(custBaseItemsReq);
-        try {
-            // 将wrapper对象转换为JSON字符串
-            String json = objectMapper.writeValueAsString(custBaseReq);
-            logger.info("Request JSON: {}", json);
-            HttpUtil.Response response = HttpUtil.doPostToVWMS("openapi.partners.batchcreate", json,vwmsConfig);
-            if(!String.valueOf(response.getStatusCode()).startsWith("2")){
-                eMsg = StringUtil.nvl(response.getResponseText(),"未知");
-                retMap.put("success", false);
-                retMap.put("message", "请求失败:"+response.getStatusCode()+":"+eMsg);
-                baseDao.execute("update "+master+".customer set cu_sendwmsstatus='同步失败',cu_sendwmserr=('操作:"+actionType+":"+eMsg.replaceAll("'","''")+"') " +
-                        " where cu_code IN ("+codes+")");
-            }else {
-                retMap.put("success",true);
-                List<String> sqls = new ArrayList<>();
-                BaseVastResp baseVastResp = new ObjectMapper().readValue(response.getResponseText(), BaseVastResp.class);
-                BaseVastResp.Response baseVastRespResponse= baseVastResp.getResponse();
-                if(baseVastRespResponse!=null){
-                    //默认成功
-                    baseDao.execute("update  "+master+".customer set cu_sendwmsstatus='同步成功' ,cu_sendwmserr=null where cu_code in ("+codes+")");
-                    if("success".equals(baseVastRespResponse.getFlag())){
-                        logger.info("response-success code: {} message: {}", baseVastRespResponse.getCode(),baseVastRespResponse.getMessage());
-                    }else {
-                        retMap.put("success",false);
-                        logger.info("response-failure code: {} message: {}", baseVastRespResponse.getCode(),baseVastRespResponse.getMessage());
-                        //不一定全部失败,此处只会返回失败提示
-                        BaseVastResp.Items items = baseVastRespResponse.getItems();
-                        if(items!=null&&!CollectionUtil.isEmpty(items.getItem())){
-                            for (BaseVastResp.Item item : items.getItem()) {
-                                eMsg = item.getMessage();
-                                if(!eMsg.equals("The goods don't exists, you can't update it.")){
-                                    logger.info("response-failure-item code: {} message: {}", item.getItemCode(),item.getMessage());
-                                    sqls.add("update "+master+".customer set cu_sendwmsstatus='同步失败',cu_sendwmserr=('操作:"+actionType+":"+eMsg.replaceAll("'","''")+"') where cu_code ='"+item.getItemCode()+"'");
-                                    if(errMsg.length()>0){
-                                        errMsg.append("</br>");
-                                        errMsg.append("客户编号:"+item.getItemCode()+",失败原因:"+eMsg);
-                                    }
-                                }
-                            }
-                            if(!CollectionUtil.isEmpty(sqls)){
-                                baseDao.execute(sqls);
-                                retMap.put("message", errMsg.toString());
-                            }else {
-                                logger.info("response-failure-item all message: {}", "The goods don't exists, you can't update it.");
-                                retMap.put("success",true);
-                            }
-                        }else {
-                            eMsg = StringUtil.nvl(baseVastRespResponse.getMessage(),"无");
-                            baseDao.execute("update "+master+".customer set cu_sendwmsstatus='同步失败',cu_sendwmserr=('操作:"+actionType+":"+eMsg.replaceAll("'","''")+"') " +
-                                    " where cu_code IN ("+codes+")");
-                            retMap.put("message", eMsg);
-                        }
-                    }
-                    baseDao.execute("update  "+master+".customer set cu_sendwmsflag=-1 where cu_code in ("+codes+") AND NVL(cu_sendwmsflag,0) = 0 AND cu_sendwmsstatus='同步成功'");
-                }else {
-                    retMap.put("success", false);
-                    retMap.put("message", "转换失败:"+response.getStatusCode()+":"+response.getResponseText());
-                }
-            }
-            return retMap;
-        } catch (JsonProcessingException e) {
-            e.printStackTrace();
-            logger.info("sendCust-Error:JSON转换失败 codes {} ",codes);
-            retMap.put("success", false);
-            retMap.put("message", "JSON转换失败");
-            return retMap;
-        } catch (Exception e) {
-            e.printStackTrace();
-            eMsg = StringUtil.nvl(e.getMessage(),"无");
-            baseDao.execute("update "+master+".customer set cu_sendwmsstatus='同步失败' ,cu_sendwmserr='操作:"+actionType+":"+eMsg+"' where cu_code in ("+codes+")");
-            throw new RuntimeException(e);
-        }
-    }
+
 
     @Override
     public Map<String, Object> sendIO(String master, String id, String emCode, String caller) {

+ 39 - 23
src/main/java/com/uas/eis/utils/HttpUtil.java

@@ -979,13 +979,13 @@ public class HttpUtil {
 		String timestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
 		//"{secretkey}app_key{app_key}customerId{customerId}formatjsonmethod{openapi_name}sign_methodmd5timestamp2015-04-26 00:00:07v2.0{body}{secretkey}";
 		String signMsg= String.format("%sapp_key%scustomerId%sformatjsonmethod%ssign_methodmd5timestamp%sv2.0%s%s",
-				vwmsConfig.getAppSecret(),vwmsConfig.getAppKey(), vwmsConfig.getCustomerId(),method,timestamp,formData,vwmsConfig.getAppSecret() );
+				vwmsConfig.getAppKey(),vwmsConfig.getAppKey(), vwmsConfig.getCustomerId(),method,timestamp,formData,vwmsConfig.getAppKey() );
 		//http://{openapiUrl}?method=openapi.singleitem.synchronize&timestamp=2015-04-26%2000:00:07&format=json&app_key={app_key}&v=2.0&sign=D06D88CB34B2EC0E5C9BAB396C9542B6&sign_method=md5&customerId={customerId}
 		StringBuilder postUrl = new StringBuilder(vwmsConfig.getApiUrl());
 		postUrl.append("?method=").append(method)
 				.append("&timestamp=").append(System.currentTimeMillis()).append("&format=json").append("&app_key=").append(vwmsConfig.getAppKey())
 				.append("&v=2.0")
-				.append("&_signature=").append(HmacUtils.encode(signMsg, vwmsConfig.getAppSecret()))	// 对请求串进行签名
+				.append("&_signature=").append(HmacUtils.encode(signMsg, vwmsConfig.getAppKey()))	// 对请求串进行签名
 				.append("&sign_method=md5").append("&customerId=").append(vwmsConfig.getCustomerId());
 		HttpPost post = new HttpPost(postUrl.toString());
 		StringEntity postingString = new StringEntity(formData, HTTP.UTF_8);
@@ -995,33 +995,49 @@ public class HttpUtil {
 		return Response.getResponse(response);
 	}
 
-	public static byte[] postXmlToVWMS(String method,  String xml, String encoding,VwmsConfig vwmsConfig) throws Exception {
+	public static Response postXmlToVWMS(String method,  String xml, String encoding,VwmsConfig vwmsConfig) throws Exception {
 		byte[] data = xml.getBytes(encoding);
 		String timestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
-		//"{secretkey}app_key{app_key}customerId{customerId}formatjsonmethod{openapi_name}sign_methodmd5timestamp2015-04-26 00:00:07v2.0{body}{secretkey}";
-		String signMsg= String.format("%sapp_key%scustomerId%sformatjsonmethod%ssign_methodmd5timestamp%sv2.0%s%s",
-				vwmsConfig.getAppSecret(),vwmsConfig.getAppKey(), vwmsConfig.getCustomerId(),method,timestamp,xml,vwmsConfig.getAppSecret() );
+		//"app_key=20201015001
+		//customerId=BJMG
+		//format=xml
+		//method=singleitem.synchronize
+		//partner_id=top-sdk-java-20190305
+		//sign_method=md5
+		//timestamp=2020-12-14 18:54:36
+		//v=2.0";
+		//20201015001app_key20201015001customerIdBJMGformatxmlmethodsingleitem.synchronizepartner_idtop-sdk-java-20190305sign_methodmd5timestamp2020-12-14 18:54:36v2.0{body}20201015001
+		String signMsg= String.format("%sapp_key%scustomerId%sformatxmlmethod%ssign_methodmd5timestamp%sv2.0%s%s",
+				vwmsConfig.getAppKey(), vwmsConfig.getAppKey(), vwmsConfig.getCustomerId(),method,timestamp,xml,vwmsConfig.getAppKey());
+		System.out.println(signMsg.toString());
 		StringBuilder postUrl = new StringBuilder(vwmsConfig.getApiUrl());
-		postUrl.append("?method=").append(method)
-				.append("&timestamp=").append(System.currentTimeMillis()).append("&format=xml").append("&app_key=").append(vwmsConfig.getAppKey())
-				.append("&v=2.0")
-				.append("&_signature=").append(HmacUtils.encode(signMsg, vwmsConfig.getAppSecret()))	// 对请求串进行签名
-				.append("&sign_method=md5").append("&customerId=").append(vwmsConfig.getCustomerId());
+		postUrl.append("?app_key=").append(vwmsConfig.getAppKey()).append("&method=").append(method)
+				.append("&v=2.0").append("&sign=").append(MD5Util.encrypt32Up(signMsg))	// 对请求串进行签名
+				.append("&timestamp=").append(System.currentTimeMillis())
+				.append("&format=xml").append("&sign_method=md5")
+				.append("&customerId=").append(vwmsConfig.getCustomerId());
+		System.out.println(postUrl.toString());
 		URL url = new URL(postUrl.toString());
 		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
-		conn.setRequestMethod("POST");
-		conn.setDoOutput(true);
-		conn.setRequestProperty("Content-Type", "text/xml; charset=" + encoding);
-		conn.setRequestProperty("Content-Length", String.valueOf(data.length));
-		conn.setConnectTimeout(5 * 1000);
-		OutputStream outStream = conn.getOutputStream();
-		outStream.write(data);
-		outStream.flush();
-		outStream.close();
-		if (conn.getResponseCode() == HttpStatus.OK.value()||conn.getResponseCode() == HttpStatus.CREATED.value()) {
-			return read2Byte(conn.getInputStream());
+		try {
+			conn.setRequestMethod("POST");
+			conn.setDoOutput(true);
+			conn.setRequestProperty("Content-Type", "text/xml; charset=" + encoding);
+			conn.setRequestProperty("Content-Length", String.valueOf(data.length));
+			conn.setConnectTimeout(5 * 1000);
+			OutputStream outStream = conn.getOutputStream();
+			outStream.write(data);
+			outStream.flush();
+			outStream.close();
+			Response response = new Response();
+			response.setStatusCode(conn.getResponseCode());
+			response.setResponseText(read2String(conn.getInputStream()));
+			return response;
+		} finally {
+			if (conn != null) {
+				conn.disconnect();
+			}
 		}
-		return null;
 	}
 	public static class Response {
 		private int statusCode;

+ 2 - 2
src/main/resources/application-prod.yml

@@ -2,9 +2,9 @@ spring:
     datasource:
         type: com.alibaba.druid.pool.DruidDataSource
         driverClassName: oracle.jdbc.OracleDriver
-        username: HUAXK_P
+        username: DATACENTER
         password: select!#%*(
-        url: jdbc:oracle:thin:@113.108.118.106:1521:orcl
+        url: jdbc:oracle:thin:@10.1.81.208:11652:orcl
         initialSize: 1
         maxActive: 3
         maxWait: 30000

+ 5 - 19
src/main/resources/vwms.properties

@@ -1,22 +1,8 @@
-#?????http://113.108.118.106:8443/c1.1/openapi
-#format?xml/json
-#app_key?HXK0225
-#sign?E58F1B90BCD69FF7DFC7E9DA1831F532
-#sign_method?md5
-#customerId?HXK
-#???? warehouse_code:LH01
-#???? owner_code:HXK
-#WMS?????
-#http://113.108.118.106:8443/api/login
-#???F12345
-#???F12345.1
-api_url=http://113.108.118.106:8443/c1.1/openapi
-app_secret=E58F1B90BCD69FF7DFC7E9DA1831F532
-partner_id=HXK
-app_key=HXK0225
-customerId=HXK
-vwms.warehouse.code=LH01
-ownerCode=HXK
+api_url=http://vpn-nj.hr-network.cn:285/api/edi/qimen/service
+app_key=YJHUAS
+customerId=YJH
+vwms.warehouse.code=YJHCK
+ownerCode=YUEJH
 
 
 

+ 40 - 107
src/test/java/com/uas/eis/UasEisApplicationTests.java

@@ -13,9 +13,7 @@ import com.uas.eis.entity.vwms.req.BaseReq;
 import com.uas.eis.entity.vwms.req.ProductReq;
 import com.uas.eis.entity.vwms.resp.BaseVastResp;
 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 com.uas.eis.utils.*;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.slf4j.Logger;
@@ -25,6 +23,8 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
 import java.io.*;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
 import java.util.*;
 import com.fasterxml.jackson.dataformat.xml.XmlMapper;
 
@@ -40,6 +40,40 @@ public class UasEisApplicationTests {
 	private ERPService erpService;
 	@Autowired
 	private VwmsConfig vwmsConfig;
+	@Test
+	public void testResp(){
+		String responseText="<?xml version=\"1.0\" encoding=\"utf-8\"?><response><flag>success</flag><code>201</code><message>openapi.items.synchronize successfully</message></response>";
+		System.out.println("responseText:"+responseText);
+		XmlMapper xmlMapper = new XmlMapper();
+		// 解析XML响应
+        BaseVastResp baseVastResp = null;
+        try {
+            baseVastResp = xmlMapper.readValue(responseText, BaseVastResp.class);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        BaseVastResp.Response baseVastRespResponse= baseVastResp.getResponse();
+		System.out.println("baseVastRespResponse:"+baseVastRespResponse.toString());
+	}
+	@Test
+	public void testMY() {
+		String meg = "20201015001app_key20201015001customerIdBJMGformatxmlmethodsingleitem.synchronizepartner_idtop-sdk-java-20190305sign_methodmd5timestamp2020-12-14 18:54:36v2.0<request><actionType>ADD</actionType><item><barCode>0001</barCode><itemCode>0001</itemCode><itemName>0001</itemName><itemType>ZP</itemType><stockUnit>个</stockUnit></item><ownerCode>BJMG</ownerCode><warehouseCode>OTHER</warehouseCode></request>20201015001";
+		String sign = MD5Util.encrypt32Up(meg);
+		System.out.println("MD5加密结果: " + sign);
+	}
+	@Test
+	public void testSendProd(){
+		// 设置测试数据
+		String master = "YUEJH_TEST";
+		String id = "100052523";
+		String emCode = "test";
+		String caller = "Product";
+		// 调用待测方法
+		Map<String, Object> result = erpService.sendProd(master, id, emCode,caller);
+		System.out.println("result:"+result.toString());
+	}
+
+
 	@Test
 	public void testSendProdByXml(){
 		// 设置测试数据
@@ -53,7 +87,7 @@ public class UasEisApplicationTests {
 		// 创建BaseVastItem对象
 		BaseItemsReq.BaseItems prodBaseItems = new BaseItemsReq<ProductReq>().new BaseItems<ProductReq>();
 		// 设置BaseVastItem的item属性
-		ProductReq productReq = new ProductReq.Builder()
+	/*	ProductReq productReq = new ProductReq.Builder()
 				.itemId("TESTXML")
 				.itemCode("TESTXML")
 				.barCode("TESTXML")
@@ -79,8 +113,8 @@ public class UasEisApplicationTests {
 				.ExtendProps(new ProductReq.ExtendProps() {{
 					setKey1("1000.0");
 				}})
-				.build();
-		prodList.add(productReq2);
+				.build();*/
+//		prodList.add(productReq2);
 		prodBaseItems.setItem(prodList);
 		prodBaseItemsReq.setItems(prodBaseItems);
 		// 创建RequestWrapper对象
@@ -130,106 +164,5 @@ public class UasEisApplicationTests {
 		}
 
 	}
-	@Test
-	public void testSendProd(){
-		// 设置测试数据
-		String master = "HUAXK";
-		String id = "100047433";
-		String emCode = "test";
-		String caller = "test";
-		// 调用待测方法
-		Map<String, Object> result = erpService.sendProd(master, id, emCode,caller);
-		System.out.println("result:"+result.toString());
-	}
-	@Test
-	public void testTransfer(){
-//		String str = "\u8d27\u54c1\u4ee3\u7801\u6216\u6761\u7801\u957f\u5ea6\u4e0d\u6ee1\u8db3";
-//		System.out.println(str);
-		System.out.println("l:"+"".length());
-	}
-
-	@Test
-	public void testSendVend(){
-		String master = "HUAXK";
-		String id = "98660";
-		String emCode = "test";
-		String caller = "test";
-		Map<String, Object> result = erpService.sendVend(master, id, emCode,caller);
-		System.out.println("result:"+result.toString());
-	}
-
-	@Test
-	public void testSendCustomer(){
-		String master = "HUAXK";
-		String id = "70779";
-		String emCode = "test";
-		String caller = "test";
-		Map<String, Object> result = erpService.sendCust(master, id, emCode,caller);
-		System.out.println("result:"+result.toString());
-	}
-
-	@Test
-	public void testSendAddCGYS(){
-		// 设置测试数据
-		String master = "HUAXK";
-		String id = "50735758";
-		String emCode = "test";
-		String caller = "ProdInOut!PurcCheckin";
-		Map<String, Object> result = erpService.sendIO(master, id, emCode,caller);
-		System.out.println("result:"+result.toString());
-	}
-	@Test
-	public void testSendCancelCGYS(){
-		// 设置测试数据
-		String master = "HUAXK";
-		String id = "50735836";
-		String emCode = "test";
-//		String caller = "ProdInOut!PurcCheckin";
-		String caller = "ProdInOut!Sale";
-		Map<String, Object> result = erpService.cancelIO(master, id, emCode,caller,"反提交");
-		System.out.println("result:"+result.toString());
-	}
-
-	@Test
-	public void testSendAddXSCH(){
-		// 设置测试数据
-		String master = "HUAXK";
-		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 testSendAddBCCK(){
-		// 设置测试数据
-		String master = "HUAXK";
-		String id = "50736049";
-		String emCode = "test";
-		String caller = "ProdInOut!AppropriationOut";
-		Map<String, Object> result = erpService.sendIO(master, id, emCode,caller);
-		System.out.println("result:"+result.toString());
-	}
-
-	@Test
-	public void testSendAddQTCKZF(){
-		// 设置测试数据
-		String master = "HUAXK";
-		String id = "50736053";
-		String emCode = "test";
-		String caller = "ProdInOut!OtherOut";
-		Map<String, Object> result = erpService.sendIO(master, id, emCode,caller);
-		System.out.println("result:"+result.toString());
-	}
-
-	@Test
-	public void testSendStockData(){
-		// 设置测试数据
-		String master = "HUAXK";
-		String emCode = "test";
-		Map<String, Object> result = erpService.sendStockData(master, emCode);
-		System.out.println("result:"+result.toString());
-	}
 }