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>