From 64afdb6371aef321db882f3659ba1d2c2e82ad41 Mon Sep 17 00:00:00 2001
From: peng <peng.com>
Date: 星期五, 26 九月 2025 09:58:32 +0800
Subject: [PATCH] 扫码领取门店优惠卷调整
---
framework/src/main/java/cn/lili/modules/lmk/domain/entity/StoreCoupon.java | 4
buyer-api/src/main/java/cn/lili/controller/lmk/StoreCouponClaimController.java | 33 +++++++++++
framework/src/main/java/cn/lili/modules/lmk/service/impl/StoreCouponClaimRecordServiceImpl.java | 73 ++++++++++++++++++++++++
framework/src/main/java/cn/lili/modules/lmk/service/impl/StoreCouponServiceImpl.java | 6 ++
framework/src/main/java/cn/lili/modules/lmk/domain/entity/StoreCouponClaimRecord.java | 4
framework/src/main/java/cn/lili/modules/lmk/service/StoreCouponService.java | 4 +
framework/src/main/java/cn/lili/modules/lmk/service/StoreCouponClaimRecordService.java | 4 +
7 files changed, 123 insertions(+), 5 deletions(-)
diff --git a/buyer-api/src/main/java/cn/lili/controller/lmk/StoreCouponClaimController.java b/buyer-api/src/main/java/cn/lili/controller/lmk/StoreCouponClaimController.java
new file mode 100644
index 0000000..dd7c8cd
--- /dev/null
+++ b/buyer-api/src/main/java/cn/lili/controller/lmk/StoreCouponClaimController.java
@@ -0,0 +1,33 @@
+package cn.lili.controller.lmk;
+
+import cn.lili.base.Result;
+import cn.lili.modules.lmk.service.CouponVirtualService;
+import cn.lili.modules.lmk.service.StoreCouponClaimRecordService;
+import cn.lili.modules.lmk.service.StoreCouponService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+@Validated
+@RequiredArgsConstructor
+@Api(value = "灏忕▼搴忚喘鐗╁晢鍝侀鍙栦紭鎯犲嵎鎺ュ彛", tags = "灏忕▼搴忚喘鐗╁晢鍝侀鍙栦紭鎯犲嵎鎺ュ彛")
+@RestController
+@RequestMapping("/buyer/lmk/store/coupon")
+public class StoreCouponClaimController {
+ private final StoreCouponClaimRecordService storeCouponClaimRecordService;
+ private final StoreCouponService storeCouponService;
+
+
+ @PostMapping("/{id}")
+ @ApiOperation(value = "棰嗗彇浼樻儬鍗�", notes = "棰嗗彇浼樻儬鍗�")
+ public Result claimCoupon(@PathVariable String id){
+ return storeCouponClaimRecordService.claimCoupon(id);
+ }
+ @GetMapping("/{id}")
+ @ApiOperation(value = "鑾峰彇浼樻儬鍗蜂俊鎭�", notes = "鑾峰彇浼樻儬鍗蜂俊鎭�")
+ public Result getCoupon(@PathVariable String id){
+ return storeCouponService.getCoupon(id);
+ }
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/StoreCoupon.java b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/StoreCoupon.java
index 94b9f67..93d29fa 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/StoreCoupon.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/StoreCoupon.java
@@ -24,11 +24,11 @@
@TableField("store_name")
/** 搴楅摵鍚嶇О */
- private Long storeName;
+ private String storeName;
@TableField("coupon_id")
/** 浼樻儬鍗穒d */
- private Long couponId;
+ private String couponId;
@TableField("coupon_name")
/** 浼樻儬鍗峰悕绉� */
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/StoreCouponClaimRecord.java b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/StoreCouponClaimRecord.java
index f29c89a..bd122cc 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/StoreCouponClaimRecord.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/StoreCouponClaimRecord.java
@@ -24,7 +24,7 @@
@TableField("coupon_id")
/** 浼樻儬鍗穒d */
- private Long couponId;
+ private String couponId;
@TableField("coupon_name")
/** 浼樻儬鍗峰悕绉� */
@@ -36,7 +36,7 @@
@TableField("user_id")
/** 鐢ㄦ埛id */
- private Long userId;
+ private String userId;
}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/StoreCouponClaimRecordService.java b/framework/src/main/java/cn/lili/modules/lmk/service/StoreCouponClaimRecordService.java
index eaa51fb..fbf3951 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/service/StoreCouponClaimRecordService.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/StoreCouponClaimRecordService.java
@@ -5,6 +5,8 @@
import cn.lili.base.Result;
import cn.lili.modules.lmk.domain.form.StoreCouponClaimRecordForm;
import cn.lili.modules.lmk.domain.query.StoreCouponClaimRecordQuery;
+import org.springframework.web.bind.annotation.PathVariable;
+
import java.util.List;
/**
@@ -62,4 +64,6 @@
* @return
*/
Result all();
+
+ Result claimCoupon(String id);
}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/StoreCouponService.java b/framework/src/main/java/cn/lili/modules/lmk/service/StoreCouponService.java
index 47e9669..44c4759 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/service/StoreCouponService.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/StoreCouponService.java
@@ -5,6 +5,8 @@
import cn.lili.base.Result;
import cn.lili.modules.lmk.domain.form.StoreCouponForm;
import cn.lili.modules.lmk.domain.query.StoreCouponQuery;
+import org.springframework.web.bind.annotation.PathVariable;
+
import java.util.List;
/**
@@ -62,4 +64,6 @@
* @return
*/
Result all();
+
+ Result getCoupon(String id);
}
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 375b685..dc31f6c 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
@@ -1,18 +1,35 @@
package cn.lili.modules.lmk.service.impl;
+import cn.lili.common.exception.ServiceException;
+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.enums.general.PrizeStatusEnum;
+import cn.lili.modules.lmk.service.StoreCouponService;
+import cn.lili.modules.promotion.entity.dos.MemberCoupon;
+import cn.lili.modules.promotion.service.MemberCouponService;
+import cn.lili.rocketmq.RocketmqSendCallbackBuilder;
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import cn.lili.modules.lmk.domain.entity.StoreCouponClaimRecord;
import cn.lili.modules.lmk.mapper.StoreCouponClaimRecordMapper;
import cn.lili.modules.lmk.service.StoreCouponClaimRecordService;
import cn.lili.base.Result;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import cn.lili.modules.lmk.domain.form.StoreCouponClaimRecordForm;
import cn.lili.modules.lmk.domain.vo.StoreCouponClaimRecordVO;
import cn.lili.modules.lmk.domain.query.StoreCouponClaimRecordQuery;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Service;
import lombok.RequiredArgsConstructor;
import cn.lili.utils.PageUtil;
import org.springframework.beans.BeanUtils;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.support.TransactionSynchronization;
+import org.springframework.transaction.support.TransactionSynchronizationManager;
import org.springframework.util.Assert;
import java.util.List;
@@ -29,7 +46,10 @@
public class StoreCouponClaimRecordServiceImpl extends ServiceImpl<StoreCouponClaimRecordMapper, StoreCouponClaimRecord> implements StoreCouponClaimRecordService {
private final StoreCouponClaimRecordMapper storeCouponClaimRecordMapper;
-
+ private final RedissonClient redissonClient;
+ private static final String STORE_COUPON_CLAIM = "store_coupon_claim:";
+ private final MemberCouponService memberCouponService;
+ private final StoreCouponService storeCouponService;
/**
* 娣诲姞
* @param form
@@ -116,4 +136,55 @@
.collect(Collectors.toList());
return Result.ok().data(vos);
}
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Result claimCoupon(String id) {
+ AuthUser currentUser = UserContext.getCurrentUser();
+ if (currentUser == null) {
+ throw new ServiceException("褰撳墠鐢ㄦ埛娌℃湁鐧诲綍鏃犳硶棰嗗彇");
+ }
+ String userId = currentUser.getId();
+ String nickName = currentUser.getNickName();
+
+ //閿佷綇搴楅摵鏌愪竴涓紭鎯犲嵎
+ RLock redissonLock = redissonClient.getLock(STORE_COUPON_CLAIM + id);
+ try {
+ redissonLock.lock();
+ StoreCoupon storeCoupon = storeCouponService.getById(id);
+ if (storeCoupon == null) {
+ throw new ServiceException("褰撳墠搴楅摵涓嶅瓨鍦ㄤ紭鎯犲嵎");
+ }
+ //澶勭悊骞傜瓑闂闄愬埗涓�涓敤鎴峰彧鑳借搴楅摵棰嗗彇涓�绉嶄紭鎯犲嵎
+ LambdaQueryWrapper<StoreCouponClaimRecord> memCoupon = Wrappers.<StoreCouponClaimRecord>lambdaQuery()
+ .eq(StoreCouponClaimRecord::getUserId, userId)
+ .eq(StoreCouponClaimRecord::getCouponId, storeCoupon.getCouponId());
+ List<StoreCouponClaimRecord> list = this.list(memCoupon);
+ if (!list.isEmpty()){
+ throw new ServiceException("褰撳墠鐢ㄦ埛宸茬粡棰嗗彇杩囦簡鏃犳硶鍐嶆棰嗗彇");
+ }
+ //棰嗗彇瀵瑰簲鐨勪紭鎯犲嵎鍐欏叆璁板綍
+ memberCouponService.receiveCoupon(storeCoupon.getCouponId(),userId , nickName);
+ StoreCouponClaimRecord storeCouponClaimRecord = new StoreCouponClaimRecord();
+ storeCouponClaimRecord.setCouponId(storeCoupon.getCouponId());
+ storeCouponClaimRecord.setCouponName(storeCoupon.getCouponName());
+ storeCouponClaimRecord.setStoreId(storeCoupon.getStoreId());
+ storeCouponClaimRecord.setStoreName(storeCoupon.getStoreName());
+ storeCouponClaimRecord.setUserId(userId);
+ this.save(storeCouponClaimRecord);
+ //棰嗗彇鎴愬姛杩斿洖浼樻儬鍗穒d鐢ㄤ簬璺宠浆璐墿浣跨敤
+ return Result.ok().data(storeCoupon.getCouponId());
+
+ } finally {
+ TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
+ @Override
+ public void afterCommit() {
+ if (redissonLock.isHeldByCurrentThread()) {
+ redissonLock.unlock();
+ }
+ }
+ });
+
+ }
+ }
}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/StoreCouponServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/StoreCouponServiceImpl.java
index 13120d7..c640c03 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/service/impl/StoreCouponServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/StoreCouponServiceImpl.java
@@ -116,4 +116,10 @@
.collect(Collectors.toList());
return Result.ok().data(vos);
}
+
+ @Override
+ public Result getCoupon(String id) {
+ StoreCoupon storeCoupon = this.getById(id);
+ return Result.ok().data(storeCoupon);
+ }
}
--
Gitblit v1.8.0