|
|
|
@ -1,36 +1,56 @@
|
|
|
|
|
package com.ms.api.util;
|
|
|
|
|
|
|
|
|
|
import java.util.Arrays;
|
|
|
|
|
import java.util.Collections;
|
|
|
|
|
import java.util.Date;
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
|
|
import cn.hutool.core.lang.Validator;
|
|
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
|
|
import com.ms.api.common.ApiResult;
|
|
|
|
|
import com.ms.api.common.MSException;
|
|
|
|
|
import com.ms.api.consts.DsOrderConst;
|
|
|
|
|
import com.ms.api.consts.OrderConst;
|
|
|
|
|
import com.ms.api.consts.PurchaseOrderConst;
|
|
|
|
|
import com.ms.api.consts.SessionConst;
|
|
|
|
|
import com.ms.api.dto.order.OriginalAndCustomConsigneeInfoRequestDTO;
|
|
|
|
|
import com.ms.api.dto.order.OriginalAndCustomConsigneeInfoResponseDTO;
|
|
|
|
|
import com.ms.api.dto.order.PurchaseSettingDTO;
|
|
|
|
|
import com.ms.api.dto.order.SearchDsOrderFilterDTO;
|
|
|
|
|
import com.ms.api.dto.order.SearchDsOrderListRequestDTO;
|
|
|
|
|
import com.ms.api.service.PurchaseOrderService;
|
|
|
|
|
import com.ms.api.dto.dsapi.request.GetPurchaseOrderItemsAndSourceItemsRequestDTO;
|
|
|
|
|
import com.ms.api.dto.dsapi.response.GetPurchaseOrderItemsAndSourceItemsResponseDTO;
|
|
|
|
|
import com.ms.api.dto.order.*;
|
|
|
|
|
import com.ms.api.service.*;
|
|
|
|
|
import com.ms.api.tool.CommonTool;
|
|
|
|
|
import com.ms.api.tool.SecurityTool;
|
|
|
|
|
import com.ms.dal.bo.OpOrderChildBO;
|
|
|
|
|
import com.ms.dal.entity.*;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
@Component
|
|
|
|
|
@Slf4j
|
|
|
|
|
public class PurchaseOrderUtil {
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private PurchaseOrderService purchaseOrderService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private OpOrderService opOrderService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private AfterSaleService afterSaleService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private OpOrderDsService opOrderDsService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private OrderPrintService orderPrintService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private ProductToDsItemService productToDsItemService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private DsApiService dsApiService;
|
|
|
|
|
|
|
|
|
|
private OriginalAndCustomConsigneeInfoResponseDTO getOriginalAndCustomConsigneeInfo(OriginalAndCustomConsigneeInfoRequestDTO requestDTO) {
|
|
|
|
|
return new OriginalAndCustomConsigneeInfoResponseDTO();
|
|
|
|
|
}
|
|
|
|
@ -247,4 +267,117 @@ public class PurchaseOrderUtil {
|
|
|
|
|
public boolean savePurchaseSetting(Long shopId, PurchaseSettingDTO purchaseSettingDTO) {
|
|
|
|
|
return purchaseOrderService.savePurchaseSetting(shopId, purchaseSettingDTO);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public boolean doDsAutoPurchase(Long shopId, String orderId) {
|
|
|
|
|
log.info(String.format("start method doDsAutoPurchase shopId: %s, orderId: %s", shopId, orderId));
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
if (shopId == null || StringUtils.isEmpty(orderId)) {
|
|
|
|
|
log.error(String.format("参数错误,shopId: %s, orderId: %s", shopId, orderId));
|
|
|
|
|
throw new MSException("参数错误");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
OpOrder orderInfo = opOrderService.getOpOrderByOrderId(orderId);
|
|
|
|
|
if (orderInfo == null) {
|
|
|
|
|
log.error(String.format("订单不存在,shopId: %s, orderId: %s", shopId, orderId));
|
|
|
|
|
throw new MSException("订单不存在");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
DsPurchaseSettingDTO dsAutoPurchaseSetting = purchaseOrderService.getDsPurchaseSettingByShopId(shopId);
|
|
|
|
|
|
|
|
|
|
OpOrderDs opOrderDs = opOrderDsService.getByOrderId(orderId);
|
|
|
|
|
|
|
|
|
|
ApiResult checkRes = purchaseOrderService.checkAllowDsAutoPurchase(shopId, orderId, dsAutoPurchaseSetting, orderInfo.getOrderStatus(), orderInfo.getGmtPayTime(), ObjectUtil.isNotNull(opOrderDs));
|
|
|
|
|
if (!checkRes.isSuccess()) {
|
|
|
|
|
log.error(String.format("不符合自动采购条件,shopId: %s, orderId: %s", shopId, orderId));
|
|
|
|
|
throw new MSException(StringUtils.isEmpty(checkRes.getMsg()) ? "不符合自动采购条件" : checkRes.getMsg());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<String> orderIds = new ArrayList<>();
|
|
|
|
|
orderIds.add(orderId);
|
|
|
|
|
Map<String, List<OpOrderChildBO>> orderIdAndOpOrderChildsMap = orderPrintService.getOpOrderChildList(orderIds, ""); // todo: tag这次不需要实现,以后注意类型
|
|
|
|
|
List<OpOrderChildBO> opOrderChilds = orderIdAndOpOrderChildsMap.get(orderId);
|
|
|
|
|
Set<String> productIdSet = opOrderChilds.stream().map(OpOrderChildBO::getProductId).collect(Collectors.toSet());
|
|
|
|
|
List<String> productIds = new ArrayList<>(productIdSet);
|
|
|
|
|
|
|
|
|
|
// purchaseOrderService.getProductIdAndProductToDsItemMapByProductIds(productIds, PurchaseOrderConst.PURCHASE_PLATFORM1688_D_S);
|
|
|
|
|
Map<String, ProductToDsItem> productIdAndProductToDsItemMap = productToDsItemService.getProductIdAndProductToDsItemMapByProductIds(productIdSet, PurchaseOrderConst.PURCHASE_PLATFORM1688_D_S);
|
|
|
|
|
if (productIdAndProductToDsItemMap.isEmpty()) {
|
|
|
|
|
log.error(String.format("不存在分销关系,shopId: %s, orderId: %s", shopId, orderId));
|
|
|
|
|
throw new MSException("不存在分销关系");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<AfterSale> afterSaleList = afterSaleService.getAfterSalesByPid(orderInfo.getShopId(), orderInfo.getOrderId());
|
|
|
|
|
if (!afterSaleList.isEmpty()) {
|
|
|
|
|
log.error(String.format("订单已发起售后,shopId: %s, orderId: %s", shopId, orderId));
|
|
|
|
|
throw new MSException("订单已发起售后");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
GetPurchaseOrderItemsAndSourceItemsRequestDTO requestParams = new GetPurchaseOrderItemsAndSourceItemsRequestDTO();
|
|
|
|
|
List<String> shopIds = new ArrayList<>();
|
|
|
|
|
shopIds.add(SecurityTool.encodeByAES(String.valueOf(orderInfo.getShopId())));
|
|
|
|
|
requestParams.setPlatform("dd");
|
|
|
|
|
requestParams.setShopIds(shopIds);
|
|
|
|
|
requestParams.setPlatformItemIds(productIds);
|
|
|
|
|
requestParams.setPlatformOrderIds(null);
|
|
|
|
|
GetPurchaseOrderItemsAndSourceItemsResponseDTO dsRet = dsApiService.getPurchaseOrderItemsAndSourceItems(requestParams);
|
|
|
|
|
if (!dsRet.isSuccess()) {
|
|
|
|
|
log.error(String.format("请求失败,接口:getPurchaseOrderItemsAndSourceItems,shopId: %s, orderId: %s,reason:%s", shopId, orderId, dsRet.getReason()));
|
|
|
|
|
throw new MSException(dsRet.getReason());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<PurchaseOrderItem> purchaseOrderItems = purchaseOrderService.getNormalPurchaseItemsByShopIdAndOrderId(orderInfo.getShopId(), orderId);
|
|
|
|
|
Map<Long, PurchaseOrderItem> skuIdAndPurchaseOrderItemMap = CommonTool.convertListToMap(purchaseOrderItems, PurchaseOrderItem::getSkuId);
|
|
|
|
|
|
|
|
|
|
Map<String, GetPurchaseOrderItemsAndSourceItemsResponseDTO.SourceItemInfo> platformItemIdAndSourceItemInfoMap = dsRet.getPlatformItemIdAndSourceItemInfoMap();
|
|
|
|
|
if (platformItemIdAndSourceItemInfoMap == null) {
|
|
|
|
|
platformItemIdAndSourceItemInfoMap = new HashMap<>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Map map = getPlatformSkuIdAndMatchSourceSkuInfoMap(opOrderChilds, platformItemIdAndSourceItemInfoMap, productIdAndProductToDsItemMap);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//todo:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Map getPlatformSkuIdAndMatchSourceSkuInfoMap(List<OpOrderChildBO> opOrderChilds, Map<String, GetPurchaseOrderItemsAndSourceItemsResponseDTO.SourceItemInfo> platformItemIdAndSourceItemInfoMap, Map<String, ProductToDsItem> productIdAndProductToDsItemMap) {
|
|
|
|
|
Map platformSkuIdAndMatchSourceSkuInfoMap = new HashMap();
|
|
|
|
|
Map platformSkuIdAndMatchFailSkuInfoMap = new HashMap();
|
|
|
|
|
for (OpOrderChildBO opOrderChild : opOrderChilds) {
|
|
|
|
|
String platfromItemId = opOrderChild.getProductId();
|
|
|
|
|
Long platfromSkuId = opOrderChild.getSkuId();
|
|
|
|
|
|
|
|
|
|
if (!productIdAndProductToDsItemMap.containsKey(platfromItemId) || productIdAndProductToDsItemMap.get(platfromItemId) == null) {
|
|
|
|
|
JSONObject obj = new JSONObject();
|
|
|
|
|
obj.put("reason", String.format("%s商品未代销", platfromItemId));
|
|
|
|
|
obj.put("platfromItemId", platfromItemId);
|
|
|
|
|
obj.put("platfromSkuId", platfromSkuId);
|
|
|
|
|
platformSkuIdAndMatchFailSkuInfoMap.put(platfromSkuId, obj);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
GetPurchaseOrderItemsAndSourceItemsResponseDTO.SourceItemInfo sourceItemInfo = platformItemIdAndSourceItemInfoMap.get(platfromItemId);
|
|
|
|
|
// todo: rebuildSourceItemProductInfo 各种特判,看起来没用, 先跳过
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// todo: DsOrderTool.getMatchSourceSkuInfo
|
|
|
|
|
|
|
|
|
|
// todo...
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Map retMap = new HashMap();
|
|
|
|
|
retMap.put("platformSkuIdAndMatchSourceSkuInfoMap", platformSkuIdAndMatchSourceSkuInfoMap);
|
|
|
|
|
retMap.put("platformSkuIdAndMatchFailSkuInfoMap", platformSkuIdAndMatchFailSkuInfoMap);
|
|
|
|
|
return retMap;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|