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