1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
| @Override @Transactional(rollbackFor = Exception.class) public ResponseResult importUsers(MultipartFile file) { if (file == null || file.isEmpty()) { return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR, "请选择要导入的Excel文件"); }
String originalFilename = file.getOriginalFilename(); if (!StringUtils.hasText(originalFilename)) { return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR, "文件名不能为空"); }
String lowerFilename = originalFilename.toLowerCase(Locale.ROOT); if (!(lowerFilename.endsWith(".xls") || lowerFilename.endsWith(".xlsx"))) { return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR, "只允许导入 .xls 或 .xlsx 格式的文件"); }
long maxSize = 1024L * 1024L; if (file.getSize() > maxSize) { return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR, "文件大小不能超过 1MB"); }
List<String> messageList = new ArrayList<>(); AtomicInteger validCount = new AtomicInteger(); AtomicInteger invalidCount = new AtomicInteger();
try (InputStream inputStream = file.getInputStream()) { EasyExcel.read(inputStream, UserImportTemplateVo.class, new AnalysisEventListener<UserImportTemplateVo>() { @Override public void invokeHead(Map<Integer, com.alibaba.excel.metadata.data.ReadCellData<?>> headMap, AnalysisContext context) { } @Override public void invoke(UserImportTemplateVo data, AnalysisContext context) { int rowNum = context.readRowHolder().getRowIndex() + 1; String validationError = validateImportRow(data); if (StringUtils.hasText(validationError)) { invalidCount.incrementAndGet(); messageList.add("第" + rowNum + "行:" + validationError); return; }
ResponseResult importResult = saveImportedUser(data); if (importResult.getCode() == 200) { validCount.incrementAndGet(); } else { invalidCount.incrementAndGet(); messageList.add("第" + rowNum + "行:" + importResult.getMsg()); } }
@Override public void doAfterAllAnalysed(AnalysisContext context) { } }).sheet().doRead(); } catch (IOException e) { throw new RuntimeException("导入文件读取失败", e); }
Map<String, Object> result = new HashMap<>(); result.put("validCount", validCount.get()); result.put("invalidCount", invalidCount.get()); result.put("messageList", messageList); return ResponseResult.okResult(result); }
private String validateImportRow(UserImportTemplateVo data) { if (data == null) { return "导入数据为空"; } if (!StringUtils.hasText(data.getUsername())) { return "用户名不能为空"; } if (!StringUtils.hasText(data.getNickname())) { return "昵称不能为空"; } if (StringUtils.hasText(data.getPhone()) && !data.getPhone().matches("^1[3-9]\\d{9}$")) { return "手机号格式不正确"; } if (StringUtils.hasText(data.getEmail()) && !data.getEmail().matches("^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$")) { return "邮箱格式不正确"; } return null; }
private ResponseResult saveImportedUser(UserImportTemplateVo data) { LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SysUser::getUsername, data.getUsername()); if (adminUserService.count(queryWrapper) > 0) { return ResponseResult.errorResult(AppHttpCodeEnum.USERNAME_EXIST, "用户名已存在"); }
if (StringUtils.hasText(data.getPhone())) { queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SysUser::getPhone, data.getPhone()); if (adminUserService.count(queryWrapper) > 0) { return ResponseResult.errorResult(AppHttpCodeEnum.PHONENUMBER_EXIST, "手机号已存在"); } }
if (StringUtils.hasText(data.getEmail())) { queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SysUser::getEmail, data.getEmail()); if (adminUserService.count(queryWrapper) > 0) { return ResponseResult.errorResult(AppHttpCodeEnum.EMAIL_EXIST, "邮箱已存在"); } }
SysUser user = new SysUser(); user.setUsername(data.getUsername()); user.setNickname(data.getNickname()); user.setSex(StringUtils.hasText(data.getSex()) ? data.getSex() : SystemConstants.SEX_HIDE); user.setEmail(data.getEmail()); user.setPhone(data.getPhone()); user.setPassword(new BCryptPasswordEncoder().encode("user123456")); user.setStatus(SystemConstants.USER_STATUS_NORMAL); boolean save = adminUserService.save(user); if (!save) { return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR, "保存用户失败"); }
return ResponseResult.okResult(); }
|