Browse Source

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

wuyx 9 months ago
parent
commit
f97b44bba5

+ 23 - 0
src/main/java/com/uas/eis/entity/vwms/req/BaseVastItem.java

@@ -0,0 +1,23 @@
+package com.uas.eis.entity.vwms.req;
+
+import lombok.Data;
+
+import java.util.List;
+@Data
+public class BaseVastItem<T> {
+    private List<T> item;
+
+    public static class Builder<T> {
+        private List<T> item;
+        public BaseVastItem.Builder<T> item(List<T> item) {
+            this.item = item;
+            return this;
+        }
+
+        public BaseVastItem<T> build() {
+            BaseVastItem<T> baseVastItem = new BaseVastItem<>();
+            baseVastItem.item = this.item;
+            return baseVastItem;
+        }
+    }
+}

+ 11 - 5
src/main/java/com/uas/eis/entity/vwms/req/BaseVastReq.java

@@ -9,15 +9,15 @@ public class BaseVastReq<T> {
     private String actionType;
     private String warehouseCode;
     private String ownerCode;
-    private List<T> items;
-
-    // 省略getter/setter方法
+    private String outBizCode;
+    private BaseVastItem<T> items;
 
     public static class Builder<T> {
         private String actionType;
         private String warehouseCode;
         private String ownerCode;
-        private List<T> items;
+        private String outBizCode;
+        private BaseVastItem<T> items;
 
         public Builder<T> actionType(String actionType) {
             this.actionType = actionType;
@@ -34,7 +34,12 @@ public class BaseVastReq<T> {
             return this;
         }
 
-        public Builder<T> items(List<T> items) {
+        public Builder<T> outBizCode(String outBizCode) {
+            this.outBizCode = outBizCode;
+            return this;
+        }
+
+        public Builder<T> items(BaseVastItem<T> items) {
             this.items = items;
             return this;
         }
@@ -44,6 +49,7 @@ public class BaseVastReq<T> {
             baseReq.actionType = this.actionType;
             baseReq.warehouseCode = this.warehouseCode;
             baseReq.ownerCode = this.ownerCode;
+            baseReq.outBizCode = this.outBizCode;
             baseReq.items = this.items;
             return baseReq;
         }

+ 21 - 1
src/main/java/com/uas/eis/entity/vwms/req/ProductReq.java

@@ -9,9 +9,12 @@ public class ProductReq {
     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方法
@@ -21,9 +24,12 @@ public class ProductReq {
         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) {
@@ -45,7 +51,10 @@ public class ProductReq {
             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;
@@ -55,7 +64,15 @@ public class ProductReq {
             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;
@@ -71,8 +88,11 @@ public class ProductReq {
             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;

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

@@ -0,0 +1,28 @@
+package com.uas.eis.entity.vwms.resp;
+
+import lombok.Data;
+
+import java.util.List;
+@Data
+public class BaseVastResp {
+    private Response response;
+
+    @Data
+    public static class Response {
+        private String flag;
+        private String code;
+        private String message;
+        private Items items;
+    }
+
+    @Data
+    public static class Items {
+        private List<Item> item;
+    }
+
+    @Data
+    public static class Item {
+        private String itemCode;
+        private String message;
+    }
+}

+ 73 - 15
src/main/java/com/uas/eis/service/Impl/ERPServiceImpl.java

@@ -6,8 +6,10 @@ import com.uas.eis.config.VwmsConfig;
 import com.uas.eis.core.config.SpObserver;
 import com.uas.eis.dao.*;
 import com.uas.eis.entity.vwms.req.*;
+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 org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -83,8 +85,10 @@ public class ERPServiceImpl implements ERPService {
     }
     private Map<String, Object> sendProdSigle(String master,String actionType,List<Map<String, Object>> list){
         List<ProductReq> productReqList = new ArrayList<>();
-        List<Object> docIds = new ArrayList<>();
-        String joinedIds = "";
+        List<Object> docCodes = new ArrayList<>();
+        String prCodes = "";
+        StringBuffer errMsg = new StringBuffer();
+        String eMsg = "";
         Map<String, Object> retMap = new HashMap<>();
         if(CollectionUtil.isEmpty(list)){
             retMap.put("success",false);
@@ -93,15 +97,16 @@ public class ERPServiceImpl implements ERPService {
         }
         for (Map<String, Object> map : list) {
             // 创建ProductReq对象
-            docIds.add(map.get("pr_id"));
+            docCodes.add(map.get("pr_code"));
             logger.info("sendProd-test: id {} code {}",map.get("pr_id"),map.get("pr_code"));
             // 创建ProductReq对象
             ProductReq productReq = new ProductReq.Builder()
                     .itemId(map.get("pr_code").toString())
                     .itemCode(map.get("pr_code").toString())
-                    .barCode(StringUtil.nvl(map.get("pr_ycxh")," "))
+                    .barCode(StringUtil.nvl(map.get("pr_ycxh"),StringUtil.nvl(map.get("pr_orispeccode"),map.get("pr_code").toString())))
                     .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() {{
@@ -110,12 +115,16 @@ public class ERPServiceImpl implements ERPService {
                     .build();
             productReqList.add(productReq);
         }
+        prCodes = "'"+docCodes.stream()
+                .map(String::valueOf)
+                .collect(Collectors.joining("','"))+"'";
         // 创建BaseReq对象
         BaseVastReq<ProductReq> baseVastReq = new BaseVastReq.Builder<ProductReq>()
                 .actionType(actionType)
                 .warehouseCode(vwmsConfig.getWarehouseCode())
                 .ownerCode(vwmsConfig.getOwnerCode())
-                .items(productReqList)
+                .outBizCode("sendProd-"+System.currentTimeMillis())
+                .items(new BaseVastItem.Builder<ProductReq>().item(productReqList).build())
                 .build();
         // 创建RequestWrapper对象
         RequestWrapperVast<ProductReq> wrapper = new RequestWrapperVast.Builder<ProductReq>()
@@ -128,26 +137,75 @@ public class ERPServiceImpl implements ERPService {
             //{{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);
-            joinedIds = docIds.stream()
-                    .map(String::valueOf)
-                    .collect(Collectors.joining(","));
-            baseDao.execute("update  "+master+".product set pr_sendwmsstatus='同步成功' ,pr_sendwmsflag=-1,pr_sendwmserr=null where pr_id in ("+joinedIds+")");
+            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=UNISTR('操作:"+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=UNISTR('操作:"+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=UNISTR('操作:"+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转换失败 ids {} ",joinedIds);
+            logger.info("sendProd-Error:JSON转换失败 codes {} ",prCodes);
             retMap.put("success", false);
             retMap.put("message", "JSON转换失败");
             return retMap;
         } catch (Exception e) {
             e.printStackTrace();
-            String eMsg = StringUtil.nvl(e.getMessage(),"无");
-            baseDao.execute("update "+master+".product set pr_sendwmsstatus='同步失败' ,pr_sendwmserr='操作:"+actionType+":"+eMsg+"' where pr_id in ("+joinedIds+")");
+            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);
         }
-        retMap.put("success", true);
-        return retMap;
     }
 
 

+ 7 - 2
src/test/java/com/uas/eis/UasEisApplicationTests.java

@@ -20,11 +20,16 @@ public class UasEisApplicationTests {
 	@Test
 	public void testSendProd(){
 		// 设置测试数据
-		String master = "HUAXK_P";
-		String id = "100072113";
+		String master = "HUAXK";
+		String id = "100059550";
 		String emCode = "test";
 		// 调用待测方法
 		Map<String, Object> result = erpService.sendProd(master, id, emCode);
 		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);
+	}
 }