Commit eaeeb34e74c14d1b89c95c727bae8a2f64ca6aaa

Authored by YunaiV
1 parent ebf56932

【代码评审】商城:满减送订单

yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/coupon/CouponMapper.java
@@ -8,7 +8,6 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; @@ -8,7 +8,6 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
8 import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.coupon.CouponPageReqVO; 8 import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.coupon.CouponPageReqVO;
9 import cn.iocoder.yudao.module.promotion.dal.dataobject.coupon.CouponDO; 9 import cn.iocoder.yudao.module.promotion.dal.dataobject.coupon.CouponDO;
10 import cn.iocoder.yudao.module.promotion.enums.common.PromotionProductScopeEnum; 10 import cn.iocoder.yudao.module.promotion.enums.common.PromotionProductScopeEnum;
11 -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;  
12 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 11 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
13 import com.github.yulichang.toolkit.MPJWrappers; 12 import com.github.yulichang.toolkit.MPJWrappers;
14 import org.apache.ibatis.annotations.Mapper; 13 import org.apache.ibatis.annotations.Mapper;
@@ -108,11 +107,4 @@ public interface CouponMapper extends BaseMapperX<CouponDO> { @@ -108,11 +107,4 @@ public interface CouponMapper extends BaseMapperX<CouponDO> {
108 ); 107 );
109 } 108 }
110 109
111 - default List<CouponDO> selectListByIdAndUserIdAndTakeType(Long couponId, Long userId, Integer takeType) {  
112 - return selectList(new LambdaQueryWrapper<CouponDO>()  
113 - .eq(CouponDO::getId, couponId)  
114 - .eq(CouponDO::getUserId, userId)  
115 - .eq(CouponDO::getTakeType, takeType));  
116 - }  
117 -  
118 } 110 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponService.java
@@ -123,7 +123,7 @@ public interface CouponService { @@ -123,7 +123,7 @@ public interface CouponService {
123 */ 123 */
124 int expireCoupon(); 124 int expireCoupon();
125 125
126 - //======================= 查询相关 ======================= 126 + // ======================= 查询相关 =======================
127 127
128 /** 128 /**
129 * 获得未使用的优惠劵数量 129 * 获得未使用的优惠劵数量
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponServiceImpl.java
@@ -179,7 +179,7 @@ public class CouponServiceImpl implements CouponService { @@ -179,7 +179,7 @@ public class CouponServiceImpl implements CouponService {
179 // 循环收回 179 // 循环收回
180 for (Long couponId : giveCouponIds) { 180 for (Long couponId : giveCouponIds) {
181 try { 181 try {
182 - getSelf().takeBackCoupon(couponId, userId, CouponTakeTypeEnum.ADMIN); 182 + getSelf().invalidateCoupon(couponId, userId);
183 } catch (Exception e) { 183 } catch (Exception e) {
184 log.error("[invalidateCouponsByAdmin][couponId({}) 收回优惠券失败]", couponId, e); 184 log.error("[invalidateCouponsByAdmin][couponId({}) 收回优惠券失败]", couponId, e);
185 } 185 }
@@ -191,10 +191,9 @@ public class CouponServiceImpl implements CouponService { @@ -191,10 +191,9 @@ public class CouponServiceImpl implements CouponService {
191 * 191 *
192 * @param couponId 模版编号 192 * @param couponId 模版编号
193 * @param userId 用户编号 193 * @param userId 用户编号
194 - * @param takeType 领取方式  
195 */ 194 */
196 @Transactional(rollbackFor = Exception.class) 195 @Transactional(rollbackFor = Exception.class)
197 - public void takeBackCoupon(Long couponId, Long userId, CouponTakeTypeEnum takeType) { 196 + public void invalidateCoupon(Long couponId, Long userId) {
198 // 1.1 校验优惠券 197 // 1.1 校验优惠券
199 CouponDO coupon = couponMapper.selectByIdAndUserId(couponId, userId); 198 CouponDO coupon = couponMapper.selectByIdAndUserId(couponId, userId);
200 if (coupon == null) { 199 if (coupon == null) {
@@ -205,19 +204,15 @@ public class CouponServiceImpl implements CouponService { @@ -205,19 +204,15 @@ public class CouponServiceImpl implements CouponService {
205 if (couponTemplate == null) { 204 if (couponTemplate == null) {
206 throw exception(COUPON_TEMPLATE_NOT_EXISTS); 205 throw exception(COUPON_TEMPLATE_NOT_EXISTS);
207 } 206 }
208 - // 1.3 校验领取方式  
209 - if (ObjectUtil.notEqual(couponTemplate.getTakeType(), takeType.getValue())) {  
210 - throw exception(COUPON_TEMPLATE_CANNOT_TAKE);  
211 - }  
212 -  
213 - // 2.1 校验优惠券是否已经使用,如若使用则先不管 207 + // 1.3 校验优惠券是否已经使用,如若使用则先不管
214 if (ObjUtil.equal(coupon.getStatus(), CouponStatusEnum.USED.getStatus())) { 208 if (ObjUtil.equal(coupon.getStatus(), CouponStatusEnum.USED.getStatus())) {
  209 + log.info("[invalidateCoupon][coupon({}) 已经使用,无法作废]", couponId);
215 return; 210 return;
216 } 211 }
217 - // 2.2 减少优惠劵模板的领取数量 212 +
  213 + // 2.1 减少优惠劵模板的领取数量
218 couponTemplateService.updateCouponTemplateTakeCount(couponTemplate.getId(), -1); 214 couponTemplateService.updateCouponTemplateTakeCount(couponTemplate.getId(), -1);
219 - // 2.3 批量作废优惠劵  
220 - // TODO @puhui999:捉摸了下,貌似搞成逻辑删除好了?不然好多地方的 status 都要做一些变动。可能未来加个 invalidateType 来标识,是管理后台删除,还是取消回收。或者优惠劵的 change log 可能更好。 215 + // 2.2 作废优惠劵
221 couponMapper.deleteById(couponId); 216 couponMapper.deleteById(couponId);
222 } 217 }
223 218
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/order/TradeOrderDO.java
@@ -296,10 +296,11 @@ public class TradeOrderDO extends BaseDO { @@ -296,10 +296,11 @@ public class TradeOrderDO extends BaseDO {
296 */ 296 */
297 private Integer vipPrice; 297 private Integer vipPrice;
298 298
  299 + // TODO @puhui999:我们要不要把相关的字段,定义的更明确一点?例如说,giveCouponTemplateCounts 赠送的优惠劵模版数量,或者 giveCouponCounts 赠送的优惠劵数量。感受上,Coupons 和 Map 有点点重叠哈。
299 /** 300 /**
300 * 赠送的优惠劵 301 * 赠送的优惠劵
301 * 302 *
302 - * key: 优惠劵编号 303 + * key: 优惠劵模版编号
303 * value:对应的优惠券数量 304 * value:对应的优惠券数量
304 * 305 *
305 * 目的:用于订单支付后赠送优惠券 306 * 目的:用于订单支付后赠送优惠券
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java
@@ -892,15 +892,11 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -892,15 +892,11 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
892 892
893 @Override 893 @Override
894 public void updateOrderGiveCouponIds(Long userId, Long orderId, List<Long> giveCouponIds) { 894 public void updateOrderGiveCouponIds(Long userId, Long orderId, List<Long> giveCouponIds) {
895 - // 1.1 检验订单存在 895 + // 1. 检验订单存在
896 TradeOrderDO order = tradeOrderMapper.selectOrderByIdAndUserId(orderId, userId); 896 TradeOrderDO order = tradeOrderMapper.selectOrderByIdAndUserId(orderId, userId);
897 if (order == null) { 897 if (order == null) {
898 throw exception(ORDER_NOT_FOUND); 898 throw exception(ORDER_NOT_FOUND);
899 } 899 }
900 - // 1.2 校验订单是否支付  
901 - if (!order.getPayStatus()) {  
902 - throw exception(ORDER_CANCEL_PAID_FAIL, "已支付");  
903 - }  
904 900
905 // 2. 更新订单赠送的优惠券编号列表 901 // 2. 更新订单赠送的优惠券编号列表
906 tradeOrderMapper.updateById(new TradeOrderDO().setId(orderId).setGiveCouponIds(giveCouponIds)); 902 tradeOrderMapper.updateById(new TradeOrderDO().setId(orderId).setGiveCouponIds(giveCouponIds));