From 3e633448787006cd27526434ed6a3fc052c6c222 Mon Sep 17 00:00:00 2001 From: willy <2462310981@qq.com> Date: Mon, 21 Jul 2025 18:10:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E4=BA=94=E5=BC=A0=E8=A1=A8=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=E8=BD=AF=E5=88=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/lottery/dto/UserLoginDto.java | 2 +- .../main/java/com/lottery/LotteryApplication.java | 2 + .../admin/controller/AdminPrizeController.java | 4 +- .../admin/controller/AdminUserController.java | 6 +- .../admin/mapper/AdminUserDetailMapper.java | 4 +- .../lottery/admin/service/AdminPrizeService.java | 3 +- .../admin/service/AdminUserDetailService.java | 3 +- .../admin/service/Impl/AdminGradeServiceImpl.java | 55 +++++---- .../admin/service/Impl/AdminPrizeServiceImpl.java | 123 +++++++++++++++------ .../service/Impl/AdminUserDetailServiceImpl.java | 102 +++++++++++++---- .../admin/service/Impl/AdminWinServiceImpl.java | 1 + .../com/lottery/api/controller/UserController.java | 2 +- .../java/com/lottery/api/mapper/IUserMapper.java | 2 +- .../api/service/Impl/UserDetailServiceImpl.java | 19 +++- .../lottery/api/service/Impl/UserServiceImpl.java | 52 ++++++--- .../java/com/lottery/config/MybatisPageConfig.java | 2 + .../src/main/resources/application.yml | 1 + lottery-system/pom.xml | 15 ++- 18 files changed, 283 insertions(+), 115 deletions(-) diff --git a/lottery-system/lottery-pojo/src/main/java/com/lottery/dto/UserLoginDto.java b/lottery-system/lottery-pojo/src/main/java/com/lottery/dto/UserLoginDto.java index 0834a91..0f44454 100644 --- a/lottery-system/lottery-pojo/src/main/java/com/lottery/dto/UserLoginDto.java +++ b/lottery-system/lottery-pojo/src/main/java/com/lottery/dto/UserLoginDto.java @@ -15,7 +15,7 @@ import java.io.Serializable; @Data public class UserLoginDto implements Serializable { - private String username; +// private String username; private String password; } 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 335f647..7daf8b5 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 @@ -5,11 +5,13 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.WebApplicationType; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; +import org.springframework.transaction.annotation.EnableTransactionManagement; import javax.swing.*; @SpringBootApplication @MapperScan("com.lottery.*.mapper") +@EnableTransactionManagement 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/AdminPrizeController.java b/lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminPrizeController.java index bf94b1e..fff108e 100644 --- a/lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminPrizeController.java +++ b/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) { return Result.failure("所有字段都必须填写"); } - adminPrizeService.addWinUser(fixUserDto); - return Result.success(); + return adminPrizeService.addWinUser(fixUserDto); + } } 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 db4121d..78cc1c3 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 @@ -130,8 +130,10 @@ public class AdminUserController { @PostMapping("/delete/fix") public Result deleteFix(@RequestParam Long 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") diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminUserDetailMapper.java b/lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminUserDetailMapper.java index 317f6ca..9f6bf44 100644 --- a/lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminUserDetailMapper.java +++ b/lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminUserDetailMapper.java @@ -22,6 +22,6 @@ public interface AdminUserDetailMapper extends BaseMapper { @Select("select jwcode from user_detail") Set 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); } diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/AdminPrizeService.java b/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/AdminPrizeService.java index 8e0d8c2..c49827e 100644 --- a/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/AdminPrizeService.java +++ b/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.FixUserDto; import com.lottery.entity.Prize; +import com.lottery.result.Result; import com.lottery.vo.PageInfo; import com.lottery.vo.PrizeVo; @@ -24,7 +25,7 @@ public interface AdminPrizeService extends IService { PrizeVo getPrizeById(Long id); - void addWinUser(FixUserDto fixUserDto); + Result addWinUser(FixUserDto fixUserDto); boolean removePrizeById(Long id); } diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/AdminUserDetailService.java b/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/AdminUserDetailService.java index 239e9ab..f9ba296 100644 --- a/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/AdminUserDetailService.java +++ b/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.vo.PageInfo; import com.lottery.vo.UserVo; -import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -25,7 +24,7 @@ public interface AdminUserDetailService extends IService { Result importFixUsers(MultipartFile file, Long gradeId); - void removeFixUserById(Long id); + boolean removeFixUserById(Long id); boolean removeFixUserBatchByIds(List ids); } diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminGradeServiceImpl.java b/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminGradeServiceImpl.java index 76a6f37..792635f 100644 --- a/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminGradeServiceImpl.java +++ b/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.Date; import java.util.List; +import java.util.stream.Collectors; /** * @program: lottery-system @@ -105,28 +106,38 @@ public class AdminGradeServiceImpl extends ServiceImpl @Transactional public boolean removeGradeById(Long id) { //把关联的win_record表删了 - //先根据 gradeId 查询关联的 prizeId - LambdaQueryWrapper prizeQueryWrapper = new LambdaQueryWrapper<>(); - prizeQueryWrapper.eq(Prize::getGradeId, id).select(Prize::getId); - Prize prize = adminPrizeMapper.selectOne(prizeQueryWrapper); - LambdaUpdateWrapper updateWrapper3 = new LambdaUpdateWrapper<>(); - updateWrapper3.eq(WinnerRecord::getPrizeId, prize.getId()).set(WinnerRecord::getIsDel,1); - adminWinMapper.update(null, updateWrapper3); - - - //吧关联的prize表删了 - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.eq(Prize::getGradeId, id).set(Prize::getIs_del, 1); - adminPrizeMapper.update(null, updateWrapper); - - - //把关联的user_detail表删了 - LambdaUpdateWrapper updateWrapper1 = new LambdaUpdateWrapper<>(); - updateWrapper1.eq(UserDetail::getGradeId, id).set(UserDetail::getIsDel, 1); - adminUserDetailMapper.update(null, updateWrapper1); - - - //最后逻辑删除等级 + // 1. 查询所有关联的 prizeId(可能多个) + List prizes = adminPrizeMapper.selectList( + new LambdaQueryWrapper() + .eq(Prize::getGradeId, id) + .select(Prize::getId) + ); + + // 2. 批量逻辑删除关联的 win_record + if (!prizes.isEmpty()) { + List prizeIds = prizes.stream() + .map(Prize::getId) + .collect(Collectors.toList()); + + LambdaUpdateWrapper winRecordWrapper = new LambdaUpdateWrapper<>(); + winRecordWrapper.in(WinnerRecord::getPrizeId, prizeIds) + .set(WinnerRecord::getIsDel, 1); + adminWinMapper.update(null, winRecordWrapper); + } + + // 3. 逻辑删除关联的 prize + LambdaUpdateWrapper prizeWrapper = new LambdaUpdateWrapper<>(); + prizeWrapper.eq(Prize::getGradeId, id) + .set(Prize::getIs_del, 1); + adminPrizeMapper.update(null, prizeWrapper); + + // 4. 逻辑删除关联的 user_detail + LambdaUpdateWrapper userDetailWrapper = new LambdaUpdateWrapper<>(); + userDetailWrapper.eq(UserDetail::getGradeId, id) + .set(UserDetail::getIsDel, 1); + adminUserDetailMapper.update(null, userDetailWrapper); + + // 5. 逻辑删除 grade adminGradeMapper.deleteGradeById(id); return true; } diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminPrizeServiceImpl.java b/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminPrizeServiceImpl.java index ff13a2c..3346c04 100644 --- a/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminPrizeServiceImpl.java +++ b/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.FixUserDto; import com.lottery.entity.*; +import com.lottery.result.Result; import com.lottery.utils.ConvertBeanUtil; import com.lottery.vo.PageInfo; import com.lottery.vo.PrizeVo; @@ -78,7 +79,7 @@ public class AdminPrizeServiceImpl extends ServiceImpl // 1. 查询关联的等级(grade)状态 Grade grade = adminGradeMapper.selectById(prizeDto.getGradeId()); // 假设 gradeId 是传入的等级ID - if (grade == null) { + if (grade.getIsDel() == 1) { return false; // 等级不存在,直接返回失败 } @@ -124,8 +125,6 @@ public class AdminPrizeServiceImpl extends ServiceImpl } - - // 2. 查询目标等级信息 Grade targetGrade = adminGradeMapper.selectById(gradeId); if (targetGrade == null) { @@ -145,14 +144,14 @@ public class AdminPrizeServiceImpl extends ServiceImpl return false; // 目标等级已有奖品,不能修改 } } - - // 4. 检查奖品名称是否重复(排除自己) - LambdaQueryWrapper nameCheckWrapper = new LambdaQueryWrapper<>(); - nameCheckWrapper.eq(Prize::getPrizeName, prizeDto.getPrizeName()) - .ne(Prize::getId, prizeDto.getId()); - if (this.count(nameCheckWrapper) > 0) { - return false; // 奖品名称已存在 - } +// +// // 4. 检查奖品名称是否重复(排除自己) +// LambdaQueryWrapper nameCheckWrapper = new LambdaQueryWrapper<>(); +// nameCheckWrapper.eq(Prize::getPrizeName, prizeDto.getPrizeName()) +// .ne(Prize::getId, prizeDto.getId()); +// if (this.count(nameCheckWrapper) > 0) { +// return false; // 奖品名称已存在 +// } // LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); // wrapper.eq(Prize::getGradeId, grade.getId()); @@ -182,32 +181,88 @@ public class AdminPrizeServiceImpl extends ServiceImpl } @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 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 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 diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminUserDetailServiceImpl.java b/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminUserDetailServiceImpl.java index c9871d5..87a1b93 100644 --- a/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminUserDetailServiceImpl.java +++ b/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.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -57,28 +58,84 @@ public class AdminUserDetailServiceImpl extends ServiceImpl listFixUser(int pageNum, int pageSize, UserQueryDto userQueryDto) { - //查UserDetail表吧所有的userid取出来,然后在从user表根据id查就行了。 - List list = this.list(); - List UserIds = list.stream().map(UserDetail::getUserId).collect(Collectors.toList()); - - Page page = new Page<>(pageNum, pageSize); - - //user表根据id批量查询 - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(User::getIsDel, 0); - queryWrapper.in(User::getId, UserIds); +// //查UserDetail表吧所有的userid取出来,然后在从user表根据id查就行了。 +// List list = this.list(); +// List UserIds = list.stream().map(UserDetail::getUserId).collect(Collectors.toList()); +// +// Page page = new Page<>(pageNum, pageSize); +// +// //user表根据id批量查询 +// LambdaQueryWrapper 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 userPage = this.adminUserMapper.selectPage(page, queryWrapper); +// List userVolist = ConvertBeanUtil.convertList(userPage.getRecords(), UserVo.class); +// return PageInfo.of(userPage, userVolist); + + // 1. 先查询有效的用户ID列表(过滤掉 is_del = 1 的记录) + LambdaQueryWrapper detailWrapper = new LambdaQueryWrapper<>(); + detailWrapper.select(UserDetail::getUserId) // 只查询user_id字段 + .eq(UserDetail::getIsDel, 0); // 未删除的记录 + + List validUserIds = this.list(detailWrapper) + .stream() + .map(UserDetail::getUserId) + .collect(Collectors.toList()); + + // 如果没有有效用户,返回空分页结果 + if (CollectionUtils.isEmpty(validUserIds)) { + return emptyPageInfo(pageNum, pageSize); + } + // 2. 构建用户表查询条件 + LambdaQueryWrapper userWrapper = new LambdaQueryWrapper<>(); + userWrapper.in(User::getId, validUserIds); // 限定在有效用户范围内 + // 添加动态查询条件 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 userPage = this.adminUserMapper.selectPage(page, queryWrapper); - List userVolist = ConvertBeanUtil.convertList(userPage.getRecords(), UserVo.class); - return PageInfo.of(userPage, userVolist); + // 3. 执行分页查询 + Page page = new Page<>(pageNum, pageSize); + Page userPage = adminUserMapper.selectPage(page, userWrapper); + + // 4. 转换为VO对象 + List 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 PageInfo emptyPageInfo(int pageNum, int pageSize) { + PageInfo pageInfo = new PageInfo<>(); + pageInfo.setList(Collections.emptyList()); + pageInfo.setTotal(0L); + pageInfo.setPageNum(pageNum); + pageInfo.setPageSize(pageSize); + pageInfo.setPages(0); + return pageInfo; } @Override @@ -141,7 +198,8 @@ public class AdminUserDetailServiceImpl extends ServiceImpl 0; + +// return this.update( +// new LambdaUpdateWrapper() +// .eq(UserDetail::getId, id) +// .set(UserDetail::getIsDel, 1) +// ); } @Override diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminWinServiceImpl.java b/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminWinServiceImpl.java index 811bf7a..78b8fa6 100644 --- a/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminWinServiceImpl.java +++ b/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminWinServiceImpl.java @@ -64,6 +64,7 @@ public class AdminWinServiceImpl extends ServiceImpl recordWrapper = new LambdaQueryWrapper<>(); + recordWrapper.eq(WinnerRecord::getIsDel, 0); if (StringUtils.isNotBlank(winUserQueryDto.getUsername())){ // 需要关联用户表查询用户名 diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/api/controller/UserController.java b/lottery-system/lottery-service/src/main/java/com/lottery/api/controller/UserController.java index 802f498..199d092 100644 --- a/lottery-system/lottery-service/src/main/java/com/lottery/api/controller/UserController.java +++ b/lottery-system/lottery-service/src/main/java/com/lottery/api/controller/UserController.java @@ -61,7 +61,7 @@ public class UserController { UserLoginVo userLoginVo = UserLoginVo.builder() .id(user.getId()) .token(token) - .username(user.getUsername()) + .username("hongli") .build(); return Result.success(userLoginVo); diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/api/mapper/IUserMapper.java b/lottery-system/lottery-service/src/main/java/com/lottery/api/mapper/IUserMapper.java index 737eac1..461d291 100644 --- a/lottery-system/lottery-service/src/main/java/com/lottery/api/mapper/IUserMapper.java +++ b/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 { - @Select("select id, username, password from user where username = #{username}") + @Select("select id, username, password from user where password = #{password}") User getByUsername(String username); } \ No newline at end of file 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 d18fc9f..16ac47a 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 @@ -144,7 +144,8 @@ public class UserDetailServiceImpl extends ServiceImpl userDetailWrapper = new LambdaQueryWrapper<>(); userDetailWrapper.eq(UserDetail::getGradeId, startLotteryDto.getGradeId()) - .eq(UserDetail::getIsFixed, 1); + .eq(UserDetail::getIsFixed, 1) + .eq(UserDetail::getIsDel, 0); // 新增:只查询未删除的内定用户; List fixedUsers = userDetailMapper.selectList(userDetailWrapper); // 该等奖下该轮中奖用户结果(即winners.size() = perwin, 但是也有特殊情况,per_win > 剩余人数,只抽剩余人数就行) @@ -194,7 +195,10 @@ public class UserDetailServiceImpl extends ServiceImpl getAvailableFixedUsers(List fixedUsers) { List availableUsers = new ArrayList<>(); for (UserDetail userDetail : fixedUsers) { - User user = userMapper.selectById(userDetail.getUserId()); + User user = userMapper.selectOne(new LambdaQueryWrapper() + .eq(User::getId, userDetail.getUserId()) + .eq(User::getIsDel, 0)); // 新增:只查询未删除的用户 + if (user != null && user.getIsWin() == 0) { // 0表示未中奖 availableUsers.add(user); } @@ -206,11 +210,15 @@ public class UserDetailServiceImpl extends ServiceImpl getOtherGradeFixedUsers(Long excludeGradeId) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.ne(UserDetail::getGradeId, excludeGradeId) // 排除当前等级 - .eq(UserDetail::getIsFixed, 1); + .eq(UserDetail::getIsFixed, 1) + .eq(UserDetail::getIsDel, 0); // 新增:只查询未删除的内定用户 + List otherFixedUsers = userDetailMapper.selectList(wrapper); return otherFixedUsers.stream() - .map(userDetail -> userMapper.selectById(userDetail.getUserId())) + .map(userDetail -> userMapper.selectOne(new LambdaQueryWrapper() + .eq(User::getId, userDetail.getUserId()) + .eq(User::getIsDel, 0))) // 新增:只查询未删除的用户 .filter(Objects::nonNull) .collect(Collectors.toList()); } @@ -226,7 +234,8 @@ public class UserDetailServiceImpl extends ServiceImpl wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(User::getIsWin, 0); + wrapper.eq(User::getIsWin, 0) + .eq(User::getIsDel, 0); // 新增:只查询未删除的用户; List allUsers = userMapper.selectList(wrapper); // 过滤掉其他等奖的内定用户 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 56d334b..4f7b87b 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 @@ -18,6 +18,7 @@ import org.springframework.stereotype.Service; import java.util.List; import java.util.Random; +import java.util.stream.Collectors; /** * @program: lottery-system @@ -36,13 +37,15 @@ public class UserServiceImpl extends ServiceImpl implements I @Autowired private StringRedisTemplate redisTemplate; + + @Override public User login(UserLoginDto userLoginDto) { 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())) { //密码错误 @@ -53,30 +56,43 @@ public class UserServiceImpl extends ServiceImpl implements I @Override public List listAllUser() { -// 1. 查询前140条用户,直接分页逻辑查就行, + // 1. 查询前140条未删除的用户 Page page = new Page<>(1, 140); - IPage userPage = this.page(page); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(User::getIsDel, 0); // 只查询未删除的用户 + + IPage userPage = this.page(page, queryWrapper); List users = userPage.getRecords(); - // 2. 如果不足140条,随机补充 + // 2. 如果不足140条,从剩余未删除用户中随机补充 if (users.size() < 140) { 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 allUserIds = userMapper.selectList( + new LambdaQueryWrapper() + .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; } - private User cloneUser(User original) { - User clone = new User(); - clone.setId(original.getId()); - clone.setUsername(original.getUsername()); - clone.setJwcode(original.getJwcode()); - return clone; - } } diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/config/MybatisPageConfig.java b/lottery-system/lottery-service/src/main/java/com/lottery/config/MybatisPageConfig.java index 58e7da9..5775a13 100644 --- a/lottery-system/lottery-service/src/main/java/com/lottery/config/MybatisPageConfig.java +++ b/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 org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.transaction.annotation.EnableTransactionManagement; import java.util.Collections; @@ -14,6 +15,7 @@ import java.util.Collections; * @Description */ @Configuration +@EnableTransactionManagement public class MybatisPageConfig { /** diff --git a/lottery-system/lottery-service/src/main/resources/application.yml b/lottery-system/lottery-service/src/main/resources/application.yml index 733c039..7ca4a34 100644 --- a/lottery-system/lottery-service/src/main/resources/application.yml +++ b/lottery-system/lottery-service/src/main/resources/application.yml @@ -19,6 +19,7 @@ spring: idle-timeout: 600000 # 空闲连接超时时间(默认 10 分钟) max-lifetime: 1800000 # 连接最大生命周期(默认 30 分钟) leak-detection-threshold: 5000 # 连接泄漏检测(毫秒,建议 5s) + # # ========== Redis 配置 ========== redis: diff --git a/lottery-system/pom.xml b/lottery-system/pom.xml index ad84371..67bc7c3 100644 --- a/lottery-system/pom.xml +++ b/lottery-system/pom.xml @@ -51,6 +51,11 @@ mybatis-spring-boot-starter 2.2.2 + + com.baomidou + mybatis-plus-boot-starter + 3.5.3.1 + org.json @@ -96,11 +101,11 @@ test - - com.baomidou - mybatis-plus-boot-starter - 3.5.3 - + + + + + org.springframework.boot