Commit c25bf38f50eb8d9917faa7db4754723793e8acb5
1 parent
9c0d0c80
code review:交易订单的取消
Showing
5 changed files
with
43 additions
and
41 deletions
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 | ... | ... |