Browse Source

【华信科小米EDI对接】【采购单确认接口】

wub 5 months ago
parent
commit
e88f453586

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

@@ -30,6 +30,16 @@ public class ERPController {
         return erpService.savePurchase(data);
     }
 
+    /**
+     * 华信科采购单确认接口
+     * @param data
+     * @return
+     */
+    @RequestMapping("/erp/confirmPurchase")
+    public void confirmPurchase(String id){
+        erpService.confirmPurchase(id);
+    }
+
     /**
      * 小米推送采购单到华信科
      * @param data

+ 25 - 0
src/main/java/com/uas/eis/sdk/dto/ConfirmPurchase.java

@@ -0,0 +1,25 @@
+package com.uas.eis.sdk.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+@Data
+public class ConfirmPurchase {
+
+    @JsonProperty("SYSTEMID")
+    private String SYSTEMID;
+    @JsonProperty("GUID")
+    private String GUID;
+    @JsonProperty("PURORD_NUM")
+    private String PURORD_NUM;
+    @JsonProperty("CONFIRM_STATUS")
+    private String CONFIRM_STATUS;
+    @JsonProperty("CONFIRM_DATE")
+    private String CONFIRM_DATE;
+    @JsonProperty("CONFIRM_TIME")
+    private String CONFIRM_TIME;
+    @JsonProperty("SUPPLIER_CODE")
+    private String SUPPLIER_CODE;
+    @JsonProperty("NEW_LINE")
+    private String NEW_LINE;
+}

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

@@ -11,5 +11,6 @@ import java.util.Map;
 public interface ERPService {
 
     Map<String, Object> savePurchase(String data);
+    void confirmPurchase(String id);
     Map<String, Object> closePurchase(String data);
 }

+ 35 - 4
src/main/java/com/uas/eis/service/Impl/ERPServiceImpl.java

@@ -6,21 +6,23 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.TextNode;
 import com.uas.eis.core.support.TokenProperties;
 import com.uas.eis.dao.BaseDao;
+import com.uas.eis.dao.SqlRowList;
 import com.uas.eis.sdk.converter.ObjectToMapConverter;
 import com.uas.eis.sdk.dto.*;
 import com.uas.eis.service.ERPService;
+import com.uas.eis.task.httpclient.EDIX5JsonHttpClient;
 import com.uas.eis.utils.SqlUtil;
 import com.uas.eis.utils.X5StringUtils;
+import com.uas.eis.utils.XMEDIConfiguration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.util.*;
 
 /**
  * @author koul
@@ -36,6 +38,9 @@ public class ERPServiceImpl implements ERPService {
     @Autowired
     private BaseDao baseDao;
 
+    @Resource(name = "xmediConfiguration")
+    private XMEDIConfiguration xmediConfiguration;
+
     @Transactional
     @Override
     public Map<String, Object> savePurchase(String data) {
@@ -156,6 +161,32 @@ public class ERPServiceImpl implements ERPService {
         return result;
     }
 
+    @Override
+    public void confirmPurchase(String id) {
+        Map<String, Object> data = new HashMap<>();
+        UUID uuid = UUID.randomUUID();
+        ConfirmPurchase confirmPurchase = new ConfirmPurchase();
+        confirmPurchase.setSYSTEMID("SRM");
+        confirmPurchase.setGUID(uuid.toString().toUpperCase());
+        SqlRowList rs = baseDao.queryForRowSet("select pu_code from purchase where pu_id=" + id);
+        // 获取当前日期
+        Date currentDate = new Date();
+        // 创建SimpleDateFormat对象,指定格式
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
+        SimpleDateFormat hhmmss = new SimpleDateFormat("yyyyMMddHHMMSS");
+        if (rs.next()){
+            String pu_code = rs.getGeneralString("pu_code");
+            confirmPurchase.setPURORD_NUM(pu_code);
+            confirmPurchase.setCONFIRM_STATUS("B");
+            confirmPurchase.setCONFIRM_DATE(sdf.format(currentDate));
+            confirmPurchase.setCONFIRM_TIME(hhmmss.format(currentDate));
+            confirmPurchase.setSUPPLIER_CODE("108207");
+            data.put("data", confirmPurchase);
+            EDIX5JsonHttpClient edix5JsonHttpClient = new EDIX5JsonHttpClient(xmediConfiguration.getX5appid(), xmediConfiguration.getX5appkey(), xmediConfiguration.getX5confirmUrl());
+            edix5JsonHttpClient.post(data, xmediConfiguration, baseDao, "ConfirmPurchase");
+        }
+    }
+
     @Override
     public Map<String, Object> closePurchase(String data) {
         Map<String, Object> result = new HashMap<>();

+ 140 - 0
src/main/java/com/uas/eis/task/httpclient/EDIX5JsonHttpClient.java

@@ -0,0 +1,140 @@
+package com.uas.eis.task.httpclient;
+
+import com.alibaba.fastjson.JSON;
+import com.uas.eis.beans.x5domain.*;
+import com.uas.eis.dao.BaseDao;
+import com.uas.eis.sdk.dto.ConfirmPurchase;
+import com.uas.eis.utils.X5StringUtils;
+import com.uas.eis.utils.XMEDIConfiguration;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.http.HttpResponse;
+import org.apache.http.StatusLine;
+import org.apache.http.client.HttpResponseException;
+import org.apache.http.client.fluent.Form;
+import org.apache.http.client.fluent.Request;
+import org.apache.http.client.fluent.Response;
+import org.apache.http.util.EntityUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.xml.bind.DatatypeConverter;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+public class EDIX5JsonHttpClient extends X5HttpClient {
+
+    private final Logger logger = LoggerFactory.getLogger(this.getClass());
+
+    /**
+     * 构造器
+     */
+    public EDIX5JsonHttpClient(String appId, String appKey, String url) {
+        this.appid = appId;
+        this.appkey = appKey;
+        this.url = url;
+    }
+
+    public <T> X5Response<T> post(Object body, XMEDIConfiguration configuration, BaseDao baseDao, String type) {
+        String kind="";
+        if("ConfirmPurchase".equals(type)){
+            kind="采购订单确认";
+        }else if("ProductWIP".equals(type)){
+            kind="物料WIP同步";
+        }
+        X5Response<T> x5Response;
+        if (X5StringUtils.isEmpty(appid) || X5StringUtils.isEmpty(appkey) || X5StringUtils.isEmpty(url)) {
+            throw new X5Exception("1016", "The request at least contains appid appkey and url.");
+        }
+        String bodyString = null;
+        if (body instanceof String) {
+            bodyString = body.toString();
+        } else {
+            bodyString = JSON.toJSONString(body);
+        }
+        String s = appid + bodyString + appkey;
+        String sign = upperCase(DigestUtils.md5Hex(appid + bodyString + appkey));
+        //拼装header信息
+        X5RequestHeader header = new X5RequestHeader();
+        header.setAppid(appid);
+        header.setSign(sign);
+        header.setUrl(url);
+        //拼装X5请求信息
+        X5Request x5Request = new X5Request();
+        x5Request.setHeader(header);
+        x5Request.setBody(bodyString);
+        //构造请求参数
+        String data = X5StringUtils.encodeBase64(JSON.toJSONString(x5Request));
+        String encoding = null;
+        String account=configuration.getX5username()+":"+configuration.getX5password();
+        try {
+            encoding = DatatypeConverter.printBase64Binary(account.getBytes("UTF-8"));  //username  password 自行修改  中间":"不可少
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        try {
+            Response executeResult = Request.Post(url).addHeader("Content-Type", "application/x-www-form-urlencoded").setHeader("Authorization","Basic " + encoding).connectTimeout(DEFAULT_COMMECT_TIMEOUT).socketTimeout(DEFAULT_SOCKET_TIMEOUT).bodyForm(Form.form().add("data", data).build()).execute();
+            HttpResponse httpResponse = executeResult.returnResponse();
+            StatusLine statusLine = httpResponse.getStatusLine();
+            int statusCode = statusLine.getStatusCode();
+            String responseContent = EntityUtils.toString(httpResponse.getEntity(), "utf-8");
+            if (statusCode == 200) {
+                x5Response = JSON.parseObject(responseContent, X5Response.class);
+                String HeaderCode = x5Response.getHeader().getCode();
+                if("200".equals(HeaderCode)){
+                    baseDao.execute("insert into XIAOMIDOCKINGLOG(ML_ID,ML_DATE,ML_CONTENT,ML_RESULT,ML_TYPE)" +
+                            "values(XIAOMIDOCKINGLOG_seq.nextval,sysdate,'上传成功!','','"+kind+"')");
+                    logger.info("时间:"+new Date()+"状态码:"+statusCode);
+                    Map<String,Object> datas = (Map<String,Object>) body;
+                    List<Map<String,Object>> list = (List<Map<String,Object>>) datas.get("data");
+//                    if(list.size()>0){
+//                        baseDao.execute("update CUSTOMTABLE set CT_SENDSTATUS='已上传',ct_senddate=sysdate where ct_id="+list.get(0).get("ct_id"));
+//                    }
+                }else{
+                    baseDao.execute("insert into XIAOMIDOCKINGLOG(ML_ID,ML_DATE,ML_CONTENT,ML_RESULT,ML_TYPE)" +
+                            "values(XIAOMIDOCKINGLOG_seq.nextval,sysdate,'上传失败!','状态码:"+x5Response.getHeader().getCode() + " 错误描述:" + x5Response.getHeader().getDesc()+"','"+kind+"')");
+                    Map<String,Object> datas = (Map<String,Object>) body;
+                    ConfirmPurchase confirmPurchase = (ConfirmPurchase) datas.get("data");
+//                    Map<String,Object> datas = (Map<String,Object>) body;
+//                    List<Map<String,Object>> list = (List<Map<String,Object>>) datas.get("data");
+//                    if(list.size()>0){
+//                        baseDao.execute("update CUSTOMTABLE set CT_ERROR='状态码:"+x5Response.getHeader().getCode()+"错误:"+x5Response.getHeader().getDesc()+"',ct_senddate=sysdate where ct_id="+list.get(0).get("ct_id"));
+//                    }
+                }
+
+            } else {
+                baseDao.execute("insert into XIAOMIDOCKINGLOG(ML_ID,ML_DATE,ML_CONTENT,ML_RESULT,ML_TYPE)" +
+                        "values(XIAOMIDOCKINGLOG_seq.nextval,sysdate,'上传失败!','"+statusLine.getStatusCode() + " " + statusLine.getReasonPhrase()+"','"+kind+"')");
+                Map<String,Object> datas = (Map<String,Object>) body;
+                ConfirmPurchase confirmPurchase = (ConfirmPurchase) datas.get("data");
+//                Map<String,Object> datas = (Map<String,Object>) body;
+//                List<Map<String,Object>> list = (List<Map<String,Object>>) datas.get("data");
+//                if(list.size()>0){
+//                    baseDao.execute("update CUSTOMTABLE set CT_ERROR='状态码:"+statusLine.getStatusCode()+"错误:"+statusLine.getReasonPhrase()+"',ct_senddate=sysdate where ct_id="+list.get(0).get("ct_id"));
+//                }
+                logger.info("时间:"+new Date()+"状态码:"+statusLine.getStatusCode()+"错误:"+statusLine.getReasonPhrase());
+                throw new HttpResponseException(statusLine.getStatusCode(), statusLine.getStatusCode() + " " + statusLine.getReasonPhrase());
+            }
+        } catch (Exception ex) {
+            x5Response = new X5Response(new X5ResponseHeader("2000", ex.getMessage()));
+            baseDao.execute("insert into XIAOMIDOCKINGLOG(ML_ID,ML_DATE,ML_CONTENT,ML_RESULT,ML_TYPE)" +
+                    "values(XIAOMIDOCKINGLOG_seq.nextval,sysdate,'上传失败!','"+ ex.getMessage()+"','"+kind+"')");
+            Map<String,Object> datas = (Map<String,Object>) body;
+            ConfirmPurchase confirmPurchase = (ConfirmPurchase) datas.get("data");
+//            List<Map<String,Object>> list = (List<Map<String,Object>>) datas.get("data");
+//            if(list.size()>0){
+//                baseDao.execute("update CUSTOMTABLE set CT_ERROR='"+ex.getMessage()+"',ct_senddate=sysdate where ct_id="+list.get(0).get("ct_id"));
+//            }
+        }
+
+        return x5Response;
+    }
+
+    /**
+     * 将String转为大写
+     */
+    private static String upperCase(String str) {
+        return str == null ? null : str.toUpperCase();
+    }
+}

