|
|
@ -29,6 +29,7 @@ import org.springframework.transaction.annotation.Transactional; |
|
|
|
import org.springframework.web.multipart.MultipartFile; |
|
|
|
|
|
|
|
import java.util.*; |
|
|
|
import java.util.function.Function; |
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
/** |
|
|
@ -57,74 +58,83 @@ public class AdminUserDetailServiceImpl extends ServiceImpl<IUserDetailMapper, U |
|
|
|
|
|
|
|
@Override |
|
|
|
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.in(User::getId, UserIds); |
|
|
|
// // 如果没有有效用户,返回空分页结果 |
|
|
|
// if (CollectionUtils.isEmpty(validUserIds)) { |
|
|
|
// return emptyPageInfo(pageNum, pageSize); |
|
|
|
// } |
|
|
|
// |
|
|
|
// // 2. 构建用户表查询条件 |
|
|
|
// LambdaQueryWrapper<User> 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()); |
|
|
|
// 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); |
|
|
|
|
|
|
|
// 1. 先查询有效的用户ID列表(过滤掉 is_del = 1 的记录) |
|
|
|
// 1. 查询有效的用户详情记录(过滤掉 is_del = 1 的记录) |
|
|
|
LambdaQueryWrapper<UserDetail> detailWrapper = new LambdaQueryWrapper<>(); |
|
|
|
detailWrapper.select(UserDetail::getUserId) // 只查询user_id字段 |
|
|
|
.eq(UserDetail::getIsDel, 0); // 未删除的记录 |
|
|
|
detailWrapper.eq(UserDetail::getIsDel, 0); // 未删除的记录 |
|
|
|
|
|
|
|
List<Long> validUserIds = this.list(detailWrapper) |
|
|
|
.stream() |
|
|
|
.map(UserDetail::getUserId) |
|
|
|
.collect(Collectors.toList()); |
|
|
|
// 2. 执行分页查询(直接查询UserDetail表) |
|
|
|
Page<UserDetail> detailPage = new Page<>(pageNum, pageSize); |
|
|
|
Page<UserDetail> detailPageResult = adminUserDetailMapper.selectPage(detailPage, detailWrapper); |
|
|
|
|
|
|
|
// 如果没有有效用户,返回空分页结果 |
|
|
|
if (CollectionUtils.isEmpty(validUserIds)) { |
|
|
|
// 3. 如果没有数据,返回空分页结果 |
|
|
|
if (CollectionUtils.isEmpty(detailPageResult.getRecords())) { |
|
|
|
return emptyPageInfo(pageNum, pageSize); |
|
|
|
} |
|
|
|
|
|
|
|
// 2. 构建用户表查询条件 |
|
|
|
LambdaQueryWrapper<User> userWrapper = new LambdaQueryWrapper<>(); |
|
|
|
userWrapper.in(User::getId, validUserIds); // 限定在有效用户范围内 |
|
|
|
|
|
|
|
// 添加动态查询条件 |
|
|
|
if (StringUtils.isNotBlank(userQueryDto.getUsername())) { |
|
|
|
userWrapper.like(User::getUsername, userQueryDto.getUsername()); |
|
|
|
} |
|
|
|
if (StringUtils.isNotBlank(userQueryDto.getJwcode())) { |
|
|
|
userWrapper.like(User::getJwcode, userQueryDto.getJwcode()); // 注意字段名是否匹配 |
|
|
|
} |
|
|
|
// 4. 批量获取关联的User信息 |
|
|
|
List<Long> userIds = detailPageResult.getRecords().stream() |
|
|
|
.map(UserDetail::getUserId) |
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
// 3. 执行分页查询 |
|
|
|
Page<User> page = new Page<>(pageNum, pageSize); |
|
|
|
Page<User> userPage = adminUserMapper.selectPage(page, userWrapper); |
|
|
|
Map<Long, User> userMap = adminUserMapper.selectBatchIds(userIds).stream() |
|
|
|
.collect(Collectors.toMap(User::getId, Function.identity())); |
|
|
|
|
|
|
|
// 4. 转换为VO对象 |
|
|
|
List<UserVo> userVoList = userPage.getRecords().stream() |
|
|
|
.map(user -> { |
|
|
|
// 5. 构建VO对象 |
|
|
|
List<UserVo> userVoList = detailPageResult.getRecords().stream() |
|
|
|
.map(detail -> { |
|
|
|
UserVo vo = new UserVo(); |
|
|
|
// 这里做属性拷贝,可以使用BeanUtils或MapStruct等工具 |
|
|
|
vo.setId(user.getId()); |
|
|
|
vo.setId(detail.getId()); // 这里使用user_detail表的ID |
|
|
|
|
|
|
|
// 设置User表的信息 |
|
|
|
User user = userMap.get(detail.getUserId()); |
|
|
|
if (user != null) { |
|
|
|
vo.setUsername(user.getUsername()); |
|
|
|
// ...其他字段拷贝 |
|
|
|
vo.setJwcode(user.getJwcode()); |
|
|
|
// 其他需要从User表获取的字段... |
|
|
|
} |
|
|
|
return vo; |
|
|
|
}) |
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
// 5. 构建分页结果 |
|
|
|
return PageInfo.of(userPage, userVoList); |
|
|
|
// 6. 构建分页结果 |
|
|
|
return PageInfo.of(detailPageResult, userVoList); |
|
|
|
} |
|
|
|
|
|
|
|
// 返回空分页结果的辅助方法 |
|
|
@ -138,9 +148,223 @@ public class AdminUserDetailServiceImpl extends ServiceImpl<IUserDetailMapper, U |
|
|
|
return pageInfo; |
|
|
|
} |
|
|
|
|
|
|
|
// @Override |
|
|
|
// @Transactional(rollbackFor = Exception.class) |
|
|
|
// public Result importFixUsers(MultipartFile file, Long gradeId) { |
|
|
|
// try { |
|
|
|
// // 1. 解析Excel |
|
|
|
// List<UserImportDto> userDtos = EasyExcel.read(file.getInputStream()) |
|
|
|
// .head(UserImportDto.class) |
|
|
|
// .sheet() |
|
|
|
// .doReadSync(); |
|
|
|
// |
|
|
|
// // 2. 准备数据集合 |
|
|
|
// List<User> newUsers = new ArrayList<>(); // 新用户(需要插入user表) |
|
|
|
// List<User> existingUsers = new ArrayList<>(); // 已存在用户(从数据库查询) |
|
|
|
// List<UserDetail> userDetails = new ArrayList<>(); |
|
|
|
// Set<String> processedCodes = new HashSet<>(); |
|
|
|
// int successCount = 0; |
|
|
|
// int skipCount = 0; |
|
|
|
// |
|
|
|
// // 3. 查询所有已存在的jwcode |
|
|
|
// Set<String> existingCodes = adminUserMapper.selectAllUserCodes(); |
|
|
|
// |
|
|
|
// for (int i = 0; i < userDtos.size(); i++) { |
|
|
|
// UserImportDto dto = userDtos.get(i); |
|
|
|
// try { |
|
|
|
// validateUser(dto, i + 2, processedCodes); // 移除了existingCodes检查 |
|
|
|
// |
|
|
|
// // 检查用户是否已存在 |
|
|
|
// if (existingCodes.contains(dto.getJwcode())) { |
|
|
|
// // 用户已存在,查询用户信息 |
|
|
|
//// User existingUser = adminUserMapper.selectByJwcode(dto.getJwcode()); |
|
|
|
// Long userId = adminUserMapper.selectByJwcode(dto.getJwcode()); |
|
|
|
// existingUsers.add(adminUserMapper.selectById(userId)); |
|
|
|
// } else { |
|
|
|
// // 用户不存在,创建新用户 |
|
|
|
// User newUser = convertToEntity(dto); |
|
|
|
// newUsers.add(newUser); |
|
|
|
// } |
|
|
|
// |
|
|
|
// processedCodes.add(dto.getJwcode()); |
|
|
|
// successCount++; |
|
|
|
// } catch (IllegalArgumentException e) { |
|
|
|
// LOGGER.warn("导入数据校验失败: {}", e.getMessage()); |
|
|
|
// skipCount++; |
|
|
|
// } |
|
|
|
// } |
|
|
|
// |
|
|
|
// // 4. 批量保存新用户 |
|
|
|
// if (!newUsers.isEmpty()) { |
|
|
|
// adminUserService.saveBatch(newUsers); |
|
|
|
// } |
|
|
|
// |
|
|
|
// // 5. 准备userDetail数据 (包括新用户和已存在用户) |
|
|
|
// List<User> allUsers = new ArrayList<>(); |
|
|
|
// allUsers.addAll(newUsers); |
|
|
|
// allUsers.addAll(existingUsers); |
|
|
|
// |
|
|
|
// for (User user : allUsers) { |
|
|
|
// UserDetail detail = new UserDetail(); |
|
|
|
// detail.setUserId(user.getId()); |
|
|
|
// detail.setGradeId(gradeId); |
|
|
|
// detail.setIsFixed(1); |
|
|
|
// detail.setIsDel(0);// 标记为内定用户 |
|
|
|
// userDetails.add(detail); |
|
|
|
// } |
|
|
|
// |
|
|
|
// // 6. 批量保存userDetail |
|
|
|
// if (!userDetails.isEmpty()) { |
|
|
|
// this.saveBatch(userDetails); |
|
|
|
// return Result.success(String.format("导入成功%d条,跳过%d条", successCount, skipCount)); |
|
|
|
// } |
|
|
|
// |
|
|
|
// return Result.failure("没有有效数据可导入"); |
|
|
|
// } catch (Exception e) { |
|
|
|
// LOGGER.error("导入用户失败", e); |
|
|
|
// return Result.failure("导入失败: " + e.getMessage()); |
|
|
|
// } |
|
|
|
// } |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
|
public Result importFixUsers(MultipartFile file, Long gradeId) { |
|
|
|
// try { |
|
|
|
// // 1. 解析Excel |
|
|
|
// List<UserImportDto> userDtos = EasyExcel.read(file.getInputStream()) |
|
|
|
// .head(UserImportDto.class) |
|
|
|
// .sheet() |
|
|
|
// .doReadSync(); |
|
|
|
// |
|
|
|
// // 2. 准备数据集合 |
|
|
|
// List<User> newUsers = new ArrayList<>(); // 需要新增到user表的用户 |
|
|
|
// List<User> usersToRecover = new ArrayList<>(); // 需要恢复的已删除用户 |
|
|
|
// List<UserDetail> newUserDetails = new ArrayList<>(); // 新增的userDetail |
|
|
|
// List<UserDetail> detailsToRecover = new ArrayList<>(); // 需要恢复的userDetail |
|
|
|
// |
|
|
|
// Set<String> processedCodes = new HashSet<>(); |
|
|
|
// int successCount = 0; |
|
|
|
// int skipCount = 0; |
|
|
|
// |
|
|
|
// // 3. 查询所有已存在的jwcode(user表) |
|
|
|
// Set<String> existingJwCodes = adminUserMapper.selectAllUserCodes(); |
|
|
|
// |
|
|
|
// // 4. 查询所有已存在的user_detail记录(避免N+1查询) |
|
|
|
// Map<String, UserDetail> existingDetails = adminUserDetailMapper.selectList(null) |
|
|
|
// .stream() |
|
|
|
// .collect(Collectors.toMap( |
|
|
|
// detail -> adminUserMapper.selectById(detail.getUserId()).getJwcode(), |
|
|
|
// detail -> detail |
|
|
|
// )); |
|
|
|
// |
|
|
|
// for (int i = 0; i < userDtos.size(); i++) { |
|
|
|
// UserImportDto dto = userDtos.get(i); |
|
|
|
// try { |
|
|
|
// validateUser(dto, i + 2, processedCodes); |
|
|
|
// |
|
|
|
// // 检查是否已在当前文件中处理过 |
|
|
|
// if (processedCodes.contains(dto.getJwcode())) { |
|
|
|
// throw new IllegalArgumentException("精网号在当前文件中重复: " + dto.getJwcode()); |
|
|
|
// } |
|
|
|
// processedCodes.add(dto.getJwcode()); |
|
|
|
// |
|
|
|
// // 处理逻辑 |
|
|
|
// if (existingJwCodes.contains(dto.getJwcode())) { |
|
|
|
// // --- 用户已存在 --- |
|
|
|
// User existingUser = adminUserMapper.selectUserByJwcode(dto.getJwcode()); |
|
|
|
// |
|
|
|
// // 检查user表状态 |
|
|
|
// if (existingUser.getIsDel() == 1) { |
|
|
|
// // user表已删除,恢复用户 |
|
|
|
// existingUser.setIsDel(0); |
|
|
|
// usersToRecover.add(existingUser); |
|
|
|
// } |
|
|
|
// |
|
|
|
//// // 检查user_detail状态 |
|
|
|
//// UserDetail existingDetail = existingDetails.get(dto.getJwcode()); |
|
|
|
//// if (existingDetail != null) { |
|
|
|
//// if (existingDetail.getIsDel() == 1) { |
|
|
|
//// // user_detail已删除,恢复记录 |
|
|
|
//// existingDetail.setIsDel(0); |
|
|
|
//// existingDetail.setGradeId(gradeId); |
|
|
|
//// detailsToRecover.add(existingDetail); |
|
|
|
//// } else { |
|
|
|
//// // user_detail已存在且未删除,跳过 |
|
|
|
//// throw new IllegalArgumentException("用户已存在且未删除: " + dto.getJwcode()); |
|
|
|
//// } |
|
|
|
//// } else { |
|
|
|
//// // user_detail不存在,新增 |
|
|
|
//// newUserDetails.add(createUserDetail(existingUser.getId(), gradeId)); |
|
|
|
//// } |
|
|
|
//// } else { |
|
|
|
//// // --- 全新用户 --- |
|
|
|
//// User newUser = convertToEntity(dto); |
|
|
|
//// newUsers.add(newUser); |
|
|
|
//// } |
|
|
|
//// successCount++; |
|
|
|
//// } catch (IllegalArgumentException e) { |
|
|
|
//// LOGGER.warn("导入数据校验失败: {}", e.getMessage()); |
|
|
|
//// skipCount++; |
|
|
|
//// } |
|
|
|
//// } |
|
|
|
// // 检查用户是否已经是其他等级的内定用户 |
|
|
|
// UserDetail existingFixedDetail = existingDetails.get(existingUser.getId()); |
|
|
|
// if (existingFixedDetail != null) { |
|
|
|
// if (existingFixedDetail.getGradeId().equals(gradeId)) { |
|
|
|
// // 已经是当前等级的内定用户 |
|
|
|
// if (existingFixedDetail.getIsDel() == 1) { |
|
|
|
// // 恢复已删除的记录 |
|
|
|
// existingFixedDetail.setIsDel(0); |
|
|
|
// detailsToRecover.add(existingFixedDetail); |
|
|
|
// } else { |
|
|
|
// throw new IllegalArgumentException("用户已是当前等级的内定用户: " + dto.getJwcode()); |
|
|
|
// } |
|
|
|
// } else { |
|
|
|
// // 已经是其他等级的内定用户 |
|
|
|
// throw new IllegalArgumentException("用户已是其他等级的内定用户,无法添加到本等级: " + dto.getJwcode()); |
|
|
|
// } |
|
|
|
// } else { |
|
|
|
// // 不是任何等级的内定用户,可以添加 |
|
|
|
// newUserDetails.add(createUserDetail(existingUser.getId(), gradeId)); |
|
|
|
// } |
|
|
|
// } else { |
|
|
|
// // --- 全新用户 --- |
|
|
|
// User newUser = convertToEntity(dto); |
|
|
|
// newUsers.add(newUser); |
|
|
|
// } |
|
|
|
// successCount++; |
|
|
|
// } catch (IllegalArgumentException e) { |
|
|
|
// LOGGER.warn("导入数据校验失败: {}", e.getMessage()); |
|
|
|
// skipCount++; |
|
|
|
// } |
|
|
|
// } |
|
|
|
// // 5. 批量操作数据库 |
|
|
|
// if (!newUsers.isEmpty()) { |
|
|
|
// adminUserService.saveBatch(newUsers); |
|
|
|
// // 为新用户创建userDetail |
|
|
|
// newUsers.forEach(user -> |
|
|
|
// newUserDetails.add(createUserDetail(user.getId(), gradeId))); |
|
|
|
// } |
|
|
|
// |
|
|
|
// if (!usersToRecover.isEmpty()) { |
|
|
|
// adminUserService.updateBatchById(usersToRecover); |
|
|
|
// } |
|
|
|
// |
|
|
|
// if (!detailsToRecover.isEmpty()) { |
|
|
|
// this.updateBatchById(detailsToRecover); |
|
|
|
// } |
|
|
|
// |
|
|
|
// if (!newUserDetails.isEmpty()) { |
|
|
|
// this.saveBatch(newUserDetails); |
|
|
|
// } |
|
|
|
// |
|
|
|
// return Result.success(String.format("导入成功%d条,跳过%d条", successCount, skipCount)); |
|
|
|
// } catch (Exception e) { |
|
|
|
// LOGGER.error("导入用户失败", e); |
|
|
|
// return Result.failure("导入失败: " + e.getMessage()); |
|
|
|
// } |
|
|
|
|
|
|
|
try { |
|
|
|
// 1. 解析Excel |
|
|
|
List<UserImportDto> userDtos = EasyExcel.read(file.getInputStream()) |
|
|
@ -148,72 +372,81 @@ public class AdminUserDetailServiceImpl extends ServiceImpl<IUserDetailMapper, U |
|
|
|
.sheet() |
|
|
|
.doReadSync(); |
|
|
|
|
|
|
|
// 2. 准备数据集合 |
|
|
|
List<User> newUsers = new ArrayList<>(); // 新用户(需要插入user表) |
|
|
|
List<User> existingUsers = new ArrayList<>(); // 已存在用户(从数据库查询) |
|
|
|
List<UserDetail> userDetails = new ArrayList<>(); |
|
|
|
Set<String> processedCodes = new HashSet<>(); |
|
|
|
int successCount = 0; |
|
|
|
int skipCount = 0; |
|
|
|
|
|
|
|
// 3. 查询所有已存在的jwcode |
|
|
|
Set<String> existingCodes = adminUserMapper.selectAllUserCodes(); |
|
|
|
Set<String> processedCodes = new HashSet<>(); |
|
|
|
|
|
|
|
for (int i = 0; i < userDtos.size(); i++) { |
|
|
|
UserImportDto dto = userDtos.get(i); |
|
|
|
try { |
|
|
|
validateUser(dto, i + 2, processedCodes); // 移除了existingCodes检查 |
|
|
|
|
|
|
|
// 检查用户是否已存在 |
|
|
|
if (existingCodes.contains(dto.getJwcode())) { |
|
|
|
// 用户已存在,查询用户信息 |
|
|
|
// User existingUser = adminUserMapper.selectByJwcode(dto.getJwcode()); |
|
|
|
Long userId = adminUserMapper.selectByJwcode(dto.getJwcode()); |
|
|
|
existingUsers.add(adminUserMapper.selectById(userId)); |
|
|
|
validateUser(dto, i + 2, processedCodes); |
|
|
|
processedCodes.add(dto.getJwcode()); |
|
|
|
|
|
|
|
// 2. 查询用户是否存在(按jwcode) |
|
|
|
User user = adminUserMapper.selectUserByJwcode(dto.getJwcode()); |
|
|
|
if (user == null) { |
|
|
|
// 新增用户 |
|
|
|
user = convertToEntity(dto); |
|
|
|
adminUserMapper.insert(user); |
|
|
|
} else if (user.getIsDel() == 1) { |
|
|
|
// 恢复已删除用户 |
|
|
|
user.setIsDel(0); |
|
|
|
adminUserMapper.updateById(user); |
|
|
|
} |
|
|
|
|
|
|
|
// 3. 检查用户是否已经是其他等级的内定用户(全局检查) |
|
|
|
LambdaQueryWrapper<UserDetail> globalCheckWrapper = new LambdaQueryWrapper<>(); |
|
|
|
globalCheckWrapper.eq(UserDetail::getUserId, user.getId()) |
|
|
|
.eq(UserDetail::getIsFixed, 1) |
|
|
|
.eq(UserDetail::getIsDel, 0) |
|
|
|
.ne(UserDetail::getGradeId, gradeId); // 排除当前等级 |
|
|
|
|
|
|
|
if (adminUserDetailMapper.selectCount(globalCheckWrapper) > 0) { |
|
|
|
throw new IllegalArgumentException("用户已是其他等级的内定用户,无法重复内定: " + dto.getJwcode()); |
|
|
|
} |
|
|
|
|
|
|
|
// 3. 检查是否已是当前gradeId的内定用户 |
|
|
|
LambdaQueryWrapper<UserDetail> wrapper = new LambdaQueryWrapper<>(); |
|
|
|
wrapper.eq(UserDetail::getUserId, user.getId()) |
|
|
|
.eq(UserDetail::getGradeId, gradeId) |
|
|
|
.eq(UserDetail::getIsFixed, 1); |
|
|
|
|
|
|
|
UserDetail existingDetail = adminUserDetailMapper.selectOne(wrapper); |
|
|
|
if (existingDetail != null) { |
|
|
|
if (existingDetail.getIsDel() == 0) { |
|
|
|
throw new IllegalArgumentException("用户已是当前等级的内定用户: " + dto.getJwcode()); |
|
|
|
} else { |
|
|
|
// 用户不存在,创建新用户 |
|
|
|
User newUser = convertToEntity(dto); |
|
|
|
newUsers.add(newUser); |
|
|
|
// 物理删除旧记录,再新增一条 |
|
|
|
adminUserDetailMapper.deleteById(existingDetail.getId()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
processedCodes.add(dto.getJwcode()); |
|
|
|
// 4. 新增内定记录 |
|
|
|
UserDetail newDetail = createUserDetail(user.getId(), gradeId); |
|
|
|
adminUserDetailMapper.insert(newDetail); |
|
|
|
successCount++; |
|
|
|
|
|
|
|
} catch (IllegalArgumentException e) { |
|
|
|
LOGGER.warn("导入数据校验失败: {}", e.getMessage()); |
|
|
|
LOGGER.warn("导入失败(行{}): {}", i + 2, e.getMessage()); |
|
|
|
skipCount++; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 4. 批量保存新用户 |
|
|
|
if (!newUsers.isEmpty()) { |
|
|
|
adminUserService.saveBatch(newUsers); |
|
|
|
return Result.success(String.format("导入成功%d条,跳过%d条", successCount, skipCount)); |
|
|
|
} catch (Exception e) { |
|
|
|
LOGGER.error("导入失败", e); |
|
|
|
return Result.failure("导入失败: " + e.getMessage()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 5. 准备userDetail数据 (包括新用户和已存在用户) |
|
|
|
List<User> allUsers = new ArrayList<>(); |
|
|
|
allUsers.addAll(newUsers); |
|
|
|
allUsers.addAll(existingUsers); |
|
|
|
|
|
|
|
for (User user : allUsers) { |
|
|
|
// 辅助方法:创建UserDetail |
|
|
|
private UserDetail createUserDetail(Long userId, Long gradeId) { |
|
|
|
UserDetail detail = new UserDetail(); |
|
|
|
detail.setUserId(user.getId()); |
|
|
|
detail.setUserId(userId); |
|
|
|
detail.setGradeId(gradeId); |
|
|
|
detail.setIsFixed(1); |
|
|
|
detail.setIsDel(0);// 标记为内定用户 |
|
|
|
userDetails.add(detail); |
|
|
|
} |
|
|
|
|
|
|
|
// 6. 批量保存userDetail |
|
|
|
if (!userDetails.isEmpty()) { |
|
|
|
this.saveBatch(userDetails); |
|
|
|
return Result.success(String.format("导入成功%d条,跳过%d条", successCount, skipCount)); |
|
|
|
} |
|
|
|
|
|
|
|
return Result.failure("没有有效数据可导入"); |
|
|
|
} catch (Exception e) { |
|
|
|
LOGGER.error("导入用户失败", e); |
|
|
|
return Result.failure("导入失败: " + e.getMessage()); |
|
|
|
} |
|
|
|
detail.setIsDel(0); |
|
|
|
return detail; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|