peng
昨天 4eeeb59f6c514b61c78aec2acc95cff4807810e1
抽奖活动中奖跳转
4个文件已修改
1个文件已添加
111 ■■■■■ 已修改文件
README.md 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/domain/vo/PrizeResultVO.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/service/impl/PrizeServiceImpl.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manager-api/src/main/java/cn/lili/controller/lmk/CustomerBlackController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
README.md
@@ -173,3 +173,11 @@
启动:XxlJobAdminApplication后访问: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 转发到具体服务器
framework/src/main/java/cn/lili/modules/lmk/domain/vo/PrizeResultVO.java
New file
@@ -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;
    /**
     * 优惠卷id
     */
    private String couponId;
}
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();
        // 走mq异步处理
        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");
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);
            }
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.*;
/**