Browse Source

对接湘芯业务修改 添加PO对接

chenjx 5 years ago
parent
commit
6ca57d7ea2

+ 13 - 0
src/main/java/com/uas/eis/controller/ErpController.java

@@ -2,6 +2,7 @@ package com.uas.eis.controller;
 
 import com.uas.eis.service.ErpService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.RestController;
@@ -30,4 +31,16 @@ public class ErpController {
         return erpService.resuditafter_post_xx(pi_id,master);
     }
 
+    @PostMapping("/openapi/applicant/pushPo.action")
+    public Map<String, Object> pushPo(int poId, String master){
+        return erpService.pushPo(poId, master);
+    }
+
+    @PostMapping("/openapi/applicant/resPushPo.action")
+    public Map<String, Object> resPushPo(int poId, String master){
+        return erpService.resPushPo(poId, master);
+    }
+
+
+
 }

+ 6 - 1
src/main/java/com/uas/eis/service/ErpService.java

@@ -7,7 +7,12 @@ import java.util.Map;
  * @date 2020-5-21
  */
 public interface ErpService {
+    //审核 同步出入库到湘芯
     Map<String, Object> auditafter_post_xx(Integer id, String masterName);
-
+    //反审核 取消出入库
     Map<String, Object> resuditafter_post_xx(Integer id, String masterName);
+    //审核 同步PO到湘芯
+    Map<String, Object> pushPo(int poId, String master);
+    //反审核 取消PO
+    Map<String, Object> resPushPo(int poId, String master);
 }

+ 266 - 8
src/main/java/com/uas/eis/serviceImpl/ErpServiceImpl.java

@@ -2,9 +2,11 @@ package com.uas.eis.serviceImpl;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.uas.eis.dao.BaseDao;
 import com.uas.eis.dao.SqlRowList;
+import com.uas.eis.entity.Employee;
 import com.uas.eis.entity.Master;
 import com.uas.eis.service.EnterpriseService;
 import com.uas.eis.service.ErpService;
@@ -14,10 +16,8 @@ import org.springframework.stereotype.Service;
 import sun.misc.BASE64Encoder;
 
 import java.io.UnsupportedEncodingException;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
