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.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams; import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; 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.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -725,52 +726,78 @@ public class SysUserController {
params.setHeadRows(1); params.setHeadRows(1);
params.setNeedSave(true); params.setNeedSave(true);
//导入Excel格式校验,看匹配的字段文本概率 //导入Excel格式校验,看匹配的字段文本概率
Boolean t = ExcelImportCheckUtil.check(file.getInputStream(), SysUser.class, params); Boolean t = ExcelImportCheckUtil.check(file.getInputStream(), SysUserTemplate.class, params,1.0);
if(!t){ if(!t){
return Result.error("导入Excel校验失败 !"); return Result.error("导入Excel校验失败 !");
} }
try { 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++) { for (int i = 0; i < listSysUsers.size(); i++) {
int lineNumber = i + 3; int lineNumber = i + 3;
SysUser sysUserExcel = listSysUsers.get(i); SysUserTemplate sysUserTemplate = listSysUsers.get(i);
if (StringUtils.isBlank(sysUserExcel.getPassword())) { 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); String salt = oConvertUtils.randomGen(8);
sysUserExcel.setSalt(salt); sysUser.setSalt(salt);
String passwordEncode = PasswordUtil.encrypt(sysUserExcel.getUsername(), sysUserExcel.getPassword(), salt); String passwordEncode = PasswordUtil.encrypt(sysUser.getUsername(), sysUser.getPassword(), salt);
sysUserExcel.setPassword(passwordEncode); sysUser.setPassword(passwordEncode);
sysUserExcel.setDelFlag(0); sysUser.setDelFlag(0);
sysUser.setStatus(1);
try { 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<>(); LambdaQueryWrapper<SysUser> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SysUser::getUsername,sysUserExcel.getUsername()); wrapper.eq(SysUser::getUsername,sysUser.getUsername());
wrapper.eq(SysUser::getDelFlag,0); wrapper.eq(SysUser::getDelFlag,0);
if (sysUserService.count(wrapper)>0) { if (sysUserService.count(wrapper)>0) {
errorLines++; errorLines++;
errorMessage.add("第 " + lineNumber + " 行:用户名已经存在。"); errorMessage.add("第 " + lineNumber + " 行:用户名已经存在");
} }
LambdaQueryWrapper<SysUser> wrapper1 = new LambdaQueryWrapper<>(); LambdaQueryWrapper<SysUser> wrapper1 = new LambdaQueryWrapper<>();
wrapper1.eq(SysUser::getPhone,sysUserExcel.getPhone()); wrapper1.eq(SysUser::getPhone,sysUser.getPhone());
wrapper1.eq(SysUser::getDelFlag,0); wrapper1.eq(SysUser::getDelFlag,0);
if (sysUserService.count(wrapper1)>0) { if (sysUserService.count(wrapper1)>0) {
errorLines++; errorLines++;
errorMessage.add("第 " + lineNumber + " 行:手机号已经存在。"); errorMessage.add("第 " + lineNumber + " 行:手机号已经存在");
} }
LambdaQueryWrapper<SysUser> wrapper2 = new LambdaQueryWrapper<>(); LambdaQueryWrapper<SysUser> wrapper2 = new LambdaQueryWrapper<>();
wrapper2.eq(SysUser::getEmail,sysUserExcel.getEmail()); wrapper2.eq(SysUser::getEmail,sysUser.getEmail());
wrapper2.eq(SysUser::getDelFlag,0); wrapper2.eq(SysUser::getDelFlag,0);
if (sysUserService.count(wrapper2)>0) { if (sysUserService.count(wrapper2)>0) {
errorLines++; errorLines++;
errorMessage.add("第 " + lineNumber + " 行:电子邮件已经存在。"); errorMessage.add("第 " + lineNumber + " 行:电子邮件已经存在");
} }
if (errorLines == 0){ if (errorLines == 0){
sysUserService.save(sysUserExcel); sysUserService.save(sysUser);
} }
successLines++; successLines++;
} catch (Exception e) { } catch (Exception e) {
@@ -778,28 +805,29 @@ public class SysUserController {
errorMessage.add("第 " + lineNumber + " 行:未知错误"); errorMessage.add("第 " + lineNumber + " 行:未知错误");
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
} }
String userId = sysUserExcel.getId(); String userId = sysUser.getId();
// 批量将部门和用户信息建立关联关系 // 批量将部门和用户信息建立关联关系
String departIds = sysUserExcel.getDepartIds(); if (errorLines == 0){
if (StringUtils.isNotBlank(departIds)) { String departIds = sysUser.getDepartIds();
String[] departIdArray = departIds.split(","); if (StringUtils.isNotBlank(departIds)) {
List<SysUserDepart> userDepartList = new ArrayList<>(departIdArray.length); String[] departIdArray = departIds.split(",");
for (String departId : departIdArray) { List<SysUserDepart> userDepartList = new ArrayList<>(departIdArray.length);
userDepartList.add(new SysUserDepart(userId, departId)); for (String departId : departIdArray) {
userDepartList.add(new SysUserDepart(userId, departId));
}
sysUserDepartService.saveBatch(userDepartList);
} }
sysUserDepartService.saveBatch(userDepartList); //批量处理角色和用户的关联关系
} String roleIds = sysUser.getRoleIds();
//批量处理角色和用户的关联关系 if (StringUtils.isNotBlank(roleIds)) {
String roleIds = sysUserExcel.getRoleIds(); String[] roleIdArray = roleIds.split(",");
if (StringUtils.isNotBlank(roleIds)) { List<SysUserRole> userRoleList = new ArrayList<>();
String[] roleIdArray = roleIds.split(","); for (String roleId : roleIdArray) {
List<SysUserRole> userRoleList = new ArrayList<>(); userRoleList.add(new SysUserRole(userId,roleId));
for (String roleId : roleIdArray) { }
userRoleList.add(new SysUserRole(userId,roleId)); sysUserRoleService.saveBatch(userRoleList);
} }
sysUserRoleService.saveBatch(userRoleList);
} }
} }
} catch (Exception e) { } catch (Exception e) {
errorMessage.add("发生异常:" + e.getMessage()); 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.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.jero.common.aspect.annotation.Dict; import com.jero.common.aspect.annotation.Dict;
import com.jero.common.util.PasswordUtil;
import com.jero.modules.system.volid.group.CreateGroup; import com.jero.modules.system.volid.group.CreateGroup;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.StringUtils;
import org.jeecgframework.poi.excel.annotation.Excel; import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
@@ -50,7 +52,7 @@ public class SysUser implements Serializable {
*/ */
@Excel(name = "用户账号", width = 15) @Excel(name = "用户账号", width = 15)
@NotBlank(message = "用户账号不能为空") @NotBlank(message = "用户账号不能为空")
@Size(max = 50,message = "用户账号最长为50") @Size(max = 50,message = "用户账号最长为50字符")
private String username; private String username;
/** /**
@@ -58,7 +60,7 @@ public class SysUser implements Serializable {
*/ */
@Excel(name = "用户姓名", width = 15) @Excel(name = "用户姓名", width = 15)
@NotBlank(message = "用户姓名不能为空") @NotBlank(message = "用户姓名不能为空")
@Size(max = 50,message = "用户姓名最长为50") @Size(max = 50,message = "用户姓名最长为50字符")
private String realname; private String realname;
/** /**
@@ -92,20 +94,32 @@ public class SysUser implements Serializable {
@Dict(dicCode = "sex") @Dict(dicCode = "sex")
private Integer sex; private Integer sex;
/**
* 电子邮箱
*/
@Email(message = "邮箱格式不正确")
private String email;
/** /**
* 电话 * 电话
*/ */
@Excel(name = "手机号", width = 15) @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 = "手机号码格式错误") @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; 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(当前选择登录部门) * 部门code(当前选择登录部门)
*/ */
@@ -115,11 +129,22 @@ public class SysUser implements Serializable {
private transient String orgCodeTxt; private transient String orgCodeTxt;
/** /**
* 状态(1:正常 2:冻结 ) * 邮箱
*/ */
@Excel(name = "状态", width = 15,dicCode = "user_status") @Excel(name="邮箱",width = 15,exportConvert = true)
@Dict(dicCode = "user_status") @NotBlank(message = "邮箱不能为空")
private Integer status; @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已删除) * 删除状态(0,正常,1已删除)
@@ -150,6 +175,13 @@ public class SysUser implements Serializable {
@Excel(name = "创建时间", orderNum = "1",format = "yyyy-MM-dd HH:mm:ss") @Excel(name = "创建时间", orderNum = "1",format = "yyyy-MM-dd HH:mm:ss")
private Date createTime; 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; 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配置,编辑用户的时候设置 * 多租户id配置,编辑用户的时候设置
@@ -210,9 +230,17 @@ public class SysUser implements Serializable {
@TableField(exist = false) @TableField(exist = false)
private String verifyPassword; private String verifyPassword;
/** public String convertisEmail(){
* 邮箱授权码 if (StringUtils.isNotBlank(email)){
*/ return PasswordUtil.decrypt(email);
@ApiModelProperty(value = "邮箱授权码") }
private String emailPassword; 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(); String emailPassword = record.getEmailPassword();
if (StringUtils.isNotBlank(emailPassword)) { if (StringUtils.isNotBlank(emailPassword)) {
record.setEmailPassword(PasswordUtil.decrypt(emailPassword)); record.setEmailPassword(PasswordUtil.encrypt(emailPassword));
} }
} }
} }
@@ -1,13 +1,11 @@
package com.jero.modules.system.vo; package com.jero.modules.system.vo;
import com.jero.common.aspect.annotation.Dict; import com.jero.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel; import org.jeecgframework.poi.excel.annotation.Excel;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.*;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
/** /**
* @author liJiaRao * @author liJiaRao
@@ -19,29 +17,59 @@ public class SysUserTemplate {
* 登录账号 * 登录账号
*/ */
@Excel(name = "用户账号", width = 15) @Excel(name = "用户账号", width = 15)
@NotBlank(message = "用户账号不能为空")
@Size(max = 50,message = "用户账号最长为50字符")
private String username; private String username;
/** /**
* 真实姓名 * 真实姓名
*/ */
@Excel(name = "用户姓名", width = 15) @Excel(name = "用户姓名", width = 15)
@NotBlank(message = "用户姓名不能为空")
@Size(max = 50,message = "用户姓名最长为50字符")
private String realname; private String realname;
/** /**
* 电话 * 电话
*/ */
@Excel(name = "手机号", width = 15) @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; 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; 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; 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;
} }