Pu Zhibing
2025-05-08 afdd96be3f266ee04e7c4a427eb010708e1cace3
新增加注册抽奖校验
4个文件已修改
10个文件已添加
461 ■■■■ 已修改文件
ruoyi-api/pom.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-goods/pom.xml 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/LotteryEvent.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/factory/LotteryEventFallbackFactory.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/service/LotteryEventClient.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-goods/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-auth/pom.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java 157 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/pom.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/business/LotteryEventController.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/LotteryEventMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/LotteryEventServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/ILotteryEventService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/resources/mapper/lottery/LotteryEventMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/pom.xml
@@ -10,6 +10,7 @@
    <modules>
        <module>ruoyi-api-system</module>
        <module>ruoyi-api-goods</module>
    </modules>
    <artifactId>ruoyi-api</artifactId>
ruoyi-api/ruoyi-api-goods/pom.xml
New file
@@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://maven.apache.org/POM/4.0.0"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <groupId>com.ruoyi</groupId>
        <artifactId>ruoyi-api</artifactId>
        <version>3.6.2</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>ruoyi-api-goods</artifactId>
    <description>
        ruoyi-api-goods系统接口模块
    </description>
    <dependencies>
        <!-- RuoYi Common Core-->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-common-core</artifactId>
        </dependency>
        <!-- MYBATIS PLUS-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.1</version>
            <!-- pagehelper 包含该依赖存在版本冲突,因此不建议和 mp 一起混用 -->
            <exclusions>
                <exclusion>
                    <groupId>com.github.jsqlparser</groupId>
                    <artifactId>jsqlparser</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-annotation</artifactId>
            <version>3.4.1</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generate</artifactId>
            <version>2.3.3</version>
        </dependency>
    </dependencies>
</project>
ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/LotteryEvent.java
New file
@@ -0,0 +1,108 @@
package com.ruoyi.goods.api.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
 * @author zhibing.pu
 * @Date 2025/5/8 17:03
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("lottery_event")
public class LotteryEvent {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.INPUT)
    private String id;
    /**
     * 抽奖名称
     */
    @TableField("name")
    private String name;
    /**
     * 活动简介名称
     */
    @TableField("activity_profile")
    private String activityProfile;
    /**
     * 开启方式(1=新注册用户,2=下单,3=分享小程序,4=普通抽奖,5=答题抽奖)
     */
    @TableField("activity_type")
    private Integer activityType;
    /**
     * 抽奖总次数
     */
    @TableField("total_times")
    private Integer totalTimes;
    /**
     * 剩余次数
     */
    @TableField("lave_times")
    private Integer laveTimes;
    /**
     * 活动开始时间
     */
    @TableField("start_time")
    private LocalDateTime startTime;
    /**
     * 活动结束时间
     */
    @TableField("end_time")
    private LocalDateTime endTime;
    /**
     * 分享抽奖间隔天数
     */
    @TableField("interval_time")
    private Integer intervalTime;
    /**
     * 答题抽奖正确率%
     */
    @TableField("accuracy")
    private BigDecimal accuracy;
    /**
     * 封面图
     */
    @TableField("cover_image")
    private String coverImage;
    /**
     * 详情介绍
     */
    @TableField("activity_content")
    private String activityContent;
    /**
     * 删除标记
     */
    @TableField("del_flag")
    private Integer delFlag;
    /**
     * 创建用户id
     */
    @TableField("create_user_id")
    private Integer createUserId;
    /**
     * 创建时间
     */
    @TableField("create_time")
    private LocalDateTime createTime;
    /**
     * 更新用户id
     */
    @TableField("update_user_id")
    private Integer updateUserId;
    /**
     * 更新时间
     */
    @TableField("update_time")
    private LocalDateTime updateTime;
}
ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/factory/LotteryEventFallbackFactory.java
New file
@@ -0,0 +1,25 @@
package com.ruoyi.goods.api.factory;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.goods.api.domain.LotteryEvent;
import com.ruoyi.goods.api.service.LotteryEventClient;
import org.springframework.cloud.openfeign.FallbackFactory;
import java.util.List;
/**
 * @author zhibing.pu
 * @Date 2025/5/8 18:12
 */
public class LotteryEventFallbackFactory implements FallbackFactory<LotteryEventClient> {
    @Override
    public LotteryEventClient create(Throwable cause) {
        return new LotteryEventClient() {
            @Override
            public R<List<LotteryEvent>> getLotteryEventList(Integer activityType) {
                return R.fail("根据开启方式获取活动列表失败:" + cause.getMessage());
            }
        };
    }
}
ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/service/LotteryEventClient.java
New file
@@ -0,0 +1,28 @@
package com.ruoyi.goods.api.service;
import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.goods.api.domain.LotteryEvent;
import com.ruoyi.goods.api.factory.LotteryEventFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
/**
 * @author zhibing.pu
 * @Date 2025/5/8 18:11
 */
