记录工作

需求是导入数据的时候需要判断哪一行是空行,或者哪一行超过限制字符,然后返回给前端做展示

@PostMapping("/importExcel")
@ApiOperation("导入用户")
@ApiImplicitParams({
@ApiImplicitParam(name = "file", value = "Excel 文件", required = true, dataTypeClass = MultipartFile.class),
@ApiImplicitParam(name = "updateSupport", value = "是否支持更新,默认为 false", example = "true", dataTypeClass = Boolean.class)
})
public Response<SaveAndUpdateVO> importExcel(@RequestParam("file") MultipartFile file,
@RequestParam(value = "updateSupport", required = false, defaultValue = "false") Boolean updateSupport) throws Exception {
SaveAndUpdateVO saveAndUpdateVO = SaveAndUpdateVO.builder()
.isSuccess(sysUserService.importUsers(file, updateSupport)).build();
return Response.build(saveAndUpdateVO);
}

这里的Response类是自己做的统一返回封装类,SaveAndUpdateVO这个类也是一个返回类,可以自己用其他方法或者类代替

public Boolean importUsers(MultipartFile file, boolean isUpdateSupport) {
if (file.isEmpty()) {
throw new BizException(ErrorCode.DATA_ERROR, "导入用户数据不能为空!");
} List<UserImportExcelResponse> userImportExcelResponses = importUsers(file);
userImportExcelResponses.forEach(importUser -> { SysUser sysUsers = getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getLoginName, importUser.getLoginName())
.eq(SysUser::getDelFlag, Constants.DEL_FLAG_DELETED));
// 判断用户如果不存在,在进行插入
if (sysUsers == null) {
AssertBiz.isMobile(importUser.getPhone(), "手机号码格式错误!");
SysUser sysUser = new SysUser();
BeanUtil.copyProperties(importUser, sysUser);
//设置创建时间
sysUser.setServerCreateTime(LocalDateTime.now());
//设置默认密码密码
BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
sysUser.setPassword(bCryptPasswordEncoder.encode("Admin@123456"));
//设置主键id-uuid
String userId = IdUtils.getId();
sysUser.setId(userId);
sysUser.setDelFlag(Constants.DEL_FLAG_DELETED);
//新增用户
save(sysUser);
AssertBiz.isNotEmpty(importUser.getRoleName(), "角色名称不能为空!");
SysRole sysRoles = sysRoleService.getOne(new LambdaQueryWrapper<SysRole>().eq(SysRole::getRoleName, importUser.getRoleName())
.eq(SysRole::getDelFlag, Constants.DEL_FLAG_DELETED));
AssertBiz.notNull(sysRoles, "该角色不存在!");
//新增用户角色
SysUserRole sysUserRole = new SysUserRole(userId, sysRoles.getId(), LocalDateTime.now(), LocalDateTime.now(), Constants.DEL_FLAG_DELETED);
sysUserRoleService.save(sysUserRole);
AssertBiz.isNotEmpty(importUser.getOrgName(), "部门名称不能为空!");
SysOrganization one = sysOrganizationService.getOne(new LambdaQueryWrapper<SysOrganization>().select(SysOrganization::getId)
.eq(SysOrganization::getOrgName, importUser.getOrgName())
.eq(SysOrganization::getDelFlag, Constants.DEL_FLAG_DELETED));
AssertBiz.notNull(one, "该部门不存在!或是用户没有该部门权限!");
//新增用户组织
SysUserOrg sysUserOrg = new SysUserOrg(userId, one.getId(), LocalDateTime.now(), LocalDateTime.now(), Constants.DEL_FLAG_DELETED);
sysUserOrgService.save(sysUserOrg);
return;
}
// 如果存在,判断是否允许更新
if (!isUpdateSupport) {
throw new BizException(ErrorCode.DATA_ERROR, "用户账号[" + importUser.getLoginName() + "]已存在,不能重复添加!");
}
AssertBiz.isNotEmpty(sysUsers.getId(), "用户id不能为空!");
LambdaUpdateWrapper<SysUser> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(SysUser::getId, sysUsers.getId())
.set(SysUser::getStatus, importUser.getStatus())
.set(SysUser::getUserName, importUser.getUserName())
.set(SysUser::getPhone, importUser.getPhone())
.set(SysUser::getServerUpdateTime, LocalDateTime.now());
update(updateWrapper);
});
return true;
}
/**
* 导入数据解析校验
*
* @param file
* @return
*/
private List<UserImportExcelResponse> importUsers(MultipartFile file) {
List<UserImportExcelResponse> list = new ArrayList<>();
try {
//根据路径获取这个操作excel的实例
XSSFWorkbook wb = new XSSFWorkbook(file.getInputStream());
//根据页面index 获取sheet页
XSSFSheet sheet = wb.getSheetAt(0);
XSSFRow row;
int sheets = sheet.getPhysicalNumberOfRows();
//循环sesheet页中数据从第二行开始,第一行是标题
for (int i = 1; i < sheets; i++) {
//获取每一行数据
row = sheet.getRow(i);
String loginName = row.getCell(0).toString();
String userName = row.getCell(1).toString();
String roleName = row.getCell(2).toString();
String orgName = row.getCell(3).toString();
String phone = row.getCell(4).toString();
String status = row.getCell(5).toString();
int line = i + 1;
checkLength(loginName, userName, roleName, orgName, phone, line);
UserImportExcelResponse excel = new UserImportExcelResponse();
AssertBiz.isNotEmpty(loginName, "在excel表第" + line + "行,第1列,用户登录名不能为空!");
excel.setLoginName(loginName);
AssertBiz.isNotEmpty(userName, "在excel表第" + line + "行,第2列,用户名称不能为空!");
excel.setUserName(userName);
AssertBiz.isNotEmpty(roleName, "在excel表第" + line + "行,第3列,角色名称不能为空!");
excel.setRoleName(roleName);
AssertBiz.isNotEmpty(orgName, "在excel表第" + line + "行,第4列,部门名称不能为空!");
excel.setOrgName(orgName);
AssertBiz.isNotEmpty(phone, "在excel表第" + line + "行,第5列,电话不能为空!");
excel.setPhone(phone);
AssertBiz.isNotEmpty(status, "在excel表第" + line + "行,第6列,用户状态不能为空!");
excel.setStatus(status);
list.add(excel);
}
} catch (Exception e) {
e.printStackTrace();
String substring = String.valueOf(e).substring(String.valueOf(e).indexOf(":") + 1);
throw new BizException(ErrorCode.DATA_ERROR, substring);
}
return list;
}
/**
* 校验字符串长度
*
* @param loginName
* @param userName
* @param roleName
* @param orgName
* @param phone
*/
private void checkLength(String loginName, String userName, String roleName, String orgName, String phone, int row) {
int loginNameLength = loginName.length();
int userNameLength = userName.length();
int roleNameLength = roleName.length();
int orgNameLength = orgName.length();
int phoneLength = phone.length(); if (loginNameLength > 16) {
throw new BizException(ErrorCode.DATA_ERROR, "在excel表第" + row + "行,第1列,导入用户登录名不能超过16个字符!");
}
if (userNameLength > 16) {
throw new BizException(ErrorCode.DATA_ERROR, "在excel表第" + row + "行,第2列,导入用户昵称名不能超过16个字符!");
}
if (roleNameLength > 16) {
throw new BizException(ErrorCode.DATA_ERROR, "在excel表第" + row + "行,第3列,导入角色名不能超过16个字符!");
}
if (orgNameLength > 16) {
throw new BizException(ErrorCode.DATA_ERROR, "在excel表第" + row + "行,第4列,导入部门名不能超过16个字符!");
}
if (phoneLength > 11) {
throw new BizException(ErrorCode.DATA_ERROR, "在excel表第" + row + "行,第5列,电话格式不正确!");
}
if (phoneLength < 11) {
throw new BizException(ErrorCode.DATA_ERROR, "在excel表第" + row + "行,第5列,电话格式不正确!");
}
}

