OrderContext.java 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. package com.sd.wln.context;
  2. import cn.hutool.core.date.DateUtil;
  3. import cn.hutool.core.util.ObjectUtil;
  4. import cn.hutool.core.util.StrUtil;
  5. import cn.hutool.extra.spring.SpringUtil;
  6. import com.alibaba.fastjson2.JSONObject;
  7. import com.fjhx.tenant.entity.dict.po.DictCommonData;
  8. import com.fjhx.tenant.service.dict.DictCommonDataService;
  9. import com.ruoyi.framework.mybatis.holder.LogicHolder;
  10. import com.sd.business.entity.department.po.Department;
  11. import com.sd.business.entity.order.po.OrderInfo;
  12. import com.sd.business.entity.order.po.OrderPackageBom;
  13. import com.sd.business.entity.order.po.OrderSku;
  14. import com.sd.business.entity.order.po.OrderSkuBom;
  15. import com.sd.business.entity.sku.po.SkuSpec;
  16. import com.sd.business.service.department.DepartmentService;
  17. import com.sd.business.service.order.OrderService;
  18. import com.sd.business.service.sku.SkuSpecService;
  19. import com.sd.wln.util.WlnUtil;
  20. import lombok.Getter;
  21. import lombok.extern.slf4j.Slf4j;
  22. import java.util.*;
  23. import java.util.stream.Collectors;
  24. @Slf4j
  25. public class OrderContext {
  26. private final OrderService orderService = SpringUtil.getBean(OrderService.class);
  27. private final DictCommonDataService dictCommonDataService = SpringUtil.getBean(DictCommonDataService.class);
  28. private final DepartmentService departmentService = SpringUtil.getBean(DepartmentService.class);
  29. private final SkuSpecService skuSpecService = SpringUtil.getBean(SkuSpecService.class);
  30. /**
  31. * 当前时间
  32. */
  33. @Getter
  34. private final Date endDate;
  35. /**
  36. * 万里牛订单列表
  37. */
  38. @Getter
  39. private final List<JSONObject> wlnOrderList;
  40. /**
  41. * 保存订单列表
  42. */
  43. @Getter
  44. private final List<OrderInfo> saveOrderList = new ArrayList<>();
  45. /**
  46. * 更新订单列表
  47. */
  48. @Getter
  49. private final List<OrderInfo> updateOrderList = new ArrayList<>();
  50. /**
  51. * 保存订单明细列表
  52. */
  53. @Getter
  54. private final List<OrderSku> saveOrderSkuList = new ArrayList<>();
  55. /**
  56. * 保存订单包材
  57. */
  58. @Getter
  59. private final List<OrderSkuBom> saveOrderSkuBomList = new ArrayList<>();
  60. /**
  61. * 保存订单包装
  62. */
  63. @Getter
  64. private final List<OrderPackageBom> orderPackageBomList = new ArrayList<>();
  65. /**
  66. * 近3天已存在数据库中的订单
  67. * key:万里牛订单uid
  68. * value:订单实体
  69. */
  70. private Map<String, OrderInfo> orderMap;
  71. /**
  72. * 查询事业部
  73. * key:仓库编码
  74. * value:仓库实体
  75. */
  76. private Map<String, Department> departmentMap;
  77. /**
  78. * sku规格map
  79. * key:万里牛sku规格id
  80. * value:sku规格实体
  81. */
  82. private Map<String, SkuSpec> skuSpecMap;
  83. public OrderContext() {
  84. this.endDate = new Date();
  85. this.wlnOrderList = selectWlnOrderList();
  86. }
  87. /**
  88. * 查询1天内万里牛订单
  89. */
  90. private List<JSONObject> selectWlnOrderList() {
  91. List<DictCommonData> warehouseCodeList = dictCommonDataService.list(q -> q.eq(DictCommonData::getDictCode, "warehouse_code"));
  92. if (warehouseCodeList.size() == 0) {
  93. log.error("订单同步失败,仓库字典:warehouse_code 为空");
  94. return null;
  95. }
  96. List<JSONObject> list = new ArrayList<>();
  97. long endTime = endDate.getTime();
  98. long startTime = endTime - 1000 * 60 * 60 * 24;
  99. for (DictCommonData dictCommonData : warehouseCodeList) {
  100. String warehouseCode = dictCommonData.getDictValue();
  101. int page = 1;
  102. int size;
  103. do {
  104. try {
  105. List<JSONObject> itemList = WlnUtil.getOrderList(page, 200, startTime, endTime, warehouseCode);
  106. page++;
  107. size = itemList.size();
  108. list.addAll(itemList);
  109. } catch (Exception e) {
  110. log.error("订单同步失败", e);
  111. return null;
  112. }
  113. } while (size >= 200);
  114. }
  115. return list;
  116. }
  117. /**
  118. * 查询近3天已存在数据库中的订单
  119. */
  120. public Map<String, OrderInfo> getOrderMap() {
  121. if (this.orderMap == null) {
  122. LogicHolder.setLogicHolder(new LogicHolder());
  123. this.orderMap = orderService.mapKEntity(
  124. OrderInfo::getWlnUid,
  125. q -> q.between(OrderInfo::getWlnApproveTime, DateUtil.offsetDay(endDate, -3), endDate));
  126. LogicHolder.clear();
  127. }
  128. return this.orderMap;
  129. }
  130. /**
  131. * 查询事业部
  132. */
  133. public Map<String, Department> getDepartmentMap() {
  134. if (this.departmentMap == null) {
  135. this.departmentMap = new HashMap<>();
  136. for (Department department : departmentService.list()) {
  137. String warehouseCode = department.getWlnWarehouseCode();
  138. if (StrUtil.isBlank(warehouseCode)) {
  139. continue;
  140. }
  141. for (String item : warehouseCode.split(",")) {
  142. this.departmentMap.put(item, department);
  143. }
  144. }
  145. }
  146. return this.departmentMap;
  147. }
  148. /**
  149. * 获取sku规格
  150. */
  151. public Map<String, SkuSpec> getSkuSpecMap() {
  152. if (this.skuSpecMap == null) {
  153. List<String> wlnUidList = wlnOrderList.stream()
  154. .flatMap(item -> item.getJSONArray("orders").toJavaList(JSONObject.class).stream())
  155. .map(item -> item.getString("sys_spec_uid"))
  156. .filter(ObjectUtil::isNotNull)
  157. .distinct()
  158. .collect(Collectors.toList());
  159. this.skuSpecMap = skuSpecService.mapKEntity(SkuSpec::getWlnUid, q -> q.in(SkuSpec::getWlnUid, wlnUidList));
  160. }
  161. return this.skuSpecMap;
  162. }
  163. }