fix 用户管理bug

This commit is contained in:
lijiarao
2021-10-12 19:10:12 +08:00
parent 82ca042c9b
commit 2ca83cd686
4 changed files with 156 additions and 72 deletions
@@ -40,6 +40,7 @@ import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.transaction.annotation.Transactional;
@@ -725,52 +726,78 @@ public class SysUserController {
params.setHeadRows(1);
params.setNeedSave(true);
//导入Excel格式校验,看匹配的字段文本概率
Boolean t = ExcelImportCheckUtil.check(file.getInputStream(), SysUser.class, params);
Boolean t = ExcelImportCheckUtil.check(file.getInputStream(), SysUserTemplate.class, params,1.0);
if(!t){
return Result.error("导入Excel校验失败 ");
}
try {
List<SysUser> listSysUsers = ExcelImportUtil.importExcel(file.getInputStream(), SysUser.class, params);
List<SysUserTemplate> listSysUsers = ExcelImportUtil.importExcel(file.getInputStream(), SysUserTemplate.class, params);
for (int i = 0; i < listSysUsers.size(); i++) {
int lineNumber = i + 3;
SysUser sysUserExcel = listSysUsers.get(i);
if (StringUtils.isBlank(sysUserExcel.getPassword())) {
SysUserTemplate sysUserTemplate = listSysUsers.get(i);
String departIds1 = sysUserTemplate.getDepartIds();
if (StringUtils.isNotBlank(departIds1)) {
String dictFromTable = sysBaseAPI.translateDictFromTable("sys_depart", "depart_name", "id", departIds1.trim());
if (!StringUtils.isNotBlank(dictFromTable)){
errorLines++;
errorMessage.add("" + lineNumber + " 行:组织机构错误");
}
}
String roleIds1 = sysUserTemplate.getRoleIds();
if (StringUtils.isNotBlank(roleIds1)) {
String[] roleIdArray = roleIds1.split(",");
for (String roleId : roleIdArray) {
String dictFromTable = sysBaseAPI.translateDictFromTable("sys_role", "role_name", "id", roleId.trim());
if (!StringUtils.isNotBlank(dictFromTable)){
errorLines++;
errorMessage.add("" + lineNumber + " 行:角色类型错误");
}
}
}
SysUser sysUser = new SysUser();
BeanUtils.copyProperties(sysUserTemplate,sysUser);
if (StringUtils.isBlank(sysUser.getPassword())) {
// 存入默认密码
sysUserExcel.setPassword(defaultPassword);
sysUser.setPassword(defaultPassword);
}
// 密码加密加盐
String salt = oConvertUtils.randomGen(8);
sysUserExcel.setSalt(salt);
String passwordEncode = PasswordUtil.encrypt(sysUserExcel.getUsername(), sysUserExcel.getPassword(), salt);
sysUserExcel.setPassword(passwordEncode);
sysUserExcel.setDelFlag(0);
sysUser.setSalt(salt);
String passwordEncode = PasswordUtil.encrypt(sysUser.getUsername(), sysUser.getPassword(), salt);
sysUser.setPassword(passwordEncode);
sysUser.setDelFlag(0);
sysUser.setStatus(1);
try {
ValidUtil.validate(sysUserExcel);
String error = ValidUtil.validateReturnList(sysUser);
if (StringUtils.isNotBlank(error)){
errorLines++;
errorMessage.add("" + lineNumber + " 行:"+ error);
}
//处理邮箱和手机号的加密
UserUtil.encryptUser(sysUserExcel);
UserUtil.encryptUser(sysUser);
LambdaQueryWrapper<SysUser> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SysUser::getUsername,sysUserExcel.getUsername());
wrapper.eq(SysUser::getUsername,sysUser.getUsername());
wrapper.eq(SysUser::getDelFlag,0);
if (sysUserService.count(wrapper)>0) {
errorLines++;
errorMessage.add("" + lineNumber + " 行:用户名已经存在");
errorMessage.add("" + lineNumber + " 行:用户名已经存在");
}
LambdaQueryWrapper<SysUser> wrapper1 = new LambdaQueryWrapper<>();
wrapper1.eq(SysUser::getPhone,sysUserExcel.getPhone());
wrapper1.eq(SysUser::getPhone,sysUser.getPhone());
wrapper1.eq(SysUser::getDelFlag,0);
if (sysUserService.count(wrapper1)>0) {
errorLines++;
errorMessage.add("" + lineNumber + " 行:手机号已经存在");
errorMessage.add("" + lineNumber + " 行:手机号已经存在");
}
LambdaQueryWrapper<SysUser> wrapper2 = new LambdaQueryWrapper<>();
wrapper2.eq(SysUser::getEmail,sysUserExcel.getEmail());
wrapper2.eq(SysUser::getEmail,sysUser.getEmail());
wrapper2.eq(SysUser::getDelFlag,0);
if (sysUserService.count(wrapper2)>0) {
errorLines++;
errorMessage.add("" + lineNumber + " 行:电子邮件已经存在");
errorMessage.add("" + lineNumber + " 行:电子邮件已经存在");
}
if (errorLines == 0){
sysUserService.save(sysUserExcel);
sysUserService.save(sysUser);
}
successLines++;
} catch (Exception e) {
@@ -778,28 +805,29 @@ public class SysUserController {
errorMessage.add("" + lineNumber + " 行:未知错误");
log.error(e.getMessage(), e);
}
String userId = sysUserExcel.getId();
String userId = sysUser.getId();
// 批量将部门和用户信息建立关联关系
String departIds = sysUserExcel.getDepartIds();
if (StringUtils.isNotBlank(departIds)) {
String[] departIdArray = departIds.split(",");
List<SysUserDepart> userDepartList = new ArrayList<>(departIdArray.length);
for (String departId : departIdArray) {
userDepartList.add(new SysUserDepart(userId, departId));
if (errorLines == 0){
String departIds = sysUser.getDepartIds();
if (StringUtils.isNotBlank(departIds)) {
String[] departIdArray = departIds.split(",");
List<SysUserDepart> userDepartList = new ArrayList<>(departIdArray.length);
for (String departId : departIdArray) {
userDepartList.add(new SysUserDepart(userId, departId));
}
sysUserDepartService.saveBatch(userDepartList);
}
sysUserDepartService.saveBatch(userDepartList);
}
//批量处理角色和用户的关联关系
String roleIds = sysUserExcel.getRoleIds();
if (StringUtils.isNotBlank(roleIds)) {
String[] roleIdArray = roleIds.split(",");
List<SysUserRole> userRoleList = new ArrayList<>();
for (String roleId : roleIdArray) {
userRoleList.add(new SysUserRole(userId,roleId));
//批量处理角色和用户的关联关系
String roleIds = sysUser.getRoleIds();
if (StringUtils.isNotBlank(roleIds)) {
String[] roleIdArray = roleIds.split(",");
List<SysUserRole> userRoleList = new ArrayList<>();
for (String roleId : roleIdArray) {
userRoleList.add(new SysUserRole(userId,roleId));
}
sysUserRoleService.saveBatch(userRoleList);
}
sysUserRoleService.saveBatch(userRoleList);
}
}
} catch (Exception e) {
errorMessage.add("发生异常:" + e.getMessage());
@@ -7,8 +7,10 @@ import com.baomidou.mybatisplus.annotation.TableLogic;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.jero.common.aspect.annotation.Dict;
import com.jero.common.util.PasswordUtil;
import com.jero.modules.system.volid.group.CreateGroup;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.StringUtils;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
@@ -50,7 +52,7 @@ public class SysUser implements Serializable {
*/
@Excel(name = "用户账号", width = 15)
@NotBlank(message = "用户账号不能为空")
@Size(max = 50,message = "用户账号最长为50")
@Size(max = 50,message = "用户账号最长为50字符")
private String username;
/**
@@ -58,7 +60,7 @@ public class SysUser implements Serializable {
*/
@Excel(name = "用户姓名", width = 15)
@NotBlank(message = "用户姓名不能为空")
@Size(max = 50,message = "用户姓名最长为50")
@Size(max = 50,message = "用户姓名最长为50字符")
private String realname;
/**
@@ -92,20 +94,32 @@ public class SysUser implements Serializable {
@Dict(dicCode = "sex")
private Integer sex;
/**
* 电子邮箱
*/
@Email(message = "邮箱格式不正确")
private String email;
/**
* 电话
*/
@Excel(name = "手机号", width = 15)
@NotEmpty(message = "手机号不能为空!")
@NotBlank(message = "手机号不能为空!")
@Pattern(regexp = "^((13[0-9])|(14[579])|(15([0-3]|[5-9]))|(17[0135678])|(18[0-9])|(19[8|9])|(16[6]))\\d{8}$",message = "手机号码格式错误")
private String phone;
/**
* 角色类型
*/
@NotBlank(message = "角色类型不能为空!")
@Excel(name="角色类型",width = 15,dictTable ="sys_role",dicText = "role_name",dicCode = "id")
@Dict(dictTable ="sys_role",dicText = "role_name",dicCode = "id")
private String roleIds;
/**
* 组织机构
*/
@NotBlank(message = "组织机构不能为空!")
@Excel(name="组织机构",width = 15,dictTable ="sys_depart",dicText = "depart_name",dicCode = "id")
@Dict(dictTable ="sys_depart",dicText = "depart_name",dicCode = "id")
private String departIds;
/**
* 部门code(当前选择登录部门)
*/
@@ -115,11 +129,22 @@ public class SysUser implements Serializable {
private transient String orgCodeTxt;
/**
* 状态(1:正常 2:冻结
* 邮箱
*/
@Excel(name = "状态", width = 15,dicCode = "user_status")
@Dict(dicCode = "user_status")
private Integer status;
@Excel(name="邮箱",width = 15,exportConvert = true)
@NotBlank(message = "邮箱不能为空")
@Size(max = 50,message = "邮箱最长为50字符")
@Email(message = "邮箱格式不正确")
private String email;
/**
* 邮箱密码
*/
@NotBlank(message = "邮箱密码不能为空")
@Size(max = 50,message = "邮箱密码最长为50字符")
@Excel(name="邮箱密码",width = 15,exportConvert = true)
@ApiModelProperty(value = "邮箱密码")
private String emailPassword;
/**
* 删除状态(0,正常,1已删除)
@@ -150,6 +175,13 @@ public class SysUser implements Serializable {
@Excel(name = "创建时间", orderNum = "1",format = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/**
* 状态(1:正常 2:冻结 )
*/
@Excel(name = "状态", width = 15,dicCode = "user_status")
@Dict(dicCode = "user_status")
private Integer status;
/**
* 更新人
*/
@@ -169,19 +201,7 @@ public class SysUser implements Serializable {
*/
private Integer userIdentity;
/**
* 角色类型
*/
@Excel(name="角色类型",width = 15,dictTable ="sys_role",dicText = "role_name",dicCode = "id")
@Dict(dictTable ="sys_role",dicText = "role_name",dicCode = "id")
private String roleIds;
/**
* 组织机构
*/
@Excel(name="组织机构",width = 15,dictTable ="sys_depart",dicText = "depart_name",dicCode = "id")
@Dict(dictTable ="sys_depart",dicText = "depart_name",dicCode = "id")
private String departIds;
/**
* 多租户id配置,编辑用户的时候设置
@@ -210,9 +230,17 @@ public class SysUser implements Serializable {
@TableField(exist = false)
private String verifyPassword;
/**
* 邮箱授权码
*/
@ApiModelProperty(value = "邮箱授权码")
private String emailPassword;
public String convertisEmail(){
if (StringUtils.isNotBlank(email)){
return PasswordUtil.decrypt(email);
}
return email;
}
public String convertisEmailPassword(){
if (StringUtils.isNotBlank(emailPassword)){
return PasswordUtil.decrypt(emailPassword);
}
return emailPassword;
}
}
@@ -52,7 +52,7 @@ public class UserUtil {
}
String emailPassword = record.getEmailPassword();
if (StringUtils.isNotBlank(emailPassword)) {
record.setEmailPassword(PasswordUtil.decrypt(emailPassword));
record.setEmailPassword(PasswordUtil.encrypt(emailPassword));
}
}
}
@@ -1,13 +1,11 @@
package com.jero.modules.system.vo;
import com.jero.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import javax.validation.constraints.*;
/**
* @author liJiaRao
@@ -19,29 +17,59 @@ public class SysUserTemplate {
* 登录账号
*/
@Excel(name = "用户账号", width = 15)
@NotBlank(message = "用户账号不能为空")
@Size(max = 50,message = "用户账号最长为50字符")
private String username;
/**
* 真实姓名
*/
@Excel(name = "用户姓名", width = 15)
@NotBlank(message = "用户姓名不能为空")
@Size(max = 50,message = "用户姓名最长为50字符")
private String realname;
/**
* 电话
*/
@Excel(name = "手机号", width = 15)
@NotBlank(message = "手机号不能为空!")
@Pattern(regexp = "^((13[0-9])|(14[579])|(15([0-3]|[5-9]))|(17[0135678])|(18[0-9])|(19[8|9])|(16[6]))\\d{8}$",message = "手机号码格式错误")
private String phone;
/**
* 角色类型
*/
@Excel(name="角色类型",width = 15)
@NotBlank(message = "角色类型不能为空!")
@Excel(name="角色类型",width = 15,dictTable ="sys_role",dicText = "role_name",dicCode = "id")
@Dict(dictTable ="sys_role",dicText = "role_name",dicCode = "id")
private String roleIds;
/**
* 组织机构
*/
@Excel(name="组织机构",width = 15)
@NotBlank(message = "组织机构不能为空!")
@Excel(name="组织机构",width = 15,dictTable ="sys_depart",dicText = "depart_name",dicCode = "id")
@Dict(dictTable ="sys_depart",dicText = "depart_name",dicCode = "id")
private String departIds;
/**
* 电子邮箱
*/
@NotBlank(message = "邮箱不能为空")
@Size(max = 50,message = "邮箱最长为50字符")
@Email(message = "邮箱格式不正确")
@Excel(name="邮箱",width = 15)
private String email;
/**
* 邮箱密码
*/
@NotBlank(message = "邮箱密码不能为空")
@Size(max = 50,message = "邮箱密码最长为50字符")
@Excel(name="邮箱密码",width = 15)
@ApiModelProperty(value = "邮箱密码")
private String emailPassword;
}