Commit c25bf38f50eb8d9917faa7db4754723793e8acb5

Authored by YunaiV
1 parent 9c0d0c80

code review:交易订单的取消

yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/coupon/CouponApi.java
... ... @@ -21,6 +21,13 @@ public interface CouponApi {
21 21 void useCoupon(@Valid CouponUseReqDTO useReqDTO);
22 22  
23 23 /**
  24 + * 退还已使用的优惠券
  25 + *
  26 + * @param id 优惠券编号
  27 + */
  28 + void returnUsedCoupon(Long id);
  29 +
  30 + /**
24 31 * 校验优惠劵
25 32 *
26 33 * @param validReqDTO 校验请求
... ... @@ -28,10 +35,4 @@ public interface CouponApi {
28 35 */
29 36 CouponRespDTO validateCoupon(@Valid CouponValidReqDTO validReqDTO);
30 37  
31   - /**
32   - * 退还已使用的优惠券
33   - *
34   - * @param id 优惠券编号
35   - */
36   - void returnUsedCoupon(Long id);
37 38 }
... ...
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/api/coupon/CouponApiImpl.java
... ... @@ -29,14 +29,14 @@ public class CouponApiImpl implements CouponApi {
29 29 }
30 30  
31 31 @Override
32   - public CouponRespDTO validateCoupon(CouponValidReqDTO validReqDTO) {
33   - CouponDO coupon = couponService.validCoupon(validReqDTO.getId(), validReqDTO.getUserId());
34   - return CouponConvert.INSTANCE.convert(coupon);
  32 + public void returnUsedCoupon(Long id) {
  33 + couponService.returnUsedCoupon(id);
35 34 }
36 35  
37 36 @Override
38   - public void returnUsedCoupon(Long id) {
39   - couponService.returnUsedCoupon(id);
  37 + public CouponRespDTO validateCoupon(CouponValidReqDTO validReqDTO) {
  38 + CouponDO coupon = couponService.validCoupon(validReqDTO.getId(), validReqDTO.getUserId());
  39 + return CouponConvert.INSTANCE.convert(coupon);
40 40 }
41 41  
42 42 }
... ...
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponService.java
... ... @@ -55,6 +55,13 @@ public interface CouponService {
55 55 void useCoupon(Long id, Long userId, Long orderId);
56 56  
57 57 /**
  58 + * 退还已使用的优惠券
  59 + *
  60 + * @param id 优惠券编号
  61 + */
  62 + void returnUsedCoupon(Long id);
  63 +
  64 + /**
58 65 * 回收优惠劵
59 66 *
60 67 * @param id 优惠劵编号
... ... @@ -117,10 +124,4 @@ public interface CouponService {
117 124 takeCoupon(templateId, CollUtil.newHashSet(userId), CouponTakeTypeEnum.REGISTER);
118 125 }
119 126  
120   - /**
121   - * 退还已使用的优惠券
122   - *
123   - * @param id 优惠券编号
124   - */
125   - void returnUsedCoupon(Long id);
126 127 }
... ...
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponServiceImpl.java
... ... @@ -103,6 +103,29 @@ public class CouponServiceImpl implements CouponService {
103 103 }
104 104  
105 105 @Override
  106 + public void returnUsedCoupon(Long id) {
  107 + // 校验存在
  108 + CouponDO coupon = couponMapper.selectById(id);
  109 + if (coupon == null) {
  110 + throw exception(COUPON_NOT_EXISTS);
  111 + }
  112 + // 校验状态
  113 + if (ObjectUtil.notEqual(coupon.getTemplateId(), CouponStatusEnum.USED.getStatus())) {
  114 + throw exception(COUPON_STATUS_NOT_USED);
  115 + }
  116 +
  117 + // 退还
  118 + // TODO @疯狂:最好 where status,避免可能存在的并发问题
  119 + Integer status = LocalDateTimeUtils.beforeNow(coupon.getValidEndTime())
  120 + // 退还时可能已经过期了
  121 + ? CouponStatusEnum.EXPIRE.getStatus()
  122 + : CouponStatusEnum.UNUSED.getStatus();
  123 + couponMapper.updateById(new CouponDO().setId(id).setStatus(status));
  124 +
  125 + // TODO 增加优惠券变动记录?
  126 + }
  127 +
  128 + @Override
106 129 @Transactional
107 130 public void deleteCoupon(Long id) {
108 131 // 校验存在
... ... @@ -202,27 +225,4 @@ public class CouponServiceImpl implements CouponService {
202 225 userIds.removeIf(userId -> MapUtil.getInt(userTakeCountMap, userId, 0) >= couponTemplate.getTakeLimitCount());
203 226 }
204 227  
205   - @Override
206   - public void returnUsedCoupon(Long id) {
207   - // 校验存在
208   - CouponDO coupon = couponMapper.selectById(id);
209   - if (coupon == null) {
210   - throw exception(COUPON_NOT_EXISTS);
211   - }
212   -
213   - // 校验状态
214   - if (!CouponStatusEnum.USED.getStatus().equals(coupon.getStatus())) {
215   - throw exception(COUPON_STATUS_NOT_USED);
216   - }
217   -
218   - // 退还
219   - Integer status = LocalDateTimeUtils.beforeNow(coupon.getValidEndTime())
220   - // 退还时可能已经过期了
221   - ? CouponStatusEnum.EXPIRE.getStatus()
222   - : CouponStatusEnum.UNUSED.getStatus();
223   - couponMapper.updateById(new CouponDO().setId(id).setStatus(status));
224   -
225   - // TODO 增加优惠券变动记录?
226   - }
227   -
228 228 }
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java
... ... @@ -699,7 +699,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
699 699 // 3.回滚优惠券
700 700 couponApi.returnUsedCoupon(order.getCouponId());
701 701  
702   - // 4.回滚积分:积分是支付成功后才增加的吧?
  702 + // 4.回滚积分:积分是支付成功后才增加的吧? 回复:每个项目不同,目前看下来,确认收货貌似更合适,我再看看其它项目的业务选择;
703 703  
704 704 // TODO 芋艿:OrderLog
705 705  
... ...