From 31f7453c6e307909534d760fb1c929eff741cf7c Mon Sep 17 00:00:00 2001 From: peng <peng.com> Date: 星期五, 26 九月 2025 17:26:56 +0800 Subject: [PATCH] 店铺优惠卷调整 --- framework/src/main/java/cn/lili/modules/lmk/service/impl/StoreCouponClaimRecordServiceImpl.java | 55 ++++++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 44 insertions(+), 11 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/StoreCouponClaimRecordServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/StoreCouponClaimRecordServiceImpl.java index dc31f6c..12e0755 100644 --- a/framework/src/main/java/cn/lili/modules/lmk/service/impl/StoreCouponClaimRecordServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/StoreCouponClaimRecordServiceImpl.java @@ -4,8 +4,11 @@ import cn.lili.common.security.AuthUser; import cn.lili.common.security.context.UserContext; import cn.lili.modules.lmk.domain.entity.StoreCoupon; +import cn.lili.modules.lmk.domain.entity.StoreCouponSingle; import cn.lili.modules.lmk.enums.general.PrizeStatusEnum; import cn.lili.modules.lmk.service.StoreCouponService; +import cn.lili.modules.lmk.service.StoreCouponSingleService; +import cn.lili.modules.order.order.entity.enums.ClaimStatusEnum; import cn.lili.modules.promotion.entity.dos.MemberCoupon; import cn.lili.modules.promotion.service.MemberCouponService; import cn.lili.rocketmq.RocketmqSendCallbackBuilder; @@ -50,6 +53,7 @@ private static final String STORE_COUPON_CLAIM = "store_coupon_claim:"; private final MemberCouponService memberCouponService; private final StoreCouponService storeCouponService; + private final StoreCouponSingleService storeCouponSingleService; /** * 娣诲姞 * @param form @@ -147,33 +151,53 @@ String userId = currentUser.getId(); String nickName = currentUser.getNickName(); - //閿佷綇搴楅摵鏌愪竴涓紭鎯犲嵎 + //閿佷綇绀煎搧鐮乮d RLock redissonLock = redissonClient.getLock(STORE_COUPON_CLAIM + id); try { redissonLock.lock(); - StoreCoupon storeCoupon = storeCouponService.getById(id); - if (storeCoupon == null) { - throw new ServiceException("褰撳墠搴楅摵涓嶅瓨鍦ㄤ紭鎯犲嵎"); + LambdaQueryWrapper<StoreCouponSingle> forUpdate = Wrappers.<StoreCouponSingle>lambdaQuery() + .eq(StoreCouponSingle::getId, id).last("FOR UPDATE"); + StoreCouponSingle storeCouponSingle = storeCouponSingleService.getOne(forUpdate); + if (storeCouponSingle == null) { + throw new ServiceException("褰撳墠绀煎搧鐮佷笉瀛樺湪"); + } + if (!ClaimStatusEnum.NOT_CLAIM.name().equals(storeCouponSingle.getClaimStatus())) { + throw new ServiceException("褰撳墠绀煎搧鐮佺姸鎬佸紓甯�"); + } + LambdaQueryWrapper<StoreCouponSingle> claimListQuery = Wrappers.<StoreCouponSingle>lambdaQuery() + .eq(StoreCouponSingle::getClaimUserId, userId) + .eq(StoreCouponSingle::getStoreCoupRef, storeCouponSingle.getStoreCoupRef()) + .eq(StoreCouponSingle::getClaimStatus, ClaimStatusEnum.CLAIM.name()); + List<StoreCouponSingle> claimList = storeCouponSingleService.list(claimListQuery); + if (!claimList.isEmpty()) { + throw new ServiceException("宸茬粡棰嗗彇杩囪绫诲瀷鐨勭ぜ鍝佺爜鏃犳硶棰嗗彇"); } //澶勭悊骞傜瓑闂闄愬埗涓�涓敤鎴峰彧鑳借搴楅摵棰嗗彇涓�绉嶄紭鎯犲嵎 LambdaQueryWrapper<StoreCouponClaimRecord> memCoupon = Wrappers.<StoreCouponClaimRecord>lambdaQuery() .eq(StoreCouponClaimRecord::getUserId, userId) - .eq(StoreCouponClaimRecord::getCouponId, storeCoupon.getCouponId()); + .eq(StoreCouponClaimRecord::getCouponId, storeCouponSingle.getCouponId()); List<StoreCouponClaimRecord> list = this.list(memCoupon); if (!list.isEmpty()){ throw new ServiceException("褰撳墠鐢ㄦ埛宸茬粡棰嗗彇杩囦簡鏃犳硶鍐嶆棰嗗彇"); } + //鏇存柊鍗曞搧琚鍙栫殑璁板綍 + storeCouponSingle.setClaimStatus(ClaimStatusEnum.CLAIM.name()); + storeCouponSingle.setClaimUserId(userId); + storeCouponSingle.setClaimUserName(nickName); + storeCouponSingleService.updateById(storeCouponSingle); + //鏍¢獙鏄惁鍦ㄥ崟鍝佸嵎绫婚鍙栬繃 + //棰嗗彇瀵瑰簲鐨勪紭鎯犲嵎鍐欏叆璁板綍 - memberCouponService.receiveCoupon(storeCoupon.getCouponId(),userId , nickName); + memberCouponService.receiveCoupon(storeCouponSingle.getCouponId(),userId , nickName); StoreCouponClaimRecord storeCouponClaimRecord = new StoreCouponClaimRecord(); - storeCouponClaimRecord.setCouponId(storeCoupon.getCouponId()); - storeCouponClaimRecord.setCouponName(storeCoupon.getCouponName()); - storeCouponClaimRecord.setStoreId(storeCoupon.getStoreId()); - storeCouponClaimRecord.setStoreName(storeCoupon.getStoreName()); + storeCouponClaimRecord.setCouponId(storeCouponSingle.getCouponId()); + storeCouponClaimRecord.setCouponName(storeCouponSingle.getCouponName()); + storeCouponClaimRecord.setStoreId(storeCouponSingle.getStoreId()); + storeCouponClaimRecord.setStoreName(storeCouponSingle.getStoreName()); storeCouponClaimRecord.setUserId(userId); this.save(storeCouponClaimRecord); //棰嗗彇鎴愬姛杩斿洖浼樻儬鍗穒d鐢ㄤ簬璺宠浆璐墿浣跨敤 - return Result.ok().data(storeCoupon.getCouponId()); + return Result.ok().data(storeCouponSingle.getCouponId()); } finally { TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() { @@ -183,6 +207,15 @@ redissonLock.unlock(); } } + + @Override + public void afterCompletion(int status) { + // 纭繚鍗充娇鍦ㄤ簨鍔″洖婊氱殑鎯呭喌涓嬩篃鑳介噴鏀鹃攣 + if (redissonLock.isHeldByCurrentThread()) { + redissonLock.unlock(); + } + } + }); } -- Gitblit v1.8.0