ERPServiceImpl.java 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. package com.uas.eis.service.Impl;
  2. import cn.hutool.json.JSONArray;
  3. import cn.hutool.json.JSONObject;
  4. import com.uas.eis.core.config.SpObserver;
  5. import com.uas.eis.core.support.TokenProperties;
  6. import com.uas.eis.dao.*;
  7. import com.uas.eis.service.CommonService;
  8. import com.uas.eis.service.ERPService;
  9. import com.uas.eis.utils.HttpUtil;
  10. import org.apache.commons.codec.binary.Base64;
  11. import org.apache.commons.codec.digest.DigestUtils;
  12. import org.slf4j.Logger;
  13. import org.slf4j.LoggerFactory;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.stereotype.Service;
  16. import java.io.OutputStream;
  17. import java.net.HttpURLConnection;
  18. import java.net.URL;
  19. import java.nio.charset.StandardCharsets;
  20. import java.text.SimpleDateFormat;
  21. import java.util.*;
  22. import static com.uas.eis.utils.PSHttpUtils.doPost;
  23. @Service
  24. public class ERPServiceImpl implements ERPService {
  25. private final Logger logger = LoggerFactory.getLogger(this.getClass());
  26. private static Map<String, String> tokenConfig = TokenProperties.getAllProperty();
  27. @Autowired
  28. private BaseDao baseDao;
  29. @Autowired
  30. private CommonService commonService;
  31. private static final String API_URL = "https://ecsb.crcloud.com/ecsb/gw/sys/rf/";
  32. private static final String APP_SUB_ID = "001900060002";
  33. private static final String APP_TOKEN = "791ced0c04fb43eb898db171286092c6";
  34. private static final String API_ID = "crmic.crmicpdbgbpm.PDBGBPM.AgentService";
  35. private static final String API_VERSION = "1.0";
  36. private static final String PARTNER_ID = "00190000";
  37. private static final String SYS_ID = "00190006";
  38. private static final String SIGN_KEY = "8c77ccf46f0f4fcfad8e0639138a735b"; // 签名密钥
  39. private static final String USER_TOKEN = "";
  40. private static final String sapno="0000111563";
  41. @Override
  42. public Map<String, Object> sendProdIO(String master, int id,String action) throws Exception {
  43. Map<String, Object> modelMap = new HashMap<String, Object>();
  44. SpObserver.putSp(master);
  45. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
  46. sdf.setTimeZone(TimeZone.getTimeZone("GMT+8"));
  47. String time_Stamp= sdf.format(new Date());
  48. // 1. 构造业务数据
  49. JSONArray businessData = buildBusinessData(id,action);
  50. String reqData = com.alibaba.fastjson.JSONArray.toJSONString(businessData);
  51. System.out.println("reqData:"+reqData);
  52. // 2. 构造公共参数
  53. TreeMap<String, String> publicParams = buildPublicParams(time_Stamp);
  54. // 3. 生成签名
  55. String sign = generateSign(publicParams, reqData);
  56. publicParams.put("Sign", sign);
  57. // 4. 生成SSDP参数(Base64)
  58. String ssdp = buildSsdp(publicParams);
  59. System.out.println("ssdp:"+ssdp);
  60. String url=API_URL+"?ssdp="+ssdp;
  61. HttpUtil.Response response = HttpUtil.doPost(url, reqData, false, null);
  62. String res=response.getResponseText();
  63. System.out.println("res:"+res);
  64. //{"returnCode":0,"returnMsg":"SECCUSS"}
  65. String logSql="insert into dockProdIOLog(id_,date_,keyvalue,action_,time_Stamp,sign,ssdp,reqData,res) " +
  66. " values(DOCKPRODIOLOG_SEQ.nextval,sysdate,"+id+",'"+action+"','"+time_Stamp+"','"+sign+"','"+ssdp+"','"+reqData+"','"+res+"')";
  67. baseDao.execute(logSql);
  68. return Collections.emptyMap();
  69. }
  70. /**
  71. * 生成SSDP字符串并Base64编码
  72. */
  73. private static String buildSsdp(TreeMap<String, String> publicParams) {
  74. StringBuilder sb = new StringBuilder();
  75. for (Map.Entry<String, String> entry : publicParams.entrySet()) {
  76. sb.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
  77. }
  78. // 去掉最后一个&
  79. if (sb.length() > 0) {
  80. sb.setLength(sb.length() - 1);
  81. }
  82. System.out.println("buildSsdp:"+sb.toString());
  83. String ssdp=Base64.encodeBase64String(sb.toString().getBytes(StandardCharsets.UTF_8));
  84. //System.out.println("ssdp:"+ssdp);
  85. return ssdp;
  86. }
  87. /**
  88. * 生成签名(MD5 32位大写)
  89. */
  90. private String generateSign(Map<String, String> publicParams, String reqData) {
  91. Map<String, String> signMap = new TreeMap<>(publicParams);
  92. signMap.put("REQUEST_DATA", reqData);
  93. // 拼接公共参数
  94. StringBuilder sb = new StringBuilder();
  95. for (Map.Entry<String, String> entry : signMap.entrySet()) {
  96. sb.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
  97. }
  98. // 拼接密钥
  99. sb.append(SIGN_KEY);
  100. System.out.println("generateSign:"+sb.toString());
  101. // MD5 32位大写
  102. return DigestUtils.md5Hex(sb.toString()).toUpperCase();
  103. }
  104. private TreeMap<String, String> buildPublicParams(String time_Stamp) {
  105. TreeMap<String, String> params = new TreeMap<>();
  106. params.put("Api_ID", API_ID);
  107. params.put("Api_Version", API_VERSION);
  108. params.put("App_Sub_ID", APP_SUB_ID);
  109. params.put("App_Token", APP_TOKEN);
  110. params.put("Partner_ID", PARTNER_ID);
  111. params.put("Sys_ID", SYS_ID);
  112. params.put("Time_Stamp", time_Stamp);
  113. params.put("User_Token", "");
  114. return params;
  115. }
  116. private JSONArray buildBusinessData(int id,String action) {
  117. JSONArray array = new JSONArray();
  118. SqlRowList rs = baseDao.queryForRowSet("select * from prodio_dock_view where pi_id="+id);
  119. while (rs.next()) {
  120. JSONObject item = new JSONObject();
  121. item.put("year", rs.getGeneralInt("year_"));
  122. item.put("month", rs.getGeneralInt("MONTH_"));
  123. item.put("serialno", rs.getGeneralString("serialno"));
  124. if("post".equals(action)){
  125. item.put("shipmenttype", rs.getGeneralInt("shipmenttype")); // 1-销售出库 2-退货
  126. }else{
  127. if(rs.getGeneralInt("shipmenttype")==1){
  128. item.put("shipmenttype", 2); // 1-销售出库 2-退货
  129. }else{
  130. item.put("shipmenttype", 1); // 1-销售出库 2-退货
  131. }
  132. }
  133. item.put("sapno", sapno);
  134. item.put("terminalaccount", rs.getGeneralString("TERMINALACCOUNT"));
  135. item.put("productmodel",rs.getGeneralString("PRODUCTMODEL"));
  136. item.put("outorderno", rs.getGeneralString("OUTORDERNO"));
  137. item.put("saleprice", rs.getGeneralDouble("SALEPRICE"));
  138. item.put("qty", rs.getGeneralInt("QTY"));
  139. array.add(item);
  140. }
  141. return array;
  142. }
  143. }