fix(shop): 修复优惠券领取功能的空指针异常问题
- 增加了对优惠券不存在的检查 -安全地检查和更新优惠券的已领取数量,避免空指针异常 - 在 SQL 查询中使用 COALESCE 函数安全地获取已领取数量
This commit is contained in:
@@ -120,7 +120,15 @@ public class ShopUserCouponController extends BaseController {
|
|||||||
final User loginUser = getLoginUser();
|
final User loginUser = getLoginUser();
|
||||||
if (loginUser == null) return fail("请先登录");
|
if (loginUser == null) return fail("请先登录");
|
||||||
ShopCoupon coupon = couponService.getByIdRel(userCoupon.getCouponId());
|
ShopCoupon coupon = couponService.getByIdRel(userCoupon.getCouponId());
|
||||||
if (coupon.getTotalCount() != -1 && coupon.getReceiveNum() >= coupon.getTotalCount()) return fail("已经被领完了");
|
|
||||||
|
// 检查优惠券是否存在
|
||||||
|
if (coupon == null) return fail("优惠券不存在");
|
||||||
|
|
||||||
|
// 安全地检查已领取数量,避免空指针异常
|
||||||
|
Integer receiveNum = coupon.getReceiveNum();
|
||||||
|
if (receiveNum == null) receiveNum = 0;
|
||||||
|
|
||||||
|
if (coupon.getTotalCount() != -1 && receiveNum >= coupon.getTotalCount()) return fail("已经被领完了");
|
||||||
List<ShopUserCoupon> userCouponList = shopUserCouponService.list(
|
List<ShopUserCoupon> userCouponList = shopUserCouponService.list(
|
||||||
new LambdaQueryWrapper<ShopUserCoupon>()
|
new LambdaQueryWrapper<ShopUserCoupon>()
|
||||||
.eq(ShopUserCoupon::getCouponId, userCoupon.getCouponId())
|
.eq(ShopUserCoupon::getCouponId, userCoupon.getCouponId())
|
||||||
@@ -150,7 +158,11 @@ public class ShopUserCouponController extends BaseController {
|
|||||||
}
|
}
|
||||||
userCoupon.setUserId(getLoginUserId());
|
userCoupon.setUserId(getLoginUserId());
|
||||||
shopUserCouponService.save(userCoupon);
|
shopUserCouponService.save(userCoupon);
|
||||||
coupon.setReceiveNum(coupon.getReceiveNum() + 1);
|
|
||||||
|
// 安全地更新已领取数量,避免空指针异常
|
||||||
|
Integer currentReceiveNum = coupon.getReceiveNum();
|
||||||
|
if (currentReceiveNum == null) currentReceiveNum = 0;
|
||||||
|
coupon.setReceiveNum(currentReceiveNum + 1);
|
||||||
couponService.updateById(coupon);
|
couponService.updateById(coupon);
|
||||||
return success("领取成功");
|
return success("领取成功");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,8 @@
|
|||||||
|
|
||||||
<!-- 关联查询sql -->
|
<!-- 关联查询sql -->
|
||||||
<sql id="selectSql">
|
<sql id="selectSql">
|
||||||
SELECT a.*
|
SELECT a.*,
|
||||||
|
COALESCE((SELECT COUNT(*) FROM shop_user_coupon suc WHERE suc.coupon_id = a.id AND suc.deleted = 0), 0) AS receive_num
|
||||||
FROM shop_coupon a
|
FROM shop_coupon a
|
||||||
<where>
|
<where>
|
||||||
<if test="param.id != null">
|
<if test="param.id != null">
|
||||||
|
|||||||
Reference in New Issue
Block a user