From 3565ef641c4204aaf7d9a2eaf770ca034110f67a Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期四, 20 十一月 2025 09:16:04 +0800
Subject: [PATCH] 名称加*
---
framework/src/main/java/cn/lili/modules/lmk/service/impl/CouponVirtualServiceImpl.java | 141 +++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 141 insertions(+), 0 deletions(-)
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/CouponVirtualServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/CouponVirtualServiceImpl.java
index d7a3acb..72fb330 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/service/impl/CouponVirtualServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/CouponVirtualServiceImpl.java
@@ -1,22 +1,45 @@
package cn.lili.modules.lmk.service.impl;
import cn.lili.base.Result;
+import cn.lili.common.exception.ServiceException;
+import cn.lili.common.security.AuthUser;
+import cn.lili.common.security.context.UserContext;
+import cn.lili.modules.goods.service.GoodsService;
import cn.lili.modules.lmk.domain.entity.CouponVirtual;
import cn.lili.modules.lmk.domain.form.CouponVirtualForm;
import cn.lili.modules.lmk.domain.query.CouponVirtualQuery;
import cn.lili.modules.lmk.domain.vo.CouponVirtualVO;
+import cn.lili.modules.lmk.domain.vo.CouponVirtualVOInfo;
import cn.lili.modules.lmk.mapper.CouponVirtualMapper;
import cn.lili.modules.lmk.service.CouponVirtualService;
+import cn.lili.modules.order.order.entity.dos.Order;
+import cn.lili.modules.order.order.entity.dos.OrderItem;
+import cn.lili.modules.order.order.entity.enums.ClaimStatusEnum;
+import cn.lili.modules.order.order.entity.enums.OrderStatusEnum;
+import cn.lili.modules.order.order.entity.enums.RefundStatusEnum;
+import cn.lili.modules.order.order.entity.enums.ShareStatusEnum;
+import cn.lili.modules.order.order.service.OrderItemService;
+import cn.lili.modules.order.order.service.OrderService;
+import cn.lili.modules.promotion.service.MemberCouponService;
+import cn.lili.utils.COSUtil;
import cn.lili.utils.PageUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Service;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
+import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
+import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@@ -28,12 +51,27 @@
*/
@Service
@RequiredArgsConstructor
+@Slf4j
public class CouponVirtualServiceImpl extends ServiceImpl<CouponVirtualMapper, CouponVirtual> implements CouponVirtualService {
private final CouponVirtualMapper couponVirtualMapper;
+ private final RedissonClient redissonClient;
+
+ private final static String LOCK_COUPON_VIRTUAL_CARD_ID = "lock_coupon_virtual_card_id:";
+
+ private final OrderItemService orderItemService;
+
+ private final OrderService orderService;
+
+ private final MemberCouponService memberCouponService;
+
+ private final GoodsService goodsService;
+
+ private final COSUtil cosUtil;
/**
* 娣诲姞
+ *
* @param form
* @return
*/
@@ -46,6 +84,7 @@
/**
* 淇敼
+ *
* @param form
* @return
*/
@@ -62,6 +101,7 @@
/**
* 鎵归噺鍒犻櫎
+ *
* @param ids
* @return
*/
@@ -73,6 +113,7 @@
/**
* id鍒犻櫎
+ *
* @param id
* @return
*/
@@ -84,6 +125,7 @@
/**
* 鍒嗛〉鏌ヨ
+ *
* @param query
* @return
*/
@@ -91,11 +133,18 @@
public Result page(CouponVirtualQuery query) {
IPage<CouponVirtualVO> page = PageUtil.getPage(query, CouponVirtualVO.class);
baseMapper.getPage(page, query);
+ for (CouponVirtualVO record : page.getRecords()) {
+ String original = record.getOriginal();
+ if (StringUtils.isNotBlank(original) && !original.contains("http")) {
+ record.setOriginal(cosUtil.getPreviewUrl(original));
+ }
+ }
return Result.ok().data(page.getRecords()).total(page.getTotal());
}
/**
* 鏍规嵁id鏌ユ壘
+ *
* @param id
* @return
*/
@@ -108,6 +157,7 @@
/**
* 鍒楄〃
+ *
* @return
*/
@Override
@@ -118,4 +168,95 @@
.collect(Collectors.toList());
return Result.ok().data(vos);
}
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Result tackCardById(String cardId) {
+ log.info("琚鍙栫殑绀煎搧鍗$殑id涓�--------------------------->{}",cardId);
+ AuthUser currentUser = UserContext.getCurrentUser();
+ if (currentUser == null) {
+ throw new ServiceException("褰撳墠鐢ㄦ埛娌℃湁鐧诲綍");
+ }
+ String userId = currentUser.getId();
+ String nickName = currentUser.getNickName();
+ RLock lock = null;
+ try {
+ lock = redissonClient.getLock(LOCK_COUPON_VIRTUAL_CARD_ID + cardId);
+ lock.lock();
+ LambdaQueryWrapper<CouponVirtual> forUpdate = Wrappers.<CouponVirtual>lambdaQuery().eq(CouponVirtual::getId, cardId).last("FOR UPDATE");
+ CouponVirtual cardInfo = this.getOne(forUpdate);
+ if (cardInfo == null) {
+ throw new ServiceException("褰撳墠浼樻儬鍗蜂笉瀛樺湪");
+ }
+ if (ClaimStatusEnum.CLAIM.name().equals(cardInfo.getClaimStatus())) {
+ throw new ServiceException("褰撳墠璐墿鍗″凡缁忚棰嗗彇");
+ }
+ //鏍¢獙璁㈠崟鐘舵�佹槸鍚︽甯�
+ String orderNo = cardInfo.getOrderId();
+ if (StringUtils.isBlank(orderNo)) {
+ throw new ServiceException("褰撳墠璁㈠崟涓嶅瓨鍦ㄦ棤娉曢鍙�");
+ }
+ String itemOrderId = cardInfo.getItemOrderId();
+ Order order = orderService.getBySn(orderNo);
+ if (order == null) {
+ throw new ServiceException("褰撳墠璁㈠崟涓嶅瓨鍦ㄦ棤娉曢鍙�");
+ }
+ if (!OrderStatusEnum.COMPLETED.name().equals(order.getOrderStatus())) {
+ throw new ServiceException("璁㈠崟鐘舵�佸紓甯告棤娉曢鍙�");
+ }
+ OrderItem orderItem = orderItemService.getById(itemOrderId);
+ if (orderItem == null) {
+ throw new ServiceException("褰撳墠璁㈠崟涓嶅瓨鍦�");
+ }
+ String orderSn = orderItem.getOrderSn();
+ if (!orderNo.equals(orderSn)) {
+ throw new ServiceException("璁㈠崟鏃犳硶瀵瑰簲鏃犳硶棰嗗彇");
+ }
+ if (!RefundStatusEnum.NO_REFUND.name().equals(orderItem.getIsRefund())) {
+ throw new ServiceException("褰撳墠璁㈠崟宸查��娆炬棤娉曢鍙�");
+ }
+ //棰嗗彇瀵瑰簲鐨勪紭鎯犲嵎
+ memberCouponService.receiveCoupon(cardInfo.getCouponId(),userId , nickName);
+ cardInfo.setUserNickname(nickName);
+ cardInfo.setUserId(userId);
+ cardInfo.setClaimStatus(ClaimStatusEnum.CLAIM.name());
+ cardInfo.setShareStatus(ShareStatusEnum.SHARE.name());
+ cardInfo.setClaimTime(new Date());
+ boolean b = this.updateById(cardInfo);
+ //鍘婚鍙栦紭鎯犲嵎
+ if (!b) {
+ throw new RuntimeException("棰嗗彇澶辫触");
+ }
+ return Result.ok().data(cardInfo.getCouponId());
+ } finally {
+ if ( lock != null && lock.isHeldByCurrentThread()) {
+ lock.unlock();
+ }
+ }
+ }
+
+ @Override
+ public Result changShareStatus(String cardId) {
+ CouponVirtual couponVirtual = this.getById(cardId);
+ couponVirtual.setShareStatus(ShareStatusEnum.SHARE.name());
+ this.updateById(couponVirtual);
+ return Result.ok();
+ }
+
+ @Override
+ public Result couponCardInfo(String cardId) {
+ CouponVirtual couponVirtual = this.getById(cardId);
+ if (couponVirtual == null) {
+ throw new ServiceException("褰撳墠璐墿鍗′笉瀛樺湪");
+ }
+ CouponVirtualVOInfo virtualVOInfo = new CouponVirtualVOInfo();
+ BeanUtils.copyProperties(couponVirtual, virtualVOInfo);
+
+ String goodsId = virtualVOInfo.getGoodsId();
+ String url = goodsService.getById(goodsId).getOriginal();
+ if (StringUtils.isNotBlank(url) && !url.contains("http")) {
+ virtualVOInfo.setGoodsUrl(cosUtil.getPreviewUrl(url));
+ }
+ return Result.ok().data(virtualVOInfo);
+ }
}
--
Gitblit v1.8.0