JingdongTask.java 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552
  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. import static com.iamberry.rst.controllers.mq.TaobaoConfig.DB_JD_PULL_ORDER_LIMIT_TIME;
  52. import static com.iamberry.rst.controllers.mq.TaobaoConfig.DB_JD_TOKEN_ID;
  53. /**
  54. * https://jos.jd.com/apilistnewdetail?apiGroupId=55&apiId=14263&apiName=null
  55. * @author root
  56. */
  57. @Component
  58. @Lazy(false)
  59. public class JingdongTask {
  60. private static Logger logger = LoggerFactory.getLogger(JingdongTask.class);
  61. /** 是否允许淘宝抓取订单,true表示允许,false表示不允许 */
  62. private static boolean isDebug = false;
  63. @Autowired
  64. private GenerateKeyUtil generateKeyUtil ;
  65. @Autowired
  66. private AddressService addressService;
  67. @Autowired
  68. private ProductColorMapper productColorMapper;
  69. @Autowired
  70. private ProductMapper productMapper;
  71. @Autowired
  72. private SalesOrderService salesOrderService;
  73. @Autowired
  74. private OrderSyncLogMapper orderSyncLogMapper;
  75. @Autowired
  76. private SysConfigService sysConfigService;
  77. static {
  78. String debug = System.getProperty("isJingdong");
  79. System.out.println("读取到的配置数据:" + debug);
  80. if ("true".equalsIgnoreCase(debug)) {
  81. isDebug = true;
  82. }
  83. }
  84. //每30分钟执行一次
  85. // @PostConstruct
  86. @Scheduled(fixedDelay = 1000 * 60 * 10, initialDelay = 3000)
  87. public void syncOrder() {
  88. if (!isDebug) {
  89. logger.info("【京东订单】debug模式,无法运行正式任务");
  90. return;
  91. }
  92. logger.info("【京东订单】开始抓取数据......");
  93. // 组装请求数据
  94. SysConfig sysConfigTime = sysConfigService.getSysConfigAll(DB_JD_PULL_ORDER_LIMIT_TIME);
  95. String startTime = sysConfigTime.getConfigParameter();
  96. if (StringUtils.isEmpty(startTime)) {
  97. startTime = DateTimeUtil.format(DateTimeUtil.addDay(-20), "yyyy-MM-dd HH:mm:ss");
  98. sysConfigTime.setConfigParameter(startTime);
  99. sysConfigService.updateSysConfig(sysConfigTime);
  100. }
  101. // 结束时间
  102. String endTime = DateTimeUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss");
  103. logger.info("开始时间:{}, 结束时间:{}", startTime, endTime);
  104. // 批次号
  105. String batchIdST = generateKeyUtil.getSalesBatchIdJD();
  106. // 循环抓取
  107. boolean hasNext = true;
  108. int pageNo = 1;
  109. try {
  110. int total = 0;
  111. // 开始循环
  112. while (hasNext) {
  113. logger.info("【京东订单】抓取第{}页的数据......", pageNo);
  114. // 抓取京东数据
  115. JdClient client = null;
  116. PopOrderEnSearchRequest orderSearchRequest = null;
  117. PopOrderEnSearchResponse rsp = null;
  118. try {
  119. SysConfig sysConfig = sysConfigService.getSysConfigAll(DB_JD_TOKEN_ID);
  120. client = new DefaultJdClient(TaobaoConfig.JINGDONG_API_URL, sysConfig.getConfigParameter(), TaobaoConfig.jd_appkey, TaobaoConfig.jd_secret);
  121. orderSearchRequest = new PopOrderEnSearchRequest();
  122. orderSearchRequest.setStartDate(startTime);
  123. orderSearchRequest.setEndDate(endTime);
  124. orderSearchRequest.setOrderState("WAIT_SELLER_STOCK_OUT,WAIT_SELLER_DELIVERY,WAIT_GOODS_RECEIVE_CONFIRM");//待出库和境外待发货, 一般仅存在前者
  125. orderSearchRequest.setOptionalFields(initOrderOptionalFields());
  126. orderSearchRequest.setPage("" + pageNo);
  127. orderSearchRequest.setPageSize("" + 40L);
  128. orderSearchRequest.setDateType(0);//按照最后修改时间查询
  129. rsp = client.execute(orderSearchRequest);
  130. } catch (Exception e) {
  131. logger.error("请求京东服务器异常:{}", e);
  132. }
  133. if (rsp == null) {
  134. logger.error("【京东订单】请求京东服务器失败!");
  135. return;
  136. }
  137. // 判断数据
  138. String code = rsp.getCode();
  139. if (!"0".equals(rsp.getCode())) {
  140. logger.info("【京东订单】请求京东服务器,返回错误码:{}, 错误信息:{}", code, rsp.getMsg());
  141. break;
  142. }
  143. logger.info("【京东订单】请求京东服务器,返回信息:{}", rsp.getMsg());
  144. OrderListResult orderResult = rsp.getSearchorderinfoResult();
  145. if (orderResult == null) {
  146. break;
  147. }
  148. List<OrderSearchInfo> orderInfoList = orderResult.getOrderInfoList();
  149. if (orderInfoList == null || orderInfoList.size() == 0) {
  150. logger.info("【京东订单】数据请求完毕, 数量为0");
  151. break;
  152. }
  153. for (OrderSearchInfo orderSearchInfo : orderInfoList) {
  154. //获取的详情数据和列表数据没什么区别, 直接使用列表数据即可
  155. // Trade details = getOrderDetails(orderSearchInfo.getOrderId());
  156. // if (details == null) {
  157. // logger.error("【京东订单】{}获取订单详细数据失败", trade.getTid());
  158. // return;
  159. // }
  160. // 组装数据
  161. SalesOrder salesOrder = packageOrder(orderSearchInfo);
  162. if (salesOrder != null) {
  163. salesOrder.setSalesBatchId(batchIdST);
  164. salesOrderService.addOrder(salesOrder, "创建订单(京东拉取订单)");
  165. total ++;
  166. }
  167. }
  168. // 迭代数据
  169. if (rsp.getSearchorderinfoResult().getOrderTotal() <= pageNo * 40) {
  170. hasNext = false;
  171. } else {
  172. hasNext = true;
  173. pageNo ++;
  174. }
  175. }
  176. OrderSyncLog orderSyncLog = new OrderSyncLog();
  177. orderSyncLog.setSyncPlatId(1);
  178. orderSyncLog.setSyncLogType(1);
  179. orderSyncLog.setSyncLogMode(1);
  180. orderSyncLog.setSyncLogRecentNum(total); //同步总数量
  181. orderSyncLog.setSyncLogErrorNum(0); //同步失败数量
  182. orderSyncLog.setSyncLogMsg("拉取京东订单"); //备注
  183. orderSyncLogMapper.save(orderSyncLog);
  184. sysConfigTime.setConfigParameter(endTime);
  185. sysConfigService.updateSysConfig(sysConfigTime);
  186. // RedisUtils.put("JINGDONG_SYNC_TIME", endTime);
  187. } catch (Exception e) {
  188. logger.error("", e);
  189. OrderSyncLog orderSyncLog = new OrderSyncLog();
  190. orderSyncLog.setSyncPlatId(1);
  191. orderSyncLog.setSyncLogType(1);
  192. orderSyncLog.setSyncLogMode(1);
  193. orderSyncLog.setSyncLogRecentNum(1); //同步总数量
  194. orderSyncLog.setSyncLogErrorNum(1); //同步失败数量
  195. orderSyncLog.setSyncLogMsg("拉取京东订单"); //备注
  196. orderSyncLog.setSyncLogErrorMsg(e.getMessage());
  197. orderSyncLogMapper.save(orderSyncLog);
  198. }
  199. }
  200. public com.jd.open.api.sdk.domain.order.OrderQueryJsfService.response.enGet.OrderSearchInfo getOrderDetails(Long tid) {
  201. try {
  202. Thread.sleep(1000);
  203. } catch (InterruptedException e) {
  204. e.printStackTrace();
  205. }
  206. try {
  207. SysConfig sysConfig = sysConfigService.getSysConfigAll(DB_JD_TOKEN_ID);
  208. JdClient client = new DefaultJdClient(TaobaoConfig.JINGDONG_API_URL, sysConfig.getConfigParameter(), TaobaoConfig.jd_appkey, TaobaoConfig.jd_secret);
  209. PopOrderEnGetRequest request = new PopOrderEnGetRequest();
  210. request.setOrderId(tid);
  211. request.setOptionalFields(initOrderOptionalFields());
  212. PopOrderEnGetResponse rsp = client.execute(request);
  213. String code = rsp.getCode();
  214. logger.info("查询京东订单详情返回信息:code:{}, msg:{}", rsp.getCode(), rsp.getMsg());
  215. if ("0".equals(code)) {
  216. OrderResult orderDetailInfo = rsp.getOrderDetailInfo();
  217. com.jd.open.api.sdk.domain.order.OrderQueryJsfService.response.enGet.OrderSearchInfo orderInfo = orderDetailInfo.getOrderInfo();
  218. return orderInfo;
  219. }
  220. } catch (Exception e) {
  221. e.printStackTrace();
  222. }
  223. return null;
  224. }
  225. public String initOrderOptionalFields() {
  226. return "orderId,venderId,orderType,payType,orderTotalPrice,orderSellerPrice,orderPayment,freightPrice,sellerDiscount,orderState,orderStateRemark,deliveryType," +
  227. "invoiceEasyInfo," +
  228. "invoiceCode,invoiceInfo,invoiceCode,orderRemark,orderStartTime,orderEndTime," +
  229. "consigneeInfo," +
  230. "itemInfoList," +
  231. "couponDetailList," +
  232. "venderRemark,balanceUsed,pin,returnOrder,paymentConfirmTime,waybill,logisticsId," +
  233. "vatInfo," +
  234. "modified,directParentOrderId,parentOrderId,customs,customsModel,orderSource,storeOrder,idSopShipmenttype,scDT,serviceFee," +
  235. "pauseBizInfo," +
  236. "taxFee,tuiHuoWuYou,orderSign,storeId,realPin,orderMarkDesc,open_id,xid,open_id_buyer,xid_buyer";
  237. }
  238. /**
  239. * 京东发货
  240. * @param orderId
  241. * @param logiCoprId
  242. * @param logiNo
  243. */
  244. public OperatorResult orderShipment(String orderId, String logiCoprId, String logiNo){
  245. SysConfig sysConfig = sysConfigService.getSysConfigAll(DB_JD_TOKEN_ID);
  246. JdClient client = new DefaultJdClient(JingdongConfig.JINGDONG_API_URL, sysConfig.getConfigParameter(), JingdongConfig.jd_appkey, JingdongConfig.jd_secret);
  247. PopOrderShipmentRequest req = new PopOrderShipmentRequest();
  248. req.setOrderId(Long.parseLong(orderId));
  249. req.setLogiCoprId(logiCoprId);
  250. req.setLogiNo(logiNo);
  251. try {
  252. PopOrderShipmentResponse rsp = client.execute(req);
  253. logger.info("京东订单发货回录:订单:{}, code:{}, msg:{}", orderId, rsp.getCode(), rsp.getMsg());
  254. if ("0".equals(rsp.getCode())) {
  255. OperatorResult sopjosshipmentResult = rsp.getSopjosshipmentResult();
  256. return sopjosshipmentResult;
  257. }
  258. } catch (Exception e) {
  259. e.printStackTrace();
  260. //京东发货异常
  261. logger.error("京东发货接口异常:{}", e);
  262. }
  263. return null;
  264. }
  265. public OrderPrivacyModel getMobile(String orderId) {
  266. try {
  267. Thread.sleep(1000);
  268. } catch (InterruptedException e) {
  269. e.printStackTrace();
  270. }
  271. try {
  272. SysConfig sysConfig = sysConfigService.getSysConfigAll(DB_JD_TOKEN_ID);
  273. PopOrderGetmobilelistResponse rsp = null;
  274. JdClient client = new DefaultJdClient(TaobaoConfig.JINGDONG_API_URL, sysConfig.getConfigParameter(), TaobaoConfig.jd_appkey, TaobaoConfig.jd_secret);
  275. PopOrderGetmobilelistRequest request = new PopOrderGetmobilelistRequest();
  276. request.setAppName("爱贝源官方旗航店");
  277. // request.setRegion("https://jd.com");
  278. request.setOrderId(orderId);
  279. request.setExpiration(30);
  280. request.setOrderType("POP");
  281. rsp = client.execute(request);
  282. if ("0".equals(rsp.getCode())) {
  283. ResponseData result = rsp.getResult();
  284. logger.info("result code:{}, message:{}", result.getCode(), result.getMessage());
  285. if ("200".equals(result.getCode() + "")) {
  286. logger.info("查询京东订单收货人电话:data.code: {}, data.message:{}", result.getCode(), result.getMessage());
  287. Map<String, OrderPrivacyModel> data = result.getData();
  288. OrderPrivacyModel orderPrivacyModel = data.get(orderId);
  289. return orderPrivacyModel;
  290. }
  291. }
  292. logger.info("查询京东订单收货人手机号返回错误信息:{}", rsp.getMsg());
  293. } catch (Exception e) {
  294. e.printStackTrace();
  295. }
  296. return null;
  297. }
  298. /**
  299. * 数据还需要完善地址库编码、成本价格
  300. * @param trade
  301. * @return
  302. */
  303. private SalesOrder packageOrder(OrderSearchInfo trade) {
  304. logger.info("packageOrder orderState:" + trade.getOrderState());
  305. // 处理京东仓自发货场景
  306. boolean waitGoodsReceiveConfirm = "WAIT_GOODS_RECEIVE_CONFIRM".equals(trade.getOrderState()) || "等待确认收货".equals(trade.getOrderStateRemark());
  307. String tid = trade.getOrderId();
  308. SalesOrder order = new SalesOrder();
  309. order.setSalesOrderId(tid);
  310. order.setSalesDealCode(tid);
  311. order.setSalesExOrderId(tid);
  312. order.setSalesDiscountMoney(changeY2F(StringUtils.isEmpty(trade.getSellerDiscount()) ? "0" : trade.getSellerDiscount()));
  313. order.setSalesDeliver(waitGoodsReceiveConfirm ? 2 : 1);
  314. //获取收货人手机号
  315. OrderPrivacyModel orderPrivacyModel = getMobile(trade.getOrderId());
  316. //收货人信息
  317. UserInfo consigneeInfo = trade.getConsigneeInfo();
  318. order.setSalesOpenId(orderPrivacyModel == null ? consigneeInfo.getMobile() : orderPrivacyModel.getConsMobilePhone());
  319. order.setSalesPledgeMoney(0);
  320. order.setSalesRemainDeposit(0);
  321. order.setSalesOrderStatus(1);
  322. order.setSalesStatus(waitGoodsReceiveConfirm ? 4 : 0);
  323. order.setSalesShippingStatus(waitGoodsReceiveConfirm ? 1 : 0);
  324. order.setSalesPayStatus(2);
  325. order.setSalesProcessStatus(1);
  326. order.setSalesIsSend(waitGoodsReceiveConfirm ? 1 : 0);
  327. order.setSalesIsLocked(0);
  328. order.setSalesIsSeparate(0);
  329. order.setSalesIsShip(1);
  330. order.setSalesProcessRefund(0);
  331. order.setSalesSendType(waitGoodsReceiveConfirm ? 3 : 2);
  332. order.setSalesSalesTime(DateTimeUtil.parse(trade.getOrderStartTime()));
  333. // 地址
  334. StringJoiner address = new StringJoiner(" ");
  335. String addrDetail = consigneeInfo.getFullAddress().replaceFirst(consigneeInfo.getProvince(), "").replaceFirst(consigneeInfo.getCity(), "").replaceFirst(consigneeInfo.getCounty(), "");
  336. if (!StringUtils.isEmpty(consigneeInfo.getProvince())) {
  337. address.add(consigneeInfo.getProvince());
  338. }
  339. if (!StringUtils.isEmpty(consigneeInfo.getCity())) {
  340. address.add(consigneeInfo.getCity());
  341. }
  342. if (!StringUtils.isEmpty(consigneeInfo.getCounty())) {
  343. address.add(consigneeInfo.getCounty());
  344. }
  345. if (!StringUtils.isEmpty(addrDetail)) {
  346. address.add(addrDetail);
  347. }
  348. order.setSalesAddressInfo(address.toString());
  349. //京东不返回邮编
  350. order.setSalesAddressPostcode("000000");
  351. order.setSalesAddressName(consigneeInfo.getFullname());
  352. order.setSalesAddressTel(orderPrivacyModel == null ? consigneeInfo.getMobile() : orderPrivacyModel.getConsMobilePhone());
  353. order.setSalesAmount(changeY2F(trade.getOrderTotalPrice()));
  354. order.setSalesPayMoney(changeY2F(trade.getOrderPayment()));
  355. order.setSalesPayType(getSalesPayType(trade.getPayType()));
  356. //京东没有返回流水号,默认用订单号
  357. order.setSalesPaymentNo(tid);
  358. order.setSalesWaitMoney(0);
  359. order.setSalesShippingFee(changeY2F(trade.getFreightPrice()));
  360. order.setSalesLastMoney(0);
  361. order.setSalesPayTime(StringUtils.isEmpty(trade.getPaymentConfirmTime()) ? null : DateTimeUtil.parse(trade.getPaymentConfirmTime()));
  362. order.setSalesCreateTime(DateTimeUtil.parse(trade.getOrderStartTime()));
  363. order.setSalesAdminRemark(trade.getVenderRemark());
  364. order.setSalesUserRemark(trade.getOrderRemark());
  365. order.setSalesCompanyId(1);
  366. order.setSalesStoreId(40);
  367. order.setSalesType(1);
  368. order.setSalesAddType(4);
  369. order.setSalesAdminId(10135);
  370. order.setSalesReturnStatus(1);
  371. order.setSalesIsSublist(1);
  372. order.setSalesExOrderId(trade.getOrderId());
  373. order.setSalesErrorState(1);
  374. order.setSalesQuality(1);
  375. order.setSalesPostFirm("jd");
  376. // 保存物流单号
  377. if (waitGoodsReceiveConfirm) {
  378. order.setSalesPostNum(trade.getWaybill());
  379. }
  380. order.setSalesOrderItemList(new ArrayList<>(trade.getItemInfoList().size()));
  381. // 订单项
  382. int warranty = 0;
  383. for (ItemInfo tradeOrder : trade.getItemInfoList()) {
  384. SalesOrderItem item = new SalesOrderItem();
  385. //京东返回,无退款状态
  386. item.setItemWarrantyStatus(0);
  387. // if (!"NO_REFUND".equalsIgnoreCase(tradeOrder.getRefundStatus())) {
  388. // warranty = 1;
  389. // item.setItemWarrantyStatus(1);
  390. // }
  391. if (StringUtils.isEmpty(tradeOrder.getOuterSkuId())) {
  392. return null;
  393. }
  394. ProductColor productColor = productColorMapper.getProductColorByBar(tradeOrder.getOuterSkuId());
  395. if(productColor.getProductIsSplit() == 1){
  396. List<ProductCombinatInfo> productCombinatList = productMapper.combinatList(productColor.getColorProductId());
  397. if(productCombinatList == null || productCombinatList.size() < 1){
  398. logger.error("商城订单编号:"+productColor.getColorProductId()+"-订单项中的SKU未查询到组合产品,SKU编号:"+productColor.getColorProductId()+"; ");
  399. break;
  400. }
  401. int totalFeeInt = changeY2F(tradeOrder.getJdPrice());
  402. Integer advProductCombinatFree = totalFeeInt/productCombinatList.size();
  403. for (int m = 0;m<productCombinatList.size();m++) {
  404. ProductCombinatInfo productCombinatInfo = productCombinatList.get(m);
  405. ProductColor sonPc = productColorMapper.getProductColorByBar(productCombinatInfo.getColorBar());
  406. SalesOrderItem salesOrderItem = new SalesOrderItem();
  407. item.setItemWarrantyStatus(0);
  408. // if (!tradeOrder.getRefundStatus().equalsIgnoreCase("NO_REFUND")) {
  409. // warranty = 1;
  410. // salesOrderItem.setItemWarrantyStatus(1);
  411. // }
  412. salesOrderItem.setItemOtherId(trade.getOrderId());
  413. Integer sonNum = Integer.parseInt(tradeOrder.getItemTotal())*productCombinatInfo.getCombinatItemNum();
  414. //计算价格
  415. Integer itemDiscountAllFeeInt = 0;
  416. if((m+1) >= productCombinatList.size()){
  417. itemDiscountAllFeeInt = totalFeeInt;
  418. }else{
  419. itemDiscountAllFeeInt = advProductCombinatFree;
  420. totalFeeInt = totalFeeInt - itemDiscountAllFeeInt;
  421. }
  422. Integer itemDiscountFeeInt = itemDiscountAllFeeInt/sonNum;
  423. //产品市场价
  424. salesOrderItem.setItemProductPrice(itemDiscountFeeInt);
  425. //产品折扣价
  426. salesOrderItem.setItemProductDiscount(itemDiscountFeeInt);
  427. //小结
  428. salesOrderItem.setItemTotal(itemDiscountAllFeeInt);
  429. //产品数量
  430. salesOrderItem.setItemNum(sonNum);
  431. //colorBar
  432. salesOrderItem.setItemColorBar(sonPc.getColorBar());
  433. //产品id
  434. salesOrderItem.setItemProductId(sonPc.getColorProductId());
  435. salesOrderItem.setItemColorId(sonPc.getColorId());
  436. salesOrderItem.setItemProductType(sonPc.getProductType());
  437. salesOrderItem.setItemProductName(sonPc.getProductName());
  438. //产品颜色
  439. salesOrderItem.setItemProductColor(sonPc.getColorName());
  440. //商品简称
  441. salesOrderItem.setProductAbbreviation(sonPc.getProductAbbreviation());
  442. //所属产品简称
  443. salesOrderItem.setColorAbbreviation(sonPc.getColorAbbreviation());
  444. //重量
  445. salesOrderItem.setColorIsWeight(sonPc.getColorIsWeight());
  446. //是否是水机 1:水机 2;其它产品
  447. salesOrderItem.setColorIsMachine(sonPc.getColorIsMachine());
  448. //产品来源 1:产品颜色表,2:配件表
  449. salesOrderItem.setItemIsSource(1);
  450. order.getSalesOrderItemList().add(salesOrderItem);
  451. }
  452. }else{
  453. item.setItemOtherId(trade.getOrderId());
  454. item.setItemNum(Integer.parseInt(tradeOrder.getItemTotal()));
  455. item.setItemColorBar(tradeOrder.getOuterSkuId());
  456. item.setItemProductPrice(changeY2F(tradeOrder.getJdPrice())/item.getItemNum());
  457. item.setItemProductDiscount(changeY2F(tradeOrder.getJdPrice())/item.getItemNum());
  458. item.setItemIsSource(1);
  459. item.setItemReturnNum(0);
  460. //小结
  461. item.setItemTotal(changeY2F(tradeOrder.getJdPrice()));
  462. item.setItemProductId(productColor.getColorProductId());
  463. item.setItemColorId(productColor.getColorId());
  464. item.setItemProductType(productColor.getProductType());
  465. item.setItemProductName(productColor.getProductName());
  466. //产品颜色
  467. item.setItemProductColor(productColor.getColorName());
  468. //商品简称
  469. item.setProductAbbreviation(productColor.getProductAbbreviation());
  470. //所属产品简称
  471. item.setColorAbbreviation(productColor.getColorAbbreviation());
  472. //重量
  473. item.setColorIsWeight(productColor.getColorIsWeight());
  474. //是否是水机 1:水机 2;其它产品
  475. item.setColorIsMachine(productColor.getColorIsMachine());
  476. //产品来源 1:产品颜色表,2:配件表
  477. item.setItemIsSource(1);
  478. // 填充数据
  479. order.getSalesOrderItemList().add(item);
  480. }
  481. }
  482. order.setSalesWarrantyStatus(warranty);
  483. logger.info("拉取订单组长的数据:{}", order.toString());
  484. return order;
  485. }
  486. /**
  487. * 映射到数据库中
  488. *
  489. * @param payType 京东出参: 1货到付款, 2邮局汇款, 3自提, 4在线支付, 5公司转账, 6银行卡转账
  490. * @return {@link SalesOrder} salesPayType 付款方式
  491. */
  492. private Integer getSalesPayType(String payType) {
  493. Map<String, Integer> mapper = new HashMap<>(6);
  494. mapper.put("1-货到付款", 10);
  495. mapper.put("2-邮局汇款", 30);
  496. mapper.put("3-自提", 31);
  497. mapper.put("4-在线支付", 32);
  498. mapper.put("5-公司转账", 33);
  499. mapper.put("6-银行卡转账", 12);
  500. Integer value = mapper.get(payType);
  501. // 如果没有匹配上的,默认支付宝
  502. if (value == null) {
  503. return 5;
  504. }
  505. return value;
  506. }
  507. private static int changeY2F(String price) {
  508. double p = Double.parseDouble(price);
  509. return (int)(p * 100);
  510. }
  511. }