+ 187 - 0
src/main/java/com/uas/eis/utils/XMEDIConfiguration.java

@@ -0,0 +1,187 @@
+package com.uas.eis.utils;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+/**
+ * 读取Properties配置信息的类
+ * 
+ * @author huanghp
+ * @date 2015年8月28日
+ */
+@Service("xmediConfiguration")
+public class XMEDIConfiguration {
+
+    /**
+     * 应用Id
+     */
+    @Value("${xmedi.appId}")
+    private String appId;
+
+    /**
+     * 应用秘钥
+     */
+    @Value("${xmedi.appSecret}")
+    private String appSecret;
+
+    /**
+     * 永久授权码
+     */
+    @Value("${xmedi.permanentCode}")
+    private String permanentCode;
+
+    /**
+     * App 约定加密Key
+     */
+    @Value("${xmedi.token}")
+    private String token;
+
+    /**
+     * App 约定加密AesKey
+     */
+    @Value("${xmedi.encodingAesKey}")
+    private String encodingAesKey;
+
+    /**
+     * 绑定请求uri
+     */
+    @Value("${xmedi.authorize.url}")
+    private String fsAuthorizeUrl;
+
+    /**
+     * openUserId
+     */
+    @Value("${xmedi.openUserId}")
+    private String openUserId;
+
+    @Value("${xmedi.x5username}")
+    private String x5username;
+
+    @Value("${xmedi.x5password}")
+    private String x5password;
+
+    @Value("${xmedi.x5appid}")
+    private String x5appid;
+
+    @Value("${xmedi.x5appkey}")
+    private String x5appkey;
+
+    @Value("${xmedi.x5vendercode}")
+    private String x5vendercode;
+
+    @Value("${xmedi.x5ProductStockUrl}")
+    private String x5ProductStockUrl;
+
+    @Value("${xmedi.x5confirmUrl}")
+    private String x5confirmUrl;
+
+    @Value("${spring.datasource.username}")
+    private String username;
+
+    @Value("${xmedi.x5vendercodeSZ}")
+    private String x5vendercodeSZ;
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getAppId() {
+        return appId;
+    }
+
+    public String getAppSecret() {
+        return appSecret;
+    }
+
+    public String getPermanentCode() {
+        return permanentCode;
+    }
+
+    public void setPermanentCode(String permanentCode) {
+        this.permanentCode = permanentCode;
+    }
+
+    public String getToken() {
+        return token;
+    }
+
+    public String getEncodingAesKey() {
+        return encodingAesKey;
+    }
+
+    public String getFsAuthorizeUrl() {
+        return fsAuthorizeUrl;
+    }
+
+    public String getOpenUserId() {
+        return openUserId;
+    }
+
+    public String getX5username() {
+        return x5username;
+    }
+
+    public void setX5username(String x5username) {
+        this.x5username = x5username;
+    }
+
+    public String getX5password() {
+        return x5password;
+    }
+
+    public void setX5password(String x5password) {
+        this.x5password = x5password;
+    }
+
+    public String getX5appid() {
+        return x5appid;
+    }
+
+    public void setX5appid(String x5appid) {
+        this.x5appid = x5appid;
+    }
+
+    public String getX5appkey() {
+        return x5appkey;
+    }
+
+    public void setX5appkey(String x5appkey) {
+        this.x5appkey = x5appkey;
+    }
+
+    public String getX5vendercode() {
+        return x5vendercode;
+    }
+
+    public void setX5vendercode(String x5vendercode) {
+        this.x5vendercode = x5vendercode;
+    }
+
+    public String getX5confirmUrl() {
+        return x5confirmUrl;
+    }
+
+    public void setX5confirmUrl(String x5confirmUrl) {
+        this.x5confirmUrl = x5confirmUrl;
+    }
+
+    public String getX5ProductStockUrl() {
+        return x5ProductStockUrl;
+    }
+
+    public void setX5ProductStockUrl(String x5ProductStockUrl) {
+        this.x5ProductStockUrl = x5ProductStockUrl;
+    }
+
+    public String getX5vendercodeSZ() {
+        return x5vendercodeSZ;
+    }
+
+    public void setX5vendercodeSZ(String x5vendercodeSZ) {
+        this.x5vendercodeSZ = x5vendercodeSZ;
+    }
+}