Browse Source

对五张表实现软删

feature/0725lihuilin
willy 4 weeks ago
parent
commit
3e63344878
  1. 2
      lottery-system/lottery-pojo/src/main/java/com/lottery/dto/UserLoginDto.java
  2. 2
      lottery-system/lottery-service/src/main/java/com/lottery/LotteryApplication.java
  3. 4
      lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminPrizeController.java
  4. 6
      lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminUserController.java
  5. 4
      lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminUserDetailMapper.java
  6. 3
      lottery-system/lottery-service/src/main/java/com/lottery/admin/service/AdminPrizeService.java
  7. 3
      lottery-system/lottery-service/src/main/java/com/lottery/admin/service/AdminUserDetailService.java
  8. 55
      lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminGradeServiceImpl.java
  9. 123
      lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminPrizeServiceImpl.java
  10. 102
      lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminUserDetailServiceImpl.java
  11. 1
      lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminWinServiceImpl.java
  12. 2
      lottery-system/lottery-service/src/main/java/com/lottery/api/controller/UserController.java
  13. 2
      lottery-system/lottery-service/src/main/java/com/lottery/api/mapper/IUserMapper.java
  14. 19
      lottery-system/lottery-service/src/main/java/com/lottery/api/service/Impl/UserDetailServiceImpl.java
  15. 52
      lottery-system/lottery-service/src/main/java/com/lottery/api/service/Impl/UserServiceImpl.java
  16. 2
      lottery-system/lottery-service/src/main/java/com/lottery/config/MybatisPageConfig.java
  17. 1
      lottery-system/lottery-service/src/main/resources/application.yml
  18. 15
      lottery-system/pom.xml

2
lottery-system/lottery-pojo/src/main/java/com/lottery/dto/UserLoginDto.java

@ -15,7 +15,7 @@ import java.io.Serializable;
@Data @Data
public class UserLoginDto implements Serializable { public class UserLoginDto implements Serializable {
private String username;
// private String username;
private String password; private String password;
} }

2
lottery-system/lottery-service/src/main/java/com/lottery/LotteryApplication.java

@ -5,11 +5,13 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.WebApplicationType; import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ComponentScan;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.swing.*; import javax.swing.*;
@SpringBootApplication @SpringBootApplication
@MapperScan("com.lottery.*.mapper") @MapperScan("com.lottery.*.mapper")
@EnableTransactionManagement
public class LotteryApplication { public class LotteryApplication {
public static void main(String[] args) { public static void main(String[] args) {
SpringApplication.run(LotteryApplication.class, args); SpringApplication.run(LotteryApplication.class, args);

4
lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminPrizeController.java

@ -93,7 +93,7 @@ public class AdminPrizeController {
if (fixUserDto.getUsername() == null || fixUserDto.getJwcode() == null) { if (fixUserDto.getUsername() == null || fixUserDto.getJwcode() == null) {
return Result.failure("所有字段都必须填写"); return Result.failure("所有字段都必须填写");
} }
adminPrizeService.addWinUser(fixUserDto);
return Result.success();
return adminPrizeService.addWinUser(fixUserDto);
} }
} }

6
lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminUserController.java

@ -130,8 +130,10 @@ public class AdminUserController {
@PostMapping("/delete/fix") @PostMapping("/delete/fix")
public Result deleteFix(@RequestParam Long id) { public Result deleteFix(@RequestParam Long id) {
LOGGER.info("根据id删除内定用户:{}",id); LOGGER.info("根据id删除内定用户:{}",id);
adminUserDetailService.removeFixUserById(id);
return Result.success();
if (adminUserDetailService.removeFixUserById(id)){
return Result.success();
};
return Result.failure("删除失败");
} }
@PostMapping("/delete/fix/batch") @PostMapping("/delete/fix/batch")

4
lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminUserDetailMapper.java

@ -22,6 +22,6 @@ public interface AdminUserDetailMapper extends BaseMapper<UserDetail> {
@Select("select jwcode from user_detail") @Select("select jwcode from user_detail")
Set<String> selectAllUserCodes(); Set<String> selectAllUserCodes();
@Update("update user_detail set is_del = 0 where id = #{id}")
void removeFixUserById(Long id);
@Update("UPDATE user_detail SET is_del = 1 WHERE id = #{id}")
int removeFixUserById(Long id);
} }

3
lottery-system/lottery-service/src/main/java/com/lottery/admin/service/AdminPrizeService.java

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.lottery.dto.PrizeDto; import com.lottery.dto.PrizeDto;
import com.lottery.dto.FixUserDto; import com.lottery.dto.FixUserDto;
import com.lottery.entity.Prize; import com.lottery.entity.Prize;
import com.lottery.result.Result;
import com.lottery.vo.PageInfo; import com.lottery.vo.PageInfo;
import com.lottery.vo.PrizeVo; import com.lottery.vo.PrizeVo;
@ -24,7 +25,7 @@ public interface AdminPrizeService extends IService<Prize> {
PrizeVo getPrizeById(Long id); PrizeVo getPrizeById(Long id);
void addWinUser(FixUserDto fixUserDto);
Result addWinUser(FixUserDto fixUserDto);
boolean removePrizeById(Long id); boolean removePrizeById(Long id);
} }

