|
|
@ -209,6 +209,130 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, User> imp |
|
|
|
return PageInfo.of(userPage, userVolist); |
|
|
|
} |
|
|
|
|
|
|
|
// @Override |
|
|
|
// public Result importUsers(MultipartFile file) { |
|
|
|
// try { |
|
|
|
// // 1. 解析Excel |
|
|
|
// List<UserImportDto> userDtos = EasyExcel.read(file.getInputStream()) |
|
|
|
// .head(UserImportDto.class) |
|
|
|
// .sheet() |
|
|
|
// .doReadSync(); |
|
|
|
// |
|
|
|
// // 2. 过滤:保留以"9"开头的精网号数据,并记录被剔除的数据 |
|
|
|
// List<Map<String, Object>> filteredOutData = new ArrayList<>(); // 存储被剔除的数据(行号 + jwcode) |
|
|
|
// List<UserImportDto> filteredUserDtos = new ArrayList<>(); |
|
|
|
// |
|
|
|
// for (int i = 0; i < userDtos.size(); i++) { |
|
|
|
// UserImportDto dto = userDtos.get(i); |
|
|
|
// if (dto.getJwcode() != null && dto.getJwcode().startsWith("9")) { |
|
|
|
// filteredUserDtos.add(dto); // 符合条件的数据 |
|
|
|
// } else { |
|
|
|
// // 记录被剔除的数据(行号和jwcode) |
|
|
|
// Map<String, Object> filteredRecord = new HashMap<>(); |
|
|
|
// filteredRecord.put("row", i + 2); // Excel行号(从2开始,1是表头) |
|
|
|
// filteredRecord.put("jwcode", dto.getJwcode()); |
|
|
|
// filteredOutData.add(filteredRecord); |
|
|
|
// } |
|
|
|
// } |
|
|
|
// |
|
|
|
// // 3. 检查数据量是否超过限制(基于过滤后的数据) |
|
|
|
// if (filteredUserDtos.size() > 2000) { |
|
|
|
// return Result.failure("单次导入最多支持2000条数据"); |
|
|
|
// } |
|
|
|
// |
|
|
|
// // 4. 获取所有精网号(过滤后的) |
|
|
|
// List<String> jwcodes = filteredUserDtos.stream() |
|
|
|
// .map(UserImportDto::getJwcode) |
|
|
|
// .distinct() |
|
|
|
// .collect(Collectors.toList()); |
|
|
|
// |
|
|
|
// // 5. 检查member表中存在的精网号 |
|
|
|
// Set<String> existingMemberCodes = adminUserMapper.selectExistingJwCodes(jwcodes) |
|
|
|
// .stream() |
|
|
|
// .collect(Collectors.toSet()); |
|
|
|
// |
|
|
|
// // 6. 获取已存在的精网号及其删除状态 |
|
|
|
// Map<String, Integer> existingUserMap = adminUserMapper.selectAllUserCodesWithDelStatus() |
|
|
|
// .stream() |
|
|
|
// .collect(Collectors.toMap( |
|
|
|
// User::getJwcode, |
|
|
|
// User::getIsDel, |
|
|
|
// (existing, replacement) -> existing |
|
|
|
// )); |
|
|
|
// |
|
|
|
// List<User> usersToAdd = new ArrayList<>(); |
|
|
|
// List<User> usersToUpdate = new ArrayList<>(); |
|
|
|
// Set<String> processedCodes = new HashSet<>(); |
|
|
|
// int skipCount = 0; |
|
|
|
// |
|
|
|
// // 7. 校验数据并分类(新增/更新/跳过) |
|
|
|
// for (int i = 0; i < filteredUserDtos.size(); i++) { |
|
|
|
// UserImportDto dto = filteredUserDtos.get(i); |
|
|
|
// try { |
|
|
|
// validateUser(dto, i + 2); // 行号校正(基于过滤后的数据) |
|
|
|
// |
|
|
|
// // 检查member表中是否存在 |
|
|
|
// if (!existingMemberCodes.contains(dto.getJwcode())) { |
|
|
|
// throw new IllegalArgumentException(String.format("第%d行: 精网号%s不存在于member表中", i + 2, dto.getJwcode())); |
|
|
|
// } |
|
|
|
// |
|
|
|
// // 文件内去重 |
|
|
|
// if (processedCodes.contains(dto.getJwcode())) { |
|
|
|
// throw new IllegalArgumentException(String.format("第%d行: 精网号%s在当前文件中重复", i + 2, dto.getJwcode())); |
|
|
|
// } |
|
|
|
// processedCodes.add(dto.getJwcode()); |
|
|
|
// |
|
|
|
// // 处理数据库中的重复情况 |
|
|
|
// if (existingUserMap.containsKey(dto.getJwcode())) { |
|
|
|
// Integer isDel = existingUserMap.get(dto.getJwcode()); |
|
|
|
// if (isDel == 1) { |
|
|
|
// User existingUser = adminUserMapper.selectByJwCode(dto.getJwcode()); |
|
|
|
// User userToUpdate = convertToEntity(dto); |
|
|
|
// userToUpdate.setId(existingUser.getId()); |
|
|
|
// userToUpdate.setIsDel(0); |
|
|
|
// usersToUpdate.add(userToUpdate); |
|
|
|
// } else { |
|
|
|
// throw new IllegalArgumentException(String.format("第%d行: 精网号%s已存在", i + 2, dto.getJwcode())); |
|
|
|
// } |
|
|
|
// } else { |
|
|
|
// usersToAdd.add(convertToEntity(dto)); |
|
|
|
// } |
|
|
|
// } catch (IllegalArgumentException e) { |
|
|
|
// LOGGER.warn("导入数据校验失败: {}", e.getMessage()); |
|
|
|
// skipCount++; |
|
|
|
// } |
|
|
|
// } |
|
|
|
// |
|
|
|
// // 8. 执行数据库操作 |
|
|
|
// int successCount = 0; |
|
|
|
// if (!usersToAdd.isEmpty()) { |
|
|
|
// boolean addSuccess = this.saveBatch(usersToAdd); |
|
|
|
// successCount += addSuccess ? usersToAdd.size() : 0; |
|
|
|
// } |
|
|
|
// if (!usersToUpdate.isEmpty()) { |
|
|
|
// boolean updateSuccess = this.updateBatchById(usersToUpdate); |
|
|
|
// successCount += updateSuccess ? usersToUpdate.size() : 0; |
|
|
|
// } |
|
|
|
// |
|
|
|
// // 9. 返回结果(包含被剔除的数据) |
|
|
|
// Map<String, Object> resultData = new HashMap<>(); |
|
|
|
// resultData.put("successCount", successCount); |
|
|
|
// resultData.put("addedCount", usersToAdd.size()); |
|
|
|
// resultData.put("updatedCount", usersToUpdate.size()); |
|
|
|
// resultData.put("skippedCount", skipCount); |
|
|
|
// resultData.put("filteredOutData", filteredOutData); // 被剔除的数据(非9开头) |
|
|
|
// |
|
|
|
// return successCount > 0 ? |
|
|
|
// Result.success(String.format("导入成功%d条(新增%d条,更新%d条),跳过%d条", |
|
|
|
// successCount, usersToAdd.size(), usersToUpdate.size(), skipCount)) : |
|
|
|
// Result.failure("没有有效数据可导入"); |
|
|
|
// |
|
|
|
// } catch (Exception e) { |
|
|
|
// LOGGER.error("导入用户失败", e); |
|
|
|
// return Result.failure("导入失败: " + e.getMessage()); |
|
|
|
// } |
|
|
|
// } |
|
|
|
|
|
|
|
@Override |
|
|
|
public Result importUsers(MultipartFile file) { |
|
|
|
try { |
|
|
@ -218,6 +342,8 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, User> imp |
|
|
|
.sheet() |
|
|
|
.doReadSync(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 2. 检查数据量是否超过限制 |
|
|
|
if (userDtos.size() > 2000) { |
|
|
|
return Result.failure("单次导入最多支持2000条数据"); |
|
|
@ -228,6 +354,23 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, User> imp |
|
|
|
.map(UserImportDto::getJwcode) |
|
|
|
.distinct() |
|
|
|
.collect(Collectors.toList()); |
|
|
|
// 3. 提取所有精网号并去重,且只保留以9开头的数字 |
|
|
|
jwcodes = userDtos.stream() |
|
|
|
.map(UserImportDto::getJwcode) |
|
|
|
.filter(jwcode -> jwcode != null && jwcode.startsWith("9")) // 添加过滤条件 |
|
|
|
.distinct() |
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
int filteredCount = 0; |
|
|
|
List<UserImportDto> filteredUserDtos = new ArrayList<>(); |
|
|
|
for (UserImportDto dto : userDtos) { |
|
|
|
if (dto.getJwcode() != null && dto.getJwcode().startsWith("9")) { |
|
|
|
filteredUserDtos.add(dto); |
|
|
|
} else { |
|
|
|
filteredCount++; |
|
|
|
LOGGER.warn("剔除以9开头的精网号: {}", dto.getJwcode()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 4. 检查member表中存在的精网号 |
|
|
|
Set<String> existingMemberCodes = adminUserMapper.selectExistingJwCodes(jwcodes) |
|
|
@ -243,6 +386,7 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, User> imp |
|
|
|
(existing, replacement) -> existing |
|
|
|
)); |
|
|
|
|
|
|
|
|
|
|
|
List<User> usersToAdd = new ArrayList<>(); |
|
|
|
List<User> usersToUpdate = new ArrayList<>(); |
|
|
|
Set<String> processedCodes = new HashSet<>(); |
|
|
@ -297,8 +441,8 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, User> imp |
|
|
|
} |
|
|
|
|
|
|
|
return successCount > 0 ? |
|
|
|
Result.success(String.format("导入成功%d条(新增%d条,更新%d条),跳过%d条", |
|
|
|
successCount, usersToAdd.size(), usersToUpdate.size(), skipCount)) : |
|
|
|
Result.success(String.format("导入成功%d条(新增%d条,更新%d条),跳过%d条,失败%d条", |
|
|
|
successCount, usersToAdd.size(), usersToUpdate.size(), skipCount,filteredCount)) : |
|
|
|
Result.failure("没有有效数据可导入"); |
|
|
|
} catch (Exception e) { |
|
|
|
LOGGER.error("导入用户失败", e); |
|
|
|