【SpringBoot篇】优惠券秒杀 — 添加优惠劵操作(基本操作 | 一人仅一张券的操作)
@Service
public class CouponService {
@Autowired
private CouponMapper couponMapper;
@Autowired
private UserService userService;
public void addCoupon(Coupon coupon) {
// 验证优惠券是否已经存在
Coupon existCoupon = couponMapper.selectByPrimaryKey(coupon.getId());
if (existCoupon != null) {
throw new CustomException(ResultCode.COUPON_EXIST);
}
// 添加新的优惠券
int result = couponMapper.insert(coupon);
if (result == 0) {
throw new CustomException(ResultCode.UNKNOWN_ERROR);
}
}
public void addCouponOnlyOnce(Coupon coupon, Long userId) {
// 验证用户是否已经获得过优惠券
CouponExample example = new CouponExample();
example.createCriteria()
.andUserIdEqualTo(userId)
.andCouponCodeEqualTo(coupon.getCouponCode());
if (couponMapper.selectByExample(example).size() > 0) {
throw new CustomException(ResultCode.COUPON_EXIST_FOR_USER);
}
// 添加新的优惠券,并记录用户ID
coupon.setUserId(userId);
addCoupon(coupon);
// 更新用户优惠券数据
userService.updateUserCouponUsed(userId, 1);
}
}
在这个代码实例中,我们定义了CouponService
服务类,并在其中添加了addCoupon
和addCouponOnlyOnce
两个方法。addCoupon
方法负责添加新的优惠券,但不检查用户是否已经获得过该优惠券。addCouponOnlyOnce
方法在添加优惠券之前,会检查用户是否已经拥有该优惠券,如果已经拥有,则抛出异常;如果没有,则添加优惠券,并更新用户优惠券相关数据。这样的设计确保了一个用户只能获得一张同样的优惠券。
评论已关闭