UasEisApplicationTests.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  1. package com.uas.eis;
  2. import com.uas.eis.dao.*;
  3. import com.uas.eis.entity.sf.*;
  4. import com.uas.eis.service.ERPService;
  5. import com.uas.eis.utils.*;
  6. import org.junit.Test;
  7. import org.junit.runner.RunWith;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.boot.test.context.SpringBootTest;
  10. import org.springframework.test.context.junit4.SpringRunner;
  11. import com.sf.csim.express.service.CallExpressServiceTools;
  12. import com.sf.csim.express.service.HttpClientUtil;
  13. import com.sf.csim.express.service.IServiceCodeStandard;
  14. import com.sf.csim.express.service.code.ExpressServiceCodeEnum;
  15. import java.io.FileOutputStream;
  16. import java.io.InputStream;
  17. import java.io.UnsupportedEncodingException;
  18. import java.net.HttpURLConnection;
  19. import java.net.URL;
  20. import java.util.*;
  21. @RunWith(SpringRunner.class)
  22. @SpringBootTest(classes = {UasEisApplication.class})
  23. public class UasEisApplicationTests {
  24. @Autowired
  25. private BaseDao baseDao;
  26. @Autowired
  27. private ERPService erpService;
  28. /**
  29. 丰桥新沙箱测试顾客编码 Yg4Zf06w_sxZs3A5D
  30. 校验码 3Xdk1jqeG1Xod9nUXus8Op7DNOkchTnw
  31. **/
  32. private static final String CLIENT_CODE = "JYXKJWFFJ88E"; //此处替换为您在丰桥平台获取的顾客编码
  33. //此处替换为您在丰桥平台获取的校验码
  34. private static final String CHECK_WORD_PROD = "GgO0UoyQ5FssNLItii3olo63bQ80ErAE"; //生产校验码
  35. private static final String CHECK_WORD_BOX ="rMBhSYRa9OtUPkfX5mow01NlxDWtI411";//沙箱校验码
  36. //沙箱环境的地址 -PRO
  37. private static final String CALL_URL_BOX = "https://sfapi-sbox.sf-express.com/std/service";
  38. //生产环境的地址 -PRO
  39. private static final String CALL_URL_PROD = "https://sfapi.sf-express.com/std/service";
  40. @Test
  41. public void TestApi() throws UnsupportedEncodingException {
  42. /**ExpressServiceCodeEnum 对应速运类-快递APIs
  43. POSTServiceCodeEnum 对应速运类-驿站APIs
  44. YJTServiceCodeEnum 对应解决方案-医寄通APIs
  45. EPSServiceCodeEnum 对应解决方案-快递管家APIs
  46. HZTServiceCodeEnum 对应解决方案-函证通APIs 2022-2-24 新增
  47. 详情见code目录下枚举类,客户可自行修改引用的该类
  48. **/
  49. IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_CREATE_ORDER; //下订单
  50. // IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_SEARCH_ORDER_RESP; //查订单
  51. // IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_UPDATE_ORDER;//订单取消
  52. // IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_FILTER_ORDER_BSP;//订单筛选
  53. // IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_SEARCH_ROUTES;//查路由
  54. // IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_GET_SUB_MAILNO;//子单号
  55. // IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_QUERY_SFWAYBILL;//查运费
  56. // IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_REGISTER_ROUTE;//注册路由
  57. // IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_CREATE_REVERSE_ORDER;//退货下单
  58. // IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_CANCEL_REVERSE_ORDER;//退货消单
  59. // IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_WANTED_INTERCEPT;//截单转寄
  60. // IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_QUERY_DELIVERTM;//时效标准及价格查询
  61. // IServiceCodeStandard standardService = ExpressServiceCodeEnum.COM_RECE_CLOUD_PRINT_WAYBILLS;//面单打印
  62. // IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_UPLOAD_ROUTE;//路由上传
  63. // IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_SEARCH_PROMITM;//预计派送时间查询
  64. // IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_EXCE_CHECK_PICKUP_TIME;//揽件服务时间查询
  65. // IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_VALIDATE_WAYBILLNO;//运单号合法性校验
  66. CallExpressServiceTools tools=CallExpressServiceTools.getInstance();
  67. Map<String, String> params = new HashMap<String, String>();
  68. String timeStamp = String.valueOf(System.currentTimeMillis());
  69. String msgData = tools.packageMsgData(standardService);
  70. SFCreatOrderReq sfOrder = new SFCreatOrderReq();
  71. sfOrder.setOrderId("SD24090018-2");
  72. sfOrder.setMonthlyCard("7551234567");
  73. // 1,寄件方信息 2,到件方信息
  74. List<SFContactInfo> contactInfoList = new ArrayList<>();
  75. SFContactInfo sendInfo = new SFContactInfo();
  76. sendInfo.setContactType(1);
  77. sendInfo.setCompany("深圳市佳毅兴科技有限公司");
  78. sendInfo.setContact("窦慧怡");
  79. sendInfo.setMobile("18128820006");
  80. sendInfo.setAddress("广东省深圳市宝安区大宝路51号新柯城业园1栋5楼");
  81. contactInfoList.add(sendInfo);
  82. SFContactInfo receiveInfo = new SFContactInfo();
  83. receiveInfo.setContactType(2);
  84. receiveInfo.setCompany("深圳市豪锦瑞科技有限公司");
  85. receiveInfo.setContact("刘洋");
  86. receiveInfo.setMobile("18688770976");
  87. receiveInfo.setAddress("深圳市宝安区71区万源商务大厦B栋606");
  88. contactInfoList.add(receiveInfo);
  89. sfOrder.setContactInfoList(contactInfoList);
  90. List<SFCargoDetail> cargoDetails = new ArrayList<>();
  91. sfOrder.setCargoDetails(cargoDetails);
  92. msgData = FlexJsonUtil.toJsonDeep(sfOrder);
  93. params.put("partnerID", CLIENT_CODE); // 顾客编码 ,对应丰桥上获取的clientCode
  94. params.put("requestID", UUID.randomUUID().toString().replace("-", ""));
  95. params.put("serviceCode",standardService.getCode());// 接口服务码
  96. params.put("timestamp", timeStamp);
  97. params.put("msgData", msgData);
  98. params.put("msgDigest", tools.getMsgDigest(msgData,timeStamp,CHECK_WORD_BOX));
  99. long startTime = System.currentTimeMillis();
  100. // System.out.println("====调用请求:" + params.get("msgData"));
  101. System.out.println("====调用实际请求:" + params);
  102. String result = HttpClientUtil.post(CALL_URL_BOX, params);
  103. System.out.println("====调用丰桥的接口服务代码:" + String.valueOf(standardService.getCode()) + " 接口耗时:"+ String.valueOf(System.currentTimeMillis()-startTime)+"====");
  104. System.out.println("===调用地址 ==="+CALL_URL_BOX);
  105. System.out.println("===顾客编码 ==="+CLIENT_CODE);
  106. System.out.println("===返回结果:" +result);
  107. // Map<String,Object> resData = JacksonUtil.fromJson(result);
  108. SFApiResp sfApiResp = FlexJsonUtil.fromJson(result, SFApiResp.class);
  109. if(sfApiResp!=null){
  110. if("A1000".equals(sfApiResp.getApiResultCode())){
  111. String apiResultData = sfApiResp.getApiResultData();
  112. SFCreatOrderResp sfApiRespData = FlexJsonUtil.fromJson(apiResultData, SFCreatOrderResp.class);
  113. if(sfApiRespData.isSuccess()){
  114. SFCreateOrder sfOrderResp = sfApiRespData.getMsgData();
  115. if(!CollectionUtil.isEmpty(sfOrderResp.getWaybillNoInfoList())){
  116. for (SFWaybillNoInfo sfWaybillNoInfoResp:sfOrderResp.getWaybillNoInfoList()){
  117. System.out.println("顺丰物流单号: ====="+sfWaybillNoInfoResp.getWaybillNo());
  118. }
  119. }
  120. }else {
  121. System.out.println("errorCode:"+sfApiRespData.getErrorCode()+"====errorMsg:"+sfApiRespData.getErrorMsg());
  122. }
  123. }else {
  124. System.out.println("code:"+sfApiResp.getApiResultCode()
  125. +"===apiResponseID:"+sfApiResp.getApiResponseID()
  126. +"===apiErrorMsg:"+sfApiResp.getApiErrorMsg());
  127. }
  128. }
  129. }
  130. @Test
  131. public void TestCreatSFOrder(){
  132. Map<String, Object> res = erpService.creatSFOrder("JYX_TEST", 50734879,"ADMIN");
  133. System.out.println("res==="+res.get("success")+":"+res.get("message"));
  134. }
  135. @Test
  136. public void TestCancelSFOrder(){
  137. Map<String, Object> res = erpService.cancelSFOrder("JYX_TEST", 50734879,"ADMIN");
  138. System.out.println("res==="+res.get("success")+":"+res.get("message"));
  139. }
  140. @Test
  141. public void TestPrintPDF() throws UnsupportedEncodingException {
  142. /**ExpressServiceCodeEnum 对应速运类-快递APIs
  143. POSTServiceCodeEnum 对应速运类-驿站APIs
  144. YJTServiceCodeEnum 对应解决方案-医寄通APIs
  145. EPSServiceCodeEnum 对应解决方案-快递管家APIs
  146. HZTServiceCodeEnum 对应解决方案-函证通APIs 2022-2-24 新增
  147. 详情见code目录下枚举类,客户可自行修改引用的该类
  148. **/
  149. IServiceCodeStandard standardService = ExpressServiceCodeEnum.COM_RECE_CLOUD_PRINT_WAYBILLS; //下订单
  150. // IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_SEARCH_ORDER_RESP; //查订单
  151. // IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_UPDATE_ORDER;//订单取消
  152. // IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_FILTER_ORDER_BSP;//订单筛选
  153. // IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_SEARCH_ROUTES;//查路由
  154. // IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_GET_SUB_MAILNO;//子单号
  155. // IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_QUERY_SFWAYBILL;//查运费
  156. // IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_REGISTER_ROUTE;//注册路由
  157. // IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_CREATE_REVERSE_ORDER;//退货下单
  158. // IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_CANCEL_REVERSE_ORDER;//退货消单
  159. // IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_WANTED_INTERCEPT;//截单转寄
  160. // IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_QUERY_DELIVERTM;//时效标准及价格查询
  161. // IServiceCodeStandard standardService = ExpressServiceCodeEnum.COM_RECE_CLOUD_PRINT_WAYBILLS;//面单打印
  162. // IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_UPLOAD_ROUTE;//路由上传
  163. // IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_SEARCH_PROMITM;//预计派送时间查询
  164. // IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_EXCE_CHECK_PICKUP_TIME;//揽件服务时间查询
  165. // IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_VALIDATE_WAYBILLNO;//运单号合法性校验
  166. CallExpressServiceTools tools=CallExpressServiceTools.getInstance();
  167. Map<String, String> params = new HashMap<String, String>();
  168. String timeStamp = String.valueOf(System.currentTimeMillis());
  169. Map<String, Object> msgDataMap = new HashMap<>();
  170. msgDataMap.put("templateCode","fm_76130_standard_JYXKJWFFJ88E");
  171. msgDataMap.put("version","2.0");
  172. msgDataMap.put("fileType","pdf");
  173. msgDataMap.put("sync","true");
  174. List<Map<String,Object>> docList = new ArrayList<>();
  175. Map<String,Object> doc = new HashMap<>();
  176. doc.put("masterWaybillNo","SF7444488564898");
  177. docList.add(doc);
  178. doc = new HashMap<>();
  179. doc.put("masterWaybillNo","SF7444488606478");
  180. docList.add(doc);
  181. msgDataMap.put("documents",docList);
  182. String msgData = FlexJsonUtil.toJsonDeep(msgDataMap);
  183. params.put("partnerID", CLIENT_CODE); // 顾客编码 ,对应丰桥上获取的clientCode
  184. params.put("requestID", UUID.randomUUID().toString().replace("-", ""));
  185. params.put("serviceCode",standardService.getCode());// 接口服务码
  186. params.put("timestamp", timeStamp);
  187. params.put("msgData", msgData);
  188. params.put("msgDigest", tools.getMsgDigest(msgData,timeStamp,CHECK_WORD_BOX));
  189. long startTime = System.currentTimeMillis();
  190. // System.out.println("====调用请求:" + params.get("msgData"));
  191. System.out.println("====调用实际请求:" + params);
  192. String result = HttpClientUtil.post(CALL_URL_BOX, params);
  193. System.out.println("====调用丰桥的接口服务代码:" + String.valueOf(standardService.getCode()) + " 接口耗时:"+ String.valueOf(System.currentTimeMillis()-startTime)+"====");
  194. System.out.println("===调用地址 ==="+CALL_URL_BOX);
  195. System.out.println("===顾客编码 ==="+CLIENT_CODE);
  196. System.out.println("===返回结果:" +result);
  197. // Map<String,Object> resData = JacksonUtil.fromJson(result);
  198. SFApiResp sfApiResp = FlexJsonUtil.fromJson(result, SFApiResp.class);
  199. if(sfApiResp!=null){
  200. if("A1000".equals(sfApiResp.getApiResultCode())){
  201. String apiResultData = sfApiResp.getApiResultData();
  202. SFPrintToPDFResp sfPrintToPDFResp = FlexJsonUtil.fromJson(apiResultData, SFCreatOrderResp.class);
  203. if(sfPrintToPDFResp.isSuccess()){
  204. SFPrintFileResp sfPrintFileResp = sfPrintToPDFResp.getObj();
  205. List<SFPrintFile> files = sfPrintFileResp.getFiles();
  206. if(!CollectionUtil.isEmpty(files)){
  207. files.stream().sorted(Comparator.comparingInt(SFPrintFile::getSeqNo));
  208. for (SFPrintFile file : files) {
  209. pdfDownLoad(file.getUrl(),file.getToken(),file.getWaybillNo());
  210. }
  211. }
  212. }else {
  213. System.out.println("errorCode:"+sfPrintToPDFResp.getErrorCode()+"====errorMsg:"+sfPrintToPDFResp.getErrorMessage());
  214. }
  215. }else {
  216. System.out.println("code:"+sfApiResp.getApiResultCode()
  217. +"===apiResponseID:"+sfApiResp.getApiResponseID()
  218. +"===apiErrorMsg:"+sfApiResp.getApiErrorMsg());
  219. }
  220. }
  221. }
  222. @Test
  223. public void TestpdfDownLoad(){
  224. String fileUrl="https://eos-scp-core-shenzhen-futian1-oss.sf-express.com:443/v1.2/AUTH_EOS-SCP-CORE/print-file-sbox/AAABkcBBzkdSfT1fJRhKjpLt-VFNcr-a_SF7444488607870_fm_76130_standard_JYXKJWFFJ88E_1_1.pdf";
  225. String token="AUTH_tkv12_f146d1855480549d262b5c46ab0ab597ff20a97d9d0db45c16bedeb4fabd112b012deadd477ee524b1d690ce01baa3cdffbb125a6ccf69b73778dba2eb5157eb29d9b3c970d295a3ca38c86f265339b4e7673f13379eb30a5b06511e78f70544cc4cdfc6c2876b2b6b012fdd1261d4dc0a993336de84ff3d3ef08dcf6775c715ea8f1ccf7c6c82a84ac370b171a5ac5311e398d02ff8a80d4a3a5acb161165ebbbfe1b7a686c5f0c6fb838db2b8c7625d1d8540df26f87d4f8e135ecce42d062";
  226. String fileName="SF7444488607870";
  227. pdfDownLoad(fileUrl,token,fileName);
  228. }
  229. private void pdfDownLoad(String fileUrl,String token,String fileName){
  230. //下载地址
  231. // String fileUrl = ioList.getGeneralString("ei_pdfurl"); // "https://inv.jss.com.cn/fp2/2zpnwyKkdvu9dWzE8BhmSnER0Iux3xQRMLidDJhiIE2PziVXY4lL3k83OsK0K06YctW5cf1FFHxraffj-bf16A.pdf";
  232. // 定义要保存的文件的路径
  233. // String fileName = ioList.getGeneralString("cu_name")+ioList.getGeneralString("ei_refno")+".pdf";//
  234. String fileBasePath = "C:\\jyxsf\\"+fileName+".pdf";
  235. // fileBasePath = String.valueOf(obs[5])+fileName;//发票储存路径
  236. try {//X-Auth-token
  237. // 创建URL对象
  238. URL url = new URL(fileUrl);
  239. HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
  240. // 设置请求方法为GET
  241. httpURLConnection.setRequestMethod("GET");
  242. // 添加请求头
  243. httpURLConnection.setRequestProperty("X-Auth-token", token); // 假设你的token是通过Bearer模式传递的
  244. // 连接服务器
  245. httpURLConnection.connect();
  246. // 检查响应码
  247. int responseCode = httpURLConnection.getResponseCode();
  248. if (responseCode == HttpURLConnection.HTTP_OK) {
  249. // 读取输入流
  250. InputStream inputStream = httpURLConnection.getInputStream();
  251. // 写入文件
  252. FileOutputStream fileOutputStream = new FileOutputStream(fileBasePath);
  253. byte[] buffer = new byte[4096];
  254. int bytesRead = -1;
  255. while ((bytesRead = inputStream.read(buffer)) != -1) {
  256. fileOutputStream.write(buffer, 0, bytesRead);
  257. }
  258. // 关闭流
  259. fileOutputStream.close();
  260. inputStream.close();
  261. System.out.println("下载成功");
  262. } else {
  263. System.out.println("下载失败 : " + responseCode);
  264. }
  265. // 断开连接
  266. httpURLConnection.disconnect();
  267. // 打开连接
  268. // URLConnection conn = url.openConnection();
  269. // // 获取输入流
  270. // InputStream in = conn.getInputStream();
  271. // // 创建输出流
  272. // FileOutputStream out = new FileOutputStream(fileBasePath);
  273. // // 创建缓冲区
  274. // byte[] buffer = new byte[104857600];
  275. // // 读取并写入数据
  276. // int len;
  277. // while ((len = in.read(buffer)) != -1) {
  278. // out.write(buffer, 0, len);
  279. // }
  280. // long size = out.getChannel().size();
  281. // // 关闭流
  282. // in.close();
  283. // out.close();
  284. // System.out.println("size:"+size);
  285. //存文件 filepath
  286. // int id = commonService.saveFilePath(fileBasePath, (int) size, fileName, "管理员");
  287. // baseDao.execute("update ELECINVOICE set ei_pdfattach ='"+id+";' where ei_id = "+ioList.getGeneralInt("ei_id"));
  288. } catch (Exception e) {
  289. e.printStackTrace();
  290. String errMsg = "文件转存异常";
  291. if(StringUtil.hasText(e.getMessage())){
  292. errMsg = e.getMessage();
  293. }else if(e.getCause()!=null&&StringUtil.hasText(e.getCause().getMessage())){
  294. errMsg = e.getCause().getMessage();
  295. }
  296. }
  297. }
  298. }