mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-04 12:18:42 +08:00 
			
		
		
		
	【代码优化】商城: 完成代码评审 TODO
This commit is contained in:
		@@ -3,6 +3,8 @@ package cn.iocoder.yudao.module.product.api.spu.dto;
 | 
			
		||||
import cn.iocoder.yudao.module.product.enums.spu.ProductSpuStatusEnum;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 商品 SPU 信息 Response DTO
 | 
			
		||||
 *
 | 
			
		||||
@@ -68,6 +70,13 @@ public class ProductSpuRespDTO {
 | 
			
		||||
 | 
			
		||||
    // ========== 物流相关字段 =========
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 配送方式数组
 | 
			
		||||
     *
 | 
			
		||||
     * 对应 DeliveryTypeEnum 枚举
 | 
			
		||||
     */
 | 
			
		||||
    private List<Integer> deliveryTypes;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 物流配置模板编号
 | 
			
		||||
     *
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,8 @@ import cn.hutool.core.util.StrUtil;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
 | 
			
		||||
import cn.iocoder.yudao.module.member.api.address.MemberAddressApi;
 | 
			
		||||
import cn.iocoder.yudao.module.member.api.address.dto.MemberAddressRespDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi;
 | 
			
		||||
import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.dal.dataobject.config.TradeConfigDO;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryPickUpStoreDO;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.enums.delivery.DeliveryExpressChargeModeEnum;
 | 
			
		||||
@@ -17,18 +19,19 @@ import cn.iocoder.yudao.module.trade.service.delivery.bo.DeliveryExpressTemplate
 | 
			
		||||
import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO.OrderItem;
 | 
			
		||||
import jakarta.annotation.Resource;
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.springframework.core.annotation.Order;
 | 
			
		||||
import org.springframework.stereotype.Component;
 | 
			
		||||
 | 
			
		||||
import jakarta.annotation.Resource;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*;
 | 
			
		||||
import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.*;
 | 
			
		||||
import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.PICK_UP_STORE_NOT_EXISTS;
 | 
			
		||||
import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.PRICE_CALCULATE_DELIVERY_PRICE_TEMPLATE_NOT_FOUND;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 运费的 {@link TradePriceCalculator} 实现类
 | 
			
		||||
@@ -49,13 +52,20 @@ public class TradeDeliveryPriceCalculator implements TradePriceCalculator {
 | 
			
		||||
    private DeliveryExpressTemplateService deliveryExpressTemplateService;
 | 
			
		||||
    @Resource
 | 
			
		||||
    private TradeConfigService tradeConfigService;
 | 
			
		||||
    @Resource
 | 
			
		||||
    private ProductSpuApi productSpuApi;
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void calculate(TradePriceCalculateReqBO param, TradePriceCalculateRespBO result) {
 | 
			
		||||
        if (param.getDeliveryType() == null) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        // TODO @puhui999:需要校验,是不是存在商品不能门店自提,或者不能快递发货的情况。就是说,配送方式不匹配哈
 | 
			
		||||
        // 校验是不是存在商品不能门店自提,或者不能快递发货的情况。就是说,配送方式不匹配哈
 | 
			
		||||
        List<ProductSpuRespDTO> spuList = productSpuApi.getSpuList(convertSet(result.getItems(), OrderItem::getSpuId));
 | 
			
		||||
        if (anyMatch(spuList, item -> !item.getDeliveryTypes().contains(param.getDeliveryType()))) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (DeliveryTypeEnum.PICK_UP.getType().equals(param.getDeliveryType())) {
 | 
			
		||||
            calculateByPickUp(param);
 | 
			
		||||
        } else if (DeliveryTypeEnum.EXPRESS.getType().equals(param.getDeliveryType())) {
 | 
			
		||||
@@ -124,7 +134,7 @@ public class TradeDeliveryPriceCalculator implements TradePriceCalculator {
 | 
			
		||||
        Map<Long, List<OrderItem>> template2ItemMap = convertMultiMap(selectedSkus, OrderItem::getDeliveryTemplateId);
 | 
			
		||||
        // 依次计算快递运费
 | 
			
		||||
        for (Map.Entry<Long, List<OrderItem>> entry : template2ItemMap.entrySet()) {
 | 
			
		||||
            Long templateId  = entry.getKey();
 | 
			
		||||
            Long templateId = entry.getKey();
 | 
			
		||||
            List<OrderItem> orderItems = entry.getValue();
 | 
			
		||||
            DeliveryExpressTemplateRespBO templateBO = expressTemplateMap.get(templateId);
 | 
			
		||||
            if (templateBO == null) {
 | 
			
		||||
@@ -144,8 +154,8 @@ public class TradeDeliveryPriceCalculator implements TradePriceCalculator {
 | 
			
		||||
    /**
 | 
			
		||||
     * 按配送方式来计算运费
 | 
			
		||||
     *
 | 
			
		||||
     * @param orderItems SKU 商品项目
 | 
			
		||||
     * @param chargeMode  配送计费方式
 | 
			
		||||
     * @param orderItems     SKU 商品项目
 | 
			
		||||
     * @param chargeMode     配送计费方式
 | 
			
		||||
     * @param templateCharge 快递运费配置
 | 
			
		||||
     */
 | 
			
		||||
    private void calculateExpressFeeByChargeMode(List<OrderItem> orderItems, Integer chargeMode,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user