|
|
|
@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.trade.service.order.handler; |
|
|
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil; |
|
|
|
|
import cn.hutool.core.lang.Assert; |
|
|
|
|
import cn.iocoder.yudao.module.member.api.user.MemberUserApi; |
|
|
|
|
import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; |
|
|
|
|
import cn.iocoder.yudao.module.promotion.api.point.PointActivityApi; |
|
|
|
|
import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; |
|
|
|
|
import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO; |
|
|
|
@ -13,6 +15,9 @@ import org.springframework.stereotype.Component; |
|
|
|
|
import java.util.List; |
|
|
|
|
import java.util.Objects; |
|
|
|
|
|
|
|
|
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
|
|
|
|
import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.ORDER_CREATE_FAIL_INSUFFICIENT_USER_POINTS; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 积分商城活动订单的 {@link TradeOrderHandler} 实现类 |
|
|
|
|
* |
|
|
|
@ -23,6 +28,8 @@ public class TradePointOrderHandler implements TradeOrderHandler { |
|
|
|
|
|
|
|
|
|
@Resource |
|
|
|
|
private PointActivityApi pointActivityApi; |
|
|
|
|
@Resource |
|
|
|
|
private MemberUserApi memberUserApi; |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void beforeOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) { |
|
|
|
@ -31,6 +38,11 @@ public class TradePointOrderHandler implements TradeOrderHandler { |
|
|
|
|
} |
|
|
|
|
// 明确校验一下
|
|
|
|
|
Assert.isTrue(orderItems.size() == 1, "积分商城活动兑换商品兑换时,只允许选择一个商品"); |
|
|
|
|
// 校验用户剩余积分是否足够兑换商品
|
|
|
|
|
MemberUserRespDTO user = memberUserApi.getUser(order.getUserId()); |
|
|
|
|
if (user.getPoint() < order.getUsePoint()) { |
|
|
|
|
throw exception(ORDER_CREATE_FAIL_INSUFFICIENT_USER_POINTS); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 扣减积分商城活动的库存
|
|
|
|
|
pointActivityApi.updatePointStockDecr(order.getPointActivityId(), |
|
|
|
|