Explorar el Código

【越加红】【WMS对接】【物料资料 一次性对接多个货主】

wuyx hace 7 meses
padre
commit
b34e6337df

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

@@ -25,8 +25,8 @@ public class ERPController {
      */
     @RequestMapping(value="/erp/sendProd",method=RequestMethod.POST)
     @ResponseBody
-    public Map<String, Object> sendProd(String master, String ids,String emCode,String caller){
-        return erpService.sendProd(master,ids,emCode,caller);
+    public Map<String, Object> sendProd(String master, String id,String emCode,String caller){
+        return erpService.sendProd(master,id,emCode,caller);
     }
 
 

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

@@ -10,7 +10,7 @@ import java.util.Map;
  * @date 2025-03-04
  */
 public interface ERPService {
-    Map<String, Object> sendProd(String master, String ids,String emCode,String caller);
+    Map<String, Object> sendProd(String master, String id,String emCode,String caller);
 
     Map<String, Object> sendIO(String master, String id, String emCode, String caller);
 

+ 138 - 157
src/main/java/com/uas/eis/service/Impl/ERPServiceImpl.java

@@ -36,185 +36,166 @@ public class ERPServiceImpl implements ERPService {
     @Autowired
     private VwmsConfig vwmsConfig;
 
-    @Autowired
-    private ObjectMapper objectMapper;  // 注入Jackson的ObjectMapper
-
     @Autowired
     private DocCommonService docCommonService;
 
     @Override
-    public Map<String, Object> sendProd(String master, String ids,String emCode,String caller) {
-        Map<String,Object> retMap = new HashMap<>();
-        retMap.put("success",true);
-        logger.info("sendProd-Begin:master {} ids {}",master,ids);
-//        SpObserver.putSp(master);//没有用
+    public Map<String, Object> sendProd(String master, String id, String emCode, String caller) {
+        Map<String, Object> retMap = new HashMap<>();
+        retMap.put("success", true);
+        logger.info("sendProd-Begin:master {} id {}", master, id);
         // 执行查询
         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);
-            retMap.put("message","没有需要同步的商品(品牌需设置对接MWS)。");
+                " from " + master + ".product where pr_id = " + id);
+        if (!docMsg.next()) {
+            baseDao.execute("update " + master + ".product set pr_sendwmsstatus='同步失败',pr_sendwmserr='没有需要同步的商品。' where pr_id = " + id);
+            retMap.put("success", false);
+            retMap.put("message", "没有需要同步的商品。");
             return retMap;
         }
-        List<Map<String, Object>> docMsgResultList = docMsg.getResultList();
-        // 按 pr_sendwmsflag 分组
-        Map<Object, List<Map<String, Object>>> groupedByFlag = docMsgResultList.stream()
-                .collect(Collectors.groupingBy(map -> map.get("pr_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 = "创建";
-            }
-            Map<String, Object> res = sendProdSigle(master,actionType,list);
-            if(!res.get("success").equals(true)){
-                if(errMsg.length()>0){
-                    errMsg.append("</br>");
-                }
-                errMsg.append("执行:"+actionTypeName+"操作失败:"+res.get("message"));
+        String sendflag = docMsg.getGeneralString("pr_sendwmsflag");
+        logger.info("Flag: {}", sendflag);
+        // 其他处理逻辑
+        String actionType = "update";
+        String actionTypeName = "更新";
+        if ("0".equals(String.valueOf(sendflag))) {
+            actionType = "add";
+            actionTypeName = "创建";
+        }
+        //需要调用三次对接方法
+        String[] masterList = new String[]{"YUEJH_TEST", "YJH_T", "YIT_T"};//YUEJH、AIFL、YJH_HK
+        for (String m : masterList) {
+            Map<String, Object> res = sendProdSigle(m, actionType, docMsg.getCurrentMap());
+            if (!res.get("success").equals(true)) {
+               if(StringUtil.hasText(res.get("message"))){
+                   if(errMsg.length()>0){
+                       errMsg.append("</br>");
+                   }
+                   errMsg.append(res.get("message"));
+               }
             }
-        });
-        if(errMsg.length()>0){
-            retMap.put("success",false);
-            retMap.put("message",errMsg.toString());
-            return retMap;
         }
-        logger.info("sendProd-End:master {} ids {}",master,ids);
-        retMap.put("message","同步成功。");
+        if (errMsg.length() > 0) {
+            logger.info("sendProd-End-F:master {} id {} message {}", master, id,errMsg.toString());
+            retMap.put("success", false);
+            retMap.put("message", errMsg.toString());
+            baseDao.execute("update " + master + ".product set pr_sendwmsstatus='同步失败',pr_sendwmserr=('操作:" + actionTypeName + "</br>" + errMsg.toString().replaceAll("'", "''") + "') " +
+                    " where pr_id = " + id);
+        }else {
+            logger.info("sendProd-End-S:master {} id {}", master, id);
+            retMap.put("message", "同步成功。");
+            baseDao.execute("update  " + master + ".product set pr_sendwmsstatus='同步成功' ,pr_sendwmserr=null where pr_id = " + id);
+        }
         return retMap;
     }
-    private Map<String, Object> sendProdSigle(String master,String actionType,List<Map<String, Object>> list){
+
+    private Map<String, Object> sendProdSigle(String master, String actionType, Map<String, Object> map) {
         List<Object> docCodes = new ArrayList<>();
         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;
-        }
-        String ownerCode = master;//注意如果是资料中心 需要调用三次对接方法
-        if("YUEJH_TEST".equals(master)){
+        retMap.put("success", true);
+        String ownerCode = master;
+        String ownerName = "越加红";
+        if ("YUEJH_TEST".equals(master)) {
             ownerCode = "YUEJH";
         }
-        if("YJH_T".equals(master)){
+        if ("YJH_T".equals(master)) {
             ownerCode = "AIFL";
+            ownerName = "艾富利";
         }
-        if("YIT_T".equals(master)){
+        if ("YIT_T".equals(master)) {
             ownerCode = "YJH_HK";
+            ownerName = "越加红香港";
+        }
+        if (map == null || !StringUtil.hasText(map.get("pr_code"))) {
+            retMap.put("success", false);
+            retMap.put("message", "账套:"+ownerName+"没有需要同步的商品。");
+            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"),prCode);
-            // 创建ProductReq对象
-            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(ownerCode);
-//            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);
+        String prCode = map.get("pr_code").toString();
+        // 创建ProductReq对象
+        docCodes.add(map.get("pr_code"));
+        logger.info("sendProd-test: id {} code {} ownerCode {}", map.get("pr_id"), prCode,ownerCode);
+        // 创建ProductReq对象
+        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(ownerCode);
+        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 ='"+prCode+"'");
-                }else {
-                    retMap.put("success",true);
-                    ProdResp prodResp = xmlMapper.readValue(response.getResponseText(), ProdResp.class);
-                    if(prodResp!=null){
-                        //默认成功
-                        baseDao.execute("update  "+master+".product set pr_sendwmsstatus='同步成功' ,pr_sendwmserr=null where pr_code = '"+prCode+"'");
-                        if("success".equals(prodResp.getFlag())){
-                            logger.info("response-success prcode: {}",prodResp.getItemId());
-                        }else {
-                            retMap.put("success",false);
-                            logger.info("response-failure code: {} message: {}", prodResp.getCode(),prodResp.getMessage());
-                            eMsg = StringUtil.nvl(prodResp.getMessage(),"无");
-                            baseDao.execute("update "+master+".product set pr_sendwmsstatus='同步失败',pr_sendwmserr=('操作:"+actionType+":"+eMsg.replaceAll("'","''")+"') " +
-                                    " where pr_code ='"+prCode+"'");
-                            retMap.put("message", eMsg);
-                        }
-                        baseDao.execute("update  "+master+".product set pr_sendwmsflag=-1 where pr_code = '"+prCode+"' AND NVL(pr_sendwmsflag,0) = 0 AND pr_sendwmsstatus='同步成功'");
-                    }else {
-                        retMap.put("success", false);
-                        retMap.put("message", "转换失败:"+response.getStatusCode()+":"+response.getResponseText());
+            // 解析XML响应
+            if (!String.valueOf(response.getStatusCode()).startsWith("2")) {
+                eMsg = "请求失败:" + response.getStatusCode() + ":" +StringUtil.nvl(response.getResponseText(), "未知");
+            } else {
+                ProdResp prodResp = xmlMapper.readValue(response.getResponseText(), ProdResp.class);
+                if (prodResp != null) {
+                    if ("success".equals(prodResp.getFlag())) {
+                        logger.info("response-success ownerCode {} prcode: {}", ownerCode,prodResp.getItemId());
+                    } else {
+                        logger.info("response-failure ownerCode {} code: {} message: {}", ownerCode,prodResp.getCode(), prodResp.getMessage());
+                        eMsg = StringUtil.nvl(prodResp.getMessage(), "无");
                     }
+                } else {
+                    eMsg="转换失败:" + response.getStatusCode() + ":" + response.getResponseText();
                 }
-                //TODO 考虑记录日志
-            } catch (JsonProcessingException e) {
-                e.printStackTrace();
-                logger.info("sendProd-Error:JSON转换失败 codes {} ",prCode);
-                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);
-            }
-            if(StringUtil.hasText(eMsg)){
-                errMsg.append("物料编号:").append(prCode).append(eMsg);
             }
+            //TODO 考虑记录日志
+        } catch (Exception e) {
+            e.printStackTrace();
+            eMsg = StringUtil.nvl(e.getMessage(), "无");
         }
-        if(errMsg.length()>0){
-            retMap.put("success",false);
-            retMap.put("message",errMsg.toString());
+        if (StringUtil.hasText(eMsg)) {
+            errMsg.append("账套:").append(ownerName).append(eMsg);
+        }
+        if (errMsg.length() > 0) {
+            retMap.put("success", false);
+            retMap.put("message", errMsg.toString());
             return retMap;
         }
         return retMap;
     }
 
 
-
     @Override
     public Map<String, Object> sendIO(String master, String id, String emCode, String caller) {
-        Map<String,Object> retMap = new HashMap<>();
-        retMap.put("success",true);
-        logger.info("sendIO-Begin:master {}  id {}",master,id);
+        Map<String, Object> retMap = new HashMap<>();
+        retMap.put("success", true);
+        logger.info("sendIO-Begin:master {}  id {}", master, id);
         // 执行查询
-        if(!baseDao.checkIf(master+".prodiodetail left join "+master+".product on pr_code = pd_prodcode "
-                ,"pd_piid = "+id+" and nvl(pr_sendwmsflag,0) = -1")){
-            logger.info("sendIO-End:master {} id {} res {}",master,id,"没有需要对接的明细。");
-            retMap.put("success",false);
-            retMap.put("message","没有需要对接的明细。");
+        if (!baseDao.checkIf(master + ".prodiodetail left join " + master + ".product on pr_code = pd_prodcode "
+                , "pd_piid = " + id + " and nvl(pr_sendwmsflag,0) = -1")) {
+            logger.info("sendIO-End:master {} id {} res {}", master, id, "没有需要对接的明细。");
+            retMap.put("success", false);
+            retMap.put("message", "没有需要对接的明细。");
             return retMap;
         }
-        ProdInout prodInOut = docCommonService.getIO(master,id);
-        if(CollectionUtil.isEmpty(prodInOut.getDetails())){
-            retMap.put("success",false);
-            retMap.put("message","没有需要同步的明细。");
+        ProdInout prodInOut = docCommonService.getIO(master, id);
+        if (CollectionUtil.isEmpty(prodInOut.getDetails())) {
+            retMap.put("success", false);
+            retMap.put("message", "没有需要同步的明细。");
             return retMap;
         }
-        if(prodInOut.getPiWmsstatus().equals("已确认")){
-            retMap.put("success",false);
-            retMap.put("message","单据已确认采集,不允许重复同步。");
+        if (prodInOut.getPiWmsstatus().equals("已确认")) {
+            retMap.put("success", false);
+            retMap.put("message", "单据已确认采集,不允许重复同步。");
             return retMap;
         }
         if (!StringUtil.hasText(prodInOut.getPiWmsInType())
@@ -223,37 +204,37 @@ public class ERPServiceImpl implements ERPService {
                 && !prodInOut.getPiWmsInType().equals("out")
                 && !prodInOut.getPiWmsInType().equals("transfer")
         )) {
-            retMap.put("success",false);
-            retMap.put("message","WMS单据类型为空或异常,不允许同步。");
+            retMap.put("success", false);
+            retMap.put("message", "WMS单据类型为空或异常,不允许同步。");
             return retMap;
         }
         //构建请求主体
         String masterName = prodInOut.getCurrentMaster();
         Long piId = prodInOut.getPiId();
         String errMsg = null;
-        if("in".equals(prodInOut.getPiWmsInType())){
-            errMsg = docCommonService.sendInToWms(prodInOut,masterName);
+        if ("in".equals(prodInOut.getPiWmsInType())) {
+            errMsg = docCommonService.sendInToWms(prodInOut, masterName);
         }
-        if("out".equals(prodInOut.getPiWmsInType())){
-            errMsg = docCommonService.sendOutToWms(prodInOut,masterName);
+        if ("out".equals(prodInOut.getPiWmsInType())) {
+            errMsg = docCommonService.sendOutToWms(prodInOut, masterName);
         }
-        if("transfer".equals(prodInOut.getPiWmsInType())){
-            errMsg = docCommonService.sendOMoveToWms(prodInOut,masterName);
+        if ("transfer".equals(prodInOut.getPiWmsInType())) {
+            errMsg = docCommonService.sendOMoveToWms(prodInOut, masterName);
         }
-        if(errMsg!=null){
-            if(errMsg.startsWith("OrderId:")){
-                retMap.put("OrderId",errMsg.replaceAll("OrderId:",""));
-                logger.info("sendIO-End-Sucess master {} piid {} OrderId {}",master,piId,errMsg.replaceAll("OrderId:",""));
+        if (errMsg != null) {
+            if (errMsg.startsWith("OrderId:")) {
+                retMap.put("OrderId", errMsg.replaceAll("OrderId:", ""));
+                logger.info("sendIO-End-Sucess master {} piid {} OrderId {}", master, piId, errMsg.replaceAll("OrderId:", ""));
                 //更新 WMSORDERID
-                baseDao.execute("update "+master+".prodiowms set WMSORDERID = '"+errMsg.replaceAll("OrderId:","")+"' where PIID = "+piId);
-            }else {
-                errMsg =  errMsg.replaceAll("'","''");
-                logger.info("sendIO-End-failure master {} piid {} errorTip {}",master,piId,errMsg);
-                retMap.put("success",false);
-                retMap.put("message",errMsg);
+                baseDao.execute("update " + master + ".prodiowms set WMSORDERID = '" + errMsg.replaceAll("OrderId:", "") + "' where PIID = " + piId);
+            } else {
+                errMsg = errMsg.replaceAll("'", "''");
+                logger.info("sendIO-End-failure master {} piid {} errorTip {}", master, piId, errMsg);
+                retMap.put("success", false);
+                retMap.put("message", errMsg);
             }
-        }else {
-            logger.info("sendIO-End-success master {} piid {} ",master,piId);
+        } else {
+            logger.info("sendIO-End-success master {} piid {} ", master, piId);
         }
         return retMap;
     }

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

@@ -44,9 +44,12 @@ public class UasEisApplicationTests {
 	public void testSendIn(){
 		// 设置测试数据
 		String master = "YUEJH_TEST";
-		String id = "50744152";
+		String id = "50744156";
+		//"50744155"; "ProdInOut!OtherIn";
 		String emCode = "test";
-		String caller = "ProdInOut!PurcCheckin";
+		String caller ="ProdInOut!StockProfit";
+				//="ProdInOut!SaleReturn";
+//		= "ProdInOut!PurcCheckin";
 		// 调用待测方法
 		Map<String, Object> result = erpService.sendIO(master, id, emCode,caller);
 		System.out.println("result:"+result.toString());