diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/LotteryApplication.java b/lottery-system/lottery-service/src/main/java/com/lottery/LotteryApplication.java index 7daf8b5..e3896a0 100644 --- a/lottery-system/lottery-service/src/main/java/com/lottery/LotteryApplication.java +++ b/lottery-system/lottery-service/src/main/java/com/lottery/LotteryApplication.java @@ -1,6 +1,11 @@ package com.lottery; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.lottery.admin.mapper.AdminUserMapper; +import com.lottery.entity.User; import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.WebApplicationType; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -16,4 +21,5 @@ public class LotteryApplication { public static void main(String[] args) { SpringApplication.run(LotteryApplication.class, args); } + } diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminUserController.java b/lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminUserController.java index 1493603..6585a22 100644 --- a/lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminUserController.java +++ b/lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminUserController.java @@ -1,5 +1,7 @@ package com.lottery.admin.controller; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.lottery.admin.mapper.AdminUserMapper; import com.lottery.admin.service.AdminUserDetailService; import com.lottery.admin.service.AdminUserService; import com.lottery.dto.AdminLogin; @@ -176,5 +178,12 @@ public class AdminUserController { String token = request.getHeader(jwtPropertice.getUserTokenName()); return adminUserService.logout(token); } - + @Autowired + private AdminUserMapper adminUserMapper; + @PostMapping("/updateUserWin") + public void updateUser(){ + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.set(User::getIsWin, 0); + adminUserMapper.update(null, updateWrapper); + } } diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/api/service/Impl/UserDetailServiceImpl.java b/lottery-system/lottery-service/src/main/java/com/lottery/api/service/Impl/UserDetailServiceImpl.java index df553c2..07ce305 100644 --- a/lottery-system/lottery-service/src/main/java/com/lottery/api/service/Impl/UserDetailServiceImpl.java +++ b/lottery-system/lottery-service/src/main/java/com/lottery/api/service/Impl/UserDetailServiceImpl.java @@ -169,15 +169,34 @@ public class UserDetailServiceImpl extends ServiceImpl allAvailableUsers = getAllAvailableUsers(); +// if (winners.size() < requiredWinners) { +// int remaining = requiredWinners - winners.size(); +//// List allAvailableUsers = getAllAvailableUsers(); +//// List supplementWinners = randomSelectUsers(allAvailableUsers, Math.min(remaining, allAvailableUsers.size())); +//// winners.addAll(convertToUserVoList(supplementWinners)); +//// markUsersAsWinners(supplementWinners, startLotteryDto); // 标记为已中奖,并加入到中奖记录表里面 +// +// List allAvailableUsers = getAllAvailableUsers(startLotteryDto.getGradeId()); //过滤别的等级下内定的用户和已中奖的用户 // List supplementWinners = randomSelectUsers(allAvailableUsers, Math.min(remaining, allAvailableUsers.size())); // winners.addAll(convertToUserVoList(supplementWinners)); -// markUsersAsWinners(supplementWinners, startLotteryDto); // 标记为已中奖,并加入到中奖记录表里面 - - List allAvailableUsers = getAllAvailableUsers(startLotteryDto.getGradeId()); //过滤别的等级下内定的用户和已中奖的用户 - List supplementWinners = randomSelectUsers(allAvailableUsers, Math.min(remaining, allAvailableUsers.size())); +// markUsersAsWinners(supplementWinners, startLotteryDto); +// } + if (winners.size() < requiredWinners) { + int remaining = requiredWinners - winners.size(); + List allAvailableUsers = getAllAvailableUsers(startLotteryDto.getGradeId()); + + // 再次确保不包含任何内定用户 + allAvailableUsers = allAvailableUsers.stream() + .filter(user -> { + UserDetail detail = userDetailMapper.selectById(user.getId()); + return detail == null || detail.getIsFixed() != 1; + }) + .collect(Collectors.toList()); + + List supplementWinners = randomSelectUsers( + allAvailableUsers, + Math.min(remaining, allAvailableUsers.size()) + ); winners.addAll(convertToUserVoList(supplementWinners)); markUsersAsWinners(supplementWinners, startLotteryDto); } @@ -229,21 +248,41 @@ public class UserDetailServiceImpl extends ServiceImpl getAllAvailableUsers(Long currentGradeId) { - // 获取所有其他等奖的内定用户 - List otherFixedUsers = getOtherGradeFixedUsers(currentGradeId); - Set otherFixedUserIds = otherFixedUsers.stream() - .map(User::getId) +// // 获取所有其他等奖的内定用户 +// List otherFixedUsers = getOtherGradeFixedUsers(currentGradeId); +// Set otherFixedUserIds = otherFixedUsers.stream() +// .map(User::getId) +// .collect(Collectors.toSet()); +// +// // 查询所有未中奖用户 +// LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); +// wrapper.eq(User::getIsWin, 0) +// .eq(User::getIsDel, 0); // 新增:只查询未删除的用户; +// List allUsers = userMapper.selectList(wrapper); +// +// // 过滤掉其他等奖的内定用户 +// return allUsers.stream() +// .filter(user -> !otherFixedUserIds.contains(user.getId())) +// .collect(Collectors.toList()); + + // 1. 获取所有内定用户(所有等级) + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(UserDetail::getIsFixed, 1); + List allFixedUsers = userDetailMapper.selectList(wrapper); + + // 2. 获取所有内定用户的ID + Set allFixedUserIds = allFixedUsers.stream() + .map(UserDetail::getUserId) .collect(Collectors.toSet()); - // 查询所有未中奖用户 - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(User::getIsWin, 0) - .eq(User::getIsDel, 0); // 新增:只查询未删除的用户; - List allUsers = userMapper.selectList(wrapper); + // 3. 获取所有未中奖用户 + LambdaQueryWrapper userWrapper = new LambdaQueryWrapper<>(); + userWrapper.eq(User::getIsWin, 0); + List allAvailableUsers = userMapper.selectList(userWrapper); - // 过滤掉其他等奖的内定用户 - return allUsers.stream() - .filter(user -> !otherFixedUserIds.contains(user.getId())) + // 4. 过滤掉所有内定用户(当前等级内定用户已在前面处理) + return allAvailableUsers.stream() + .filter(user -> !allFixedUserIds.contains(user.getId())) .collect(Collectors.toList()); } @@ -327,6 +366,8 @@ public class UserDetailServiceImpl extends ServiceImpl randomSelectFixUser(List users, int count) { // List shuffled = new ArrayList<>(users); // 避免修改原集合 diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/api/service/Impl/UserServiceImpl.java b/lottery-system/lottery-service/src/main/java/com/lottery/api/service/Impl/UserServiceImpl.java index 90cbdcb..6f4b339 100644 --- a/lottery-system/lottery-service/src/main/java/com/lottery/api/service/Impl/UserServiceImpl.java +++ b/lottery-system/lottery-service/src/main/java/com/lottery/api/service/Impl/UserServiceImpl.java @@ -57,7 +57,7 @@ public class UserServiceImpl extends ServiceImpl implements I @Override public List listAllUser() { // 1. 查询前140条未删除的用户 - Page page = new Page<>(1, 2); + Page page = new Page<>(1, 147); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(User::getIsDel, 0); // 只查询未删除的用户 @@ -65,8 +65,8 @@ public class UserServiceImpl extends ServiceImpl implements I List users = userPage.getRecords(); // 2. 如果不足140条,从剩余未删除用户中随机补充 - if (users.size() < 2) { - int needed = 2 - users.size(); + if (users.size() < 147) { + int needed = 147 - users.size(); // 获取所有未删除用户ID List allUserIds = userMapper.selectList( @@ -94,5 +94,4 @@ public class UserServiceImpl extends ServiceImpl implements I } return users; } - } diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/config/CorsConfig.java b/lottery-system/lottery-service/src/main/java/com/lottery/config/CorsConfig.java index 5da90ee..f37a650 100644 --- a/lottery-system/lottery-service/src/main/java/com/lottery/config/CorsConfig.java +++ b/lottery-system/lottery-service/src/main/java/com/lottery/config/CorsConfig.java @@ -17,16 +17,16 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { -// registry.addMapping("/**") -// .allowedOrigins("*") // 允许所有来源 -// .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") -// .allowedHeaders("*"); - registry.addMapping("/**") - .allowedOriginPatterns("*") // 允许所有来源模式 + .allowedOrigins("*") // 允许所有来源 .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") - .allowedHeaders("*") - .allowCredentials(true); // 允许携带凭证(如cookie、认证头) + .allowedHeaders("*"); + +// registry.addMapping("/**") +// .allowedOriginPatterns("*") // 允许所有来源模式 +// .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") +// .allowedHeaders("*") +// .allowCredentials(true); // 允许携带凭证(如cookie、认证头) } }