|
@@ -2,19 +2,9 @@ package com.sd.wln.service.impl;
|
|
|
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
import com.alibaba.fastjson2.JSONObject;
|
|
|
-import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
|
import com.ruoyi.common.constant.StatusConstant;
|
|
|
-import com.ruoyi.common.core.domain.BaseIdPo;
|
|
|
-import com.sd.business.entity.bom.bo.BomSpecBo;
|
|
|
-import com.sd.business.entity.bom.constant.BomClassifyConstant;
|
|
|
-import com.sd.business.entity.order.enums.OrderClassifyEnum;
|
|
|
-import com.sd.business.entity.order.enums.OrderStatusEnum;
|
|
|
-import com.sd.business.entity.order.po.*;
|
|
|
-import com.sd.business.entity.sku.po.SkuSpec;
|
|
|
-import com.sd.business.entity.warehouse.constant.WarehouseConstant;
|
|
|
-import com.sd.business.service.order.*;
|
|
|
-import com.sd.business.service.sku.SkuSpecService;
|
|
|
-import com.sd.business.util.CodeEnum;
|
|
|
+import com.sd.business.entity.after.po.AfterSaleOrder;
|
|
|
+import com.sd.business.service.after.AfterSaleOrderService;
|
|
|
import com.sd.wln.service.WlnReturnOrderService;
|
|
|
import com.sd.wln.util.WlnUtil;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
@@ -22,7 +12,6 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
-import java.math.BigDecimal;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -31,150 +20,114 @@ import java.util.stream.Collectors;
|
|
|
public class WlnReturnOrderServiceImpl implements WlnReturnOrderService {
|
|
|
|
|
|
@Autowired
|
|
|
- private OrderService orderService;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private OrderSkuService orderSkuService;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private OrderSkuBomService orderSkuBomService;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private SkuSpecService skuSpecService;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private OrderExchangeService orderExchangeService;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private OrderExchangeDetailService orderExchangeDetailService;
|
|
|
+ private AfterSaleOrderService afterSaleOrderService;
|
|
|
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
@Override
|
|
|
public void syncReturnOrder() {
|
|
|
+ // 获取万里牛数据
|
|
|
+ List<JSONObject> wlnReturnOrderList = getWlnReturnOrder();
|
|
|
+ // 筛选条件
|
|
|
+ List<Integer> wlnTypeList = Arrays.asList(0, 4);
|
|
|
+ List<Integer> wlnStatusList = Arrays.asList(0, 1);
|
|
|
|
|
|
- List<JSONObject> list = getWlnReturnOrder();
|
|
|
- // 只获取退货类型的订单
|
|
|
- List<JSONObject> wlnReturnOrder = list.stream()
|
|
|
- .filter(item -> Objects.equals(item.getInteger("type"), StatusConstant.NO))
|
|
|
- .collect(Collectors.toList());
|
|
|
-
|
|
|
- if (ObjectUtil.isEmpty(wlnReturnOrder)) {
|
|
|
+ if (ObjectUtil.isEmpty(wlnReturnOrderList)) {
|
|
|
return;
|
|
|
}
|
|
|
- // 获取订单信息
|
|
|
- List<String> wlnOrderCodeList = wlnReturnOrder.stream()
|
|
|
- .map(item -> item.getString("trade_code"))
|
|
|
- .filter(ObjectUtil::isNotNull)
|
|
|
- .collect(Collectors.toList());
|
|
|
- Map<String, OrderInfo> orderMap = orderService.mapKEntity(OrderInfo::getWlnCode, q -> q.
|
|
|
- in(OrderInfo::getWlnCode, wlnOrderCodeList)
|
|
|
- .eq(OrderInfo::getStatus, OrderStatusEnum.COMPLETION_PRODUCTION.getKey()));
|
|
|
- List<Long> orderIds = orderMap.values().stream().map(BaseIdPo::getId).collect(Collectors.toList());
|
|
|
- Map<Long, List<OrderSku>> orderSkuMap = orderSkuService.mapKGroup(OrderSku::getOrderId, q -> q.in(OrderSku::getOrderId, orderIds));
|
|
|
- Map<Long, List<OrderSkuBom>> orderSkuBomMap = orderSkuBomService.mapKGroup(OrderSkuBom::getOrderSkuId, q -> q.in(OrderSkuBom::getOrderId, orderIds));
|
|
|
- List<Long> bomSpecIdList = orderSkuBomMap.values().stream()
|
|
|
- .flatMap(item -> item.stream().map(OrderSkuBom::getBomSpecId))
|
|
|
- .distinct()
|
|
|
- .collect(Collectors.toList());
|
|
|
- Map<Long, BomSpecBo> bomSpecBoMap = skuSpecService.getBomSpecBoByIdList(bomSpecIdList);
|
|
|
-
|
|
|
- // 获取sku信息
|
|
|
- List<String> wlnSkuSpecUidList = wlnReturnOrder.stream()
|
|
|
- .flatMap(item -> item.getJSONArray("items").toJavaList(JSONObject.class).stream())
|
|
|
- .map(item -> item.getString("sys_spec_uid"))
|
|
|
- .filter(ObjectUtil::isNotNull)
|
|
|
- .distinct()
|
|
|
+
|
|
|
+ // 查询万里牛售后单明细id
|
|
|
+ List<String> uidList = wlnReturnOrderList.stream()
|
|
|
+ .map(item -> item.getJSONArray("items").toJavaList(JSONObject.class))
|
|
|
+ .flatMap(Collection::stream)
|
|
|
+ .map(item -> item.getString("tp_off_id"))
|
|
|
.collect(Collectors.toList());
|
|
|
- Map<String, SkuSpec> skuSpecMap = skuSpecService.mapKEntity(SkuSpec::getWlnUid, q -> q.in(SkuSpec::getWlnUid, wlnSkuSpecUidList));
|
|
|
+ Map<String, AfterSaleOrder> afterSaleOrderMap = afterSaleOrderService.mapKEntity(AfterSaleOrder::getWlnOffId, q -> q.in(AfterSaleOrder::getWlnOffId, uidList));
|
|
|
|
|
|
- List<OrderExchange> orderExchangeList = new ArrayList<>();
|
|
|
- List<OrderExchangeDetail> orderExchangeDetailList = new ArrayList<>();
|
|
|
+ List<AfterSaleOrder> saveAfterSaleOrderList = new ArrayList<>();
|
|
|
+ List<AfterSaleOrder> editAfterSaleOrderList = new ArrayList<>();
|
|
|
+ List<AfterSaleOrder> removeAfterSaleOrderList = new ArrayList<>();
|
|
|
|
|
|
- for (JSONObject item : wlnReturnOrder) {
|
|
|
- OrderInfo orderInfo = orderMap.get(item.getString("trade_code"));
|
|
|
- if (orderInfo == null || Objects.equals(orderInfo.getClassify(), OrderClassifyEnum.NO_REASON_ORDER.getKey())) {
|
|
|
+ for (JSONObject item : wlnReturnOrderList) {
|
|
|
+ // 同步类型为退货和仅退款的订单
|
|
|
+ if (!wlnTypeList.contains(item.getInteger("type"))) {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
// 出库单明细
|
|
|
List<JSONObject> detailsList = item.getJSONArray("items").toJavaList(JSONObject.class);
|
|
|
- OrderExchange orderExchange = new OrderExchange();
|
|
|
- orderExchange.setId(IdWorker.getId());
|
|
|
- orderExchange.setCode(CodeEnum.TH_CODE.getCode());
|
|
|
- orderExchange.setOrderInfoId(orderInfo.getId());
|
|
|
- orderExchange.setWarehouseId(WarehouseConstant.FINISHED_PRODUCT);
|
|
|
- orderExchange.setType(StatusConstant.YES);
|
|
|
- orderExchange.setStatus(StatusConstant.NO);
|
|
|
- orderExchange.setReason(item.getString("reason"));
|
|
|
- orderExchange.setRemark(item.getString("describe"));
|
|
|
- orderExchange.setCompletionTime(item.getDate("end_time"));
|
|
|
- orderExchange.setCompletionTimestamp(item.getLong("end_time"));
|
|
|
- orderExchangeList.add(orderExchange);
|
|
|
for (JSONObject itemDetails : detailsList) {
|
|
|
- // 获取订单sku id
|
|
|
- SkuSpec skuSpec = skuSpecMap.get(itemDetails.getString("sys_spec_uid"));
|
|
|
- if (skuSpec == null || Objects.equals(skuSpec.getGiftTag(), StatusConstant.YES)) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- OrderSku orderSku = orderSkuMap
|
|
|
- .getOrDefault(orderInfo.getId(),Collections.emptyList())
|
|
|
- .stream()
|
|
|
- .filter(i -> Objects.equals(i.getSkuSpecId(), skuSpec.getId()))
|
|
|
- .findAny()
|
|
|
- .orElse(null);
|
|
|
- if (orderSku == null) {
|
|
|
- continue;
|
|
|
+
|
|
|
+ AfterSaleOrder afterSaleOrder = afterSaleOrderMap.get(itemDetails.getString("tp_off_id"));
|
|
|
+
|
|
|
+ // 新增
|
|
|
+ if (afterSaleOrder == null) {
|
|
|
+ // 新增只同步状态为处理中和已完成的售后单
|
|
|
+ if (!wlnStatusList.contains(item.getInteger("status"))) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ afterSaleOrder = new AfterSaleOrder();
|
|
|
+ afterSaleOrder.setCode(item.getString("bill_code"));
|
|
|
+ afterSaleOrder.setStatus(StatusConstant.NO);
|
|
|
+ afterSaleOrder.setWlnOffId(itemDetails.getString("tp_off_id"));
|
|
|
+ afterSaleOrder.setOrderCode(item.getString("oln_trade_code"));
|
|
|
+ afterSaleOrder.setOrderWlnCode(item.getString("trade_code"));
|
|
|
+ afterSaleOrder.setSkuSpecCode(itemDetails.getString("sku_code"));
|
|
|
+ afterSaleOrder.setWlnSkuSpecId(itemDetails.getString("sys_spec_uid"));
|
|
|
+ afterSaleOrder.setStorageCode(item.getString("storage_code"));
|
|
|
+ afterSaleOrder.setWlnStatus(item.getInteger("status"));
|
|
|
+ afterSaleOrder.setWlnType(item.getInteger("type"));
|
|
|
+ afterSaleOrder.setQuantity(itemDetails.getBigDecimal("size"));
|
|
|
+ afterSaleOrder.setModifyTime(item.getDate("create_time"));
|
|
|
+ afterSaleOrder.setModifyTimestamp(item.getLong("create_time"));
|
|
|
+ afterSaleOrder.setReason(item.getString("reason"));
|
|
|
+ afterSaleOrder.setRemark(item.getString("describe"));
|
|
|
+ saveAfterSaleOrderList.add(afterSaleOrder);
|
|
|
+ } else {
|
|
|
+ // 已售后的不修改
|
|
|
+ if (Objects.equals(afterSaleOrder.getStatus(), StatusConstant.YES)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 售后单状态不为处理中和已完成的售后单删除
|
|
|
+ if (!wlnStatusList.contains(item.getInteger("status"))) {
|
|
|
+ removeAfterSaleOrderList.add(afterSaleOrder);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ afterSaleOrder.setWlnStatus(item.getInteger("status"));
|
|
|
+ afterSaleOrder.setWlnType(item.getInteger("type"));
|
|
|
+ afterSaleOrder.setModifyTime(item.getDate("create_time"));
|
|
|
+ afterSaleOrder.setModifyTimestamp(item.getLong("create_time"));
|
|
|
+ editAfterSaleOrderList.add(afterSaleOrder);
|
|
|
}
|
|
|
- // 包材成本只退可二次利用的包材
|
|
|
- List<OrderSkuBom> orderSkuBomList = orderSkuBomMap.getOrDefault(orderSku.getId(), Collections.emptyList());
|
|
|
- BigDecimal packagingMaterialCost = orderSkuBomList.stream()
|
|
|
- .map(b -> {
|
|
|
- BomSpecBo bomSpecBo = bomSpecBoMap.get(b.getBomSpecId());
|
|
|
- if (bomSpecBo == null
|
|
|
- || !(Objects.equals(bomSpecBo.getClassifyId(), BomClassifyConstant.MESH_BAG)
|
|
|
- || Objects.equals(bomSpecBo.getClassifyId(), BomClassifyConstant.SUSPENDERS))) {
|
|
|
- return BigDecimal.ZERO;
|
|
|
- }
|
|
|
- return b.getUnitPrice().multiply(b.getQuantity());
|
|
|
- })
|
|
|
- .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
-
|
|
|
-
|
|
|
- OrderExchangeDetail orderExchangeDetail = new OrderExchangeDetail();
|
|
|
- orderExchangeDetail.setOrderExchangeId(orderExchange.getId());
|
|
|
- orderExchangeDetail.setQuantity(itemDetails.getBigDecimal("size"));
|
|
|
- orderExchangeDetail.setReturnStatus(StatusConstant.NO);
|
|
|
- orderExchangeDetail.setExchangeStatus(StatusConstant.NO);
|
|
|
- orderExchangeDetail.setOrderSkuId(orderSku.getId());
|
|
|
- orderExchangeDetail.setCheckPassesQuantity(BigDecimal.ZERO);
|
|
|
- orderExchangeDetail.setReturnAmount((orderSku.getUnitPrice()
|
|
|
- .add(packagingMaterialCost)).multiply(orderExchangeDetail.getQuantity()));
|
|
|
- orderExchangeDetailList.add(orderExchangeDetail);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- orderExchangeService.saveBatch(orderExchangeList);
|
|
|
- orderExchangeDetailService.saveBatch(orderExchangeDetailList);
|
|
|
-
|
|
|
+ if (!saveAfterSaleOrderList.isEmpty()) {
|
|
|
+ afterSaleOrderService.saveBatch(saveAfterSaleOrderList);
|
|
|
+ }
|
|
|
+ if (!editAfterSaleOrderList.isEmpty()) {
|
|
|
+ afterSaleOrderService.updateBatchById(editAfterSaleOrderList);
|
|
|
+ }
|
|
|
+ if (!removeAfterSaleOrderList.isEmpty()) {
|
|
|
+ afterSaleOrderService.removeBatchByIds(removeAfterSaleOrderList);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
/**
|
|
|
* 查询近万里牛售后单
|
|
|
*/
|
|
|
private List<JSONObject> getWlnReturnOrder() {
|
|
|
- OrderExchange orderExchange = orderExchangeService.getOne(q -> q
|
|
|
- .isNotNull(OrderExchange::getCompletionTimestamp)
|
|
|
- .orderByDesc(OrderExchange::getCompletionTimestamp));
|
|
|
+ AfterSaleOrder afterSaleOrder = afterSaleOrderService.getOne(q -> q.orderByDesc(AfterSaleOrder::getModifyTimestamp));
|
|
|
|
|
|
long startTime;
|
|
|
long endTime = System.currentTimeMillis();
|
|
|
- if (orderExchange != null) {
|
|
|
- startTime = orderExchange.getCompletionTimestamp() + 1;
|
|
|
+ if (afterSaleOrder != null) {
|
|
|
+ startTime = afterSaleOrder.getModifyTimestamp() + 1;
|
|
|
} else {
|
|
|
- startTime = endTime - 1000 * 60 * 60 * 24 * 7;
|
|
|
+ startTime = endTime - 1000 * 60 * 60 * 24 * 60L;
|
|
|
}
|
|
|
|
|
|
List<JSONObject> list = new ArrayList<>();
|