Browse Source

修复bug

feature/0725lihuilin
willy 4 weeks ago
parent
commit
787205d220
  1. 6
      lottery-system/lottery-service/src/main/java/com/lottery/LotteryApplication.java
  2. 11
      lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminUserController.java
  3. 77
      lottery-system/lottery-service/src/main/java/com/lottery/api/service/Impl/UserDetailServiceImpl.java
  4. 7
      lottery-system/lottery-service/src/main/java/com/lottery/api/service/Impl/UserServiceImpl.java
  5. 16
      lottery-system/lottery-service/src/main/java/com/lottery/config/CorsConfig.java

6
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);
}
}

11
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<User> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.set(User::getIsWin, 0);
adminUserMapper.update(null, updateWrapper);
}
}

77
lottery-system/lottery-service/src/main/java/com/lottery/api/service/Impl/UserDetailServiceImpl.java

@ -169,15 +169,34 @@ public class UserDetailServiceImpl extends ServiceImpl<IUserDetailMapper, UserDe
}
// 5. 如果人数不足从全体用户补充同样过滤掉已中奖的和别的等级下内定的也要过滤
if (winners.size() < requiredWinners) {
int remaining = requiredWinners - winners.size();
// List<User> allAvailableUsers = getAllAvailableUsers();
// if (winners.size() < requiredWinners) {
// int remaining = requiredWinners - winners.size();
//// List<User> allAvailableUsers = getAllAvailableUsers();
//// List<User> supplementWinners = randomSelectUsers(allAvailableUsers, Math.min(remaining, allAvailableUsers.size()));
//// winners.addAll(convertToUserVoList(supplementWinners));
//// markUsersAsWinners(supplementWinners, startLotteryDto); // 标记为已中奖,并加入到中奖记录表里面
//
// List<User> allAvailableUsers = getAllAvailableUsers(startLotteryDto.getGradeId()); //过滤别的等级下内定的用户和已中奖的用户
// List<User> supplementWinners = randomSelectUsers(allAvailableUsers, Math.min(remaining, allAvailableUsers.size()));
// winners.addAll(convertToUserVoList(supplementWinners));
// markUsersAsWinners(supplementWinners, startLotteryDto); // 标记为已中奖,并加入到中奖记录表里面
// markUsersAsWinners(supplementWinners, startLotteryDto);
// }
if (winners.size() < requiredWinners) {
int remaining = requiredWinners - winners.size();
List<User> 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<User> allAvailableUsers = getAllAvailableUsers(startLotteryDto.getGradeId()); //过滤别的等级下内定的用户和已中奖的用户
List<User> supplementWinners = randomSelectUsers(allAvailableUsers, Math.min(remaining, allAvailableUsers.size()));
List<User> supplementWinners = randomSelectUsers(
allAvailableUsers,
Math.min(remaining, allAvailableUsers.size())
);
winners.addAll(convertToUserVoList(supplementWinners));
markUsersAsWinners(supplementWinners, startLotteryDto);
}
@ -229,21 +248,41 @@ public class UserDetailServiceImpl extends ServiceImpl<IUserDetailMapper, UserDe
//获取全体可用用户未中奖且非其他等奖内定用户
private List<User> getAllAvailableUsers(Long currentGradeId) {
// 获取所有其他等奖的内定用户
List<User> otherFixedUsers = getOtherGradeFixedUsers(currentGradeId);
Set<Long> otherFixedUserIds = otherFixedUsers.stream()
.map(User::getId)
// // 获取所有其他等奖的内定用户
// List<User> otherFixedUsers = getOtherGradeFixedUsers(currentGradeId);
// Set<Long> otherFixedUserIds = otherFixedUsers.stream()
// .map(User::getId)
// .collect(Collectors.toSet());
//
// // 查询所有未中奖用户
// LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
// wrapper.eq(User::getIsWin, 0)
// .eq(User::getIsDel, 0); // 新增只查询未删除的用户;
// List<User> allUsers = userMapper.selectList(wrapper);
//
// // 过滤掉其他等奖的内定用户
// return allUsers.stream()
// .filter(user -> !otherFixedUserIds.contains(user.getId()))
// .collect(Collectors.toList());
// 1. 获取所有内定用户(所有等级)
LambdaQueryWrapper<UserDetail> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(UserDetail::getIsFixed, 1);
List<UserDetail> allFixedUsers = userDetailMapper.selectList(wrapper);
// 2. 获取所有内定用户的ID
Set<Long> allFixedUserIds = allFixedUsers.stream()
.map(UserDetail::getUserId)
.collect(Collectors.toSet());
// 查询所有未中奖用户
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getIsWin, 0)
.eq(User::getIsDel, 0); // 新增只查询未删除的用户;
List<User> allUsers = userMapper.selectList(wrapper);
// 3. 获取所有未中奖用户
LambdaQueryWrapper<User> userWrapper = new LambdaQueryWrapper<>();
userWrapper.eq(User::getIsWin, 0);
List<User> 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<IUserDetailMapper, UserDe
.set(Grade::getUpdateTime, new Date());
gradeMapper.update(null, lambdaUpdateWrapper);
}
// // 随机选择指定数量的用户(内定名单中)
// private List<UserDetail> randomSelectFixUser(List<UserDetail> users, int count) {
// List<UserDetail> shuffled = new ArrayList<>(users); // 避免修改原集合

7
lottery-system/lottery-service/src/main/java/com/lottery/api/service/Impl/UserServiceImpl.java

@ -57,7 +57,7 @@ public class UserServiceImpl extends ServiceImpl<IUserMapper, User> implements I
@Override
public List<User> listAllUser() {
// 1. 查询前140条未删除的用户
Page<User> page = new Page<>(1, 2);
Page<User> page = new Page<>(1, 147);
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getIsDel, 0); // 只查询未删除的用户
@ -65,8 +65,8 @@ public class UserServiceImpl extends ServiceImpl<IUserMapper, User> implements I
List<User> 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<Long> allUserIds = userMapper.selectList(
@ -94,5 +94,4 @@ public class UserServiceImpl extends ServiceImpl<IUserMapper, User> implements I
}
return users;
}
}

16
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认证头
}
}
Loading…
Cancel
Save