| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737 |
- package com.uas.eis.service.Impl;
- import com.deppon.dop.module.sdk.shared.util.FastJsonUtil;
- import com.deppon.dop.module.sdk.shared.util.SecurityUtil;
- import com.kyexpress.openapi.sdk.KyeDefaultOpenApi;
- import com.sf.csim.express.service.CallExpressServiceTools;
- import com.sf.csim.express.service.HttpClientUtil;
- import com.sf.csim.express.service.IServiceCodeStandard;
- import com.sf.csim.express.service.code.ExpressServiceCodeEnum;
- import com.uas.eis.core.config.SpObserver;
- import com.uas.eis.dao.*;
- import com.uas.eis.entity.dop.DoPApiResp;
- import com.uas.eis.entity.dop.DoPPriceQueryReq;
- import com.uas.eis.entity.dop.DoPResponseParam;
- import com.uas.eis.entity.ky.KYApiResp;
- import com.uas.eis.entity.ky.KYPirceData;
- import com.uas.eis.entity.ky.KYPriceQueryReq;
- import com.uas.eis.entity.sf.*;
- import com.uas.eis.service.ERPService;
- import com.uas.eis.utils.*;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import java.util.*;
- /**
- * @author wuyx
- * @email wuyx@usoftchina.com
- * @date 2024-09-03
- */
- @Service
- public class ERPServiceImpl implements ERPService {
- private final Logger logger = LoggerFactory.getLogger(this.getClass());
- @Autowired
- private BaseDao baseDao;
- @Override
- public Map<String, Object> creatSFOrder(String master, Integer id,String emCode) {
- Map<String,Object> retMap = new HashMap<>();
- retMap.put("success",true);
- logger.info("creatSFOrder-Begin:master {} id {}",master,id);
- SpObserver.putSp(master);
- SqlRowList outMsg = baseDao.queryForRowSet(" select pi_inoutno,pi_dockingstatus,pi_title,pi_address,pi_purposename,pi_expresscode,pi_dockingcode " +
- " from prodinout where pi_id = ? ",id);
- if(outMsg.next()){
- if(outMsg.getGeneralString("pi_dockingstatus").equals("已创建")){
- retMap.put("success",false);
- retMap.put("message","出货单已创建顺发订单.");
- logger.info("creatSFOrder-F:master {} id {} err {}",master,id,retMap.get("message"));
- return retMap;
- }
- Object[] obs = baseDao.getFieldsDataByCondition("JYX_ZS.DOCK_SF_CONFIG A "
- , new String[]{"CALL_URL","CLIENT_CODE","CHECK_WORD","ENABLE_"}, "username='"+master+"' and A.ENABLE_ = 1");
- if(!StringUtil.hasText(obs[0])){
- retMap.put("success",false);
- retMap.put("message","请联系管理员配置创建URL.");
- logger.info("creatSFOrder-F:master {} id {} err {}",master,id,retMap.get("message"));
- return retMap;
- }
- if(!StringUtil.hasText(obs[1])){
- retMap.put("success",false);
- retMap.put("message","请联系管理员配置丰桥平台顾客编码.");
- logger.info("creatSFOrder-F:master {} id {} err {}",master,id,retMap.get("message"));
- return retMap;
- }
- if(!StringUtil.hasText(obs[2])){
- retMap.put("success",false);
- retMap.put("message","请联系管理员配置丰桥平台校验码.");
- logger.info("creatSFOrder-F:master {} id {} err {}",master,id,retMap.get("message"));
- return retMap;
- }
- boolean prodFlag = (Integer.valueOf(obs[3].toString())!=0);
- Object emName = baseDao.getFieldDataByCondition("employee" , "em_name", "em_code='"+emCode+"'");
- if(emName == null){
- emName = "管理员("+emCode+")";
- }
- String inoutNo = outMsg.getGeneralString("pi_inoutno");
- String orderCode = outMsg.getGeneralString("pi_dockingcode");
- if(orderCode.length()>0){
- orderCode=inoutNo+"-"+(Integer.valueOf(orderCode.split("-")[1])+1);
- }else {
- orderCode=inoutNo+"-1";
- }
- String CLIENT_CODE = obs[1].toString(); //此处替换为您在丰桥平台获取的顾客编码
- //沙箱环境的地址 -PRO https://sfapi-sbox.sf-express.com/std/service
- //生产环境的地址 -PRO https://sfapi.sf-express.com/std/service
- String CALL_URL = obs[0].toString();
- //此处替换为您在丰桥平台获取的校验码 生产环境 "GgO0UoyQ5FssNLItii3olo63bQ80ErAE" 沙箱环境 "rMBhSYRa9OtUPkfX5mow01NlxDWtI411"
- String CHECK_WORD = obs[2].toString();
- String monthlyCard = "7551234567";
- if(prodFlag){
- monthlyCard = baseDao.getDBSetting("ProdInOut!Sale","monthlyCard");
- }
- //寄件人
- Object[] en = baseDao.getFieldsDataByCondition("enterprise" , new String[]{"EN_NAME","EN_DELIVERADDR"}, "1=1");
- String sendCop = en[0].toString().trim();
- String sendAddr = en[1].toString();
- String sendMan = baseDao.getDBSetting("ProdInOut!Sale","sendMan");
- String sendMobile = baseDao.getDBSetting("ProdInOut!Sale","sendMobile");
- IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_CREATE_ORDER; //下订单
- CallExpressServiceTools tools=CallExpressServiceTools.getInstance();
- Map<String, String> params = new HashMap<String, String>();
- String timeStamp = String.valueOf(System.currentTimeMillis());
- String msgData = "";
- SFCreatOrderReq sfOrder = new SFCreatOrderReq();
- sfOrder.setOrderId(orderCode);
- sfOrder.setMonthlyCard(monthlyCard);
- sfOrder.setIsSignBack(1);
- //寄件方信息
- List<SFContactInfo> contactInfoList = new ArrayList<>();
- SFContactInfo sendInfo = new SFContactInfo();
- sendInfo.setContactType(1);
- sendInfo.setCompany(sendCop);
- sendInfo.setContact(sendMan);
- sendInfo.setMobile(sendMobile);
- sendInfo.setAddress(sendAddr);
- contactInfoList.add(sendInfo);
- //到件方信息
- SFContactInfo receiveInfo = new SFContactInfo();
- receiveInfo.setContactType(2);
- receiveInfo.setCompany(outMsg.getGeneralString("pi_title"));
- receiveInfo.setContact(outMsg.getGeneralString("pi_purposename"));
- receiveInfo.setMobile(outMsg.getGeneralString("pi_expresscode"));
- receiveInfo.setAddress(outMsg.getGeneralString("pi_address"));
- contactInfoList.add(receiveInfo);
- sfOrder.setContactInfoList(contactInfoList);
- List<SFCargoDetail> cargoDetails = new ArrayList<>();
- /*SqlRowList outList = baseDao.queryForRowSet(" select pr_detail,pr_unit,sum(pd_outqty) outqty from prodiodetail left join product on pr_code = pd_prodcode where pd_piid = ? and pr_detail is not null group by pr_detail,pr_unit",id);
- while (outList.next()){
- SFCargoDetail cargoDetail = new SFCargoDetail();
- cargoDetail.setName(outList.getGeneralString("pr_detail"));
- cargoDetail.setUnit(outList.getGeneralString("pr_unit"));
- cargoDetail.setCount(outList.getGeneralDouble("outqty"));
- cargoDetails.add(cargoDetail);
- }*/
- sfOrder.setCargoDetails(cargoDetails);
- msgData = FlexJsonUtil.toJsonDeep(sfOrder);
- // System.out.println("====请求msgData:" + msgData);
- try {
- params.put("partnerID", CLIENT_CODE); // 顾客编码 ,对应丰桥上获取的clientCode
- params.put("requestID", UUID.randomUUID().toString().replace("-", ""));
- params.put("serviceCode",standardService.getCode());// 接口服务码
- params.put("timestamp", timeStamp);
- params.put("msgData", msgData);
- params.put("msgDigest", tools.getMsgDigest(msgData,timeStamp,CHECK_WORD));
- long startTime = System.currentTimeMillis();
- // System.out.println("====调用实际请求:" + params);
- String result = HttpClientUtil.post(CALL_URL, params);
- // System.out.println("====调用丰桥的接口服务代码:" + String.valueOf(standardService.getCode()) + " 接口耗时:"+ String.valueOf(System.currentTimeMillis()-startTime)+"====");
- // System.out.println("===调用地址 ==="+CALL_URL);
- // System.out.println("===顾客编码 ==="+CLIENT_CODE);
- // System.out.println("===返回结果:" +result);
- SFApiResp sfApiResp = FlexJsonUtil.fromJson(result, SFApiResp.class);
- if(sfApiResp!=null){
- if("A1000".equals(sfApiResp.getApiResultCode())){
- String apiResultData = sfApiResp.getApiResultData();
- SFCreatOrderResp sfApiRespData = FlexJsonUtil.fromJson(apiResultData, SFCreatOrderResp.class);
- if(sfApiRespData.isSuccess()){
- SFCreateOrder sfOrderResp = sfApiRespData.getMsgData();
- StringBuffer waybillNoList = new StringBuffer();
- StringBuffer waybillNoP = new StringBuffer();
- StringBuffer waybillSon = new StringBuffer();
- StringBuffer waybillBack = new StringBuffer();
- if(!CollectionUtil.isEmpty(sfOrderResp.getWaybillNoInfoList())){
- for (SFWaybillNoInfo sfWaybillNoInfoResp:sfOrderResp.getWaybillNoInfoList()){
- // System.out.println("顺丰物流单号: ====="+sfWaybillNoInfoResp.getWaybillNo());
- String waybillNo = sfWaybillNoInfoResp.getWaybillNo();
- if(sfWaybillNoInfoResp.getWaybillType() == 1||sfWaybillNoInfoResp.getWaybillType() == 2){//运单号类型1:母单 2 :子单 3 : 签回单
- if(waybillNoList.length()>0){
- waybillNoList.append(",");
- }
- waybillNoList.append(waybillNo);
- if(sfWaybillNoInfoResp.getWaybillType() == 1) {
- if (waybillNoP.length() > 0) {
- waybillNoP.append(",");
- }
- waybillNoP.append(waybillNo);
- }else{
- if (waybillSon.length() > 0) {
- waybillSon.append(",");
- }
- waybillSon.append(waybillNo);
- }
- }else {
- if(waybillBack.length()>0){
- waybillBack.append(",");
- }
- waybillBack.append(waybillNo);
- }
- }
- }
- if(waybillNoList.length()>0){
- baseDao.execute("update prodinout set pi_dockingcode=?,pi_logisticscode = ?,pi_dockingstatus='已创建'" +
- ",pi_sfParentCode=?,pi_sfSonCode=?,pi_sfBackCode=?" +
- ",pi_sf_filterresult=?,pi_sf_remark=? where pi_id = ?"
- ,orderCode,waybillNoList.toString(),waybillNoP.toString(),waybillSon.toString(),waybillBack.toString()
- ,sfOrderResp.getFilterResult(),sfOrderResp.getRemark()
- ,id);
- baseDao.execute("INSERT INTO MESSAGELOG(ML_ID, ML_DATE, ML_MAN, ML_CONTENT, ML_RESULT, ML_SEARCH, CODE) " +
- "values( MESSAGELOG_SEQ.nextval,SYSDATE,'"+emName+"','创建顺发订单'" +
- ",'创建成功,顺发单号:"+orderCode+",物流单号:"+waybillNoList.toString()+"','ProdInOut!Sale|pi_id="+id+"','"+inoutNo+"')");
- } else {
- retMap.put("message","创建失败:["+sfApiRespData.getErrorCode()+"]"+sfApiRespData.getErrorMsg());
- baseDao.execute("INSERT INTO MESSAGELOG(ML_ID, ML_DATE, ML_MAN, ML_CONTENT, ML_RESULT, ML_SEARCH, CODE) " +
- "values( MESSAGELOG_SEQ.nextval,SYSDATE,'"+emName+"','创建顺发订单','"+retMap.get("message")+"','ProdInOut!Sale|pi_id="+id+"','"+inoutNo+"')");
- retMap.put("success",false);
- logger.info("creatSFOrder-F:master {} id {} err {}",master,id,retMap.get("message"));
- return retMap;
- }
- }else {
- retMap.put("message","创建失败:["+sfApiRespData.getErrorCode()+"]"+sfApiRespData.getErrorMsg());
- baseDao.execute("INSERT INTO MESSAGELOG(ML_ID, ML_DATE, ML_MAN, ML_CONTENT, ML_RESULT, ML_SEARCH, CODE) " +
- "values( MESSAGELOG_SEQ.nextval,SYSDATE,'"+emName+"','创建顺发订单','"+retMap.get("message")+"','ProdInOut!Sale|pi_id="+id+"','"+inoutNo+"')");
- retMap.put("success",false);
- logger.info("creatSFOrder-F:master {} id {} err {}",master,id,retMap.get("message"));
- return retMap;
- }
- }else {
- // System.out.println("code:"+sfApiResp.getApiResultCode()+"===apiResponseID:"+sfApiResp.getApiResponseID()+"===apiErrorMsg:"+sfApiResp.getApiErrorMsg());
- retMap.put("message","创建失败:["+sfApiResp.getApiResultCode()+"]"+sfApiResp.getApiErrorMsg());
- baseDao.execute("INSERT INTO MESSAGELOG(ML_ID, ML_DATE, ML_MAN, ML_CONTENT, ML_RESULT, ML_SEARCH, CODE) " +
- "values( MESSAGELOG_SEQ.nextval,SYSDATE,'"+emName+"','创建顺发订单','"+retMap.get("message")+"','ProdInOut!Sale|pi_id="+id+"','"+inoutNo+"')");
- retMap.put("success",false);
- logger.info("creatSFOrder-F:master {} id {} err {}",master,id,retMap.get("message"));
- return retMap;
- }
- }
- }catch (Exception e){
- e.printStackTrace();
- baseDao.execute("INSERT INTO MESSAGELOG(ML_ID, ML_DATE, ML_MAN, ML_CONTENT, ML_RESULT, ML_SEARCH, CODE) " +
- "values( MESSAGELOG_SEQ.nextval,SYSDATE,'"+emName+"','创建顺发订单','创建失败:"+(StringUtil.nvl(e.getMessage(),""))+"','ProdInOut!Sale|pi_id="+id+"','"+inoutNo+"')");
- retMap.put("success",false);
- retMap.put("message","创建失败"+(StringUtil.nvl(e.getMessage(),"")));
- logger.info("creatSFOrder-F:master {} id {} err {}",master,id,retMap.get("message"));
- return retMap;
- }
- }else {
- retMap.put("success",false);
- retMap.put("message","没有需要创建的出货单.");
- logger.info("creatSFOrder-F:master {} id {} err {}",master,id,retMap.get("message"));
- return retMap;
- }
- logger.info("creatSFOrder-End:master {} id {}",master,id);
- retMap.put("message","创建成功。");
- return retMap;
- }
- @Override
- public Map<String, Object> cancelSFOrder(String master, Integer id, String emCode) {
- Map<String,Object> retMap = new HashMap<>();
- retMap.put("success",true);
- logger.info("cancelSFOrder-Begin:master {} id {}",master,id);
- SpObserver.putSp(master);
- SqlRowList outMsg = baseDao.queryForRowSet(" select pi_inoutno,pi_dockingstatus,pi_dockingcode from prodinout where pi_id = ? ",id);
- if(outMsg.next()) {
- if (!outMsg.getGeneralString("pi_dockingstatus").equals("已创建")) {
- retMap.put("success", false);
- retMap.put("message", "出货单尚未创建顺发订单.");
- logger.info("cancelSFOrder-F:master {} id {} err {}", master, id, retMap.get("message"));
- return retMap;
- }
- Object[] obs = baseDao.getFieldsDataByCondition("JYX_ZS.DOCK_SF_CONFIG A "
- , new String[]{"CALL_URL", "CLIENT_CODE", "CHECK_WORD", "ENABLE_"}, "username='" + master + "' and A.ENABLE_ = 1");
- if (!StringUtil.hasText(obs[0])) {
- retMap.put("success", false);
- retMap.put("message", "请联系管理员配置创建URL.");
- logger.info("cancelSFOrder-F:master {} id {} err {}", master, id, retMap.get("message"));
- return retMap;
- }
- if (!StringUtil.hasText(obs[1])) {
- retMap.put("success", false);
- retMap.put("message", "请联系管理员配置丰桥平台顾客编码.");
- logger.info("cancelSFOrder-F:master {} id {} err {}", master, id, retMap.get("message"));
- return retMap;
- }
- if (!StringUtil.hasText(obs[2])) {
- retMap.put("success", false);
- retMap.put("message", "请联系管理员配置丰桥平台校验码.");
- logger.info("cancelSFOrder-F:master {} id {} err {}", master, id, retMap.get("message"));
- return retMap;
- }
- Object emName = baseDao.getFieldDataByCondition("employee" , "em_name", "em_code='"+emCode+"'");
- if(emName == null){
- emName = "管理员("+emCode+")";
- }
- String inoutNo = outMsg.getGeneralString("pi_inoutno");
- String orderCode = outMsg.getGeneralString("pi_dockingcode");
- String CLIENT_CODE = obs[1].toString(); //丰桥平台获取的顾客编码
- String CALL_URL = obs[0].toString(); //沙箱环境的地址 -PRO https://sfapi-sbox.sf-express.com/std/service 生产环境的地址 -PRO https://sfapi.sf-express.com/std/service
- String CHECK_WORD = obs[2].toString(); //丰桥平台获取的校验码 生产环境 "GgO0UoyQ5FssNLItii3olo63bQ80ErAE" 沙箱环境 "rMBhSYRa9OtUPkfX5mow01NlxDWtI411"
- IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_UPDATE_ORDER;//订单取消
- CallExpressServiceTools tools=CallExpressServiceTools.getInstance();
- Map<String, String> params = new HashMap<String, String>();
- String timeStamp = String.valueOf(System.currentTimeMillis());
- String msgData = "";
- Map<String,Object> msgDataMap = new HashMap<>();
- msgDataMap.put("orderId",orderCode);
- msgDataMap.put("dealType",2);
- msgData = FlexJsonUtil.toJsonDeep(msgDataMap);
- try {
- params.put("partnerID", CLIENT_CODE); // 顾客编码 ,对应丰桥上获取的clientCode
- params.put("requestID", UUID.randomUUID().toString().replace("-", ""));
- params.put("serviceCode",standardService.getCode());// 接口服务码
- params.put("timestamp", timeStamp);
- params.put("msgData", msgData);
- params.put("msgDigest", tools.getMsgDigest(msgData,timeStamp,CHECK_WORD));
- long startTime = System.currentTimeMillis();
- // System.out.println("====调用请求:" + params.get("msgData"));
- // System.out.println("====调用实际请求:" + params);
- String result = HttpClientUtil.post(CALL_URL, params);
- // System.out.println("====调用丰桥的接口服务代码:" + String.valueOf(standardService.getCode()) + " 接口耗时:"+ String.valueOf(System.currentTimeMillis()-startTime)+"====");
- // System.out.println("===调用地址 ==="+CALL_URL);
- // System.out.println("===顾客编码 ==="+CLIENT_CODE);
- // System.out.println("===返回结果:" +result);
- // Map<String,Object> resData = JacksonUtil.fromJson(result);
- SFApiResp sfApiResp = FlexJsonUtil.fromJson(result, SFApiResp.class);
- if(sfApiResp!=null){
- if("A1000".equals(sfApiResp.getApiResultCode())){
- String apiResultData = sfApiResp.getApiResultData();
- SFCancelOrderResp sfApiRespData = FlexJsonUtil.fromJson(apiResultData, SFCancelOrderResp.class);
- if(sfApiRespData.isSuccess()){
- SFCancelOrder sfOrderResp = sfApiRespData.getMsgData();
- StringBuffer waybillNo = new StringBuffer();
- if(!CollectionUtil.isEmpty(sfOrderResp.getWaybillNoInfoList())){
- for (SFWaybillNoInfo sfWaybillNoInfoResp:sfOrderResp.getWaybillNoInfoList()){
- // System.out.println("顺丰物流单号: ====="+sfWaybillNoInfoResp.getWaybillNo());
- if(waybillNo.length()>0){
- waybillNo.append(",");
- }
- waybillNo.append(sfWaybillNoInfoResp.getWaybillNo());
- }
- }
- if(sfOrderResp.getResStatus()==2){
- baseDao.execute("update prodinout set pi_logisticscode = null,pi_dockingstatus=null,pi_sfParentCode=null,pi_sfSonCode=null,pi_sfBackCode=null,pi_sf_filterresult=null,pi_sf_remark=null where pi_id = ?",id);
- baseDao.execute("INSERT INTO MESSAGELOG(ML_ID, ML_DATE, ML_MAN, ML_CONTENT, ML_RESULT, ML_SEARCH, CODE) " +
- "values( MESSAGELOG_SEQ.nextval,SYSDATE,'"+emName+"','取消顺发订单','取消成功"+(waybillNo.length()>0?",物流单号: "+waybillNo.toString():"")+"','ProdInOut!Sale|pi_id="+id+"','"+inoutNo+"')");
- }else {
- if(sfOrderResp.getResStatus()==1){
- retMap.put("message","取消失败:客户订单号与顺丰运单不匹配");
- }else {
- retMap.put("message","取消失败:["+sfOrderResp.getResStatus()+"]");
- }
- baseDao.execute("INSERT INTO MESSAGELOG(ML_ID, ML_DATE, ML_MAN, ML_CONTENT, ML_RESULT, ML_SEARCH, CODE) " +
- "values( MESSAGELOG_SEQ.nextval,SYSDATE,'"+emName+"','取消顺发订单','"+retMap.get("message")+"','ProdInOut!Sale|pi_id="+id+"','"+inoutNo+"')");
- retMap.put("success",false);
- logger.info("creatSFOrder-F:master {} id {} err {}",master,id,retMap.get("message"));
- return retMap;
- }
- }else {
- baseDao.execute("INSERT INTO MESSAGELOG(ML_ID, ML_DATE, ML_MAN, ML_CONTENT, ML_RESULT, ML_SEARCH, CODE) " +
- "values( MESSAGELOG_SEQ.nextval,SYSDATE,'"+emName+"','取消顺发订单','取消失败:["+sfApiRespData.getErrorCode()+"]"+sfApiRespData.getErrorMsg()+"','ProdInOut!Sale|pi_id="+id+"','"+inoutNo+"')");
- retMap.put("success",false);
- retMap.put("message","取消失败:["+sfApiRespData.getErrorCode()+"]"+sfApiRespData.getErrorMsg());
- logger.info("creatSFOrder-F:master {} id {} err {}",master,id,retMap.get("message"));
- return retMap;
- }
- }else {
- retMap.put("message","创建失败:["+sfApiResp.getApiResultCode()+"]"+sfApiResp.getApiErrorMsg());
- baseDao.execute("INSERT INTO MESSAGELOG(ML_ID, ML_DATE, ML_MAN, ML_CONTENT, ML_RESULT, ML_SEARCH, CODE) " +
- "values( MESSAGELOG_SEQ.nextval,SYSDATE,'"+emName+"','创建顺发订单','"+retMap.get("message")+"','ProdInOut!Sale|pi_id="+id+"','"+inoutNo+"')");
- retMap.put("success",false);
- logger.info("creatSFOrder-F:master {} id {} err {}",master,id,retMap.get("message"));
- return retMap;
- }
- }
- }catch (Exception e){
- e.printStackTrace();
- retMap.put("message","取消失败"+(StringUtil.nvl(e.getMessage(),"")));
- baseDao.execute("INSERT INTO MESSAGELOG(ML_ID, ML_DATE, ML_MAN, ML_CONTENT, ML_RESULT, ML_SEARCH, CODE) " +
- "values( MESSAGELOG_SEQ.nextval,SYSDATE,'"+emName+"','取消顺发订单','"+retMap.get("message")+"','ProdInOut!Sale|pi_id="+id+"','"+inoutNo+"')");
- retMap.put("success",false);
- logger.info("creatSFOrder-F:master {} id {} err {}",master,id,retMap.get("message"));
- return retMap;
- }
- }else {
- retMap.put("success",false);
- retMap.put("message","没有需要操作的出货单.");
- logger.info("cancelSFOrder-F:master {} id {} err {}",master,id,retMap.get("message"));
- return retMap;
- }
- logger.info("cancelSFOrder-End:master {} id {}",master,id);
- retMap.put("message","取消成功。");
- return retMap;
- }
- @Override
- public Map<String, Object> getLogisticsPrice(String master, Integer id) {
- SpObserver.putSp(master);
- Map<String, Object> modelMap = new HashMap<String, Object>();
- SqlRowList rs = baseDao.queryForRowSet("select LP_ID, LP_CODE, LP_INDATE, LP_CALDATE, LP_TYPE, LP_ROUTE, LP_WEIGHT, LP_VOLUME, LP_RECIPIENT, LP_TEL, LP_ADD, LP_RECORDER, LP_COMPANY1, LP_PROVINCE, LP_DISTRICT, LP_SENDDATETIME,to_char(LP_SENDDATETIME,'yyyy-mm-dd hh24:mi:ss') SENDDATETIME" +
- " from LogisticsPrice where lp_id="+id);
- if(rs.next()){
- Map<String, Object> data = new HashMap<String, Object>();
- baseDao.callProcedure("SP_LOGISTICSPRICE", new Object[] { rs.getInt("lp_id")});
- //顺丰
- getPrice_SF(id,rs.getGeneralString("LP_TYPE"),rs.getGeneralDouble("LP_WEIGHT"),rs.getGeneralDouble("LP_VOLUME"),
- rs.getGeneralString("lp_province"),
- rs.getGeneralString("lp_route"),
- "广东省","深圳市",
- rs.getDate("LP_SENDDATETIME"));
- //跨越
- getPrice_KY(id,rs.getGeneralString("LP_TYPE"),rs.getGeneralDouble("LP_WEIGHT"), rs.getGeneralString("lp_route"),
- rs.getDate("LP_SENDDATETIME"));
- //德邦
- getPrice_DoP(id,rs.getGeneralString("LP_TYPE"),rs.getGeneralDouble("LP_WEIGHT"),rs.getGeneralDouble("LP_VOLUME"),
- rs.getGeneralString("lp_province"),
- rs.getGeneralString("lp_route"),
- rs.getGeneralString("lp_district"),
- rs.getDate("LP_SENDDATETIME")
- );
- modelMap.put("success", true);
- }else{
- modelMap.put("message", "单据不存在!");
- modelMap.put("success", false);
- }
- return modelMap;
- }
- private String creatOrder_SF(Integer id){
- return "";
- }
- private String creatOrder_DoP(Integer id){
- return "";
- }
- private String creatOrder_KY(Integer id){
- return "";
- }
- @Override
- public Map<String, Object> creatOrder(String master, Integer id) {
- SpObserver.putSp(master);
- Map<String, Object> modelMap = new HashMap<String, Object>();
- SqlRowList rs = baseDao.queryForRowSet("select lp_finalcompany from LogisticsPrice where lp_id="+id);
- if(rs.next()){
- if("顺丰".equals(rs.getGeneralString("lp_finalcompany"))){
- creatOrder_SF(id);
- }else if("德邦".equals(rs.getGeneralString("lp_finalcompany"))){
- creatOrder_DoP(id);
- }else if("跨越".equals(rs.getGeneralString("lp_finalcompany"))){
- creatOrder_KY(id);
- }
- }else{
- modelMap.put("message", "单据不存在!");
- modelMap.put("success", false);
- }
- return modelMap;
- }
- @Override
- public void getSFPrice(String master, Integer id) {
- SpObserver.putSp(master);
- Map<String, Object> modelMap = new HashMap<String, Object>();
- SqlRowList rs = baseDao.queryForRowSet("select LP_ID, LP_CODE, LP_INDATE, LP_CALDATE, LP_TYPE, LP_ROUTE, LP_WEIGHT, LP_VOLUME, LP_RECIPIENT, LP_TEL, LP_ADD, LP_RECORDER, LP_COMPANY1, LP_PROVINCE, LP_DISTRICT, LP_SENDDATETIME,to_char(LP_SENDDATETIME,'yyyy-mm-dd hh24:mi:ss') SENDDATETIME" +
- " from LogisticsPrice where lp_id="+id);
- if(rs.next()){
- getPrice_SF(id,rs.getGeneralString("LP_TYPE"),rs.getGeneralDouble("LP_WEIGHT"),rs.getGeneralDouble("LP_VOLUME"),
- rs.getGeneralString("lp_province"),
- rs.getGeneralString("lp_route"),
- "广东省","深圳市",
- rs.getDate("LP_SENDDATETIME"));
- }
- }
- @Override
- public void getKYPrice(String master, Integer id) {
- SpObserver.putSp(master);
- Map<String, Object> modelMap = new HashMap<String, Object>();
- SqlRowList rs = baseDao.queryForRowSet("select LP_ID, LP_CODE, LP_INDATE, LP_CALDATE, LP_TYPE, LP_ROUTE, LP_WEIGHT, LP_VOLUME, LP_RECIPIENT, LP_TEL, LP_ADD, LP_RECORDER, LP_COMPANY1, LP_PROVINCE, LP_DISTRICT, LP_SENDDATETIME,to_char(LP_SENDDATETIME,'yyyy-mm-dd hh24:mi:ss') SENDDATETIME" +
- " from LogisticsPrice where lp_id="+id);
- if(rs.next()){
- getPrice_KY(id,rs.getGeneralString("LP_TYPE"),rs.getGeneralDouble("LP_WEIGHT"), rs.getGeneralString("lp_route"),
- rs.getDate("LP_SENDDATETIME"));
- }
- }
- @Override
- public void getDOPPrice(String master, Integer id) {
- SpObserver.putSp(master);
- Map<String, Object> modelMap = new HashMap<String, Object>();
- SqlRowList rs = baseDao.queryForRowSet("select LP_ID, LP_CODE, LP_INDATE, LP_CALDATE, LP_TYPE, LP_ROUTE, LP_WEIGHT, LP_VOLUME, LP_RECIPIENT, LP_TEL, LP_ADD, LP_RECORDER, LP_COMPANY1, LP_PROVINCE, LP_DISTRICT, LP_SENDDATETIME,to_char(LP_SENDDATETIME,'yyyy-mm-dd hh24:mi:ss') SENDDATETIME" +
- " from LogisticsPrice where lp_id="+id);
- if(rs.next()){
- getPrice_DoP(id,rs.getGeneralString("LP_TYPE"),rs.getGeneralDouble("LP_WEIGHT"),rs.getGeneralDouble("LP_VOLUME"),
- rs.getGeneralString("lp_province"),
- rs.getGeneralString("lp_route"),
- rs.getGeneralString("lp_district"),
- rs.getDate("LP_SENDDATETIME")
- );
- }
- }
- //
- private Map<String, Object> getPrice_DoP(Integer id,String type,double weight,double volume,String province_d,String city_d,String district,Date sendDateTime){
- /*
- * http://dpsanbox.deppon.com/sandbox-web/standard-order/queryPriceTime.action
- * params String 核算请求参数 是
- digest String 区域密文摘要 是
- timestamp String 核算当前时间戳 ,当前时间毫秒数 是
- companyCode String 核算第三方接入商的公司编码(双方约定,建议公司简拼或者代码,字母大写)请求报文字段 是
- * */
- Map<String,Object> retMap = new HashMap<>();
- try{
- Object[] obs = baseDao.getFieldsDataByCondition("SZSI_P.DOCK_LOGISTICS_CONFIG A "
- , new String[]{"CALL_URL","CLIENT_CODE","CHECK_WORD","ENABLE_"}, "LOGISTICS_='DOP' and type_='GETPRICE' AND A.ENABLE_ = 1");
- String CALL_URL = obs[0].toString();
- String CHECK_WORD = obs[1].toString();
- /* 特快:TZKJC(特快当日)
- 普快:RCP(大件快递3.60)
- 物流:HKDJG(航空大件隔日达)
- */
- if(volume==0){
- volume=0.001;
- }else{
- volume=volume*0.000001;//ERP单位立方厘米 DOP接口单为立方米
- }
- String businessType="";
- if("特快".equals(type)){
- businessType="TZKJC";
- }else if("普快".equals(type)){
- businessType="RCP";//RCP
- }else if("物流".equals(type)){
- businessType="NFLF";//新精准卡航:NFLF
- }
- /* originalsStreet": "上海-上海市-长宁区",
- "originalsaddress": "上海-上海市-长宁区",
- "sendDateTime": "2018-08-07 11:00:03",
- "totalVolume": 0.001,
- "totalWeight": 500,*/
- DoPPriceQueryReq doPPriceQueryReq=new DoPPriceQueryReq();
- //目标城市
- doPPriceQueryReq.setOriginalsStreet(province_d+"-"+city_d+"-"+district);
- //出发城市
- doPPriceQueryReq.setOriginalsaddress("广东省-深圳市-龙岗区");
- doPPriceQueryReq.setSendDateTime(DateUtil.format(sendDateTime,"yyyy-MM-dd HH:mm:ss"));
- doPPriceQueryReq.setTotalVolume(String.valueOf(volume));
- doPPriceQueryReq.setTotalWeight( String.valueOf(weight));
- doPPriceQueryReq.setProductCode(businessType);//特快专递
- String msgData = FastJsonUtil.toJSONString(doPPriceQueryReq);
- String timeStamp = SecurityUtil.getTimestamp();
- Map<String, String> params = new HashMap<String, String>();
- String appkey="8626840f067f147f983c499e03e1a873";
- String digest= SecurityUtil.getDigest(msgData+appkey+timeStamp);
- params.put("params", msgData);
- params.put("digest", digest);
- params.put("timestamp", timeStamp);
- params.put("companyCode", CHECK_WORD);
- System.out.println(msgData);
- String result = HttpClientUtil.post(CALL_URL, params);
- System.out.println(result);
- DoPApiResp doPApiResp= FlexJsonUtil.fromJson(result, DoPApiResp.class);
- if("true".equals(doPApiResp.getResult())){
- for(DoPResponseParam dop:doPApiResp.getResponseParam()){
- if(businessType.equals(dop.getProducteCode())){
- baseDao.execute("update LogisticsPrice set lp_msg2='',LP_REALTIMEPRICE2="+dop.getTotalfee()+" where lp_id="+id);
- }
- }
- }else{
- baseDao.execute("update LogisticsPrice set lp_msg2='"+doPApiResp.getReason()+"' where lp_id="+id);
- }
- return retMap;
- }catch (Exception e){
- e.printStackTrace();
- retMap.put("success",false);
- retMap.put("message","获取失败"+(StringUtil.nvl(e.getMessage(),"")));
- logger.info("getPrice_dop-F:id {} err {}",id,retMap.get("message"));
- return retMap;
- }
- }
- //跨越
- private Map<String, Object> getPrice_KY(Integer id,String type,double weight,String city_d,Date sendDateTime){
- /*
- 正式环境:https://open.ky-express.com/router/rest
- 沙箱环境:https://open.ky-express.com/sandbox/router/rest
- ======================================================
- 参数名称 类型 是否必填 描述
- appkey string 是 应用key 11000
- format string 是 返回参数格式(默认json) json
- timestamp string 否 时间戳 12345672333
- method string 是 请求方法 open.api.openCommon.queryFreightCharge
- sign string 否 签名 CF529FFB8B49499EC30BE2C29C02AE67
- token string 是 请求票据 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9....
- */
- Map<String,Object> retMap = new HashMap<>();
- try{
- Object[] obs = baseDao.getFieldsDataByCondition("SZSI_P.DOCK_LOGISTICS_CONFIG A "
- , new String[]{"CALL_URL","CLIENT_CODE","CHECK_WORD","ENABLE_"}, "LOGISTICS_='KY' and type_='GETPRICE' AND A.ENABLE_ = 1");
- String timeStamp = String.valueOf(System.currentTimeMillis());
- // 是否沙盒环境 true标识沙盒环境,false标识正式环境,发布生产环境时注意切换
- boolean isSandbox = false;
- Map<String, String> params = new HashMap<String, String>();
- String appkey="83955";//obs[1].toString();
- String appSecret = obs[2].toString();//"46129BED8B381806B1FE15562523E2E0";
- String businessType="";
- /*次日达(特快),隔日达(普快),陆运件(物流)
- * 10-当天达,20-次日达,30-隔日达,40-陆运件,50-同城次日,70-同城即日,160-省内次日,170-省内即日,210-空运,220-专运
- * */
- if("特快".equals(type)){
- businessType="20";
- }else if("普快".equals(type)){
- businessType="30";
- }else if("物流".equals(type)){
- businessType="40";
- }
- //businessType="50";
- params.put("format","json");
- params.put("timestamp",timeStamp);
- String method="open.api.openCommon.queryFreightCharge";
- KYPriceQueryReq kyPriceQueryReq=new KYPriceQueryReq();
- kyPriceQueryReq.setBeginAreaCode("0755");
- kyPriceQueryReq.setBeginCityName("深圳");
- kyPriceQueryReq.setBillingTime(DateUtil.format(sendDateTime,"yyyy-MM-dd HH:mm:ss"));
- kyPriceQueryReq.setEndCityName(city_d);
- kyPriceQueryReq.setWeight(weight);
- String bizBody = FlexJsonUtil.toJsonDeep(kyPriceQueryReq);
- System.out.println("msgData:"+bizBody);
- String result = KyeDefaultOpenApi.builder(appkey, appSecret ) //应用Key,密钥
- .env("prod") // //对应环境,包含(uat:测试环境,prod:生产环境),获取对应环境的请求路径
- .api(method) //所调用Api Code
- .sandbox(isSandbox) //是否沙盒环境(env=prod且isSandbox=true时对应的就是跨越测试环境)
- .body(bizBody) //请求体参数,可接受字符串,List,Map三种类型的参数
- .connectTimeout(3000) //连接超时时间
- .readTimeout(15000) //读取超时时间
- .request()
- .response();
- System.out.println(result);
- KYApiResp kyApiResp= FlexJsonUtil.fromJson(result, KYApiResp.class);
- if(kyApiResp.isSuccess()){
- for(KYPirceData ky:kyApiResp.getData()){
- if(businessType.equals(ky.getServiceMode())){
- if(ky.getTotalJF()!=null){
- baseDao.execute("update LogisticsPrice set lp_msg3='',LP_REALTIMEPRICE3="+ky.getTotalJF()+" where lp_id="+id);
- }else{
- baseDao.execute("update LogisticsPrice set lp_msg3='"+ky.getRetMsg()+"' where lp_id="+id);
- }
- }
- }
- }else{
- baseDao.execute("update LogisticsPrice set lp_msg3='"+kyApiResp.getMsg()+"' where lp_id="+id);
- }
- }catch (Exception e){
- e.printStackTrace();
- retMap.put("success",false);
- retMap.put("message","获取失败"+(StringUtil.nvl(e.getMessage(),"")));
- logger.info("getPrice_KY-F:id {} err {}",id,retMap.get("message"));
- return retMap;
- }
- return retMap;
- }
- //顺丰
- private Map<String, Object> getPrice_SF(Integer id,String type,double weight,double volume,String province_d,String city_d,String province_s,String city_s,Date sendDateTime) {
- Map<String,Object> retMap = new HashMap<>();
- /*生产环境地址 https://bspgw.sf-express.com/std/service
- 沙箱环境地址 https://sfapi-sbox.sf-express.com/std/service*/
- /*1 partnerID String(64) 是 合作伙伴编码(即顾客编码)
- 2 requestID String(40) 是 请求唯一号UUID
- 3 serviceCode String(50) 是 接口服务代码
- 4 timestamp long 是 调用接口时间戳
- 5 msgDigest String(128) 条件 数字签名,使用数字签名方式认证时必填
- 6 accessToken Number 条件 访问令牌,使用OAuth2方式认证时必填
- 7 msgData String 是 业务数据报文*/
- try{
- Object[] obs = baseDao.getFieldsDataByCondition("SZSI_P.DOCK_LOGISTICS_CONFIG A "
- , new String[]{"CALL_URL","CLIENT_CODE","CHECK_WORD","ENABLE_"}, "LOGISTICS_='SF' and type_='GETPRICE' AND A.ENABLE_ = 1");
- String msgData = "";
- String businessType="";
- if("特快".equals(type)){
- businessType="1";
- }else if("普快".equals(type)){
- businessType="2";
- }else if("物流".equals(type)){
- businessType="255";//卡航
- }
- //businessType="299";
- SFPriceQueryReq sfPriceQueryReq=new SFPriceQueryReq();
- sfPriceQueryReq.setBusinessType(businessType);//特快
- sfPriceQueryReq.setWeight(weight);
- sfPriceQueryReq.setVolume(volume);
- sfPriceQueryReq.setConsignedTime(DateUtil.format(sendDateTime,"yyyy-MM-dd HH:mm:ss"));
- //目的地
- SFDestAddress sfDestAddress=new SFDestAddress();
- sfDestAddress.setProvince(province_d);
- sfDestAddress.setCity(city_d);
- sfPriceQueryReq.setDestAddress(sfDestAddress);
- //寄件方信息
- SFSrcAddress srcAddress=new SFSrcAddress();
- srcAddress.setProvince(province_s);
- srcAddress.setCity(city_s);
- sfPriceQueryReq.setSrcAddress(srcAddress);
- msgData = FlexJsonUtil.toJsonDeep(sfPriceQueryReq);
- CallExpressServiceTools tools=CallExpressServiceTools.getInstance();
- String CLIENT_CODE = obs[1].toString();
- String CHECK_WORD = obs[2].toString();
- String CALL_URL = obs[0].toString();
- System.out.println("msgData:"+msgData);
- String timeStamp = String.valueOf(System.currentTimeMillis());
- Map<String, String> params = new HashMap<String, String>();
- params.put("partnerID", CLIENT_CODE); // 顾客编码 ,对应丰桥上获取的clientCode
- params.put("requestID", UUID.randomUUID().toString().replace("-", ""));
- params.put("serviceCode",ExpressServiceCodeEnum.EXP_RECE_QUERY_DELIVERTM.getCode());// 接口服务码
- params.put("timestamp", timeStamp);
- params.put("msgData", msgData);
- params.put("msgDigest", tools.getMsgDigest(msgData,timeStamp,CHECK_WORD));
- String result = HttpClientUtil.post(CALL_URL, params);
- SFApiResp sfApiResp= FlexJsonUtil.fromJson(result, SFApiResp.class);
- if(sfApiResp!=null){
- if("A1000".equals(sfApiResp.getApiResultCode())){
- String apiResultData = sfApiResp.getApiResultData();
- SFPriceApiResultData sfPriceApiResultData=FlexJsonUtil.fromJson(apiResultData, SFPriceApiResultData.class);
- if(sfPriceApiResultData.isSuccess()){
- for(SFPriceDeliverTmDto sfd:sfPriceApiResultData.getMsgData().getDeliverTmDto() ){
- if(businessType.equals(sfd.getBusinessType()) && sfd.getFee() !=null){
- baseDao.execute("update LogisticsPrice set lp_msg1='',LP_REALTIMEPRICE1="+sfd.getFee()+" where lp_id="+id);
- }
- }
- }else{
- baseDao.execute("update LogisticsPrice set lp_msg1='"+sfPriceApiResultData.getErrorMsg()+"', where lp_id="+id);
- }
- }
- }
- System.out.println("result:"+result);
- }catch (Exception e){
- e.printStackTrace();
- retMap.put("success",false);
- retMap.put("message","获取失败"+(StringUtil.nvl(e.getMessage(),"")));
- logger.info("getPrice_SF-F:id {} err {}",id,retMap.get("message"));
- return retMap;
- }
- return retMap;
- }
- }
|