JingdongTask.java 41 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629
  1. package com.iamberry.rst.controllers.mq;
  2. import com.alibaba.fastjson.JSONObject;
  3. //import com.iamberry.redis.RedisUtils;
  4. import com.iamberry.rst.controllers.order.AdminJingdongAuthController;
  5. import com.iamberry.rst.core.address.City;
  6. import com.iamberry.rst.core.address.District;
  7. import com.iamberry.rst.core.address.Province;
  8. import com.iamberry.rst.core.cm.SalesOrder;
  9. import com.iamberry.rst.core.cm.SalesOrderItem;
  10. import com.iamberry.rst.core.order.OrderSyncLog;
  11. import com.iamberry.rst.core.order.ProductColor;
  12. import com.iamberry.rst.core.order.ProductCombinatInfo;
  13. import com.iamberry.rst.core.sys.SysConfig;
  14. import com.iamberry.rst.faces.address.AddressService;
  15. import com.iamberry.rst.faces.cm.SalesOrderService;
  16. import com.iamberry.rst.faces.sys.SysConfigService;
  17. import com.iamberry.rst.service.order.mapper.OrderSyncLogMapper;
  18. import com.iamberry.rst.service.product.mapper.ProductColorMapper;
  19. import com.iamberry.rst.service.product.mapper.ProductMapper;
  20. import com.iamberry.rst.util.GenerateKeyUtil;
  21. import com.iamberry.rst.util.JingdongConfig;
  22. import com.iamberry.wechat.tools.DateTimeUtil;
  23. import com.jd.open.api.sdk.DefaultJdClient;
  24. import com.jd.open.api.sdk.JdClient;
  25. import com.jd.open.api.sdk.JdException;
  26. import com.jd.open.api.sdk.domain.order.IOrderService.response.getmobilelist.OrderPrivacyModel;
  27. import com.jd.open.api.sdk.domain.order.IOrderService.response.getmobilelist.ResponseData;
  28. import com.jd.open.api.sdk.domain.order.OrderQueryJsfService.response.enGet.OrderResult;
  29. import com.jd.open.api.sdk.domain.order.OrderQueryJsfService.response.enSearch.ItemInfo;
  30. import com.jd.open.api.sdk.domain.order.OrderQueryJsfService.response.enSearch.OrderListResult;
  31. import com.jd.open.api.sdk.domain.order.OrderQueryJsfService.response.enSearch.OrderSearchInfo;
  32. import com.jd.open.api.sdk.domain.order.OrderQueryJsfService.response.enSearch.UserInfo;
  33. import com.jd.open.api.sdk.domain.order.OrderShipmentService.response.shipment.OperatorResult;
  34. import com.jd.open.api.sdk.request.order.PopOrderEnGetRequest;
  35. import com.jd.open.api.sdk.request.order.PopOrderEnSearchRequest;
  36. import com.jd.open.api.sdk.request.order.PopOrderGetmobilelistRequest;
  37. import com.jd.open.api.sdk.request.order.PopOrderShipmentRequest;
  38. import com.jd.open.api.sdk.response.order.PopOrderEnGetResponse;
  39. import com.jd.open.api.sdk.response.order.PopOrderEnSearchResponse;
  40. import com.jd.open.api.sdk.response.order.PopOrderGetmobilelistResponse;
  41. import com.jd.open.api.sdk.response.order.PopOrderShipmentResponse;
  42. import com.taobao.api.internal.util.StringUtils;
  43. import org.slf4j.Logger;
  44. import org.slf4j.LoggerFactory;
  45. import org.springframework.beans.factory.annotation.Autowired;
  46. import org.springframework.context.annotation.Lazy;
  47. import org.springframework.scheduling.annotation.Scheduled;
  48. import org.springframework.stereotype.Component;
  49. import javax.annotation.PostConstruct;
  50. import java.util.*;
  51. /**
  52. * @author root
  53. */
  54. @Component
  55. @Lazy(false)
  56. public class JingdongTask {
  57. private static Logger logger = LoggerFactory.getLogger(JingdongTask.class);
  58. /** 是否允许淘宝抓取订单,true表示允许,false表示不允许 */
  59. private static boolean isDebug = false;
  60. @Autowired
  61. private GenerateKeyUtil generateKeyUtil ;
  62. @Autowired
  63. private AddressService addressService;
  64. @Autowired
  65. private ProductColorMapper productColorMapper;
  66. @Autowired
  67. private ProductMapper productMapper;
  68. @Autowired
  69. private SalesOrderService salesOrderService;
  70. @Autowired
  71. private OrderSyncLogMapper orderSyncLogMapper;
  72. @Autowired
  73. private SysConfigService sysConfigService;
  74. static {
  75. String debug = System.getProperty("isJingdong");
  76. System.out.println("读取到的配置数据:" + debug);
  77. if ("true".equalsIgnoreCase(debug)) {
  78. isDebug = true;
  79. }
  80. }
  81. //每30分钟执行一次
  82. // @PostConstruct
  83. @Scheduled(fixedDelay = 1000 * 60 * 10, initialDelay = 3000)
  84. public void syncOrder() {
  85. if (!isDebug) {
  86. logger.info("【京东订单】debug模式,无法运行正式任务");
  87. return;
  88. }
  89. logger.info("【京东订单】开始抓取数据......");
  90. // 组装请求数据
  91. SysConfig sysConfigTime = sysConfigService.getSysConfigAll(28);
  92. String startTime = sysConfigTime.getConfigParameter();
  93. if (StringUtils.isEmpty(startTime)) {
  94. startTime = DateTimeUtil.format(DateTimeUtil.addDay(-20), "yyyy-MM-dd HH:mm:ss");
  95. sysConfigTime.setConfigParameter(startTime);
  96. sysConfigService.updateSysConfig(sysConfigTime);
  97. }
  98. // 结束时间
  99. String endTime = DateTimeUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss");
  100. logger.info("开始时间:{}, 结束时间:{}", startTime, endTime);
  101. // 批次号
  102. String batchIdST = generateKeyUtil.getSalesBatchIdJD();
  103. // 循环抓取
  104. boolean hasNext = true;
  105. int pageNo = 1;
  106. try {
  107. int total = 0;
  108. // 开始循环
  109. while (hasNext) {
  110. logger.info("【京东订单】抓取第{}页的数据......", pageNo);
  111. // 抓取京东数据
  112. JdClient client = null;
  113. PopOrderEnSearchRequest orderSearchRequest = null;
  114. PopOrderEnSearchResponse rsp = null;
  115. try {
  116. SysConfig sysConfig = sysConfigService.getSysConfigAll(27);
  117. client = new DefaultJdClient(TaobaoConfig.JINGDONG_API_URL, (String) AdminJingdongAuthController.getToken(sysConfig).get("token"), TaobaoConfig.jd_appkey, TaobaoConfig.jd_secret);
  118. orderSearchRequest = new PopOrderEnSearchRequest();
  119. orderSearchRequest.setStartDate(startTime);
  120. orderSearchRequest.setEndDate(endTime);
  121. orderSearchRequest.setOrderState("WAIT_SELLER_STOCK_OUT,WAIT_SELLER_DELIVERY");//待出库和境外待发货, 一般仅存在前者
  122. orderSearchRequest.setOptionalFields("orderId,venderId,orderType,payType,orderTotalPrice,orderSellerPrice,orderPayment,freightPrice,sellerDiscount,orderState,orderStateRemark,deliveryType," +
  123. "invoiceEasyInfo," +
  124. "invoiceCode,invoiceInfo,invoiceCode,orderRemark,orderStartTime,orderEndTime," +
  125. "consigneeInfo," +
  126. "itemInfoList," +
  127. "couponDetailList," +
  128. "venderRemark,balanceUsed,pin,returnOrder,paymentConfirmTime,waybill,logisticsId," +
  129. "vatInfo," +
  130. "modified,directParentOrderId,parentOrderId,customs,customsModel,orderSource,storeOrder,idSopShipmenttype,scDT,serviceFee," +
  131. "pauseBizInfo," +
  132. "taxFee,tuiHuoWuYou,orderSign,storeId,realPin,orderMarkDesc,open_id,xid,open_id_buyer,xid_buyer");
  133. orderSearchRequest.setPage("" + pageNo);
  134. orderSearchRequest.setPageSize("" + 40L);
  135. orderSearchRequest.setDateType(0);//按照最后修改时间查询
  136. rsp = client.execute(orderSearchRequest);
  137. } catch (Exception e) {
  138. logger.error("", e);
  139. }
  140. if (rsp == null) {
  141. logger.error("【京东订单】请求京东服务器失败!");
  142. return;
  143. }
  144. // 判断数据
  145. String code = rsp.getCode();
  146. if (!"0".equals(rsp.getCode())) {
  147. logger.info("【京东订单】请求京东服务器,返回错误码:{}, 错误信息:{}", code, rsp.getMsg());
  148. break;
  149. }
  150. logger.info("【京东订单】请求京东服务器,返回信息:{}", rsp.getMsg());
  151. // debug测试数据
  152. // String info = "{\"jingdong_pop_order_enSearch_responce\":{\"code\":\"0\",\"searchorderinfo_result\":{\"orderInfoList\":[{\"orderSellerPrice\":\"120.00\",\"orderType\":\"22\",\"logisticsId\":\"\",\"orderSign\":\"00000000200000000000000002001000030100100000000000600000000001030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000103020000000000000000000000000000000000000010000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"orderId\":\"273600481921\",\"paymentConfirmTime\":\"2023-05-17 09:29:59\",\"orderStateRemark\":\"等待出库\",\"orderState\":\"WAIT_SELLER_STOCK_OUT\",\"payType\":\"4-在线支付\",\"itemInfoList\":[{\"wareId\":\"11593682516\",\"giftPoint\":\"0\",\"skuName\":\"爱贝源 (Aiberle) R3净水机通用替换滤芯耗材(T1-T4套装) PP棉 活性炭 反渗透滤芯 T1(PP棉滤芯)\",\"itemTotal\":\"1\",\"outerSkuId\":\"6970465730191\",\"jdPrice\":\"99.00\",\"invoiceContentId\":\"\",\"productNo\":\"T1-4\",\"skuId\":\"27797583782\",\"newStoreId\":\"0\"},{\"wareId\":\"11593682516\",\"giftPoint\":\"0\",\"skuName\":\"爱贝源 (Aiberle) R3净水机通用替换滤芯耗材(T1-T4套装) PP棉 活性炭 反渗透滤芯 T2(前置活性炭滤芯)\",\"itemTotal\":\"1\",\"outerSkuId\":\"6970465730207\",\"jdPrice\":\"99.00\",\"invoiceContentId\":\"\",\"productNo\":\"T1-4\",\"skuId\":\"27797583783\",\"newStoreId\":\"0\"}],\"waybill\":\"\",\"pin\":\"jFUvE6CChwnsN1P/N/7b1njhgMsjAKQapdCvfv7nQs85sdxW+MFokhhohj1DWlhL\",\"modified\":\"2023-05-17 09:30:01\",\"freightPrice\":\"0.00\",\"balanceUsed\":\"0.00\",\"orderTotalPrice\":\"198.00\",\"idSopShipmenttype\":67,\"sellerDiscount\":\"78.00\",\"venderRemark\":\"\",\"couponDetailList\":[{\"orderId\":\"273600481921\",\"couponType\":\"30-单品促销优惠\",\"couponPrice\":\"39.00\",\"skuId\":\"27797583783\"},{\"orderId\":\"273600481921\",\"couponType\":\"30-单品促销优惠\",\"couponPrice\":\"39.00\",\"skuId\":\"27797583782\"}],\"venderId\":\"751965\",\"orderRemark\":\"\",\"vatInfo\":{},\"invoiceInfo\":\"不需要开具发票\",\"orderSource\":\"移动端订单\",\"deliveryType\":\"任意时间\",\"storeId\":\"0\",\"orderPayment\":\"120.00\",\"consigneeInfo\":{\"town\":\"耀华道街道\",\"city\":\"廊坊市\",\"county\":\"廊坊经济技术开发区\",\"mobile\":\"136*******1\",\"telephone\":\"136*******1\",\"cityId\":\"274\",\"townId\":\"49864\",\"provinceId\":\"5\",\"province\":\"河北\",\"countyId\":\"4097\",\"fullAddress\":\"河北廊坊市廊坊经济技术开发区耀华道街道憩园小区4号楼二单元101\",\"fullname\":\"王小云\",\"desen_telephone\":\"626538be8e44a11d8354141849408991226e96ec2d375c50effd58900d9d0d79e04218\",\"desen_mobile\":\"626538be8e44a11d8354141849408991226e96ec2d375c50effd58900d9d0d79e04218\"},\"returnOrder\":\"0\",\"invoiceEasyInfo\":{\"invoiceType\":\"0\",\"invoiceContentId\":\"1\",\"invoiceTitle\":\"个人\"},\"storeOrder\":\"\",\"realPin\":\"jFUvE6CChwnsN1P/N/7b1njhgMsjAKQapdCvfv7nQs85sdxW+MFokhhohj1DWlhL\",\"orderStartTime\":\"2023-05-17 09:29:48\"},{\"orderSellerPrice\":\"398.00\",\"orderType\":\"22\",\"logisticsId\":\"\",\"orderSign\":\"30000000200000002000000002001300034100100000000000600000000001030000000000000000000010000000000000000000000000090000000000000000000000000100000000000000000000000000000000002000000000000103020000000000000000000000000000000000000010000000402000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"orderId\":\"273604468651\",\"paymentConfirmTime\":\"2023-05-17 09:00:23\",\"orderStateRemark\":\"等待出库\",\"orderState\":\"WAIT_SELLER_STOCK_OUT\",\"payType\":\"4-在线支付\",\"itemInfoList\":[{\"wareId\":\"10020911319873\",\"giftPoint\":\"0\",\"skuName\":\"爱贝源(Aiberle) C1净水器替换滤芯耗材 净水机替换芯PP棉RO膜活性炭滤芯 滤芯套装\",\"itemTotal\":\"1\",\"outerSkuId\":\"6970465730726\",\"jdPrice\":\"598.00\",\"invoiceContentId\":\"\",\"productNo\":\"\",\"skuId\":\"10029457268148\",\"newStoreId\":\"110008434\"}],\"waybill\":\"\",\"pin\":\"x4McJL4ZdvHbVMlxbQyrNzupaB0GwKZK8OavMVBSqhp1/Drbn8UUQUWGGgv3dBuB\",\"modified\":\"2023-05-17 09:40:20\",\"freightPrice\":\"0.00\",\"balanceUsed\":\"0.00\",\"orderTotalPrice\":\"598.00\",\"idSopShipmenttype\":68,\"sellerDiscount\":\"200.00\",\"venderRemark\":\"\",\"couponDetailList\":[{\"orderId\":\"273604468651\",\"couponType\":\"30-单品促销优惠\",\"couponPrice\":\"200.00\",\"skuId\":\"10029457268148\"}],\"venderId\":\"751965\",\"orderRemark\":\"\",\"vatInfo\":{},\"invoiceInfo\":\"不需要开具发票\",\"orderSource\":\"移动端订单\",\"deliveryType\":\"任意时间\",\"storeId\":\"110008434\",\"orderPayment\":\"398.00\",\"consigneeInfo\":{\"town\":\"和平街道\",\"city\":\"武汉市\",\"county\":\"洪山区\",\"mobile\":\"139*******0\",\"telephone\":\"139*******0\",\"cityId\":\"1381\",\"townId\":\"62957\",\"provinceId\":\"17\",\"province\":\"湖北\",\"countyId\":\"50718\",\"fullAddress\":\"湖北武汉市洪山区和平街道仁和路福星惠誉东湖城一期5号楼2单元102室\",\"fullname\":\"王海燕\",\"desen_telephone\":\"30316401d32518a2e26c735ba81d753d727f7c1901063f23689aa633835737d299c331\",\"desen_mobile\":\"30316401d32518a2e26c735ba81d753d727f7c1901063f23689aa633835737d299c331\"},\"returnOrder\":\"0\",\"invoiceEasyInfo\":{\"invoiceType\":\"0\",\"invoiceContentId\":\"1\",\"invoiceTitle\":\"个人\"},\"storeOrder\":\"京仓订单\",\"realPin\":\"x4McJL4ZdvHbVMlxbQyrNzupaB0GwKZK8OavMVBSqhp1/Drbn8UUQUWGGgv3dBuB\",\"orderStartTime\":\"2023-05-17 09:00:19\"},{\"orderSellerPrice\":\"144.00\",\"orderType\":\"22\",\"logisticsId\":\"\",\"orderSign\":\"00000000200000000000000002001000030100100000000000600000000001030000000000000000000000000000000000001040000000000000000000000000000000000000000000000000000000000000000000002000000000000103020000000000000000000000000000000000000010000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"orderId\":\"273614260424\",\"paymentConfirmTime\":\"2023-05-17 10:03:57\",\"orderStateRemark\":\"等待出库\",\"orderState\":\"WAIT_SELLER_STOCK_OUT\",\"payType\":\"4-在线支付\",\"itemInfoList\":[{\"wareId\":\"10022113838430\",\"giftPoint\":\"0\",\"skuName\":\"爱贝源 (Aiberle) R3长效款净水机通用替换滤芯耗材PP棉 活性炭 反渗透RO膜 后置活性炭 T1\",\"itemTotal\":\"1\",\"outerSkuId\":\"6970465730818\",\"jdPrice\":\"72.00\",\"invoiceContentId\":\"\",\"productNo\":\"\",\"skuId\":\"10048528465799\",\"newStoreId\":\"0\"},{\"wareId\":\"10022113838430\",\"giftPoint\":\"0\",\"skuName\":\"爱贝源 (Aiberle) R3长效款净水机通用替换滤芯耗材PP棉 活性炭 >反渗透RO膜 后置活性炭 T2\",\"itemTotal\":\"1\",\"outerSkuId\":\"6970465730825\",\"jdPrice\":\"72.00\",\"invoiceContentId\":\"\",\"productNo\":\"\",\"skuId\":\"10048528465800\",\"newStoreId\":\"0\"}],\"waybill\":\"\",\"pin\":\"1d402yjy5Ry6sjTn8DstRhhZSfWrvPUEC87Ob8XRD6OA5pxkv9aKgUHskOsoY9JD\",\"modified\":\"2023-05-17 10:03:58\",\"freightPrice\":\"0.00\",\"balanceUsed\":\"0.00\",\"orderTotalPrice\":\"144.00\",\"idSopShipmenttype\":67,\"sellerDiscount\":\"0.00\",\"venderRemark\":\"\",\"couponDetailList\":[{}],\"venderId\":\"751965\",\"orderRemark\":\"\",\"vatInfo\":{},\"invoiceInfo\":\"不需要开具发票\",\"orderSource\":\"移动端订单\",\"deliveryType\":\"任意时间\",\"storeId\":\"0\",\"orderPayment\":\"144.00\",\"consigneeInfo\":{\"town\":\"桂城街道\",\"city\":\"佛山市\",\"county\":\"南海区\",\"mobile\":\"138*******6\",\"telephone\":\"138*******6\",\"cityId\":\"1666\",\"townId\":\"36272\",\"provinceId\":\"19\",\"province\":\"广东\",\"countyId\":\"36267\",\"fullAddress\":\"广东佛山市南海区桂城街道深海路22号越秀星汇瀚府10栋1903室\",\"fullname\":\"彭亚枚\",\"desen_telephone\":\"34326242bad3da91e05c11b6e94a51289bac875cce014832f610735d50fbf62c618d9f\",\"desen_mobile\":\"34326242bad3da91e05c11b6e94a51289bac875cce014832f610735d50fbf62c618d9f\"},\"returnOrder\":\"0\",\"invoiceEasyInfo\":{\"invoiceType\":\"0\",\"invoiceContentId\":\"1\",\"invoiceTitle\":\"个人\"},\"storeOrder\":\"\",\"realPin\":\"1d402yjy5Ry6sjTn8DstRhhZSfWrvPUEC87Ob8XRD6OA5pxkv9aKgUHskOsoY9JD\",\"orderStartTime\":\"2023-05-17 10:03:55\"},{\"orderSellerPrice\":\"599.00\",\"orderType\":\"22\",\"logisticsId\":\"\",\"orderSign\":\"00000000200000000000000002001000030100100010000000600000000001030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000103020400000000000000000000000000000000000010000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"orderId\":\"273554272238\",\"paymentConfirmTime\":\"2023-05-17 11:09:01\",\"orderStateRemark\":\"等待出库\",\"orderState\":\"WAIT_SELLER_STOCK_OUT\",\"payType\":\"4-在线支付\",\"itemInfoList\":[{\"wareId\":\"11593682516\",\"giftPoint\":\"0\",\"skuName\":\"爱贝源 (Aiberle) R3净水机通用替换滤芯耗材(T1-T4套装) PP棉 活性炭 反渗透滤芯 滤芯套装(6支装)\",\"itemTotal\":\"1\",\"outerSkuId\":\"6970465730238\",\"jdPrice\":\"799.00\",\"invoiceContentId\":\"\",\"productNo\":\"T1-4\",\"skuId\":\"27797583786\",\"newStoreId\":\"0\"}],\"waybill\":\"\",\"pin\":\"5JahMY1+diBEH/XLgAMA7GwihmIPAUxsDyg05GGK6YTylvC5UE0AlhdjTPmEMvyJ\",\"modified\":\"2023-05-17 11:09:03\",\"freightPrice\":\"0.00\",\"balanceUsed\":\"0.00\",\"orderTotalPrice\":\"799.00\",\"idSopShipmenttype\":67,\"sellerDiscount\":\"200.00\",\"venderRemark\":\"\",\"couponDetailList\":[{\"orderId\":\"273554272238\",\"couponType\":\"39-京豆优惠\",\"couponPrice\":\"22.30\",\"skuId\":\"\"},{\"orderId\":\"273554272238\",\"couponType\":\"30-单品促销优惠\",\"couponPrice\":\"200.00\",\"skuId\":\"27797583786\"}],\"venderId\":\"751965\",\"orderRemark\":\"\",\"vatInfo\":{},\"invoiceInfo\":\"不需要开具发票\",\"orderSource\":\"移动端订单\",\"deliveryType\":\"任意时间\",\"storeId\":\"0\",\"orderPayment\":\"576.70\",\"consigneeInfo\":{\"town\":\"李家街道\",\"city\":\"大连市\",\"county\":\"沙河口区\",\"mobile\":\"135*******6\",\"telephone\":\"135*******6\",\"cityId\":\"573\",\"townId\":\"63198\",\"provinceId\":\"8\",\"province\":\"辽宁\",\"countyId\":\"3261\",\"fullAddress\":\"辽宁大连市沙河口区李家街道锦虹北园45号楼1单元102\",\"fullname\":\"朱君\",\"desen_telephone\":\"39396299be38974317c8c819e2e8c3221d3e40f9ff96222025efa94aed870e82e3034d\",\"desen_mobile\":\"39396299be38974317c8c819e2e8c3221d3e40f9ff96222025efa94aed870e82e3034d\"},\"returnOrder\":\"0\",\"invoiceEasyInfo\":{\"invoiceType\":\"0\",\"invoiceContentId\":\"1\",\"invoiceTitle\":\"个人\"},\"storeOrder\":\"\",\"realPin\":\"5JahMY1+diBEH/XLgAMA7GwihmIPAUxsDyg05GGK6YTylvC5UE0AlhdjTPmEMvyJ\",\"orderStartTime\":\"2023-05-17 11:08:55\"}],\"apiResult\":{\"chineseErrCode\":\"成功\",\"englishErrCode\":\"success\",\"success\":true,\"numberCode\":10100000},\"orderTotal\":4}}}";
  153. // JSONObject jsonObject = JSONObject.parseObject(info);
  154. // JSONObject jingdongPopOrderEnSearchResponce = JSONObject.parseObject(jsonObject.getString("jingdong_pop_order_enSearch_responce"));
  155. // rsp.setCode(jingdongPopOrderEnSearchResponce.getString("code"));
  156. //
  157. // JSONObject searchorderinfoResult = jingdongPopOrderEnSearchResponce.getJSONObject("searchorderinfo_result");
  158. // OrderListResult orderListResult = JSONObject.parseObject(searchorderinfoResult.toJSONString(), OrderListResult.class);
  159. // rsp.setSearchorderinfoResult(orderListResult);
  160. OrderListResult orderResult = rsp.getSearchorderinfoResult();
  161. if (orderResult == null) {
  162. break;
  163. }
  164. List<OrderSearchInfo> orderInfoList = orderResult.getOrderInfoList();
  165. if (orderInfoList == null || orderInfoList.size() == 0) {
  166. logger.info("【京东订单】数据请求完毕, 数量为0");
  167. break;
  168. }
  169. for (OrderSearchInfo orderSearchInfo : orderInfoList) {
  170. //获取的详情数据和列表数据没什么区别, 直接使用列表数据即可
  171. // Trade details = getOrderDetails(orderSearchInfo.getOrderId());
  172. // if (details == null) {
  173. // logger.error("【京东订单】{}获取订单详细数据失败", trade.getTid());
  174. // return;
  175. // }
  176. // 组装数据
  177. SalesOrder salesOrder = packageOrder(orderSearchInfo);
  178. if (salesOrder != null) {
  179. salesOrder.setSalesBatchId(batchIdST);
  180. salesOrderService.addOrder(salesOrder, "创建订单(京东拉取订单)");
  181. total ++;
  182. }
  183. }
  184. // 迭代数据
  185. if (rsp.getSearchorderinfoResult().getOrderTotal() <= pageNo * 40) {
  186. hasNext = false;
  187. } else {
  188. hasNext = true;
  189. pageNo ++;
  190. }
  191. }
  192. OrderSyncLog orderSyncLog = new OrderSyncLog();
  193. orderSyncLog.setSyncPlatId(1);
  194. orderSyncLog.setSyncLogType(1);
  195. orderSyncLog.setSyncLogMode(1);
  196. orderSyncLog.setSyncLogRecentNum(total); //同步总数量
  197. orderSyncLog.setSyncLogErrorNum(0); //同步失败数量
  198. orderSyncLog.setSyncLogMsg("拉取京东订单"); //备注
  199. orderSyncLogMapper.save(orderSyncLog);
  200. sysConfigTime.setConfigParameter(endTime);
  201. sysConfigService.updateSysConfig(sysConfigTime);
  202. // RedisUtils.put("JINGDONG_SYNC_TIME", endTime);
  203. } catch (Exception e) {
  204. logger.error("", e);
  205. OrderSyncLog orderSyncLog = new OrderSyncLog();
  206. orderSyncLog.setSyncPlatId(1);
  207. orderSyncLog.setSyncLogType(1);
  208. orderSyncLog.setSyncLogMode(1);
  209. orderSyncLog.setSyncLogRecentNum(1); //同步总数量
  210. orderSyncLog.setSyncLogErrorNum(1); //同步失败数量
  211. orderSyncLog.setSyncLogMsg("拉取京东订单"); //备注
  212. orderSyncLog.setSyncLogErrorMsg(e.getMessage());
  213. orderSyncLogMapper.save(orderSyncLog);
  214. }
  215. }
  216. public com.jd.open.api.sdk.domain.order.OrderQueryJsfService.response.enGet.OrderSearchInfo getOrderDetails(Long tid) {
  217. try {
  218. Thread.sleep(1000);
  219. } catch (InterruptedException e) {
  220. e.printStackTrace();
  221. }
  222. try {
  223. JdClient client = null;
  224. PopOrderEnGetRequest request = null;
  225. PopOrderEnGetResponse rsp = null;
  226. SysConfig sysConfig = sysConfigService.getSysConfigAll(27);
  227. client = new DefaultJdClient(TaobaoConfig.JINGDONG_API_URL, (String) AdminJingdongAuthController.getToken(sysConfig).get("token"), TaobaoConfig.jd_appkey, TaobaoConfig.jd_secret);
  228. request=new PopOrderEnGetRequest();
  229. request.setOrderId(tid);
  230. request.setOptionalFields("orderId,venderId,orderType,payType,orderTotalPrice,orderSellerPrice,orderPayment,freightPrice,sellerDiscount,orderState,orderStateRemark,deliveryType," +
  231. "invoiceEasyInfo," +
  232. "invoiceCode,invoiceInfo,invoiceCode,orderRemark,orderStartTime,orderEndTime," +
  233. "consigneeInfo," +
  234. "itemInfoList," +
  235. "couponDetailList," +
  236. "venderRemark,balanceUsed,pin,returnOrder,paymentConfirmTime,waybill,logisticsId," +
  237. "vatInfo," +
  238. "modified,directParentOrderId,parentOrderId,customs,customsModel,orderSource,storeOrder,idSopShipmenttype,scDT,serviceFee," +
  239. "pauseBizInfo," +
  240. "taxFee,tuiHuoWuYou,orderSign,storeId,realPin,orderMarkDesc,open_id,xid,open_id_buyer,xid_buyer");
  241. rsp = client.execute(request);
  242. String code = rsp.getCode();
  243. logger.info("查询京东订单详情返回信息:code:{}, msg:{}", rsp.getCode(), rsp.getMsg());
  244. if ("0".equals(code)) {
  245. OrderResult orderDetailInfo = rsp.getOrderDetailInfo();
  246. com.jd.open.api.sdk.domain.order.OrderQueryJsfService.response.enGet.OrderSearchInfo orderInfo = orderDetailInfo.getOrderInfo();
  247. return orderInfo;
  248. }
  249. } catch (Exception e) {
  250. e.printStackTrace();
  251. }
  252. return null;
  253. }
  254. /**
  255. * 京东发货
  256. * @param orderId
  257. * @param logiCoprId
  258. * @param logiNo
  259. */
  260. public OperatorResult orderShipment(String orderId, String logiCoprId, String logiNo){
  261. SysConfig sysConfigAll = sysConfigService.getSysConfigAll(27);
  262. JdClient client = new DefaultJdClient(JingdongConfig.JINGDONG_API_URL, sysConfigAll.getConfigParameter(), JingdongConfig.jd_appkey, JingdongConfig.jd_secret);
  263. PopOrderShipmentRequest req = new PopOrderShipmentRequest();
  264. req.setOrderId(Long.parseLong(orderId));
  265. req.setLogiCoprId(logiCoprId);
  266. req.setLogiNo(logiNo);
  267. try {
  268. PopOrderShipmentResponse rsp = client.execute(req);
  269. // PopOrderShipmentResponse rsp = new PopOrderShipmentResponse();
  270. // rsp.setCode("0");
  271. // rsp.setMsg("伪造成功, 生产放开");
  272. // OperatorResult result = new OperatorResult();
  273. // result.setSuccess(true);
  274. // result.setChineseErrCode("伪造成功,生产放开");
  275. // rsp.setSopjosshipmentResult(result);
  276. logger.info("京东订单发货回录:code:{}, msg:{}", rsp.getCode(), rsp.getMsg());
  277. if ("0".equals(rsp.getCode())) {
  278. OperatorResult sopjosshipmentResult = rsp.getSopjosshipmentResult();
  279. return sopjosshipmentResult;
  280. }
  281. } catch (Exception e) {
  282. e.printStackTrace();
  283. //京东发货异常
  284. logger.error("京东发货接口异常:{}", e);
  285. }
  286. return null;
  287. }
  288. public OrderPrivacyModel getMobile(String orderId) {
  289. try {
  290. Thread.sleep(1000);
  291. } catch (InterruptedException e) {
  292. e.printStackTrace();
  293. }
  294. try {
  295. JdClient client = null;
  296. PopOrderGetmobilelistRequest request = null;
  297. PopOrderGetmobilelistResponse rsp = null;
  298. SysConfig sysConfig = sysConfigService.getSysConfigAll(27);
  299. client = new DefaultJdClient(TaobaoConfig.JINGDONG_API_URL, (String) AdminJingdongAuthController.getToken(sysConfig).get("token"), TaobaoConfig.jd_appkey, TaobaoConfig.jd_secret);
  300. request = new PopOrderGetmobilelistRequest();
  301. request.setAppName("爱贝源官方旗航店");
  302. // request.setRegion("https://jd.com");
  303. request.setOrderId(orderId);
  304. request.setExpiration(30);
  305. request.setOrderType("POP");
  306. rsp = client.execute(request);
  307. if ("0".equals(rsp.getCode())) {
  308. ResponseData result = rsp.getResult();
  309. logger.info("result code:{}, message:{}", result.getCode(), result.getMessage());
  310. if ("200".equals(result.getCode() + "")) {
  311. logger.info("查询京东订单收货人电话:data.code: {}, data.message:{}", result.getCode(), result.getMessage());
  312. Map<String, OrderPrivacyModel> data = result.getData();
  313. OrderPrivacyModel orderPrivacyModel = data.get(orderId);
  314. return orderPrivacyModel;
  315. }
  316. }
  317. logger.info("查询京东订单收货人手机号返回错误信息:{}", rsp.getMsg());
  318. } catch (Exception e) {
  319. e.printStackTrace();
  320. }
  321. return null;
  322. }
  323. /**
  324. * 数据还需要完善地址库编码、成本价格
  325. * @param trade
  326. * @return
  327. */
  328. private SalesOrder packageOrder(OrderSearchInfo trade) {
  329. String tid = trade.getOrderId();
  330. SalesOrder order = new SalesOrder();
  331. order.setSalesOrderId(tid);
  332. order.setSalesDealCode(tid);
  333. order.setSalesExOrderId(tid);
  334. order.setSalesDiscountMoney(changeY2F(StringUtils.isEmpty(trade.getSellerDiscount()) ? "0" : trade.getSellerDiscount()));
  335. order.setSalesDeliver(1);
  336. //获取收货人手机号
  337. OrderPrivacyModel orderPrivacyModel = getMobile(trade.getOrderId());
  338. //收货人信息
  339. UserInfo consigneeInfo = trade.getConsigneeInfo();
  340. order.setSalesOpenId(orderPrivacyModel == null ? consigneeInfo.getMobile() : orderPrivacyModel.getConsMobilePhone());
  341. order.setSalesPledgeMoney(0);
  342. order.setSalesRemainDeposit(0);
  343. order.setSalesOrderStatus(1);
  344. order.setSalesStatus(0);
  345. order.setSalesShippingStatus(0);
  346. order.setSalesPayStatus(2);
  347. order.setSalesProcessStatus(1);
  348. order.setSalesIsSend(0);
  349. order.setSalesIsLocked(0);
  350. order.setSalesIsSeparate(0);
  351. order.setSalesIsShip(1);
  352. order.setSalesProcessRefund(0);
  353. order.setSalesSendType(2);
  354. order.setSalesSalesTime(DateTimeUtil.parse(trade.getOrderStartTime()));
  355. // 地址
  356. StringJoiner address = new StringJoiner(" ");
  357. String addrDetail = consigneeInfo.getFullAddress().replaceFirst(consigneeInfo.getProvince(), "").replaceFirst(consigneeInfo.getCity(), "").replaceFirst(consigneeInfo.getCounty(), "");
  358. if (!StringUtils.isEmpty(consigneeInfo.getProvince())) {
  359. address.add(consigneeInfo.getProvince());
  360. }
  361. if (!StringUtils.isEmpty(consigneeInfo.getCity())) {
  362. address.add(consigneeInfo.getCity());
  363. }
  364. if (!StringUtils.isEmpty(consigneeInfo.getCounty())) {
  365. address.add(consigneeInfo.getCounty());
  366. }
  367. if (!StringUtils.isEmpty(addrDetail)) {
  368. address.add(addrDetail);
  369. }
  370. // order.setSalesAddressInfo(consigneeInfo.getFullAddress());
  371. order.setSalesAddressInfo(address.toString());
  372. //京东不返回邮编
  373. order.setSalesAddressPostcode("000000");
  374. order.setSalesAddressName(consigneeInfo.getFullname());
  375. order.setSalesAddressTel(orderPrivacyModel == null ? consigneeInfo.getMobile() : orderPrivacyModel.getConsMobilePhone());
  376. order.setSalesAmount(changeY2F(trade.getOrderTotalPrice()));
  377. order.setSalesPayMoney(changeY2F(trade.getOrderPayment()));
  378. order.setSalesPayType(5);
  379. order.setSalesWaitMoney(0);
  380. order.setSalesShippingFee(changeY2F(trade.getFreightPrice()));
  381. order.setSalesLastMoney(0);
  382. order.setSalesPayTime(StringUtils.isEmpty(trade.getPaymentConfirmTime()) ? null : DateTimeUtil.parse(trade.getPaymentConfirmTime()));
  383. order.setSalesCreateTime(DateTimeUtil.parse(trade.getOrderStartTime()));
  384. order.setSalesAdminRemark(trade.getVenderRemark());
  385. order.setSalesUserRemark(trade.getOrderRemark());
  386. order.setSalesCompanyId(1);
  387. order.setSalesStoreId(40);
  388. order.setSalesType(1);
  389. order.setSalesAddType(4);
  390. order.setSalesAdminId(10135);
  391. order.setSalesReturnStatus(1);
  392. order.setSalesIsSublist(1);
  393. order.setSalesExOrderId(trade.getOrderId());
  394. order.setSalesErrorState(1);
  395. order.setSalesQuality(1);
  396. order.setSalesPostFirm("jd");
  397. order.setSalesOrderItemList(new ArrayList<>(trade.getItemInfoList().size()));
  398. // 订单项
  399. int warranty = 0;
  400. for (ItemInfo tradeOrder : trade.getItemInfoList()) {
  401. SalesOrderItem item = new SalesOrderItem();
  402. //京东返回,无退款状态
  403. item.setItemWarrantyStatus(0);
  404. // if (!"NO_REFUND".equalsIgnoreCase(tradeOrder.getRefundStatus())) {
  405. // warranty = 1;
  406. // item.setItemWarrantyStatus(1);
  407. // }
  408. if (StringUtils.isEmpty(tradeOrder.getOuterSkuId())) {
  409. return null;
  410. }
  411. ProductColor productColor = productColorMapper.getProductColorByBar(tradeOrder.getOuterSkuId());
  412. if(productColor.getProductIsSplit() == 1){
  413. List<ProductCombinatInfo> productCombinatList = productMapper.combinatList(productColor.getColorProductId());
  414. if(productCombinatList == null || productCombinatList.size() < 1){
  415. logger.error("商城订单编号:"+productColor.getColorProductId()+"-订单项中的SKU未查询到组合产品,SKU编号:"+productColor.getColorProductId()+"; ");
  416. break;
  417. }
  418. int totalFeeInt = changeY2F(tradeOrder.getJdPrice());
  419. Integer advProductCombinatFree = totalFeeInt/productCombinatList.size();
  420. for (int m = 0;m<productCombinatList.size();m++) {
  421. ProductCombinatInfo productCombinatInfo = productCombinatList.get(m);
  422. ProductColor sonPc = productColorMapper.getProductColorByBar(productCombinatInfo.getColorBar());
  423. SalesOrderItem salesOrderItem = new SalesOrderItem();
  424. item.setItemWarrantyStatus(0);
  425. // if (!tradeOrder.getRefundStatus().equalsIgnoreCase("NO_REFUND")) {
  426. // warranty = 1;
  427. // salesOrderItem.setItemWarrantyStatus(1);
  428. // }
  429. salesOrderItem.setItemOtherId(trade.getOrderId());
  430. Integer sonNum = Integer.parseInt(tradeOrder.getItemTotal())*productCombinatInfo.getCombinatItemNum();
  431. //计算价格
  432. Integer itemDiscountAllFeeInt = 0;
  433. if((m+1) >= productCombinatList.size()){
  434. itemDiscountAllFeeInt = totalFeeInt;
  435. }else{
  436. itemDiscountAllFeeInt = advProductCombinatFree;
  437. totalFeeInt = totalFeeInt - itemDiscountAllFeeInt;
  438. }
  439. Integer itemDiscountFeeInt = itemDiscountAllFeeInt/sonNum;
  440. //产品市场价
  441. salesOrderItem.setItemProductPrice(itemDiscountFeeInt);
  442. //产品折扣价
  443. salesOrderItem.setItemProductDiscount(itemDiscountFeeInt);
  444. //小结
  445. salesOrderItem.setItemTotal(itemDiscountAllFeeInt);
  446. //产品数量
  447. salesOrderItem.setItemNum(sonNum);
  448. //colorBar
  449. salesOrderItem.setItemColorBar(sonPc.getColorBar());
  450. //产品id
  451. salesOrderItem.setItemProductId(sonPc.getColorProductId());
  452. salesOrderItem.setItemColorId(sonPc.getColorId());
  453. salesOrderItem.setItemProductType(sonPc.getProductType());
  454. salesOrderItem.setItemProductName(sonPc.getProductName());
  455. //产品颜色
  456. salesOrderItem.setItemProductColor(sonPc.getColorName());
  457. //商品简称
  458. salesOrderItem.setProductAbbreviation(sonPc.getProductAbbreviation());
  459. //所属产品简称
  460. salesOrderItem.setColorAbbreviation(sonPc.getColorAbbreviation());
  461. //重量
  462. salesOrderItem.setColorIsWeight(sonPc.getColorIsWeight());
  463. //是否是水机 1:水机 2;其它产品
  464. salesOrderItem.setColorIsMachine(sonPc.getColorIsMachine());
  465. //产品来源 1:产品颜色表,2:配件表
  466. salesOrderItem.setItemIsSource(1);
  467. order.getSalesOrderItemList().add(salesOrderItem);
  468. }
  469. }else{
  470. item.setItemOtherId(trade.getOrderId());
  471. item.setItemNum(Integer.parseInt(tradeOrder.getItemTotal()));
  472. item.setItemColorBar(tradeOrder.getOuterSkuId());
  473. item.setItemProductPrice(changeY2F(tradeOrder.getJdPrice())/item.getItemNum());
  474. item.setItemProductDiscount(changeY2F(tradeOrder.getJdPrice())/item.getItemNum());
  475. item.setItemIsSource(1);
  476. item.setItemReturnNum(0);
  477. //小结
  478. item.setItemTotal(changeY2F(tradeOrder.getJdPrice()));
  479. item.setItemProductId(productColor.getColorProductId());
  480. item.setItemColorId(productColor.getColorId());
  481. item.setItemProductType(productColor.getProductType());
  482. item.setItemProductName(productColor.getProductName());
  483. //产品颜色
  484. item.setItemProductColor(productColor.getColorName());
  485. //商品简称
  486. item.setProductAbbreviation(productColor.getProductAbbreviation());
  487. //所属产品简称
  488. item.setColorAbbreviation(productColor.getColorAbbreviation());
  489. //重量
  490. item.setColorIsWeight(productColor.getColorIsWeight());
  491. //是否是水机 1:水机 2;其它产品
  492. item.setColorIsMachine(productColor.getColorIsMachine());
  493. //产品来源 1:产品颜色表,2:配件表
  494. item.setItemIsSource(1);
  495. // 填充数据
  496. order.getSalesOrderItemList().add(item);
  497. }
  498. }
  499. order.setSalesWarrantyStatus(warranty);
  500. logger.info("拉取订单组长的数据:{}", order.toString());
  501. return order;
  502. }
  503. private static int changeY2F(String price) {
  504. double p = Double.parseDouble(price);
  505. return (int)(p * 100);
  506. }
  507. private String findZip(String receiverState, String receiverCity, String receiverDistrict, String address) {
  508. logger.info("地址数据:{}, {}, {}, {}", receiverState, receiverCity, receiverDistrict, address);
  509. //获取省份
  510. List<Province> provinceList = addressService.listProvince(new Province());
  511. // 没有邮编,从系统开始查找
  512. if(provinceList != null && provinceList.size() >0 ){
  513. int provinceIdNum = 0;
  514. int provinceId = 0;
  515. for (Province proiv : provinceList) {
  516. int proNum = 0;
  517. String newPro = proiv.getProvince().replaceAll("省|自治区|壮族自治区|特别行政区|维吾尔自治区","");
  518. if(newPro.contains(receiverState)){
  519. proNum++;
  520. }
  521. if(receiverState.contains(newPro)){
  522. proNum++;
  523. }
  524. if(proNum > provinceIdNum){
  525. provinceIdNum = proNum;
  526. provinceId = proiv.getProvinceId();
  527. }
  528. }
  529. receiverCity = receiverCity.replaceAll("市|州|地区|自治区|特别行政区","");
  530. int cityNum = 0;
  531. Integer cityId = null;
  532. City city = new City();
  533. city.setProvinceId(provinceId);
  534. List<City> cityList = addressService.listCity(city);
  535. for (City ci:cityList) {
  536. int ciNum = 0;
  537. String newCi = ci.getCity().replaceAll("市|州|地区|自治区|特别行政区","");
  538. if(receiverCity.contains(newCi)){
  539. ciNum ++;
  540. }
  541. if(newCi.contains(receiverCity)){
  542. ciNum ++;
  543. }
  544. if(cityNum < ciNum){
  545. cityNum = ciNum;
  546. cityId = ci.getCityId();
  547. }
  548. }
  549. if(cityId == null){
  550. throw new RuntimeException("未查询到该县区:"+address);
  551. }
  552. int districtNum = 0;
  553. String postcode = null;
  554. District district = new District();
  555. district.setCityId(cityId);
  556. List<District> districtList = addressService.listDistrict(district);
  557. for (District dis:districtList) {
  558. int disNum = 0;
  559. String newDIs = dis.getDistrict();
  560. String newLastNewArea = newDIs.substring(newDIs.length()-1,newDIs.length());
  561. newLastNewArea = newLastNewArea.replaceAll("县|区|镇|乡|市|州|洲","");
  562. newDIs = newDIs.substring(0,newDIs.length()-1);
  563. newDIs += newLastNewArea;
  564. if(newDIs.contains(receiverDistrict)){
  565. disNum++;
  566. }
  567. if(receiverDistrict.contains(newDIs)){
  568. disNum++;
  569. }
  570. if(districtNum < disNum){
  571. districtNum = disNum;
  572. postcode = dis.getPostcode();
  573. }
  574. }
  575. if(postcode != null){
  576. return postcode;
  577. }else{
  578. throw new RuntimeException("未查询到该县区,原地址:"+address);
  579. }
  580. }else{
  581. throw new RuntimeException("未查询到该省份,原地址:"+address);
  582. }
  583. }
  584. }