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