code review:交易订单的取消

This commit is contained in:
YunaiV 2023-09-02 00:52:31 +08:00
parent 9c0d0c809a
commit c25bf38f50
5 changed files with 43 additions and 41 deletions

View File

@ -20,6 +20,13 @@ public interface CouponApi {
*/ */
void useCoupon(@Valid CouponUseReqDTO useReqDTO); void useCoupon(@Valid CouponUseReqDTO useReqDTO);
/**
* 退还已使用的优惠券
*
* @param id 优惠券编号
*/
void returnUsedCoupon(Long id);
/** /**
* 校验优惠劵 * 校验优惠劵
* *
@ -28,10 +35,4 @@ public interface CouponApi {
*/ */
CouponRespDTO validateCoupon(@Valid CouponValidReqDTO validReqDTO); CouponRespDTO validateCoupon(@Valid CouponValidReqDTO validReqDTO);
/**
* 退还已使用的优惠券
*
* @param id 优惠券编号
*/
void returnUsedCoupon(Long id);
} }

View File

@ -28,15 +28,15 @@ public class CouponApiImpl implements CouponApi {
useReqDTO.getOrderId()); useReqDTO.getOrderId());
} }
@Override
public void returnUsedCoupon(Long id) {
couponService.returnUsedCoupon(id);
}
@Override @Override
public CouponRespDTO validateCoupon(CouponValidReqDTO validReqDTO) { public CouponRespDTO validateCoupon(CouponValidReqDTO validReqDTO) {
CouponDO coupon = couponService.validCoupon(validReqDTO.getId(), validReqDTO.getUserId()); CouponDO coupon = couponService.validCoupon(validReqDTO.getId(), validReqDTO.getUserId());
return CouponConvert.INSTANCE.convert(coupon); return CouponConvert.INSTANCE.convert(coupon);
} }
@Override
public void returnUsedCoupon(Long id) {
couponService.returnUsedCoupon(id);
}
} }

View File

@ -54,6 +54,13 @@ public interface CouponService {
*/ */
void useCoupon(Long id, Long userId, Long orderId); void useCoupon(Long id, Long userId, Long orderId);
/**
* 退还已使用的优惠券
*
* @param id 优惠券编号
*/
void returnUsedCoupon(Long id);
/** /**
* 回收优惠劵 * 回收优惠劵
* *
@ -117,10 +124,4 @@ public interface CouponService {
takeCoupon(templateId, CollUtil.newHashSet(userId), CouponTakeTypeEnum.REGISTER); takeCoupon(templateId, CollUtil.newHashSet(userId), CouponTakeTypeEnum.REGISTER);
} }
/**
* 退还已使用的优惠券
*
* @param id 优惠券编号
*/
void returnUsedCoupon(Long id);
} }

View File

@ -102,6 +102,29 @@ public class CouponServiceImpl implements CouponService {
} }
} }
@Override
public void returnUsedCoupon(Long id) {
// 校验存在
CouponDO coupon = couponMapper.selectById(id);
if (coupon == null) {
throw exception(COUPON_NOT_EXISTS);
}
// 校验状态
if (ObjectUtil.notEqual(coupon.getTemplateId(), CouponStatusEnum.USED.getStatus())) {
throw exception(COUPON_STATUS_NOT_USED);
}
// 退还
// TODO @疯狂最好 where status避免可能存在的并发问题
Integer status = LocalDateTimeUtils.beforeNow(coupon.getValidEndTime())
// 退还时可能已经过期了
? CouponStatusEnum.EXPIRE.getStatus()
: CouponStatusEnum.UNUSED.getStatus();
couponMapper.updateById(new CouponDO().setId(id).setStatus(status));
// TODO 增加优惠券变动记录
}
@Override @Override
@Transactional @Transactional
public void deleteCoupon(Long id) { public void deleteCoupon(Long id) {
@ -202,27 +225,4 @@ public class CouponServiceImpl implements CouponService {
userIds.removeIf(userId -> MapUtil.getInt(userTakeCountMap, userId, 0) >= couponTemplate.getTakeLimitCount()); userIds.removeIf(userId -> MapUtil.getInt(userTakeCountMap, userId, 0) >= couponTemplate.getTakeLimitCount());
} }
@Override
public void returnUsedCoupon(Long id) {
// 校验存在
CouponDO coupon = couponMapper.selectById(id);
if (coupon == null) {
throw exception(COUPON_NOT_EXISTS);
}
// 校验状态
if (!CouponStatusEnum.USED.getStatus().equals(coupon.getStatus())) {
throw exception(COUPON_STATUS_NOT_USED);
}
// 退还
Integer status = LocalDateTimeUtils.beforeNow(coupon.getValidEndTime())
// 退还时可能已经过期了
? CouponStatusEnum.EXPIRE.getStatus()
: CouponStatusEnum.UNUSED.getStatus();
couponMapper.updateById(new CouponDO().setId(id).setStatus(status));
// TODO 增加优惠券变动记录
}
} }

View File

@ -699,7 +699,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
// 3.回滚优惠券 // 3.回滚优惠券
couponApi.returnUsedCoupon(order.getCouponId()); couponApi.returnUsedCoupon(order.getCouponId());
// 4.回滚积分积分是支付成功后才增加的吧 // 4.回滚积分积分是支付成功后才增加的吧 回复每个项目不同目前看下来确认收货貌似更合适我再看看其它项目的业务选择
// TODO 芋艿OrderLog // TODO 芋艿OrderLog