|
@@ -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(),
|