到此本文就结束了

最新文章

  1. 总结:Mac前端开发环境的搭建(配置)
  2. PRML
  3. 在Window的IIS中创建FTP的Site并用C#进行文件的上传下载
  4. [iOS基础控件 - 3.5] NSBundle, UIImageView和UIButton的区别, 模拟器和文档
  5. jquery animate 制作简单弹幕
  6. 使用SQL Server 2014内存数据库时需要注意的地方
  7. poj 2484 A Funny Game(博弈)
  8. 关于 Android 进程保活,你所需要知道的一切
  9. 定时自动备份mysql数据库
  10. javaScript 的AMD
  11. golang slice 经典例题
  12. 弹窗滑动,造成body跟随滑动解决办法
  13. Unity 动画系统
  14. XML 与 JSON大PK
  15. day 9 - 2 函数练习
  16. ubuntu在指定的文件夹下创建python3和python2的虚拟环境
  17. YIT-CTF—Web
  18. 原来找字也可以这样用ElseIf FindStr 手机按键精灵 跟大漠的区别
  19. bzoj1464
  20. leetcode:Valid Palindrome【Python版】

热门文章

  1. [C++Primer] 第二章 变量和基本类型
  2. 史上最简单 OpenCV for C++ 在 Windows 和 Ubuntu 上编译安装使用教程
  3. mysql中的列类型
  4. 超级容易理解的Three.js中的物体rotation
  5. java入门与进阶 P-2.5+P-2.6
  6. 11月25日内容总结——sql查询关键字
  7. saas架构之druid解析表名
  8. while循环补充、for循环、range关键字、内置方法之整型、内置方法之浮点型、内置方法之字符串
  9. 原生微信小程序封装request
  10. CPU AMX 详解