@FeignClient(contextId = "LotteryEventClient", value = ServiceNameConstants.GOODS_SERVICE, fallbackFactory = LotteryEventFallbackFactory.class)
public interface LotteryEventClient {
    /**
     * 根据开启方式获取活动列表
     * @param activityType
     * @return
     */
    @PostMapping("/lotteryEvent/getLotteryEventList")
    R<List<LotteryEvent>> getLotteryEventList(@RequestParam("activityType") Integer activityType);
}
ruoyi-api/ruoyi-api-goods/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
New file
@@ -0,0 +1 @@
com.ruoyi.goods.api.factory.LotteryEventFallbackFactory
ruoyi-auth/pom.xml
@@ -66,6 +66,12 @@
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-common-swagger</artifactId>
        </dependency>
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-api-goods</artifactId>
            <version>3.6.2</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java
@@ -1,7 +1,10 @@
package com.ruoyi.auth.controller;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import com.ruoyi.goods.api.domain.LotteryEvent;
import com.ruoyi.goods.api.service.LotteryEventClient;
import com.ruoyi.system.api.domain.dto.AppMiniRegisterDto;
import com.ruoyi.system.api.model.AppMiniLoginDto;
import com.ruoyi.system.api.model.AppMiniLoginVo;
@@ -23,85 +26,93 @@
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.model.LoginUser;
import java.util.List;
import java.util.Map;
/**
 * token 控制
 *
 *
 * @author jqs
 */
@RestController
@Api(value = "系统和小程序登录", tags = "系统和小程序登录")
public class TokenController
{
    @Autowired
    private TokenService tokenService;
    @Autowired
    private SysLoginService sysLoginService;
    @ApiOperation("系统登录")
    @PostMapping("login")
    public R<?> login(@RequestBody LoginBody form)
    {
        // 用户登录
        LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword());
        // 获取登录token
        return R.ok(tokenService.createToken(userInfo));
    }
    @ApiOperation("小程序登录")
    @PostMapping("miniLogin")
    public R<?> miniLogin(@RequestBody AppMiniLoginDto appMiniLoginDto)
    {
        // 小程序用户登录
        AppMiniLoginVo appMiniLoginVo = sysLoginService.miniLogin(appMiniLoginDto);
        // 获取登录token
        return R.ok(tokenService.createMiniToken(appMiniLoginVo));
    }
    @ApiOperation("小程序注册")
    @PostMapping("miniRegister")
    public R<?> miniRegister(@RequestBody AppMiniRegisterDto appUserRegisterDto)
    {
        // 小程序用户登录
        AppMiniLoginVo appMiniLoginVo = sysLoginService.miniRegister(appUserRegisterDto);
        // 获取登录token
        return R.ok(tokenService.createMiniToken(appMiniLoginVo));
    }
    @DeleteMapping("logout")
    public R<?> logout(HttpServletRequest request)
    {
        String token = SecurityUtils.getToken(request);
        if (StringUtils.isNotEmpty(token))
        {
            String username = JwtUtils.getUserName(token);
            // 删除用户缓存记录
            AuthUtil.logoutByToken(token);
            // 记录用户退出日志
            sysLoginService.logout(username);
public class TokenController {
    @Autowired
    private TokenService tokenService;
    @Autowired
    private SysLoginService sysLoginService;
    @Resource
    private LotteryEventClient lotteryEventClient;
    @ApiOperation("系统登录")
    @PostMapping("login")
    public R<?> login(@RequestBody LoginBody form) {
        // 用户登录
        LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword());
        // 获取登录token
        return R.ok(tokenService.createToken(userInfo));
    }
    @ApiOperation("小程序登录")
    @PostMapping("miniLogin")
    public R<?> miniLogin(@RequestBody AppMiniLoginDto appMiniLoginDto) {
        // 小程序用户登录
        AppMiniLoginVo appMiniLoginVo = sysLoginService.miniLogin(appMiniLoginDto);
        Map<String, Object> miniToken = tokenService.createMiniToken(appMiniLoginVo);
        return R.ok(miniToken);
    }
    @ApiOperation("小程序注册【2.0】")
    @PostMapping("miniRegister")
    public R<?> miniRegister(@RequestBody AppMiniRegisterDto appUserRegisterDto) {
        // 小程序用户登录
        AppMiniLoginVo appMiniLoginVo = sysLoginService.miniRegister(appUserRegisterDto);
        // 获取登录token
        Map<String, Object> miniToken = tokenService.createMiniToken(appMiniLoginVo);
        //判断新用户是都符合抽奖条件
        miniToken.put("lotteryDraw", false);
        List<LotteryEvent> data = lotteryEventClient.getLotteryEventList(1).getData();
        if (data.size() > 0) {
            miniToken.put("lotteryDraw", true);
        }
        return R.ok();
    }
    @PostMapping("refresh")
    public R<?> refresh(HttpServletRequest request)
    {
        LoginUser loginUser = tokenService.getLoginUser(request);
        if (StringUtils.isNotNull(loginUser))
        {
            // 刷新令牌有效期
            tokenService.refreshToken(loginUser);
            return R.ok();
        }
        return R.ok();
    }
    @PostMapping("register")
    public R<?> register(@RequestBody RegisterBody registerBody)
    {
        // 用户注册
        sysLoginService.register(registerBody.getUsername(), registerBody.getPassword());
        return R.ok();
    }
        return R.ok();
    }
    @DeleteMapping("logout")
    public R<?> logout(HttpServletRequest request) {
        String token = SecurityUtils.getToken(request);
        if (StringUtils.isNotEmpty(token)) {
            String username = JwtUtils.getUserName(token);
            // 删除用户缓存记录
            AuthUtil.logoutByToken(token);
            // 记录用户退出日志
            sysLoginService.logout(username);
        }
        return R.ok();
    }
    @PostMapping("refresh")
    public R<?> refresh(HttpServletRequest request) {
        LoginUser loginUser = tokenService.getLoginUser(request);
        if (StringUtils.isNotNull(loginUser)) {
            // 刷新令牌有效期
            tokenService.refreshToken(loginUser);
            return R.ok();
        }
        return R.ok();
    }
    @PostMapping("register")
    public R<?> register(@RequestBody RegisterBody registerBody) {
        // 用户注册
        sysLoginService.register(registerBody.getUsername(), registerBody.getPassword());
        return R.ok();
    }
}
ruoyi-modules/ruoyi-goods/pom.xml
@@ -121,6 +121,12 @@
            <version>4.13.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-api-goods</artifactId>
            <version>3.6.2</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/business/LotteryEventController.java
