mirror of
https://gitee.com/huangge1199_admin/vue-pro.git
synced 2024-11-22 15:21:53 +08:00
mall + trade:review 运费价格计算
This commit is contained in:
parent
f1fa8eadd2
commit
36ce968893
@ -141,7 +141,7 @@ public class ProductSpuDO extends BaseDO {
|
||||
/**
|
||||
* 物流配置模板编号
|
||||
*
|
||||
* 对应 { TradeDeliveryExpressTemplateDO 的 id 编号}
|
||||
* 对应 TradeDeliveryExpressTemplateDO 的 id 编号
|
||||
*/
|
||||
private Long deliveryTemplateId;
|
||||
|
||||
|
@ -66,8 +66,11 @@ public interface DeliveryExpressTemplateService {
|
||||
|
||||
/**
|
||||
* 校验快递运费模板
|
||||
*
|
||||
* 如果校验不通过,抛出 {@link cn.iocoder.yudao.framework.common.exception.ServiceException} 异常
|
||||
*
|
||||
* @param templateId 模板编号
|
||||
* @return DeliveryExpressTemplateDO 非空
|
||||
* @return 快递运费模板
|
||||
*/
|
||||
DeliveryExpressTemplateDO validateDeliveryExpressTemplate(Long templateId);
|
||||
}
|
||||
|
@ -58,6 +58,7 @@ public class TradePriceCalculateReqBO {
|
||||
*
|
||||
* 关联 {@link DeliveryExpressTemplateDO#getId()}
|
||||
*/
|
||||
// TODO @jason:运费模版,是不是每个 SKU 传入哈
|
||||
private Long templateId;
|
||||
|
||||
/**
|
||||
|
@ -34,12 +34,15 @@ import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.
|
||||
@Component
|
||||
@Order(TradePriceCalculator.ORDER_DELIVERY)
|
||||
public class TradeDeliveryPriceCalculator implements TradePriceCalculator {
|
||||
|
||||
@Resource
|
||||
private AddressApi addressApi;
|
||||
@Resource
|
||||
private ProductSkuApi productSkuApi;
|
||||
|
||||
@Resource
|
||||
private DeliveryExpressTemplateService deliveryExpressTemplateService;
|
||||
// TODO @jason:走 Service 哈。Mapper 只允许自己的 Service 调用,保护好数据结构;
|
||||
@Resource
|
||||
private DeliveryExpressTemplateChargeMapper templateChargeMapper;
|
||||
@Resource
|
||||
@ -106,20 +109,22 @@ public class TradeDeliveryPriceCalculator implements TradePriceCalculator {
|
||||
// 得到SKU 详情。得到 重量体积
|
||||
Map<Long, ProductSkuRespDTO> skuRespMap = convertMap(productSkuApi.getSkuList(skuIds), ProductSkuRespDTO::getId);
|
||||
// 一个 spuId 可能对应多条订单商品 SKU
|
||||
// TODO @jason:得确认下,按照 sku 算,还是 spu 算;
|
||||
Map<Long, List<OrderItem>> spuIdItemMap = convertMultiMap(selectedItem, OrderItem::getSpuId);
|
||||
// 依次计算每个 SPU 的快递运费
|
||||
for (Map.Entry<Long, List<OrderItem>> entry : spuIdItemMap.entrySet()) {
|
||||
List<OrderItem> orderItems = entry.getValue();
|
||||
// 总件数, 总金额, 总重量, 总体积
|
||||
int totalCount = 0, totalPrice = 0;
|
||||
int totalCount = 0;
|
||||
int totalPrice = 0;
|
||||
double totalWeight = 0;
|
||||
double totalVolume = 0;
|
||||
for (OrderItem orderItem : orderItems) {
|
||||
totalCount += orderItem.getCount();
|
||||
totalPrice += orderItem.getPrice();
|
||||
totalPrice += orderItem.getPrice(); // TODO jason:应该按照 payPrice?
|
||||
ProductSkuRespDTO skuResp = skuRespMap.get(orderItem.getSkuId());
|
||||
if (skuResp != null) {
|
||||
totalWeight = totalWeight + skuResp.getWeight();
|
||||
totalWeight = totalWeight + skuResp.getWeight(); // TODO @jason:* 数量
|
||||
totalVolume = totalVolume + skuResp.getVolume();
|
||||
}
|
||||
}
|
||||
@ -130,6 +135,7 @@ public class TradeDeliveryPriceCalculator implements TradePriceCalculator {
|
||||
continue;
|
||||
}
|
||||
// 计算快递运费
|
||||
// TODO @jason:貌似也可以抽成 checkExpressFree 类似方法
|
||||
if (areaTemplateChargeMap.containsKey(receiverAreaId)) {
|
||||
DeliveryExpressTemplateChargeDO templateCharge = areaTemplateChargeMap.get(receiverAreaId);
|
||||
DeliveryExpressChargeModeEnum chargeModeEnum = DeliveryExpressChargeModeEnum.valueOf(chargeMode);
|
||||
@ -170,8 +176,8 @@ public class TradeDeliveryPriceCalculator implements TradePriceCalculator {
|
||||
int extraPrice = templateCharge.getExtraPrice() * extraNum;
|
||||
deliveryPrice = templateCharge.getStartPrice() + extraPrice;
|
||||
}
|
||||
//
|
||||
// TODO @芋艿 分摊快递费用到 SKU. 是不是搞复杂了
|
||||
// TODO @芋艿 分摊快递费用到 SKU. 是不是搞复杂了;
|
||||
// TODO @jason:因为退费的时候,可能按照 SKU 考虑退费金额
|
||||
divideDeliveryPrice(deliveryPrice, orderItems);
|
||||
}
|
||||
|
||||
|
@ -11,12 +11,14 @@ import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO;
|
||||
public interface TradePriceCalculator {
|
||||
|
||||
int ORDER_DISCOUNT_ACTIVITY = 10;
|
||||
/**
|
||||
* TODO @芋艿 快递运费的计算在满减之前。 例如有满多少包邮
|
||||
*/
|
||||
int ORDER_DELIVERY = 15;
|
||||
int ORDER_REWARD_ACTIVITY = 20;
|
||||
int ORDER_COUPON = 30;
|
||||
/**
|
||||
* 快递运费的计算
|
||||
*
|
||||
* 放在各种营销活动、优惠劵后面 TODO
|
||||
*/
|
||||
int ORDER_DELIVERY = 40;
|
||||
|
||||
void calculate(TradePriceCalculateReqBO param, TradePriceCalculateRespBO result);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user