Browse Source

【越加红】【WMS对接】【出入库对接异常重新上传防呆定时任务】

wuyx 4 months ago
parent
commit
37d3a1478d

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

@@ -17,4 +17,5 @@ public interface DocCommonService {
     String sendOutToWms(ProdInout prodInOut, String masterName);
     String sendInToWms(ProdInout prodInOut, String masterName);
     String doPostToWms(String xml,String method);
+    void sendErrToRobot(String robotkey, String msg);
 }

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

@@ -1,5 +1,6 @@
 package com.uas.eis.service.Impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.dataformat.xml.XmlMapper;
@@ -13,12 +14,14 @@ import com.uas.eis.entity.vwms.resp.IOResp;
 import com.uas.eis.entity.vwms.resp.ProdResp;
 import com.uas.eis.service.DocCommonService;
 import com.uas.eis.service.ERPService;
+import com.uas.eis.utils.BaseUtil;
 import com.uas.eis.utils.CollectionUtil;
 import com.uas.eis.utils.HttpUtil;
 import com.uas.eis.utils.StringUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.stereotype.Service;
 
@@ -391,4 +394,29 @@ public class DocCommonServiceImpl implements DocCommonService {
         }
         return eMsg;
     }
+
+    @Override
+    public void sendErrToRobot(String robotkey, String msg) {
+        //263a7170-3197-4ff5-8a29-be42b646a546
+        if (robotkey == null) {
+            robotkey = "263a7170-3197-4ff5-8a29-be42b646a546";
+        }
+        String postUrl = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=" + robotkey;
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("msgtype", "text");
+        JSONObject content = new JSONObject();
+        content.put("content", msg);
+        jsonObject.put("text", content);
+        try {
+            HttpUtil.Response response = HttpUtil.doPost(postUrl, jsonObject.toJSONString(), false, null);
+            if (response.getStatusCode() != HttpStatus.OK.value()) {
+                BaseUtil.showError("失败," + response.getStatusCode());
+            } else {
+                String data = response.getResponseText();
+                System.out.println(data);
+            }
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
 }

+ 73 - 0
src/main/java/com/uas/eis/task/WMSUploadTask.java

@@ -0,0 +1,73 @@
+package com.uas.eis.task;
+
+import com.uas.eis.dao.BaseDao;
+import com.uas.eis.dao.SqlRowList;
+import com.uas.eis.sdk.entity.ApiResult;
+import com.uas.eis.service.DocCommonService;
+import com.uas.eis.service.ERPService;
+import com.uas.eis.utils.StringUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+@Component
+@EnableAsync
+@EnableScheduling
+public class WMSUploadTask {
+    private final Logger logger = LoggerFactory.getLogger(this.getClass());
+    @Autowired
+    private BaseDao baseDao;
+    @Autowired
+    private DocCommonService docCommonService;
+    @Autowired
+    private ERPService erpService;
+
+    @Scheduled(cron = "0 0/2 * * * ?")
+    public void uploadfxML() {
+        logger.info("uploadfxML-begin");
+        //需要调用三次对接方法
+        String[] masterList = new String[]{"YUEJH", "AIFL", "YJH_HK"};
+        for (String master : masterList) {
+            logger.info("uploadfxML-begin-master {}",master);
+            String emCode = "ADMIN";
+            SqlRowList toSendList = baseDao.queryForRowSet("select pi_id,pi_inoutno,pi_class,ds_table,nvl(pi_sendwmserr_count,0) pi_sendwmserr_count from "+master+".prodinout left join documentsetup on ds_name = pi_class " +
+                    "where pi_status ='未过账' and PI_WMSORDERTYPE is not null and nvl(PI_SENDWMSFLAG,0) = 0 and ds_inorout in ('-IN','OUT') and PI_SENDWMSERR IS NOT NULL AND NVL(PI_SENDWMSERR_COUNT,0)<5 " +
+                    "order by pi_id");
+            if(toSendList.hasNext()){
+                while (toSendList.next()){
+                    String id = String.valueOf(toSendList.getObject("pi_id"));
+                    String inoutno = String.valueOf(toSendList.getObject("pi_inoutno"));
+                    String caller = toSendList.getGeneralString("ds_table");
+                    Integer errCount = toSendList.getGeneralInt("pi_sendwmserr_count");
+                    logger.info("uploadfxML-Upload:caller {} id {} code {}",caller,id,inoutno);
+                    // 调用待测方法
+                    Map<String, Object> result = erpService.sendIO(master, id, emCode,caller);
+//                    System.out.println("result:"+result.toString());
+                    if (result.get("success") != null && "true".equals(result.get("success").toString())) {
+                        baseDao.execute("update "+master+".prodinout set "+(StringUtil.hasText(result.get("OrderId"))?"pi_wmsordercode='"+result.get("OrderId")+"',":"")+"pi_sendwmsstatus='同步成功' ,PI_SENDWMSERR_COUNT=0,pi_sendwmserr=null,pi_sendwmsflag=-1 where pi_id = "+id);
+                    }else{
+                        String message = result.get("message") == null ? "同步失败" : result.get("message").toString().replaceAll("'", "''");
+                        baseDao.execute("update "+master+".prodinout set pi_sendwmsstatus='同步失败',PI_SENDWMSERR_COUNT=NVL(PI_SENDWMSERR_COUNT,0)+1,pi_sendwmserr=('" + message + "') where pi_id = " + id);
+                        if(errCount == 4){
+                            StringBuffer msg = new StringBuffer();
+                            msg.append("账套:").append(master).append(",").append(toSendList.getGeneralString("pi_class"))
+                                    .append("[").append(inoutno).append("]")
+                                            .append("对接WMS失败已达5次,请确认失败原因。");
+                            docCommonService.sendErrToRobot("263a7170-3197-4ff5-8a29-be42b646a546",msg.toString());
+                        }
+                    }
+                    logger.info("uploadfxML-Upload:caller {} id {} Upload res {}",caller,id,result.toString());
+                }
+//
+            }
+            logger.info("uploadfxML-End-master {}",master);
+        }
+        logger.info("uploadfxML-End");
+    }
+}

+ 5 - 2
src/main/java/com/uas/eis/utils/HttpUtil.java

@@ -244,6 +244,8 @@ public class HttpUtil {
 	public static Response doPost(String postUrl, String formData,  boolean sign, String signKey) throws Exception {
         CloseableHttpClient httpClient = HttpClients.createDefault();
         postUrl = getUrl(postUrl, sign, signKey);
+		System.out.println("postUrl:"+postUrl);
+		System.out.println("formData:"+formData);
         HttpPost post = new HttpPost(postUrl);
         StringEntity postingString = new StringEntity(formData, HTTP.UTF_8);
         post.setEntity(postingString);
@@ -316,8 +318,9 @@ public class HttpUtil {
 			String message = buf.toString();
 			// 对请求串进行签名
 			buf.append("&_signature=").append(HmacUtils.encode(message, signKey));
-		} else
-			buf.deleteCharAt(buf.length() - 1);
+		}
+//		else
+//			buf.deleteCharAt(buf.length() - 1);
 		return buf.toString();
 	}
 

+ 31 - 0
src/test/java/com/uas/eis/UasEisApplicationTests.java

@@ -1,5 +1,6 @@
 package com.uas.eis;
 
+import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.PropertyName;
@@ -13,6 +14,7 @@ import com.uas.eis.entity.vwms.req.BaseReq;
 import com.uas.eis.entity.vwms.req.ErpCancelIORequest;
 import com.uas.eis.entity.vwms.req.ProductReq;
 import com.uas.eis.entity.vwms.resp.BaseVastResp;
+import com.uas.eis.service.DocCommonService;
 import com.uas.eis.service.ERPService;
 import com.uas.eis.utils.*;
 import org.junit.Test;
@@ -21,6 +23,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.http.HttpStatus;
 import org.springframework.test.context.junit4.SpringRunner;
 
 import java.io.*;
@@ -41,6 +44,34 @@ public class UasEisApplicationTests {
 	private ERPService erpService;
 	@Autowired
 	private VwmsConfig vwmsConfig;
+	@Autowired
+	private DocCommonService docCommonService;
+	@Test
+	public void testSendMsg() {
+		docCommonService.sendErrToRobot("263a7170-3197-4ff5-8a29-be42b646a546","测试测试2");
+		/*
+		String postUrl = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=263a7170-3197-4ff5-8a29-be42b646a546";
+		String formData = "";
+		boolean sign = false;
+		String signKey = null;
+		JSONObject jsonObject = new JSONObject();
+		jsonObject.put("msgtype","text");
+		JSONObject content = new JSONObject();
+		content.put("content","测试测试");
+		jsonObject.put("text",content);
+		formData = jsonObject.toJSONString();
+        try {
+			HttpUtil.Response response = HttpUtil.doPost(postUrl,formData,sign,signKey);
+			if (response.getStatusCode() != HttpStatus.OK.value()) {
+				BaseUtil.showError("失败," + response.getStatusCode());
+			} else {
+				String data = response.getResponseText();
+				System.out.println(data);
+			}
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }*/
+    }
 	@Test
 	public void init_sendIOOut(){
 		// 设置测试数据