New file
@@ -0,0 +1,36 @@
package com.ruoyi.goods.controller.business;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.goods.api.domain.LotteryEvent;
import com.ruoyi.goods.service.lottery.ILotteryEventService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
 * @author zhibing.pu
 * @Date 2025/5/8 18:13
 */
@RestController
@RequestMapping("/lotteryEvent")
public class LotteryEventController {
    @Resource
    private ILotteryEventService lotteryEventService;
    /**
     * 根据开启方式获取活动列表
     * @param activityType
     * @return
     */
    @ResponseBody
    @PostMapping("/getLotteryEventList")
    public R<List<LotteryEvent>> getLotteryEventList(@RequestParam("activityType") Integer activityType) {
        List<LotteryEvent> list = lotteryEventService.list(new LambdaQueryWrapper<LotteryEvent>().eq(LotteryEvent::getActivityType, activityType)
                .eq(LotteryEvent::getDelFlag, 0).last(" and now() between start_time and end_time"));
        return R.ok(list);
    }
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/LotteryEventMapper.java
New file
@@ -0,0 +1,11 @@
package com.ruoyi.goods.mapper.lottery;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.goods.api.domain.LotteryEvent;
/**
 * @author zhibing.pu
 * @Date 2025/5/8 18:00
 */
public interface LotteryEventMapper extends BaseMapper<LotteryEvent> {
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/LotteryEventServiceImpl.java
New file
@@ -0,0 +1,15 @@
package com.ruoyi.goods.service.impl.lottery;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.goods.api.domain.LotteryEvent;
import com.ruoyi.goods.mapper.lottery.LotteryEventMapper;
import com.ruoyi.goods.service.lottery.ILotteryEventService;
import org.springframework.stereotype.Service;
/**
 * @author zhibing.pu
 * @Date 2025/5/8 18:05
 */
@Service
public class LotteryEventServiceImpl extends ServiceImpl<LotteryEventMapper, LotteryEvent> implements ILotteryEventService {
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/ILotteryEventService.java
New file
@@ -0,0 +1,11 @@
package com.ruoyi.goods.service.lottery;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.goods.api.domain.LotteryEvent;
/**
 * @author zhibing.pu
 * @Date 2025/5/8 18:05
 */
public interface ILotteryEventService extends IService<LotteryEvent> {
}
ruoyi-modules/ruoyi-goods/src/main/resources/mapper/lottery/LotteryEventMapper.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.goods.mapper.lottery.LotteryEventMapper">
</mapper>