From 4eeeb59f6c514b61c78aec2acc95cff4807810e1 Mon Sep 17 00:00:00 2001 From: peng <peng.com> Date: 星期五, 05 九月 2025 10:52:49 +0800 Subject: [PATCH] 抽奖活动中奖跳转 --- framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java | 4 ++ manager-api/src/main/java/cn/lili/controller/lmk/CustomerBlackController.java | 2 framework/src/main/java/cn/lili/modules/lmk/service/impl/PrizeServiceImpl.java | 49 +++++++++++++++++++++++- framework/src/main/java/cn/lili/modules/lmk/domain/vo/PrizeResultVO.java | 48 ++++++++++++++++++++++++ README.md | 8 ++++ 5 files changed, 107 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index fdf869a..33883c6 100644 --- a/README.md +++ b/README.md @@ -173,3 +173,11 @@ 鍚姩锛歑xlJobAdminApplication鍚庤闂細http://127.0.0.1:9001/xxl-job-admin/ 鐢ㄦ埛鍚嶏細admin 瀵嗙爜锛�111111 + + +鏈嶅姟鍣ㄦ儏鍐� +java鏈嶅姟/mnt/java +h5椤甸潰/myk/html +nginx閰嶇疆/www/server/panel/vhost/nginx/www.meiyikuang.com.conf 鍩熷悕杞彂鏈嶅姟 +/www/server/nginx/conf/nginx.conf 杞彂鍒板叿浣撴湇鍔″櫒 + diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/PrizeResultVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/PrizeResultVO.java new file mode 100644 index 0000000..e067590 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/PrizeResultVO.java @@ -0,0 +1,48 @@ +package cn.lili.modules.lmk.domain.vo; + +import cn.lili.mybatis.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * 娲诲姩濂栧搧鍏宠仈琛� + * + * @author peng + * @since 2025-08-14 + */ +@Data +public class PrizeResultVO extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 鎶藉娲诲姩id */ + private String prizeActivityId; + + /** 濂栧搧id */ + private String prizeId; + + /** 濂栧搧鍐呭 */ + private String prizeContent; + + /** 濂栧搧鏁伴噺 */ + private Integer prizeNum; + + /** 姣忔棩鏈�澶т腑濂栨暟 */ + private Integer maxPreDay; + + /** 涓皢姒傜巼 */ + private BigDecimal prizeProbability; + + /** 涔愯閿� */ + private Integer version; + + /** 鍓╀綑鏁伴噺 */ + private Integer remainNum; + /** + * 浼樻儬鍗穒d + */ + private String couponId; +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/PrizeServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/PrizeServiceImpl.java index 60f23e6..60c0963 100644 --- a/framework/src/main/java/cn/lili/modules/lmk/service/impl/PrizeServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/PrizeServiceImpl.java @@ -5,6 +5,7 @@ import cn.lili.common.properties.RocketmqCustomProperties; import cn.lili.common.security.AuthUser; import cn.lili.common.security.context.UserContext; +import cn.lili.common.utils.BeanUtil; import cn.lili.common.utils.StringUtils; import cn.lili.modules.lmk.domain.entity.*; import cn.lili.modules.lmk.domain.form.AddPrizeNumForm; @@ -12,20 +13,26 @@ import cn.lili.modules.lmk.domain.vo.PrizeDetailVO; import cn.lili.modules.lmk.domain.vo.PrizeProbabilityVO; import cn.lili.modules.lmk.domain.vo.PrizeRecordTimeVO; +import cn.lili.modules.lmk.domain.vo.PrizeResultVO; import cn.lili.modules.lmk.enums.general.*; import cn.lili.modules.lmk.service.*; +import cn.lili.modules.promotion.entity.dos.Coupon; +import cn.lili.modules.promotion.service.CouponService; import cn.lili.mybatis.BaseEntity; import cn.lili.rocketmq.RocketmqSendCallbackBuilder; import cn.lili.utils.COSUtil; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; +import org.springframework.beans.BeanUtils; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -42,6 +49,7 @@ import java.util.function.Function; import java.util.stream.Collectors; +@Slf4j @Service @RequiredArgsConstructor public class PrizeServiceImpl implements PrizeService { @@ -57,6 +65,7 @@ private final RocketmqCustomProperties rocketmqCustomProperties; private final RocketMQTemplate rocketMQTemplate; private final COSUtil cosUtil; + private final CouponService couponService; @Override @Transactional(rollbackFor = Exception.class) @@ -216,6 +225,12 @@ } BigDecimal max = currentProbability.multiply(BigDecimal.valueOf(100)); BigDecimal bigDecimal = generateRandom(BigDecimal.ONE, max); + try { + log.info("鎶藉鍙风爜涓�---------------------------->{}", bigDecimal); + log.info("鎶藉姒傜巼闆嗗悎涓�------------------------->{}", JSONObject.toJSONString(prizeProbabilityList)); + } catch (Exception e) { + log.error("鎵撳嵃鎶藉淇℃伅鎶ラ敊----------------------->", e); + } for (PrizeProbabilityVO prizeProbabilityVO : prizeProbabilityList) { BigDecimal minP = prizeProbabilityVO.getProbability()[0][0]; BigDecimal maxP = prizeProbabilityVO.getProbability()[0][1]; @@ -223,6 +238,31 @@ prizeWon = prizeProbabilityVO.getActivityPrizeRefId(); break; } + } + Coupon coupon = null; + //鏍¢獙浼樻儬鍗锋槸鍚﹀厑璁哥敤鎴峰棰嗕笉鍏佽褰撴湭涓澶勭悊 + if (prizeWon != null) { + ActivityRefPrize activityRefPrize = canPrizeMap.get(prizeWon); + String prizeDrawId = activityRefPrize.getPrizeId(); + PrizeDraw prizeDraw = prizeDrawService.getById(prizeDrawId); + String couponId = prizeDraw.getCouponId(); + coupon = couponService.getById(couponId); + if (coupon == null) { + prizeWon = null; + } else { + Integer couponLimitNum = coupon.getCouponLimitNum(); + //鑾峰彇鐢ㄦ埛杩欎釜浼樻儬鍗风殑涓鎯呭喌 + LambdaQueryWrapper<PrizeRecord> eq = Wrappers.<PrizeRecord>lambdaQuery() + .eq(PrizeRecord::getUserId, userId) + .eq(PrizeRecord::getPrizeActivityId, prizeId) + .eq(PrizeRecord::getPrizeId, prizeDrawId); + int size = prizeRecordService.list(eq).size(); + if ( couponLimitNum>0 && size >= couponLimitNum) { + log.info("瑙﹀彂浼樻儬鍗烽鍙栭檺鍒�---------->{}",prizeWon); + prizeWon = null; + } + } + } //鏈腑濂栫殑鎯呭喌 if (prizeWon == null) { @@ -290,6 +330,7 @@ // if (!lock.equals(nowLock)) { // throw new RuntimeException("褰撳墠娲诲姩澶伀鐖嗕簡璇风◢鍚庡啀璇�"); // } + String couponId = coupon.getId(); // 璧癿q寮傛澶勭悊 TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() { @Override @@ -298,7 +339,10 @@ rocketMQTemplate.asyncSend(destination, JSON.toJSONString(prizeRecord), RocketmqSendCallbackBuilder.commonCallback()); } }); - return Result.ok().data(activityRefPrize); + PrizeResultVO prizeResultVO = new PrizeResultVO(); + BeanUtils.copyProperties(activityRefPrize, prizeResultVO); + prizeResultVO.setCouponId(couponId); + return Result.ok().data(prizeResultVO); } public static BigDecimal generateRandom(BigDecimal min, BigDecimal max) { @@ -468,8 +512,7 @@ if (actionEnum == null) { throw new ServiceException("褰撳墠绫诲瀷涓嶅瓨鍦�"); } - Boolean check ; - //todo 杩涜鏁版嵁鏍¢獙 + //todo 杩涜鏁版嵁鏍¢獙 switch (actionEnum) { case BUY: System.err.println("BUY"); diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java index 8102863..4d9dd28 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java @@ -71,6 +71,7 @@ import cn.lili.trigger.util.DelayQueueTools; import cn.lili.utils.COSUtil; import cn.lili.utils.CommonUtil; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -672,9 +673,12 @@ public Order delivery(String orderSn, String logisticsNo, String logisticsId) { Order order = OperationalJudgment.judgment(this.getBySn(orderSn)); //濡傛灉璁㈠崟鏈彂璐э紝骞朵笖璁㈠崟鐘舵�佸�肩瓑浜庡緟鍙戣揣 + log.info("鑾峰彇鍒扮殑璁㈠崟淇℃伅涓簕}", JSON.toJSONString(order)); if (order.getDeliverStatus().equals(DeliverStatusEnum.UNDELIVERED.name()) && order.getOrderStatus().equals(OrderStatusEnum.UNDELIVERED.name())) { //鑾峰彇瀵瑰簲鐗╂祦 Logistics logistics = logisticsService.getById(logisticsId); + log.info("鑾峰彇鍒扮殑鐗╂祦淇℃伅id涓簕}", logisticsId); + log.info("鑾峰彇鍒扮殑鐗╂祦淇℃伅涓簕}", JSON.toJSONString(logistics)); if (logistics == null) { throw new ServiceException(ResultCode.ORDER_LOGISTICS_ERROR); } diff --git a/manager-api/src/main/java/cn/lili/controller/lmk/CustomerBlackController.java b/manager-api/src/main/java/cn/lili/controller/lmk/CustomerBlackController.java index 166bb37..58488b6 100644 --- a/manager-api/src/main/java/cn/lili/controller/lmk/CustomerBlackController.java +++ b/manager-api/src/main/java/cn/lili/controller/lmk/CustomerBlackController.java @@ -14,7 +14,7 @@ import java.util.List; import org.springframework.validation.annotation.Validated; import javax.validation.constraints.NotEmpty; -import io.swagger.annotations.Api;; +import io.swagger.annotations.Api; import org.springframework.web.bind.annotation.*; /** -- Gitblit v1.8.0