|
@@ -1,14 +1,230 @@
|
|
|
package com.sd.wln.service.impl;
|
|
|
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
+import com.alibaba.fastjson2.JSONObject;
|
|
|
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
|
+import com.fjhx.tenant.entity.dict.po.DictCommonData;
|
|
|
+import com.fjhx.tenant.service.dict.DictCommonDataService;
|
|
|
+import com.sd.business.entity.department.po.Department;
|
|
|
+import com.sd.business.entity.order.enums.OrderStatusEnum;
|
|
|
+import com.sd.business.entity.order.po.Order;
|
|
|
+import com.sd.business.entity.order.po.OrderSku;
|
|
|
+import com.sd.business.entity.sku.po.SkuSpec;
|
|
|
+import com.sd.business.service.department.DepartmentService;
|
|
|
+import com.sd.business.service.order.OrderService;
|
|
|
+import com.sd.business.service.order.OrderSkuService;
|
|
|
+import com.sd.business.service.sku.SkuSpecService;
|
|
|
import com.sd.wln.service.WlnOrderService;
|
|
|
+import com.sd.wln.util.WlnUtil;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.util.*;
|
|
|
+import java.util.function.Function;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+@Slf4j
|
|
|
@Service
|
|
|
public class WlnOrderServiceImpl implements WlnOrderService {
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private DictCommonDataService dictCommonDataService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private DepartmentService departmentService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private OrderService orderService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private OrderSkuService orderSkuService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SkuSpecService skuSpecService;
|
|
|
+
|
|
|
+ @DSTransactional
|
|
|
@Override
|
|
|
- public void syncOrder() {
|
|
|
+ public boolean syncOrder() {
|
|
|
+ Date endDate = new Date();
|
|
|
+
|
|
|
+ List<JSONObject> wlnOrderList = getWlnOrderList(endDate);
|
|
|
+ if (wlnOrderList == null) {
|
|
|
+ log.error("订单同步失败");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ Map<String, Department> departmentMap = getDepartmentMap();
|
|
|
+
|
|
|
+ List<Order> saveOrderList = new ArrayList<>();
|
|
|
+ List<OrderSku> saveOrderSkuList = new ArrayList<>();
|
|
|
+
|
|
|
+ List<Order> updateOrderList = new ArrayList<>();
|
|
|
+
|
|
|
+ List<Order> orderList = orderService.list(q ->
|
|
|
+ q.between(Order::getWlnApproveTime, DateUtil.offsetDay(endDate, -3), endDate));
|
|
|
+ Map<String, Order> orderMap = orderList.stream().collect(Collectors.toMap(Order::getWlnUid, Function.identity()));
|
|
|
+
|
|
|
+ for (JSONObject wlnOrder : wlnOrderList) {
|
|
|
+ String uid = wlnOrder.getString("uid");
|
|
|
+ Order order = orderMap.get(uid);
|
|
|
+ if (order != null) {
|
|
|
+ Integer processStatus = wlnOrder.getInteger("process_status");
|
|
|
+ if (ObjectUtil.notEqual(order.getWlnStatus(), processStatus)) {
|
|
|
+ order.setWlnStatus(processStatus);
|
|
|
+ updateOrderList.add(order);
|
|
|
+ }
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ order = createOrder(wlnOrder, departmentMap);
|
|
|
+ List<JSONObject> wlnOrderSkuList = wlnOrder.getJSONArray("orders").toJavaList(JSONObject.class);
|
|
|
+
|
|
|
+ if (ObjectUtil.isNotEmpty(wlnOrderSkuList)) {
|
|
|
+ Map<String, SkuSpec> skuSpecMap = new HashMap<>();
|
|
|
+
|
|
|
+ List<String> skuCodeList = wlnOrderSkuList.stream().map(item -> item.getString("sys_spec_uid"))
|
|
|
+ .filter(Objects::isNull).distinct().collect(Collectors.toList());
|
|
|
+
|
|
|
+ if (skuCodeList.size() > 0) {
|
|
|
+ skuSpecMap = skuSpecService.mapKEntity(SkuSpec::getCode, q -> q.in(SkuSpec::getWlnUid, skuCodeList));
|
|
|
+ }
|
|
|
+
|
|
|
+ for (JSONObject wlnOrderSku : wlnOrderSkuList) {
|
|
|
+ SkuSpec skuSpec = skuSpecMap.get(wlnOrderSku.getString("sys_spec_uid"));
|
|
|
+ OrderSku orderSku = createOrderSku(wlnOrderSku, order, skuSpec);
|
|
|
+ saveOrderSkuList.add(orderSku);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ saveOrderList.add(order);
|
|
|
+ }
|
|
|
+
|
|
|
+ orderService.saveBatch(saveOrderList);
|
|
|
+ orderService.updateBatchById(updateOrderList);
|
|
|
+ orderSkuService.saveBatch(saveOrderSkuList);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 万里牛查询3天之内的全部订单
|
|
|
+ */
|
|
|
+ private List<JSONObject> getWlnOrderList(Date endDate) {
|
|
|
+ List<DictCommonData> warehouseCodeList = dictCommonDataService.list(
|
|
|
+ q -> q.eq(DictCommonData::getDictCode, "warehouse_code"));
|
|
|
+ if (warehouseCodeList.size() == 0) {
|
|
|
+ log.error("仓库字典:warehouse_code 为空");
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<JSONObject> list = new ArrayList<>();
|
|
|
+
|
|
|
+ long endTime = endDate.getTime();
|
|
|
+ long startTime = endTime - 1000 * 60 * 60 * 24 - 1;
|
|
|
+
|
|
|
+ for (int i = 0; i < 3; i++) {
|
|
|
+ for (DictCommonData dictCommonData : warehouseCodeList) {
|
|
|
+ int page = 1;
|
|
|
+ int size;
|
|
|
+ do {
|
|
|
+ try {
|
|
|
+ List<JSONObject> itemList = WlnUtil.getOrderList(page, 200, startTime, endTime, dictCommonData.getDictValue());
|
|
|
+ page++;
|
|
|
+ size = itemList.size();
|
|
|
+ list.addAll(itemList);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("订单同步失败", e);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ } while (size >= 200);
|
|
|
+ }
|
|
|
+ startTime -= 1000 * 60 * 60 * 24;
|
|
|
+ endTime -= 1000 * 60 * 60 * 24;
|
|
|
+ }
|
|
|
+
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ private Map<String, Department> getDepartmentMap() {
|
|
|
+ Map<String, Department> departmentMap = new HashMap<>();
|
|
|
+ for (Department department : departmentService.list()) {
|
|
|
+ String warehouseCode = department.getWlnWarehouseCode();
|
|
|
+ if (StrUtil.isBlank(warehouseCode)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ for (String item : warehouseCode.split(",")) {
|
|
|
+ departmentMap.put(item, department);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return departmentMap;
|
|
|
+ }
|
|
|
+
|
|
|
+ private Order createOrder(JSONObject wlnOrder, Map<String, Department> departmentMap) {
|
|
|
+ Department department = departmentMap.get(wlnOrder.getString("storage_code"));
|
|
|
+
|
|
|
+ Order order = new Order();
|
|
|
+ order.setId(IdWorker.getId());
|
|
|
+ order.setSource(2);
|
|
|
+ order.setCode(wlnOrder.getString("tp_tid"));
|
|
|
+ order.setWlnCode(wlnOrder.getString("trade_no"));
|
|
|
+ order.setWlnUid(wlnOrder.getString("uid"));
|
|
|
+ order.setWlnCreateTime(wlnOrder.getDate("create_time"));
|
|
|
+ order.setWlnApproveTime(wlnOrder.getDate("approve_time"));
|
|
|
+ order.setModifyTime(wlnOrder.getLong("modify_time"));
|
|
|
+ order.setRemark(wlnOrder.getString("remark"));
|
|
|
+ order.setProvince(wlnOrder.getString("province"));
|
|
|
+ order.setCity(wlnOrder.getString("city"));
|
|
|
+ order.setCounty(wlnOrder.getString("district"));
|
|
|
+ order.setDetailedAddress(wlnOrder.getString("address"));
|
|
|
+ order.setPostcode(wlnOrder.getString("zip"));
|
|
|
+ order.setWlnStatus(wlnOrder.getInteger("process_status"));
|
|
|
+
|
|
|
+ StringBuilder builder = new StringBuilder();
|
|
|
+ // 订单来源平台
|
|
|
+ if (wlnOrder.containsKey("source_platform")) {
|
|
|
+ builder.append(wlnOrder.getString("source_platform"));
|
|
|
+ }
|
|
|
+ // 店铺名称
|
|
|
+ if (wlnOrder.containsKey("shop_name")) {
|
|
|
+ builder.append("_");
|
|
|
+ builder.append(wlnOrder.getString("shop_name"));
|
|
|
+ }
|
|
|
+ order.setCommercePlatform(builder.toString());
|
|
|
+
|
|
|
+ if (department != null) {
|
|
|
+ order.setDepartmentId(department.getId());
|
|
|
+ if (Objects.equals(department.getOrderMode(), "2")) {
|
|
|
+ order.setStatus(OrderStatusEnum.REJECT.getKey());
|
|
|
+ } else {
|
|
|
+ order.setStatus(OrderStatusEnum.UNDER_REVIEW.getKey());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ order.setStatus(OrderStatusEnum.UNDER_REVIEW.getKey());
|
|
|
+ }
|
|
|
+
|
|
|
+ if (order.getWlnStatus() == 10 || order.getWlnStatus() == 11 || order.getWlnStatus() == 12) {
|
|
|
+ order.setStatus(OrderStatusEnum.EXCEPTION.getKey());
|
|
|
+ }
|
|
|
+
|
|
|
+ return order;
|
|
|
+ }
|
|
|
|
|
|
+ private OrderSku createOrderSku(JSONObject wlnOrderSku, Order order, SkuSpec skuSpec) {
|
|
|
+ OrderSku orderSku = new OrderSku();
|
|
|
+ orderSku.setId(IdWorker.getId());
|
|
|
+ orderSku.setOrderId(order.getId());
|
|
|
+ orderSku.setQuantity(wlnOrderSku.getBigDecimal("size"));
|
|
|
+ orderSku.setPrintType(1);
|
|
|
+ orderSku.setWlnSkuId(wlnOrderSku.getString("sys_goods_uid"));
|
|
|
+ orderSku.setWlnSkuSpecId(wlnOrderSku.getString("sys_spec_uid"));
|
|
|
+ if (skuSpec != null) {
|
|
|
+ orderSku.setSkuId(skuSpec.getSkuId());
|
|
|
+ orderSku.setSkuSpecId(skuSpec.getId());
|
|
|
+ }
|
|
|
+ return orderSku;
|
|
|
}
|
|
|
|
|
|
}
|