mirror of
https://gitee.com/hhyykk/ipms-sjy.git
synced 2025-08-16 11:11:53 +08:00
拼团活动:完善拼团下单金额结算
This commit is contained in:
@@ -271,7 +271,7 @@ public interface TradeOrderConvert {
|
||||
@Mapping(target = "count", source = "item.count"),
|
||||
@Mapping(target = "orderId", source = "order.id"),
|
||||
@Mapping(target = "userId", source = "order.userId"),
|
||||
@Mapping(target = "headId", source = "order.combinationRecordHeadId"),
|
||||
@Mapping(target = "headId", source = "order.combinationHeadId"),
|
||||
@Mapping(target = "combinationPrice", source = "item.payPrice"),
|
||||
})
|
||||
CombinationRecordCreateReqDTO convert(TradeOrderDO order, TradeOrderItemDO item);
|
||||
|
@@ -312,7 +312,7 @@ public class TradeOrderDO extends BaseDO {
|
||||
private Long bargainRecordId;
|
||||
|
||||
/**
|
||||
* 拼团活动编号 TODO puhui999:价格计算后设置
|
||||
* 拼团活动编号
|
||||
*
|
||||
* 关联 CombinationActivityDO 的 id 字段
|
||||
*/
|
||||
@@ -322,6 +322,6 @@ public class TradeOrderDO extends BaseDO {
|
||||
*
|
||||
* 关联 CombinationRecordDO 的 id 字段
|
||||
*/
|
||||
private Long combinationRecordHeadId;
|
||||
private Long combinationHeadId;
|
||||
|
||||
}
|
||||
|
@@ -0,0 +1,53 @@
|
||||
package cn.iocoder.yudao.module.trade.service.price.calculator;
|
||||
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.iocoder.yudao.module.promotion.api.combination.CombinationRecordApi;
|
||||
import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationValidateJoinRespDTO;
|
||||
import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum;
|
||||
import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO;
|
||||
import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO;
|
||||
import org.springframework.core.annotation.Order;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* 拼团活动的 {@link TradePriceCalculator} 实现类
|
||||
*
|
||||
* @author HUIHUI
|
||||
*/
|
||||
@Component
|
||||
@Order(TradePriceCalculator.ORDER_COMBINATION_ACTIVITY)
|
||||
public class TradeCombinationActivityPriceCalculator implements TradePriceCalculator {
|
||||
|
||||
@Resource
|
||||
private CombinationRecordApi combinationRecordApi;
|
||||
|
||||
@Override
|
||||
public void calculate(TradePriceCalculateReqBO param, TradePriceCalculateRespBO result) {
|
||||
// 1. 判断订单类型和是否具有拼团活动编号
|
||||
if (param.getCombinationActivityId() == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Assert.isTrue(param.getItems().size() == 1, "拼团时,只允许选择一个商品");
|
||||
// 2. 校验是否可以参与拼团
|
||||
TradePriceCalculateRespBO.OrderItem orderItem = result.getItems().get(0);
|
||||
CombinationValidateJoinRespDTO combinationActivity = combinationRecordApi.validateJoinCombination(
|
||||
param.getCombinationActivityId(), param.getUserId(),
|
||||
orderItem.getSkuId(), orderItem.getCount());
|
||||
|
||||
// 3.1 记录优惠明细
|
||||
Integer discountPrice = orderItem.getPayPrice() - combinationActivity.getCombinationPrice() * orderItem.getCount();
|
||||
TradePriceCalculatorHelper.addPromotion(result, orderItem,
|
||||
param.getCombinationActivityId(), combinationActivity.getName(), PromotionTypeEnum.COMBINATION_ACTIVITY.getType(),
|
||||
StrUtil.format("拼团活动:省 {} 元", TradePriceCalculatorHelper.formatPrice(discountPrice)),
|
||||
discountPrice);
|
||||
// 3.2 更新 SKU 优惠金额
|
||||
orderItem.setDiscountPrice(orderItem.getDiscountPrice() + discountPrice);
|
||||
TradePriceCalculatorHelper.recountPayPrice(orderItem);
|
||||
TradePriceCalculatorHelper.recountAllPrice(result);
|
||||
}
|
||||
|
||||
}
|
@@ -17,6 +17,7 @@ public interface TradePriceCalculator {
|
||||
|
||||
int ORDER_SECKILL_ACTIVITY = 8;
|
||||
int ORDER_BARGAIN_ACTIVITY = 8;
|
||||
int ORDER_COMBINATION_ACTIVITY = 8;
|
||||
|
||||
int ORDER_DISCOUNT_ACTIVITY = 10;
|
||||
int ORDER_REWARD_ACTIVITY = 20;
|
||||
|
Reference in New Issue
Block a user