| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- package com.uas.eis.service.Impl;
- import cn.hutool.json.JSONArray;
- import cn.hutool.json.JSONObject;
- import com.uas.eis.core.config.SpObserver;
- import com.uas.eis.core.support.TokenProperties;
- import com.uas.eis.dao.*;
- import com.uas.eis.service.CommonService;
- import com.uas.eis.service.ERPService;
- import com.uas.eis.utils.HttpUtil;
- import org.apache.commons.codec.binary.Base64;
- import org.apache.commons.codec.digest.DigestUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import java.io.OutputStream;
- import java.net.HttpURLConnection;
- import java.net.URL;
- import java.nio.charset.StandardCharsets;
- import java.text.SimpleDateFormat;
- import java.util.*;
- import static com.uas.eis.utils.PSHttpUtils.doPost;
- @Service
- public class ERPServiceImpl implements ERPService {
- private final Logger logger = LoggerFactory.getLogger(this.getClass());
- private static Map<String, String> tokenConfig = TokenProperties.getAllProperty();
- @Autowired
- private BaseDao baseDao;
- @Autowired
- private CommonService commonService;
- private static final String API_URL = "https://ecsb.crcloud.com/ecsb/gw/sys/rf/";
- private static final String APP_SUB_ID = "001900060002";
- private static final String APP_TOKEN = "791ced0c04fb43eb898db171286092c6";
- private static final String API_ID = "crmic.crmicpdbgbpm.PDBGBPM.AgentService";
- private static final String API_VERSION = "1.0";
- private static final String PARTNER_ID = "00190000";
- private static final String SYS_ID = "00190006";
- private static final String SIGN_KEY = "8c77ccf46f0f4fcfad8e0639138a735b"; // 签名密钥
- private static final String USER_TOKEN = "";
- private static final String sapno="0000111563";
- @Override
- public Map<String, Object> sendProdIO(String master, int id,String action) throws Exception {
- Map<String, Object> modelMap = new HashMap<String, Object>();
- SpObserver.putSp(master);
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
- sdf.setTimeZone(TimeZone.getTimeZone("GMT+8"));
- String time_Stamp= sdf.format(new Date());
- // 1. 构造业务数据
- JSONArray businessData = buildBusinessData(id,action);
- String reqData = com.alibaba.fastjson.JSONArray.toJSONString(businessData);
- System.out.println("reqData:"+reqData);
- // 2. 构造公共参数
- TreeMap<String, String> publicParams = buildPublicParams(time_Stamp);
- // 3. 生成签名
- String sign = generateSign(publicParams, reqData);
- publicParams.put("Sign", sign);
- // 4. 生成SSDP参数(Base64)
- String ssdp = buildSsdp(publicParams);
- System.out.println("ssdp:"+ssdp);
- String url=API_URL+"?ssdp="+ssdp;
- HttpUtil.Response response = HttpUtil.doPost(url, reqData, false, null);
- String res=response.getResponseText();
- System.out.println("res:"+res);
- //{"returnCode":0,"returnMsg":"SECCUSS"}
- String logSql="insert into dockProdIOLog(id_,date_,keyvalue,action_,time_Stamp,sign,ssdp,reqData,res) " +
- " values(DOCKPRODIOLOG_SEQ.nextval,sysdate,"+id+",'"+action+"','"+time_Stamp+"','"+sign+"','"+ssdp+"','"+reqData+"','"+res+"')";
- baseDao.execute(logSql);
- return Collections.emptyMap();
- }
- /**
- * 生成SSDP字符串并Base64编码
- */
- private static String buildSsdp(TreeMap<String, String> publicParams) {
- StringBuilder sb = new StringBuilder();
- for (Map.Entry<String, String> entry : publicParams.entrySet()) {
- sb.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
- }
- // 去掉最后一个&
- if (sb.length() > 0) {
- sb.setLength(sb.length() - 1);
- }
- System.out.println("buildSsdp:"+sb.toString());
- String ssdp=Base64.encodeBase64String(sb.toString().getBytes(StandardCharsets.UTF_8));
- //System.out.println("ssdp:"+ssdp);
- return ssdp;
- }
- /**
- * 生成签名(MD5 32位大写)
- */
- private String generateSign(Map<String, String> publicParams, String reqData) {
- Map<String, String> signMap = new TreeMap<>(publicParams);
- signMap.put("REQUEST_DATA", reqData);
- // 拼接公共参数
- StringBuilder sb = new StringBuilder();
- for (Map.Entry<String, String> entry : signMap.entrySet()) {
- sb.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
- }
- // 拼接密钥
- sb.append(SIGN_KEY);
- System.out.println("generateSign:"+sb.toString());
- // MD5 32位大写
- return DigestUtils.md5Hex(sb.toString()).toUpperCase();
- }
- private TreeMap<String, String> buildPublicParams(String time_Stamp) {
- TreeMap<String, String> params = new TreeMap<>();
- params.put("Api_ID", API_ID);
- params.put("Api_Version", API_VERSION);
- params.put("App_Sub_ID", APP_SUB_ID);
- params.put("App_Token", APP_TOKEN);
- params.put("Partner_ID", PARTNER_ID);
- params.put("Sys_ID", SYS_ID);
- params.put("Time_Stamp", time_Stamp);
- params.put("User_Token", "");
- return params;
- }
- private JSONArray buildBusinessData(int id,String action) {
- JSONArray array = new JSONArray();
- SqlRowList rs = baseDao.queryForRowSet("select * from prodio_dock_view where pi_id="+id);
- while (rs.next()) {
- JSONObject item = new JSONObject();
- item.put("year", rs.getGeneralInt("year_"));
- item.put("month", rs.getGeneralInt("MONTH_"));
- item.put("serialno", rs.getGeneralString("serialno"));
- if("post".equals(action)){
- item.put("shipmenttype", rs.getGeneralInt("shipmenttype")); // 1-销售出库 2-退货
- }else{
- if(rs.getGeneralInt("shipmenttype")==1){
- item.put("shipmenttype", 2); // 1-销售出库 2-退货
- }else{
- item.put("shipmenttype", 1); // 1-销售出库 2-退货
- }
- }
- item.put("sapno", sapno);
- item.put("terminalaccount", rs.getGeneralString("TERMINALACCOUNT"));
- item.put("productmodel",rs.getGeneralString("PRODUCTMODEL"));
- item.put("outorderno", rs.getGeneralString("OUTORDERNO"));
- item.put("saleprice", rs.getGeneralDouble("SALEPRICE"));
- item.put("qty", rs.getGeneralInt("QTY"));
- array.add(item);
- }
- return array;
- }
- }
|