3
lottery-system/lottery-service/src/main/java/com/lottery/admin/service/AdminUserDetailService.java

@ -6,7 +6,6 @@ import com.lottery.entity.UserDetail;
import com.lottery.result.Result; import com.lottery.result.Result;
import com.lottery.vo.PageInfo; import com.lottery.vo.PageInfo;
import com.lottery.vo.UserVo; import com.lottery.vo.UserVo;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.util.List; import java.util.List;
@ -25,7 +24,7 @@ public interface AdminUserDetailService extends IService<UserDetail> {
Result importFixUsers(MultipartFile file, Long gradeId); Result importFixUsers(MultipartFile file, Long gradeId);
void removeFixUserById(Long id);
boolean removeFixUserById(Long id);
boolean removeFixUserBatchByIds(List<Long> ids); boolean removeFixUserBatchByIds(List<Long> ids);
} }

55
lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminGradeServiceImpl.java

@ -31,6 +31,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
/** /**
* @program: lottery-system * @program: lottery-system
@ -105,28 +106,38 @@ public class AdminGradeServiceImpl extends ServiceImpl<AdminGradeMapper, Grade>
@Transactional @Transactional
public boolean removeGradeById(Long id) { public boolean removeGradeById(Long id) {
//把关联的win_record表删了 //把关联的win_record表删了
//先根据 gradeId 查询关联的 prizeId
LambdaQueryWrapper<Prize> prizeQueryWrapper = new LambdaQueryWrapper<>();
prizeQueryWrapper.eq(Prize::getGradeId, id).select(Prize::getId);
Prize prize = adminPrizeMapper.selectOne(prizeQueryWrapper);
LambdaUpdateWrapper<WinnerRecord> updateWrapper3 = new LambdaUpdateWrapper<>();
updateWrapper3.eq(WinnerRecord::getPrizeId, prize.getId()).set(WinnerRecord::getIsDel,1);
adminWinMapper.update(null, updateWrapper3);
//吧关联的prize表删了
LambdaUpdateWrapper<Prize> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(Prize::getGradeId, id).set(Prize::getIs_del, 1);
adminPrizeMapper.update(null, updateWrapper);
//把关联的user_detail表删了
LambdaUpdateWrapper<UserDetail> updateWrapper1 = new LambdaUpdateWrapper<>();
updateWrapper1.eq(UserDetail::getGradeId, id).set(UserDetail::getIsDel, 1);
adminUserDetailMapper.update(null, updateWrapper1);
//最后逻辑删除等级
// 1. 查询所有关联的 prizeId可能多个
List<Prize> prizes = adminPrizeMapper.selectList(
new LambdaQueryWrapper<Prize>()
.eq(Prize::getGradeId, id)
.select(Prize::getId)
);
// 2. 批量逻辑删除关联的 win_record
if (!prizes.isEmpty()) {
List<Long> prizeIds = prizes.stream()
.map(Prize::getId)
.collect(Collectors.toList());
LambdaUpdateWrapper<WinnerRecord> winRecordWrapper = new LambdaUpdateWrapper<>();
winRecordWrapper.in(WinnerRecord::getPrizeId, prizeIds)
.set(WinnerRecord::getIsDel, 1);
adminWinMapper.update(null, winRecordWrapper);
}
// 3. 逻辑删除关联的 prize
LambdaUpdateWrapper<Prize> prizeWrapper = new LambdaUpdateWrapper<>();
prizeWrapper.eq(Prize::getGradeId, id)
.set(Prize::getIs_del, 1);
adminPrizeMapper.update(null, prizeWrapper);
// 4. 逻辑删除关联的 user_detail
LambdaUpdateWrapper<UserDetail> userDetailWrapper = new LambdaUpdateWrapper<>();
userDetailWrapper.eq(UserDetail::getGradeId, id)
.set(UserDetail::getIsDel, 1);
adminUserDetailMapper.update(null, userDetailWrapper);
// 5. 逻辑删除 grade
adminGradeMapper.deleteGradeById(id); adminGradeMapper.deleteGradeById(id);
return true; return true;
} }

123
lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminPrizeServiceImpl.java

@ -10,6 +10,7 @@ import com.lottery.admin.service.AdminPrizeService;
import com.lottery.dto.PrizeDto; import com.lottery.dto.PrizeDto;
import com.lottery.dto.FixUserDto; import com.lottery.dto.FixUserDto;
import com.lottery.entity.*; import com.lottery.entity.*;
import com.lottery.result.Result;
import com.lottery.utils.ConvertBeanUtil; import com.lottery.utils.ConvertBeanUtil;
import com.lottery.vo.PageInfo; import com.lottery.vo.PageInfo;
import com.lottery.vo.PrizeVo; import com.lottery.vo.PrizeVo;
@ -78,7 +79,7 @@ public class AdminPrizeServiceImpl extends ServiceImpl<AdminPrizeMapper, Prize>
// 1. 查询关联的等级grade状态 // 1. 查询关联的等级grade状态
Grade grade = adminGradeMapper.selectById(prizeDto.getGradeId()); // 假设 gradeId 是传入的等级ID Grade grade = adminGradeMapper.selectById(prizeDto.getGradeId()); // 假设 gradeId 是传入的等级ID
if (grade == null) {
if (grade.getIsDel() == 1) {
return false; // 等级不存在直接返回失败 return false; // 等级不存在直接返回失败
} }
@ -124,8 +125,6 @@ public class AdminPrizeServiceImpl extends ServiceImpl<AdminPrizeMapper, Prize>
} }
// 2. 查询目标等级信息 // 2. 查询目标等级信息
Grade targetGrade = adminGradeMapper.selectById(gradeId); Grade targetGrade = adminGradeMapper.selectById(gradeId);
if (targetGrade == null) { if (targetGrade == null) {
@ -145,14 +144,14 @@ public class AdminPrizeServiceImpl extends ServiceImpl<AdminPrizeMapper, Prize>
return false; // 目标等级已有奖品不能修改 return false; // 目标等级已有奖品不能修改
} }
} }
// 4. 检查奖品名称是否重复排除自己
LambdaQueryWrapper<Prize> nameCheckWrapper = new LambdaQueryWrapper<>();
nameCheckWrapper.eq(Prize::getPrizeName, prizeDto.getPrizeName())
.ne(Prize::getId, prizeDto.getId());
if (this.count(nameCheckWrapper) > 0) {
return false; // 奖品名称已存在
}
//
// // 4. 检查奖品名称是否重复排除自己
// LambdaQueryWrapper<Prize> nameCheckWrapper = new LambdaQueryWrapper<>();
// nameCheckWrapper.eq(Prize::getPrizeName, prizeDto.getPrizeName())
// .ne(Prize::getId, prizeDto.getId());
// if (this.count(nameCheckWrapper) > 0) {
// return false; // 奖品名称已存在
// }
// LambdaQueryWrapper<Prize> wrapper = new LambdaQueryWrapper<>(); // LambdaQueryWrapper<Prize> wrapper = new LambdaQueryWrapper<>();
// wrapper.eq(Prize::getGradeId, grade.getId()); // wrapper.eq(Prize::getGradeId, grade.getId());
@ -182,32 +181,88 @@ public class AdminPrizeServiceImpl extends ServiceImpl<AdminPrizeMapper, Prize>
} }
@Override @Override
public void addWinUser(FixUserDto fixUserDto) {
//先判断新增的内定用户是否在总的抽奖用户中
Long userId = adminUserMapper.selectByJwcode(fixUserDto.getJwcode());
if (userId == null) {
User user = User.builder()
.username(fixUserDto.getUsername())
.jwcode(fixUserDto.getJwcode())
.password("123456")
.isWin(0)
.isDel(0)
.createTime(new Date())
.updateTime(new Date()).build();
adminUserMapper.insert(user); //不存在插入总表
}
public Result addWinUser(FixUserDto fixUserDto) {
// //先判断新增的内定用户是否在总的抽奖用户中
// Long userId = adminUserMapper.selectByJwcode(fixUserDto.getJwcode());
// if (userId == null) {
// User user = User.builder()
// .username(fixUserDto.getUsername())
// .jwcode(fixUserDto.getJwcode())
// .password("123456")
// .isWin(0)
// .isDel(0)
// .createTime(new Date())
// .updateTime(new Date()).build();
// adminUserMapper.insert(user); //不存在插入总表
// }
//
//// Grade grade = adminGradeMapper.selectByName(fixUserDto.getGradeName());
// Long gradeId = fixUserDto.getGradeId();
//
// Long userIdd = adminUserMapper.selectByJwcode(fixUserDto.getJwcode());
//
// UserDetail userDetail = new UserDetail();
// userDetail.setUserId(userIdd);
// userDetail.setGradeId(gradeId);
// userDetail.setIsFixed(1);
// userDetail.setIsDel(0);
// adminUserDetailMapper.insert(userDetail);
try {
// 1. 检查用户是否存在不存在则创建
Long userId = adminUserMapper.selectByJwcode(fixUserDto.getJwcode());
if (userId == null) {
User user = User.builder()
.username(fixUserDto.getUsername())
.jwcode(fixUserDto.getJwcode())
.password("123456")
.isWin(0)
.isDel(0)
.createTime(new Date())
.updateTime(new Date())
.build();
adminUserMapper.insert(user);
userId = user.getId();
}
Long gradeId = fixUserDto.getGradeId();
// Grade grade = adminGradeMapper.selectByName(fixUserDto.getGradeName());
Long gradeId = fixUserDto.getGradeId();
// 2. 检查该等级下是否已存在未删除的内定用户
LambdaQueryWrapper<UserDetail> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(UserDetail::getGradeId, gradeId)
// .eq(UserDetail::getIsFixed, 1)
.eq(UserDetail::getIsDel, 0); // 只检查未删除的记录
if (adminUserDetailMapper.selectCount(wrapper) > 0) {
return Result.failure("该等级下已存在内定用户,不可重复添加");
}
Long userIdd = adminUserMapper.selectByJwcode(fixUserDto.getJwcode());
// 3. 检查是否存在已删除的内定用户is_del=1
LambdaQueryWrapper<UserDetail> deletedWrapper = new LambdaQueryWrapper<>();
deletedWrapper.eq(UserDetail::getGradeId, gradeId)
.eq(UserDetail::getIsFixed, 1)
.eq(UserDetail::getIsDel, 1);
UserDetail userDetail = new UserDetail();
userDetail.setUserId(userIdd);
userDetail.setGradeId(gradeId);
userDetail.setIsFixed(1);
userDetail.setIsDel(0);
adminUserDetailMapper.insert(userDetail);
UserDetail deletedUserDetail = adminUserDetailMapper.selectOne(deletedWrapper);
if (deletedUserDetail != null) {
// 如果存在已删除的记录先物理删除
adminUserDetailMapper.deleteById(deletedUserDetail.getId());
}
// 4. 添加新内定用户
UserDetail userDetail = new UserDetail();
userDetail.setUserId(userId);
userDetail.setGradeId(gradeId);
userDetail.setIsFixed(1);
userDetail.setIsDel(0);
adminUserDetailMapper.insert(userDetail);
return Result.success("内定用户添加成功");
} catch (Exception e) {
// LOGGER.error("添加内定用户失败", e);
return Result.failure("添加失败: " + e.getMessage());
}
} }
@Override @Override

102
lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminUserDetailServiceImpl.java

@ -3,6 +3,7 @@ package com.lottery.admin.service.Impl;
import com.alibaba.excel.EasyExcel; import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -57,28 +58,84 @@ public class AdminUserDetailServiceImpl extends ServiceImpl<IUserDetailMapper, U
@Override @Override
public PageInfo<UserVo> listFixUser(int pageNum, int pageSize, UserQueryDto userQueryDto) { public PageInfo<UserVo> listFixUser(int pageNum, int pageSize, UserQueryDto userQueryDto) {
//查UserDetail表吧所有的userid取出来然后在从user表根据id查就行了
List<UserDetail> list = this.list();
List<Long> UserIds = list.stream().map(UserDetail::getUserId).collect(Collectors.toList());
Page<User> page = new Page<>(pageNum, pageSize);
//user表根据id批量查询
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getIsDel, 0);
queryWrapper.in(User::getId, UserIds);
// //查UserDetail表吧所有的userid取出来然后在从user表根据id查就行了
// List<UserDetail> list = this.list();
// List<Long> UserIds = list.stream().map(UserDetail::getUserId).collect(Collectors.toList());
//
// Page<User> page = new Page<>(pageNum, pageSize);
//
// //user表根据id批量查询
// LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
// queryWrapper.in(User::getId, UserIds);
//
//
// if (StringUtils.isNotBlank(userQueryDto.getUsername())) {
// queryWrapper.like(User::getUsername, userQueryDto.getUsername());
// }
// if(StringUtils.isNotBlank(userQueryDto.getJwcode())){
// queryWrapper.like(User::getPassword, userQueryDto.getJwcode());
// }
//
// Page<User> userPage = this.adminUserMapper.selectPage(page, queryWrapper);
// List<UserVo> userVolist = ConvertBeanUtil.convertList(userPage.getRecords(), UserVo.class);
// return PageInfo.of(userPage, userVolist);
// 1. 先查询有效的用户ID列表过滤掉 is_del = 1 的记录
LambdaQueryWrapper<UserDetail> detailWrapper = new LambdaQueryWrapper<>();
detailWrapper.select(UserDetail::getUserId) // 只查询user_id字段
.eq(UserDetail::getIsDel, 0); // 未删除的记录
List<Long> validUserIds = this.list(detailWrapper)
.stream()
.map(UserDetail::getUserId)
.collect(Collectors.toList());
// 如果没有有效用户返回空分页结果
if (CollectionUtils.isEmpty(validUserIds)) {
return emptyPageInfo(pageNum, pageSize);
}
// 2. 构建用户表查询条件
LambdaQueryWrapper<User> userWrapper = new LambdaQueryWrapper<>();
userWrapper.in(User::getId, validUserIds); // 限定在有效用户范围内
// 添加动态查询条件
if (StringUtils.isNotBlank(userQueryDto.getUsername())) { if (StringUtils.isNotBlank(userQueryDto.getUsername())) {
queryWrapper.like(User::getUsername, userQueryDto.getUsername());
userWrapper.like(User::getUsername, userQueryDto.getUsername());
} }
if(StringUtils.isNotBlank(userQueryDto.getJwcode())){
queryWrapper.like(User::getPassword, userQueryDto.getJwcode());
if (StringUtils.isNotBlank(userQueryDto.getJwcode())) {
userWrapper.like(User::getJwcode, userQueryDto.getJwcode()); // 注意字段名是否匹配
} }
Page<User> userPage = this.adminUserMapper.selectPage(page, queryWrapper);
List<UserVo> userVolist = ConvertBeanUtil.convertList(userPage.getRecords(), UserVo.class);
return PageInfo.of(userPage, userVolist);
// 3. 执行分页查询
Page<User> page = new Page<>(pageNum, pageSize);
Page<User> userPage = adminUserMapper.selectPage(page, userWrapper);
// 4. 转换为VO对象
List<UserVo> userVoList = userPage.getRecords().stream()
.map(user -> {
UserVo vo = new UserVo();
// 这里做属性拷贝可以使用BeanUtils或MapStruct等工具
vo.setId(user.getId());
vo.setUsername(user.getUsername());
// ...其他字段拷贝
return vo;
})
.collect(Collectors.toList());
// 5. 构建分页结果
return PageInfo.of(userPage, userVoList);
}
// 返回空分页结果的辅助方法
private <T> PageInfo<T> emptyPageInfo(int pageNum, int pageSize) {
PageInfo<T> pageInfo = new PageInfo<>();
pageInfo.setList(Collections.emptyList());
pageInfo.setTotal(0L);
pageInfo.setPageNum(pageNum);
pageInfo.setPageSize(pageSize);
pageInfo.setPages(0);
return pageInfo;
} }
@Override @Override
@ -141,7 +198,8 @@ public class AdminUserDetailServiceImpl extends ServiceImpl<IUserDetailMapper, U
UserDetail detail = new UserDetail(); UserDetail detail = new UserDetail();
detail.setUserId(user.getId()); detail.setUserId(user.getId());
detail.setGradeId(gradeId); detail.setGradeId(gradeId);
detail.setIsFixed(1); // 标记为内定用户
detail.setIsFixed(1);
detail.setIsDel(0);// 标记为内定用户
userDetails.add(detail); userDetails.add(detail);
} }
@ -159,8 +217,14 @@ public class AdminUserDetailServiceImpl extends ServiceImpl<IUserDetailMapper, U
} }
@Override @Override
public void removeFixUserById(Long id) {
adminUserDetailMapper.removeFixUserById(id);
public boolean removeFixUserById(Long id) {
return adminUserDetailMapper.removeFixUserById(id) > 0;
// return this.update(
// new LambdaUpdateWrapper<UserDetail>()
// .eq(UserDetail::getId, id)
// .set(UserDetail::getIsDel, 1)
// );
} }
@Override @Override

1
lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminWinServiceImpl.java

@ -64,6 +64,7 @@ public class AdminWinServiceImpl extends ServiceImpl<AdminWinMapper, WinnerRecor
// 2. 构建查询条件 // 2. 构建查询条件
LambdaQueryWrapper<WinnerRecord> recordWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<WinnerRecord> recordWrapper = new LambdaQueryWrapper<>();
recordWrapper.eq(WinnerRecord::getIsDel, 0);
if (StringUtils.isNotBlank(winUserQueryDto.getUsername())){ if (StringUtils.isNotBlank(winUserQueryDto.getUsername())){
// 需要关联用户表查询用户名 // 需要关联用户表查询用户名

2
lottery-system/lottery-service/src/main/java/com/lottery/api/controller/UserController.java

@ -61,7 +61,7 @@ public class UserController {
UserLoginVo userLoginVo = UserLoginVo.builder() UserLoginVo userLoginVo = UserLoginVo.builder()
.id(user.getId()) .id(user.getId())
.token(token) .token(token)
.username(user.getUsername())
.username("hongli")
.build(); .build();
return Result.success(userLoginVo); return Result.success(userLoginVo);

2
lottery-system/lottery-service/src/main/java/com/lottery/api/mapper/IUserMapper.java

@ -17,6 +17,6 @@ import org.apache.ibatis.annotations.Select;
public interface IUserMapper extends BaseMapper<User> { public interface IUserMapper extends BaseMapper<User> {
@Select("select id, username, password from user where username = #{username}")
@Select("select id, username, password from user where password = #{password}")
User getByUsername(String username); User getByUsername(String username);
} }

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

@ -144,7 +144,8 @@ public class UserDetailServiceImpl extends ServiceImpl<IUserDetailMapper, UserDe
// 该等奖下所有内定人员集合 // 该等奖下所有内定人员集合
LambdaQueryWrapper<UserDetail> userDetailWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<UserDetail> userDetailWrapper = new LambdaQueryWrapper<>();
userDetailWrapper.eq(UserDetail::getGradeId, startLotteryDto.getGradeId()) userDetailWrapper.eq(UserDetail::getGradeId, startLotteryDto.getGradeId())
.eq(UserDetail::getIsFixed, 1);
.eq(UserDetail::getIsFixed, 1)
.eq(UserDetail::getIsDel, 0); // 新增只查询未删除的内定用户;
List<UserDetail> fixedUsers = userDetailMapper.selectList(userDetailWrapper); List<UserDetail> fixedUsers = userDetailMapper.selectList(userDetailWrapper);
// 该等奖下该轮中奖用户结果即winners.size() = perwin 但是也有特殊情况per_win > 剩余人数,只抽剩余人数就行 // 该等奖下该轮中奖用户结果即winners.size() = perwin 但是也有特殊情况per_win > 剩余人数,只抽剩余人数就行
@ -194,7 +195,10 @@ public class UserDetailServiceImpl extends ServiceImpl<IUserDetailMapper, UserDe
private List<User> getAvailableFixedUsers(List<UserDetail> fixedUsers) { private List<User> getAvailableFixedUsers(List<UserDetail> fixedUsers) {
List<User> availableUsers = new ArrayList<>(); List<User> availableUsers = new ArrayList<>();
for (UserDetail userDetail : fixedUsers) { for (UserDetail userDetail : fixedUsers) {
User user = userMapper.selectById(userDetail.getUserId());
User user = userMapper.selectOne(new LambdaQueryWrapper<User>()
.eq(User::getId, userDetail.getUserId())
.eq(User::getIsDel, 0)); // 新增只查询未删除的用户
if (user != null && user.getIsWin() == 0) { // 0表示未中奖 if (user != null && user.getIsWin() == 0) { // 0表示未中奖
availableUsers.add(user); availableUsers.add(user);
} }
@ -206,11 +210,15 @@ public class UserDetailServiceImpl extends ServiceImpl<IUserDetailMapper, UserDe
private List<User> getOtherGradeFixedUsers(Long excludeGradeId) { private List<User> getOtherGradeFixedUsers(Long excludeGradeId) {
LambdaQueryWrapper<UserDetail> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<UserDetail> wrapper = new LambdaQueryWrapper<>();
wrapper.ne(UserDetail::getGradeId, excludeGradeId) // 排除当前等级 wrapper.ne(UserDetail::getGradeId, excludeGradeId) // 排除当前等级
.eq(UserDetail::getIsFixed, 1);
.eq(UserDetail::getIsFixed, 1)
.eq(UserDetail::getIsDel, 0); // 新增只查询未删除的内定用户
List<UserDetail> otherFixedUsers = userDetailMapper.selectList(wrapper); List<UserDetail> otherFixedUsers = userDetailMapper.selectList(wrapper);
return otherFixedUsers.stream() return otherFixedUsers.stream()
.map(userDetail -> userMapper.selectById(userDetail.getUserId()))
.map(userDetail -> userMapper.selectOne(new LambdaQueryWrapper<User>()
.eq(User::getId, userDetail.getUserId())
.eq(User::getIsDel, 0))) // 新增只查询未删除的用户
.filter(Objects::nonNull) .filter(Objects::nonNull)
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
@ -226,7 +234,8 @@ public class UserDetailServiceImpl extends ServiceImpl<IUserDetailMapper, UserDe
// 查询所有未中奖用户 // 查询所有未中奖用户
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getIsWin, 0);
wrapper.eq(User::getIsWin, 0)
.eq(User::getIsDel, 0); // 新增只查询未删除的用户;
List<User> allUsers = userMapper.selectList(wrapper); List<User> allUsers = userMapper.selectList(wrapper);
// 过滤掉其他等奖的内定用户 // 过滤掉其他等奖的内定用户

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

@ -18,6 +18,7 @@ import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
import java.util.stream.Collectors;
/** /**
* @program: lottery-system * @program: lottery-system
@ -36,13 +37,15 @@ public class UserServiceImpl extends ServiceImpl<IUserMapper, User> implements I
@Autowired @Autowired
private StringRedisTemplate redisTemplate; private StringRedisTemplate redisTemplate;
@Override @Override
public User login(UserLoginDto userLoginDto) { public User login(UserLoginDto userLoginDto) {
String password = userLoginDto.getPassword(); String password = userLoginDto.getPassword();
String username = userLoginDto.getUsername();
User user = userMapper.getByUsername(username);
// String username = userLoginDto.getUsername();
User user = userMapper.getByUsername(password);
if (user == null) throw new Accountexception("账号不存在");
if (user == null) throw new Accountexception("用户不存在");
if (!password.equals(user.getPassword())) { if (!password.equals(user.getPassword())) {
//密码错误 //密码错误
@ -53,30 +56,43 @@ public class UserServiceImpl extends ServiceImpl<IUserMapper, User> implements I
@Override @Override
public List<User> listAllUser() { public List<User> listAllUser() {
// 1. 查询前140条用户,直接分页逻辑查就行,
// 1. 查询前140条未删除的用户
Page<User> page = new Page<>(1, 140); Page<User> page = new Page<>(1, 140);
IPage<User> userPage = this.page(page);
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getIsDel, 0); // 只查询未删除的用户
IPage<User> userPage = this.page(page, queryWrapper);
List<User> users = userPage.getRecords(); List<User> users = userPage.getRecords();
// 2. 如果不足140条随机补充
// 2. 如果不足140条从剩余未删除用户中随机补充
if (users.size() < 140) { if (users.size() < 140) {
int needed = 140 - users.size(); int needed = 140 - users.size();
Random random = new Random();
for (int i = 0; i < needed; i++) {
User randomUser = users.get(random.nextInt(users.size()));
users.add(cloneUser(randomUser));
// 获取所有未删除用户ID
List<Long> allUserIds = userMapper.selectList(
new LambdaQueryWrapper<User>()
.select(User::getId)
.eq(User::getIsDel, 0)
.notIn(users.size() > 0, User::getId,
users.stream().map(User::getId).collect(Collectors.toList()))
).stream().map(User::getId).collect(Collectors.toList());
if (!allUserIds.isEmpty()) {
Random random = new Random();
for (int i = 0; i < needed && !allUserIds.isEmpty(); i++) {
// 随机选择一个未使用的用户ID
int randomIndex = random.nextInt(allUserIds.size());
Long randomUserId = allUserIds.remove(randomIndex);
// 查询完整用户信息
User randomUser = userMapper.selectById(randomUserId);
if (randomUser != null) {
users.add(randomUser);
}
}
} }
} }
return users; return users;
} }
private User cloneUser(User original) {
User clone = new User();
clone.setId(original.getId());
clone.setUsername(original.getUsername());
clone.setJwcode(original.getJwcode());
return clone;
}
} }

2
lottery-system/lottery-service/src/main/java/com/lottery/config/MybatisPageConfig.java

@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import java.util.Collections; import java.util.Collections;
@ -14,6 +15,7 @@ import java.util.Collections;
* @Description * @Description
*/ */
@Configuration @Configuration
@EnableTransactionManagement
public class MybatisPageConfig { public class MybatisPageConfig {
/** /**

1
lottery-system/lottery-service/src/main/resources/application.yml

@ -19,6 +19,7 @@ spring:
idle-timeout: 600000 # 空闲连接超时时间(默认 10 分钟) idle-timeout: 600000 # 空闲连接超时时间(默认 10 分钟)
max-lifetime: 1800000 # 连接最大生命周期(默认 30 分钟) max-lifetime: 1800000 # 连接最大生命周期(默认 30 分钟)
leak-detection-threshold: 5000 # 连接泄漏检测(毫秒,建议 5s) leak-detection-threshold: 5000 # 连接泄漏检测(毫秒,建议 5s)
# #
# ========== Redis 配置 ========== # ========== Redis 配置 ==========
redis: redis:

15
lottery-system/pom.xml

@ -51,6 +51,11 @@
<artifactId>mybatis-spring-boot-starter</artifactId> <artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version> <version>2.2.2</version>
</dependency> </dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.1</version> <!-- 或更高版本 -->
</dependency>
<dependency> <dependency>
<groupId>org.json</groupId> <groupId>org.json</groupId>
@ -96,11 +101,11 @@
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.baomidou</groupId>-->
<!-- <artifactId>mybatis-plus-boot-starter</artifactId>-->
<!-- <version>3.5.3</version>-->
<!-- </dependency>-->
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>

Loading…
Cancel
Save