|
|
@@ -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);
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
}
|