Browse Source

'出入库上传单据信息校验代码修改,优化代码,记录异常'

luhg 8 years ago
parent
commit
d2f63ebe0c

+ 26 - 0
src/main/java/com/uas/eis/entity/Sale.java

@@ -0,0 +1,26 @@
+package com.uas.eis.entity;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+/**
+ * Created by luhg on 2018/4/25.
+ * 云顶销售订单
+ */
+/*@Entity
+@Table(name = "edi_sale")*/
+public class Sale  implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    @GeneratedValue
+    @Column(name = "id_")
+    private Long id;
+
+    @Column(name = "order_no")
+    private String orderNo;
+
+    @Column(name = "order_no")
+    private String conSignTime;
+}

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

@@ -9,4 +9,5 @@ import java.util.Map;
 public interface StockService {
     Map<String,Object> postStockToYunding(Integer id);
     void autoPost();
+    void postConfirmToYunding(String code,int type);
 }

+ 104 - 81
src/main/java/com/uas/eis/serviceImpl/StockServiceImpl.java

@@ -27,12 +27,10 @@ import java.util.Map;
  */
 @Service
 public class StockServiceImpl implements StockService{
-    private static final String sendStockToYundingUrl = "http://dc.oclean.com/setconfirmstatus";
+    private static final String sendStockToYundingUrl = "http://dc.oclean.com/putinstorage";
     private static final String stockGetPostFromYundingUrl = "http://dc.oclean.com/getinstorage";
     private static final String sendStockPostConfirmToYundingUrl = "http://dc.oclean.com/setconfirmstatus";
-    //private static final String sendStockToYundingUrl = "http://localhost:8008/test/stock";
-    //private static final String stockGetPostFromYundingUrl = "http://localhost:8008/test/stockpost";
-    //private static final String sendStockPostConfirmToYundingUrl = "http://localhost:8008/test/stockconfirm";
+
 
     @Autowired
     BaseDao baseDao;
@@ -42,6 +40,59 @@ public class StockServiceImpl implements StockService{
     @Autowired
     EdiPostLogDao ediPostLogDao;
 
+    @Override
+    public Map<String, Object> postStockToYunding(Integer id) {
+        Map<String,Object> data = getMainData(id);
+        List<Map<String,Object>> datas = new LinkedList<>();
+        datas.add(data);
+
+        String timestamp = String.valueOf(System.currentTimeMillis()/1000);
+        String outerNo = String.valueOf(data.get("outer_no"));
+
+        Map<String,Object> postMapData = new HashMap<>();
+        postMapData.put("app_key", Constant.yundingAppKey);
+        postMapData.put("time_stamp",timestamp);
+        postMapData.put("data",datas);
+
+        return postData(outerNo,postMapData,timestamp);
+    }
+
+    private Map<String,Object> postData(String outerNo,Map<String,Object> data,String timestamp){
+        Map<String,Object> res = new HashMap<>();
+        String jsonData = JacksonUtil.toSortJson(data);
+        try{
+            HttpUtil.Response response = HttpUtil.doPostToYunding(sendStockToYundingUrl,jsonData,timestamp);
+
+            String responseText = response.getResponseText();
+            System.out.println("responseText:" + responseText);
+            System.out.println("responseCode:" + response.getStatusCode());
+            if(response.getStatusCode()!=200){
+                throw new RuntimeException("yunding server error");
+            }
+
+            Map<String,Object> responseMap = JacksonUtil.fromJson(response.getResponseText());
+
+            if(!"0".equals(String.valueOf(responseMap.get("code")))){
+                res.put("success",false);
+                res.put("remark",responseMap.get("message"));
+            }else{
+                Map<String,Object> msgJson = (Map<String,Object>) responseMap.get("msg_json");
+                List<String> successCodes = (List<String>)msgJson.get("s_no");
+                if(successCodes.contains(outerNo)){
+                    res.put("success",true);
+                }else{
+                    res.put("success",false);
+                    res.put("remark","云顶处理失败!");
+                }
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+            res.put("success",false);
+            res.put("remark",e.getMessage());
+        }
+        return res;
+    }
+
     @Override
     public void autoPost(){
         String timestamp = String.valueOf(System.currentTimeMillis()/1000);
@@ -55,51 +106,69 @@ public class StockServiceImpl implements StockService{
         postMapData.put("page_size",100);
         postMapData.put("page_index",0);
 
-        String jsonData = JacksonUtil.toJson(postMapData);
-        System.out.println("jsonData:" + jsonData);
+        String jsonData = JacksonUtil.toSortJson(postMapData);
+        String responseText = null;
         try {
             HttpUtil.Response response = HttpUtil.doPostToYunding(stockGetPostFromYundingUrl,jsonData,timestamp);
-            String responseText = response.getResponseText();
+
+            if(response.getStatusCode()!=200){
+                responseText = "yunding server error";
+            }
+
+            responseText = response.getResponseText();
+
+            System.out.println("responseText" + responseText);
+
             Map<String,Object> responseMap = JacksonUtil.fromJson(response.getResponseText());
 
             if(!"0".equals(String.valueOf(responseMap.get("code")))){
                 requestFailLog(responseText);
+                return;
+            }
+
+            if(responseMap.get("data")==null){
+                return;
             }
 
             List<Map<String,Object>> datas = (List<Map<String,Object>>) responseMap.get("data");
-            for(Map<String,Object> data:datas){
-                String code = String.valueOf(data.get("outer_no"));
-                String piClass = String.valueOf(data.get("src_order_type"));
-                EdiPostLog postHist = null;
-                try {
-                    postHist = ediPostLogDao.findByCodeAndPiClass(code,piClass);
-                    if(postHist!=null){ //说明之前已经过账成功
+            execPostProcedure(datas,responseText);
+
+        }catch (Exception e){
+            e.printStackTrace();
+            postFailLog(responseText,e.getMessage());
+        }
+
+    }
+
+    public void execPostProcedure(List<Map<String,Object>> datas,String responseText){
+        for(Map<String,Object> data:datas){
+            String code = String.valueOf(data.get("outer_no"));
+            String piClass = String.valueOf(data.get("src_order_type"));
+            EdiPostLog postHist = null;
+            try {
+                postHist = ediPostLogDao.findByCodeAndPiClass(code,piClass);
+                if(postHist!=null){ //说明之前已经过账成功
+                    postConfirmToYunding(code,1);
+                }else{ //没有记录,说明没有过账成功
+                    String out = baseDao.callProcedure("SP_YUNDING_STOCKPOST",new Object[]{code,piClass});
+                    if (out!=null){
+                        postFailLog(responseText,out);
+                    }else{
+                        postSuccessLog(responseText);
+                        logToAvoidRepeatPost(code,piClass);  //记录到edi_post_log,防止调用接口失败,下次重复过账
                         postConfirmToYunding(code,1);
-                    }else{ //没有记录,说明没有过账成功
-                        String out = baseDao.callProcedure("SP_YUNDING_STOCKPOST",new Object[]{code,piClass});
-                        if (out!=null){
-                            postFailLog(responseText,out);
-                        }else{
-                            postSuccessLog(responseText);
-                            logToAvoidRepeatPost(code,piClass);  //记录到edi_post_log,防止调用接口失败,下次重复过账
-                            postConfirmToYunding(code,1);
-                        }
                     }
-
-                }catch (Exception e){
-                    e.printStackTrace();
-                    postFailLog(responseText,e.getMessage());
                 }
 
+            }catch (Exception e){
+                e.printStackTrace();
+                postFailLog(responseText,e.getMessage());
             }
 
-        }catch (Exception e){
-            e.printStackTrace();
         }
-
     }
 
-    private void postConfirmToYunding(String code,int type){
+    public void postConfirmToYunding(String code,int type){
         String timestamp = String.valueOf(System.currentTimeMillis()/1000);
 
         Map<String,Object> postMapData = new HashMap<>();
@@ -108,9 +177,9 @@ public class StockServiceImpl implements StockService{
         postMapData.put("type",type);
         postMapData.put("outer_no",code);
 
-        String jsonData = JacksonUtil.toJson(postMapData);
+        String jsonData = JacksonUtil.toSortJson(postMapData);
         try{
-            HttpUtil.doPostToYunding(sendStockPostConfirmToYundingUrl,jsonData,timestamp);
+            HttpUtil.Response response = HttpUtil.doPostToYunding(sendStockPostConfirmToYundingUrl,jsonData,timestamp);
         }catch (Exception e){
             e.printStackTrace();
         }
@@ -156,54 +225,6 @@ public class StockServiceImpl implements StockService{
         return ediLog;
     }
 
-    @Override
-    public Map<String, Object> postStockToYunding(Integer id) {
-        Map<String,Object> data = getMainData(id);
-        List<Map<String,Object>> datas = new LinkedList<>();
-        datas.add(data);
-
-        String timestamp = String.valueOf(System.currentTimeMillis()/1000);
-        String outerNo = String.valueOf(data.get("outer_no"));
-
-        Map<String,Object> postMapData = new HashMap<>();
-        postMapData.put("app_key", Constant.yundingAppKey);
-        postMapData.put("time_stamp",timestamp);
-        postMapData.put("data",datas);
-
-        return postData(outerNo,postMapData,timestamp);
-    }
-
-    private Map<String,Object> postData(String outerNo,Map<String,Object> data,String timestamp){
-        Map<String,Object> res = new HashMap<>();
-        String jsonData = JacksonUtil.toJson(data);
-        System.out.println("jsonData:" + jsonData);
-        try{
-            HttpUtil.Response response = HttpUtil.doPostToYunding(sendStockToYundingUrl,jsonData,timestamp);
-
-            String responseText = response.getResponseText();
-            Map<String,Object> responseMap = JacksonUtil.fromJson(response.getResponseText());
-
-            if(!"0".equals(String.valueOf(responseMap.get("code")))){
-                res.put("success",false);
-                res.put("remark",responseMap.get("message"));
-            }else{
-                Map<String,Object> msgJson = (Map<String,Object>) responseMap.get("msg_json");
-                List<String> successCodes = (List<String>)msgJson.get("s_no");
-                if(successCodes.contains(outerNo)){
-                    res.put("success",true);
-                }else{
-                    res.put("success",false);
-                    res.put("remark","云顶处理失败!");
-                }
-            }
-        }catch (Exception e){
-            e.printStackTrace();
-            res.put("success",false);
-            res.put("remark",e.getMessage());
-        }
-        return res;
-    }
-
     private Map<String,Object> getMainData(Integer id){
         Map<String,Object> data = new HashMap<>();
         SqlRowSet rs = baseDao.getJdbcTemplate().queryForRowSet("select pi_id,pi_class,pi_inoutno,pi_whcode,pi_purpose,pi_remark from prodinout where pi_id=" + id);
@@ -237,6 +258,8 @@ public class StockServiceImpl implements StockService{
             data.put("purchase_detno",rs.getString("pd_orderdetno"));
             data.put("batch_no",rs.getString("pd_batchcode"));
             data.put("stockin_num",getQty(rs.getString("pd_piclass"),rs.getInt("pd_inqty"),rs.getInt("pd_outqty")));
+            data.put("spec_no",rs.getString("pd_prodcode"));
+            data.put("remark",rs.getString("pd_description"));
             datas.add(data);
         }
         return datas;

+ 2 - 2
src/main/java/com/uas/eis/task/StockTask.java

@@ -7,7 +7,7 @@ import org.springframework.stereotype.Component;
 
 /**
  * Created by luhg on 2018/4/24.
- * 出入库过账定时任务
+ * 出入库定时任务
  */
 @Component
 public class StockTask {
@@ -16,6 +16,6 @@ public class StockTask {
 
     @Scheduled(cron = "* */5 * * * *")
     public void autoPost() {
-        stockService.autoPost();
+        stockService.autoPost(); //出入库定时过账
     }
 }

+ 10 - 9
src/main/java/com/uas/eis/utils/HttpUtil.java

@@ -251,13 +251,20 @@ public class HttpUtil {
         return Response.getResponse(response);
     }
 
+	/*云顶传输数据*/
+	public static Response doPostToYunding(String url,String data,String timestamp) throws Exception{
+		url = getUrlToYunding(url,data,timestamp);
+		String extraParam =  "data=" + data;
+		return doPost(url,extraParam,false,null,30000); //默认30s超时
+	}
+
 	public static Response doPost(String postUrl, String formData,  boolean sign, String signKey, int timeout) throws Exception {
 		URL url = new URL(postUrl);
 		HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
 		try {
 			urlConn.setDoOutput(true);
 			urlConn.setDoInput(true);
-			urlConn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
+			urlConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
 			urlConn.setUseCaches(false);
 			urlConn.setInstanceFollowRedirects(true);
 			urlConn.setRequestMethod("POST");
@@ -279,13 +286,6 @@ public class HttpUtil {
 		}
     }
 
-	/*云顶传输数据*/
-	public static Response doPostToYunding(String url,String data,String timestamp) throws Exception{
-		url = getUrlToYunding(url,data,timestamp);
-		String extraParam =  "app_key=" + Constant.yundingAppKey + "&time_stamp=" + timestamp + "&data=" + data;
-		return doPost(url,extraParam,false,null,30000); //默认30s超时
-	}
-
 	private static String getUrlToYunding(String url,String data,String timestamp){
 		if(url==null){
 			return null;
@@ -294,7 +294,8 @@ public class HttpUtil {
 			return url;
 		}
 
-		String sign = MD5Util.getEncryption(Constant.yundingAppKey + Constant.yundingAppSecret + timestamp + data);
+		String sign = MD5Util.MD5(Constant.yundingAppKey + timestamp + data + Constant.yundingAppSecret );
+		sign = sign.toUpperCase();
 
 		if (url.indexOf("?")>-1){
 			url += "&sign=" + sign;

+ 33 - 4
src/main/java/com/uas/eis/utils/JacksonUtil.java

@@ -1,10 +1,7 @@
 package com.uas.eis.utils;
 
 import java.io.IOException;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 import org.codehaus.jackson.JsonGenerationException;
 import org.codehaus.jackson.JsonParseException;
@@ -92,4 +89,36 @@ public class JacksonUtil {
 		return mapper;
 	}
 
+	/**
+	 * 使用 Map按key进行排序
+	 * @param map
+	 * @return
+	 */
+	public static Map<String, Object> sortMapByKey(Map<String, Object> map) {
+		if (map == null || map.isEmpty()) {
+			return null;
+		}
+
+		Map<String, Object> sortMap = new TreeMap<String, Object>(
+				new MapKeyComparator());
+
+		sortMap.putAll(map);
+
+		return sortMap;
+	}
+
+	public static String toSortJson(Map<String, Object> map) {
+		map = sortMapByKey(map);
+		ObjectMapper mapper = getObjectMapper();
+		try {
+			return mapper.writeValueAsString(map);
+		} catch (JsonGenerationException e) {
+			e.printStackTrace();
+		} catch (JsonMappingException e) {
+			e.printStackTrace();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
 }

+ 34 - 0
src/main/java/com/uas/eis/utils/MD5Util.java

@@ -1,10 +1,44 @@
 package com.uas.eis.utils;
 
+import java.io.UnsupportedEncodingException;
+import java.math.BigInteger;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 
 public class MD5Util {
 
+	public static String MD5(String plainText) {
+		try {
+			MessageDigest md = MessageDigest.getInstance("MD5");
+			try {
+				md.update(plainText.getBytes("UTF8"));
+			} catch (UnsupportedEncodingException e) {
+				e.printStackTrace();
+			}
+			byte b[] = md.digest();
+			int i;
+			StringBuffer buf = new StringBuffer(200);
+			for (int offset = 0; offset < b.length; offset++) {
+				i = b[offset] & 0xff;
+				if (i < 16) buf.append("0");
+				buf.append(Integer.toHexString(i));
+			}
+			return buf.toString();
+		} catch (NoSuchAlgorithmException e) {
+			throw new RuntimeException("MD5加密出现错误");
+		}
+	}
+
+	public static String getMD5(String str) {
+		try {
+			MessageDigest md = MessageDigest.getInstance("MD5");
+			md.update(str.getBytes());
+			return new BigInteger(1, md.digest()).toString(16);
+		} catch (Exception e) {
+			throw new RuntimeException("MD5加密出现错误");
+		}
+	}
+
 	/**
 	 * MD5加密
 	 * @param message

+ 14 - 0
src/main/java/com/uas/eis/utils/MapKeyComparator.java

@@ -0,0 +1,14 @@
+package com.uas.eis.utils;
+
+import java.util.Comparator;
+
+/**
+ * Created by luhg on 2018/4/25.
+ * 比较器
+ */
+public class MapKeyComparator implements Comparator<String> {
+    @Override
+    public int compare(String str1, String str2) {
+        return str1.compareTo(str2);
+    }
+}