+import java.text.SimpleDateFormat;
+import java.util.*;
 
 /**
  * 对接Erp接口
@@ -48,7 +48,7 @@ public class ErpServiceImpl implements ErpService {
         int count = baseDao.getCount("select count(*) from prodinout where nvl(pi_issendxx,0)<>0 and pi_id=" + id);
         if (count>0){
             Master master = enterpriseService.getMasterByName(masterName);;
-            String baseUrl = baseUrlUtil.getBaseUrl(master.getMa_env(),"WMS");
+            String baseUrl = baseUrlUtil.getBaseUrl("WMS");
             String piClass = baseDao.getFieldValue("prodinout", "pi_class", "pi_id=" + id, String.class);
             String inoutno = baseDao.getFieldValue("prodinout", "pi_inoutno", "pi_id=" + id, String.class);
             try {
@@ -302,7 +302,7 @@ public class ErpServiceImpl implements ErpService {
         int count = baseDao.getCount("select count(*) from prodinout where nvl(pi_issendxx,0)<>0 and pi_id=" + id);
         if(count>0){
             Master master = enterpriseService.getMasterByName(masterName);;
-            String baseUrl = baseUrlUtil.getBaseUrl(master.getMa_env(),"WMS");
+            String baseUrl = baseUrlUtil.getBaseUrl("WMS");
             String inoutno = baseDao.getFieldValue("prodinout", "pi_inoutno", "pi_id=" + id, String.class);
             String piClass = baseDao.getFieldValue("prodinout", "pi_class", "pi_id=" + id, String.class);
             Object inorout = baseDao.getFieldDataByCondition("DOCUMENTSETUP", "ds_inorout", "DS_NAME='" + piClass + "'");
@@ -370,13 +370,271 @@ public class ErpServiceImpl implements ErpService {
         return modelMap;
     }
 
-    public void UpdateProdinOutLog(int inOutId,boolean isSuccess){
+    @Override
+    public Map<String, Object> pushPo(int poId, String masterName) {
+        Map<String, Object> modelMap = new HashMap<String, Object>();
+        Master master = enterpriseService.getMasterByName(masterName);
+        //域名
+        String baseUrl = baseUrlUtil.getBaseUrl("WMS");
+        //请求头
+        String Authorization = "Bearer "+ tokenCaches.getTokenCache("ProdInOutToken");
+        //传数据到湘芯科技
+        Map<String, Object> dataMaps = new HashMap<>();
+        List<Map<String, Object>> entrys = new LinkedList<Map<String, Object>>();
+        //委托方编码
+        Object wmsclientcode = baseDao.getFieldDataByCondition("Enterprise", "en_wmsclientcode", "1=1");
+        //主表数据(业务类型、成交方式、单号、结算方式)
+        Object[] formData = baseDao.getFieldsDataByCondition("CUSTOMTABLE left join employee on ct_recorder=em_name",new String[]{"ct_biz_type_user","transaction_mode_user","ct_code","settlemethod_user","ct_recorder",
+                "em_mobile","invoice_user","packing_list_user","conf_includes_user"},"CT_CALLER='ZX-0001' and CT_ID="+poId);
+        //从表数据
+        SqlRowList rs = baseDao.queryForRowSet("select pu_vendname,pu_currency,pr_spec,pr_brand,pr_detail,pr_unit,cd_varchar50_8,cd_number_1,round(pd_total*(cd_number_1/pd_qty),2) amount,round(round(pd_total*(cd_number_1/pd_qty),2)/cd_number_1,6) price,cd_number_2,cd_number_3 from customtabledetail left join Purchase on pu_code=cd_varchar50_1 left join PurchaseDetail on pd_puid=pu_id left join Product on cd_varchar50_3 = pr_code where cd_ctid="+poId+" order by cd_detno");
+        //供应商
+        String vendName="";
+        //订单币别
+        String currency="";
+        if (rs.next()){
+            vendName=rs.getGeneralString("pu_vendname");
+            currency=rs.getGeneralString("pu_currency");
+        }
+        //业务类型
+        dataMaps.put("bizType",formData[0]);
+        //委托方
+        dataMaps.put("principalNumber",wmsclientcode);
+        //供应链公司
+        if (master.getMa_function()!=null && master.getMa_function().contains("中芯供应链")){
+            dataMaps.put("trusteeNumber","1090");
+        }else if (master.getMa_function()!=null && master.getMa_function().contains("达迈")){
+            dataMaps.put("trusteeNumber","1080");
+        }
+        //供应商 采购订单的供应商
+        dataMaps.put("supplierNumber",vendName);
+        //订单币别
+        if("RMB".equals(currency)){
+            dataMaps.put("currencyNumber","CNY");
+        }else{
+            dataMaps.put("currencyNumber",currency);
+        }
+        //资金需求
+        dataMaps.put("creditRequirement","4");
+        //通关口岸
+        dataMaps.put("entryPortName","深圳湾关");
+        //成交方式
+        dataMaps.put("transactionMode",formData[1]);
+        //下单日期
+        dataMaps.put("bizDate",DateUtil.getCurrentDate());
+        //客户单号
+        dataMaps.put("custOrderNo",formData[2]);
+        //结算方式 默认4(无资金需求)
+        dataMaps.put("settleMethod",formData[3]);
+        //付款方式 默认1(【T/T】)
+        dataMaps.put("payMethod","1");
+        //境外来货方式 默认02(【供应商送货】)
+        dataMaps.put("incomingMethod","02");
+        //获取当前时间 精确到分钟,但秒请补0,当前日期+时分,例:2020-03-11 14:14:00
+        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm");
+        String currentTime = sdf.format(new Date());
+        //送货时间 精确到分钟,但秒请补0,当前日期+时分,例:2020-03-11 14:14:00
+        dataMaps.put("incomingMethod",currentTime+":00");
+        //送达地点 默认1(锦盛香港仓)
+        dataMaps.put("incomingMethod","1");
+        //交货次数 默认‘1’
+        dataMaps.put("incomingGoodsCnt",1);
+        //境内交货方式 默认01(客户自提)
+        dataMaps.put("deliveryMethod","01");
+        //预计提货时间
+        dataMaps.put("deliveryMethod","01");
+        //预计提货时间 精确到分钟,但秒请补0,当前日期+时分,例:2020-03-11 14:14:00
+        dataMaps.put("deliveryTime",currentTime+":00");
+        //联系人 报关申请单创建者的名称
+        dataMaps.put("deliveryLinkman",formData[4]);
+        //联系电话 报关申请单创建者的联系方式
+        dataMaps.put("deliveryContactNumber",formData[5]);
+        //提货公司 当前账套的名称
+        dataMaps.put("deliveryContactNumber",master.getMa_function());
+        //供应商发票
+        if(formData[6]!=null&&formData[6]!=""){
+            String fileUrl = "http://39.108.86.204:8099/ERP/openSystem/downloadAttachById.action?ids="+formData[6]+"&master="+masterName+"&zipFileName=提货委托书附件";
+            dataMaps.put("invoiceFileUrl",fileUrl);
+        }else{
+            dataMaps.put("invoiceFileUrl","");
+        }
+        //供应商箱单
+        if(formData[7]!=null&&formData[7]!=""){
+            String fileUrl = "http://39.108.86.204:8099/ERP/openSystem/downloadAttachById.action?ids="+formData[7]+"&master="+masterName+"&zipFileName=提货委托书附件";
+            dataMaps.put("boxFileUrl",fileUrl);
+        }else{
+            dataMaps.put("boxFileUrl","");
+        }
+        //进口货物确认单
+        if(formData[8]!=null&&formData[8]!=""){
+            String fileUrl = "http://39.108.86.204:8099/ERP/openSystem/downloadAttachById.action?ids="+formData[8]+"&master="+masterName+"&zipFileName=提货委托书附件";
+            dataMaps.put("confirmFileUrl",fileUrl);
+        }else{
+            dataMaps.put("confirmFileUrl","");
+        }
+        while (rs.next()) {
+            Map<String, Object> entry = new HashMap<>();
+            //型号
+            entry.put("model",rs.getGeneralString("pr_spec"));
+            //品牌
+            entry.put("brand",rs.getGeneralString("pr_brand"));
+            //客户品名
+            entry.put("materialName",rs.getGeneralString("pr_detail"));
+            //单位
+            entry.put("baseUnitName",rs.getGeneralString("pr_unit"));
+            //产地
+            entry.put("originPlaceName",rs.getGeneralString("cd_varchar50_8"));
+            //数量
+            entry.put("qty",rs.getDouble("cd_number_1"));
+            //单价
+            entry.put("price",rs.getDouble("price"));
+            //金额
+            entry.put("amount",rs.getDouble("amount"));
+            //净重
+            entry.put("netWeight",rs.getDouble("cd_number_2"));
+            //毛重
+            entry.put("grossWeight",rs.getDouble("cd_number_3"));
+            //箱数
+            entry.put("packedQty",rs.getDouble("cd_number_4"));
+            entrys.add(entry);
+        }
+        dataMaps.put("entry",entrys);
+        //Base64加密
+        byte byteXl[] = new byte[0]; //字符串转化为一个字节数组byte[]
+        try {
+            byteXl = JSON.toJSONString(dataMaps, SerializerFeature.WriteMapNullValue, SerializerFeature.QuoteFieldNames).getBytes("UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                    "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','报关申请','Base64加密失败',sysdate,0,'" + formData[2] + "')");
+            e.printStackTrace();
+            BaseUtil.showError("Base64加密失败");
+        }
+        BASE64Encoder encoder = new BASE64Encoder();
+        String encodedText = encoder.encode(byteXl); //第一种 转Base6
+        String encodedStr = encodedText.replace("\r\n", "");
+        HashMap<String, String> params = new HashMap<String, String>();
+        String secretKey="A51B497B93814189BC489D725C8361AD";
+        String timestamp = String.valueOf(System.currentTimeMillis());
+        params.put("appId", "UAS");
+        // base64转码的json数据
+        params.put("data", encodedStr);
+        // data + secretKey + 时间戳 拼接的字符串计算出的MD5的base64值
+        params.put("signature", md5Util.Md5String(encodedStr+secretKey+timestamp));
+        // 当前时间戳
+        params.put("timeStamp", timestamp);
+        HttpUtil.Response response = null;
+        try {
+            response = HttpUtil.doPostWithHead(baseUrl+"/api/open/entrustImportOrder/createOrder", JSON.toJSONString(params),false,null,Authorization);
+        } catch (Exception e) {
+            baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                    "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','报关申请','发送湘芯科技请求失败',sysdate,0,'" + formData[2] + "')");
+            e.printStackTrace();
+            BaseUtil.showError("发送湘芯科技请求失败");
+        }
+        String responseText = response.getResponseText();
+        JSONObject jsonObject = JSONArray.parseObject(responseText);
+        String responseCode = jsonObject.getString("code");
+        String err = jsonObject.getString("message");
+        if("S0000".equals(responseCode)){
+            baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                    "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','报关申请','发送湘芯科技成功',sysdate,0,'" + formData[2] + "')");
+            modelMap.put("success", true);
+            modelMap.put("error","");
+            return modelMap;
+        }else if("F0000".equals(responseCode)){
+            baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                    "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','报关申请','发送湘芯科技失败,参数错误:"+err+"',sysdate,0,'" + formData[2] + "')");
+            BaseUtil.showError("发送湘芯科技失败,参数错误:"+err);
+        }else if("F0001".equals(responseCode)){
+            baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                    "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','报关申请','发送湘芯科技失败,签名不匹配:"+err+"',sysdate,0,'" + formData[2] + "')");
+            BaseUtil.showError("发送湘芯科技失败,签名不匹配:"+err);
+        }else if("F0002".equals(responseCode)){
+            baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                    "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','报关申请','发送湘芯科技失败,请求超时:"+err+"',sysdate,0,'" + formData[2] + "')");
+            BaseUtil.showError("发送湘芯科技失败,请求超时:"+err);
+        }else if("E0003".equals(responseCode)){
+            baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                    "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','报关申请','发送湘芯科技失败,Token失效:"+err+"("+Authorization+")',sysdate,0,'" + formData[2] + "')");
+            BaseUtil.showError("发送湘芯科技失败,Token失效:"+err+"("+Authorization+")");
+        }else{
+            baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                    "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','报关申请','发送湘芯科技失败:"+err+"("+Authorization+")',sysdate,0,'" + formData[2] + "')");
+            BaseUtil.showError("发送湘芯科技失败:"+err);
+        }
+        modelMap.put("success", true);
+        modelMap.put("error","");
+        return modelMap;
+    }
+
+    @Override
+    public Map<String, Object> resPushPo(int poId, String masterName) {
+        Map<String, Object> modelMap = new HashMap<String, Object>();
+        String baseUrl = baseUrlUtil.getBaseUrl("WMS");
+        String Authorization = "Bearer "+ tokenCaches.getTokenCache("ProdInOutToken");
+        Map<String, Object> dataMap = new HashMap<>();
+        String code = baseDao.getFieldValue("customtable", "ct_code", "ct_id=" + poId, String.class);
+        dataMap.put("custOrderNo",code);
+        dataMap.put("master",masterName);
+        byte byteXl[]  = new byte[0]; //字符串转化为一个字节数组byte[]
+        try {
+            byteXl = JSON.toJSONString(dataMap).getBytes(	"UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                    "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','报关申请','Base64加密失败',sysdate,0,'" + code + "')");
+            e.printStackTrace();
+            BaseUtil.showError("反审核 Base64加密失败");
+        }
+        BASE64Encoder encoder = new BASE64Encoder();
+        String encodedText = encoder.encode(byteXl); //第一种 转Base6
+        String encodedStr = encodedText.replace("\r\n", "");
+        HashMap<String, String> params = new HashMap<String, String>();
+        String secretKey="A51B497B93814189BC489D725C8361AD";
+        String timestamp = String.valueOf(System.currentTimeMillis());
+        params.put("appId", "UAS");
+        // base64转码的json数据
+        params.put("data", encodedStr);
+        // data + secretKey + 时间戳 拼接的字符串计算出的MD5的base64值
+        params.put("signature", md5Util.Md5String(encodedStr+secretKey+timestamp));
+        // 当前时间戳
+        params.put("timeStamp", timestamp);
+        HttpUtil.Response response = null;
+        try {
+            response = HttpUtil.doPostWithHead(baseUrl+"/api/open/entrustImportOrder/cancelOrder", JSON.toJSONString(params),false,null,Authorization);
+        } catch (Exception e) {
+            baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                    "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','报关申请','反审核,发送湘芯科技失败',sysdate,0,'" + code + "')");
+            BaseUtil.showError("反审核,发送湘芯科技失败");
+        }
+        String res = response.getResponseText();
+        JSONObject jsonObject = JSONArray.parseObject(res);
+        String responseCode = jsonObject.getString("code");
+        String err = jsonObject.getString("message");
+        if("S0000".equals(responseCode)){
+            baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                    "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','报关申请','反审核 发送湘芯科技成功',sysdate,0,'" + code + "')");
+        }else if("E0003".equals(responseCode)){
+            baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                    "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','报关申请','发送湘芯科技失败,Token失效:"+err+"("+Authorization+")',sysdate,0,'" + code + "')");
+            BaseUtil.showError("发送湘芯科技失败,Token失效:"+err+"("+Authorization+")");
+        }else {
+            baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                    "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','报关申请','反审核 发送湘芯科技失败:"+err+"("+Authorization+")',sysdate,0,'" + code + "')");
+            BaseUtil.showError(err);
+        }
+        modelMap.put("success", true);
+        modelMap.put("error","");
+        return modelMap;
+    }
+
 
+
+
+    public void UpdateProdinOutLog(int inOutId,boolean isSuccess){
         if(isSuccess){
             baseDao.updateByCondition("ProdInOut","pi_sendwmsstatus='成功'","pi_id="+inOutId);
         }else{
             baseDao.updateByCondition("ProdInOut","pi_sendwmsstatus='失败'","pi_id="+inOutId);
         }
-
     }
 }

+ 1 - 1
src/main/java/com/uas/eis/serviceImpl/XiangXServiceImpl.java

@@ -344,7 +344,7 @@ public class XiangXServiceImpl implements XiangXService {
                 // 当前时间戳
                 params.put("timeStamp", timestamp);
                 HttpUtil.Response response = null;
-                String baseUrl = baseUrlUtil.getBaseUrl(ma_env, "WMS");
+                String baseUrl = baseUrlUtil.getBaseUrl( "WMS");
                 try {
                     response = HttpUtil.doPostWithHead(baseUrl+"/api/open/entrustOrder/queryMaterialSerialNumber", JSON.toJSONString(params),false,null,Authorization);
                     String res = response.getResponseText();

+ 13 - 11
src/main/java/com/uas/eis/utils/BaseUrlUtil.java

@@ -8,22 +8,24 @@ import org.springframework.stereotype.Component;
 @Component
 public class BaseUrlUtil {
 
-    public String getBaseUrl(String ma_env,String flag) {
+    public String getBaseUrl(String flag) {
         String url = "";
         if (("WMS").equals(flag)){
+            url = "http://scp.test2.cicsc.com";
             //WMS数据对接
-            if(("test").equals(ma_env)){
-                url = "http://scp.test2.cicsc.com";
-            }else if("prod".equals(ma_env)){
-                url = "http://scp.on.cicsc.com";
-            }
+//            if(("test").equals(ma_env)){
+//                url = "http://scp.test2.cicsc.com";
+//            }else if("prod".equals(ma_env)){
+//                url = "http://scp.on.cicsc.com";
+//            }
         }else if("Page".equals(flag)){
             //嵌套界面
-            if(("test").equals(ma_env)){
-                url = "http://wms.test2.cicsc.com";
-            }else if("prod".equals(ma_env)){
-                url = "https://scp.cicsc.com";
-            }
+            url = "http://wms.test2.cicsc.com";
+//            if(("test").equals(ma_env)){
+//                url = "http://wms.test2.cicsc.com";
+//            }else if("prod".equals(ma_env)){
+//                url = "https://scp.cicsc.com";
+//            }
         }
 
         return url;

+ 1 - 1
src/main/resources/application.yml

@@ -24,7 +24,7 @@ spring:
      ## Redis 配置
     redis:
         ## Redis数据库索引(默认为0)
-        database: 0
+        database: 1
         ## Redis服务器地址
         host: 127.0.0.1
         ## Redis服务器连接端口