From 6fea57ba6402970f39fa314505dbd1af9fa01031 Mon Sep 17 00:00:00 2001 From: lijiarao Date: Mon, 30 Aug 2021 17:10:27 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E7=94=A8=E6=88=B7=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jero/common/constant/CommonConstant.java | 2 +- .../com/jero/common/util/ImportExcelUtil.java | 17 +++--- .../controller/QuartzJobController.java | 5 +- .../controller/SysDepartController.java | 2 +- .../system/controller/SysDictController.java | 5 +- .../system/controller/SysUserController.java | 57 ++++++++++++++----- .../jero/modules/system/entity/SysUser.java | 47 +++++++-------- .../service/impl/SysRoleServiceImpl.java | 2 +- .../jero/modules/system/util/UserUtil.java | 47 +++++++++++++++ 9 files changed, 124 insertions(+), 60 deletions(-) create mode 100644 jero-boot-module-system/src/main/java/com/jero/modules/system/util/UserUtil.java diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/CommonConstant.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/CommonConstant.java index dd256592..04045acd 100644 --- a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/CommonConstant.java +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/CommonConstant.java @@ -224,7 +224,7 @@ public interface CommonConstant { public static final Integer USER_IDENTITY_2 = 2; /** sys_user 表 username 唯一键索引 */ - public static final String SQL_INDEX_UNIQ_SYS_USER_USERNAME = "uniq_sys_user_username"; + public static final String SQL_INDEX_UNIQ_SYS_USER_USERNAME = "index_user_name"; /** sys_user 表 work_no 唯一键索引 */ public static final String SQL_INDEX_UNIQ_SYS_USER_WORK_NO = "uniq_sys_user_work_no"; /** sys_user 表 phone 唯一键索引 */ diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/ImportExcelUtil.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/ImportExcelUtil.java index 8a09ad20..65075d0b 100644 --- a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/ImportExcelUtil.java +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/ImportExcelUtil.java @@ -16,7 +16,7 @@ import java.util.List; @Slf4j public class ImportExcelUtil { - public static Result imporReturnRes(int errorLines,int successLines,List errorMessage) throws IOException { + public static Result importReturnRes(int errorLines, int successLines, List errorMessage) throws IOException { if (errorLines == 0) { return Result.OK("共" + successLines + "行数据全部导入成功!"); } else { @@ -25,15 +25,14 @@ public class ImportExcelUtil { result.put("totalCount", totalCount); result.put("errorCount", errorLines); result.put("successCount", successLines); - result.put("msg", "总上传行数:" + totalCount + ",已导入行数:" + successLines + ",错误行数:" + errorLines); + result.put("msg", "总上传行数:" + totalCount + ",已导入行数:" + successLines + ",错误次数:" + errorLines +",错误信息:" +errorMessage); String fileUrl = PmsUtil.saveErrorTxtByList(errorMessage, "userImportExcelErrorLog"); - int lastIndex = fileUrl.lastIndexOf(File.separator); - String fileName = fileUrl.substring(lastIndex + 1); - result.put("fileUrl", "/sys/common/static/" + fileUrl); - result.put("fileName", fileName); - Result res = Result.OK(result); - res.setCode(201); - res.setMessage("文件导入成功,但有错误。"); + //int lastIndex = fileUrl.lastIndexOf(File.separator); + //String fileName = fileUrl.substring(lastIndex + 1); + //result.put("fileUrl", "/sys/common/static/" + fileUrl); + //result.put("fileName", fileName); + Result res = Result.OK(result); + res.setMessage("文件导入成功,但有错误。\n"+"总上传行数:" + totalCount + ",已导入行数:" + successLines + ",错误次数:" + errorLines +",错误信息:" +errorMessage); return res; } } diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/quartz/controller/QuartzJobController.java b/jero-boot-module-system/src/main/java/com/jero/modules/quartz/controller/QuartzJobController.java index e21669ca..91031a31 100644 --- a/jero-boot-module-system/src/main/java/com/jero/modules/quartz/controller/QuartzJobController.java +++ b/jero-boot-module-system/src/main/java/com/jero/modules/quartz/controller/QuartzJobController.java @@ -9,10 +9,8 @@ import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.apache.shiro.authz.annotation.RequiresRoles; import com.jero.common.api.vo.Result; import com.jero.common.constant.CommonConstant; -import com.jero.common.exception.JeroBootException; import com.jero.common.system.query.QueryGenerator; import com.jero.common.util.ImportExcelUtil; import com.jero.modules.quartz.entity.QuartzJob; @@ -22,7 +20,6 @@ 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.quartz.JobKey; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.springframework.beans.factory.annotation.Autowired; @@ -259,7 +256,7 @@ public class QuartzJobController { } } } - return ImportExcelUtil.imporReturnRes(errorLines,successLines,errorMessage); + return ImportExcelUtil.importReturnRes(errorLines,successLines,errorMessage); } /** diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDepartController.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDepartController.java index b60d452f..a9542196 100644 --- a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDepartController.java +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDepartController.java @@ -381,7 +381,7 @@ public class SysDepartController { Set keys4 = redisTemplate.keys(CacheConstant.SYS_DEPART_IDS_CACHE + "*"); redisTemplate.delete(keys3); redisTemplate.delete(keys4); - return ImportExcelUtil.imporReturnRes(errorMessageList.size(), listSysDeparts.size() - errorMessageList.size(), errorMessageList); + return ImportExcelUtil.importReturnRes(errorMessageList.size(), listSysDeparts.size() - errorMessageList.size(), errorMessageList); } catch (Exception e) { log.error(e.getMessage(),e); return Result.error("文件导入失败:"+e.getMessage()); diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDictController.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDictController.java index ec21987a..45598acb 100644 --- a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDictController.java +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDictController.java @@ -1,7 +1,6 @@ package com.jero.modules.system.controller; -import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -17,7 +16,6 @@ import com.jero.common.constant.CacheConstant; import com.jero.common.constant.CommonConstant; import com.jero.common.system.query.QueryGenerator; import com.jero.common.system.vo.DictModel; -import com.jero.common.system.vo.DictQuery; import com.jero.common.system.vo.LoginUser; import com.jero.common.util.ImportExcelUtil; import com.jero.common.util.SqlInjectionUtil; @@ -37,7 +35,6 @@ 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.cache.annotation.CacheEvict; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.*; @@ -520,7 +517,7 @@ public class SysDictController { errorMessage.add("第 " + lineNumber + " 行:字典编码已经存在,忽略导入。"); } } - return ImportExcelUtil.imporReturnRes(errorLines,successLines,errorMessage); + return ImportExcelUtil.importReturnRes(errorLines,successLines,errorMessage); } catch (Exception e) { log.error(e.getMessage(),e); return Result.error("文件导入失败:"+e.getMessage()); diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysUserController.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysUserController.java index e85c559e..f03dc699 100644 --- a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysUserController.java +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysUserController.java @@ -9,12 +9,13 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.google.common.base.Joiner; import com.jero.common.exception.JeroBootException; +import com.jero.modules.system.util.UserUtil; import com.jero.modules.system.vo.SysUserVo; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; -import org.apache.poi.ss.formula.functions.T; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; import com.jero.common.api.vo.Result; @@ -116,8 +117,8 @@ public class SysUserController { IPage pageList = sysUserService.queryPageListByRoleAndDepart(page, user, roleId, departId); List userList = new ArrayList<>(); for (SysUserVo record : pageList.getRecords()) { - record.setEmail(PasswordUtil.decrypt(record.getEmail())); - record.setPhone(PasswordUtil.decrypt(record.getPhone())); + //处理邮箱和手机号的加密 + UserUtil.decryptUser(record); userList.add(record); } pageList.setRecords(userList); @@ -158,8 +159,8 @@ public class SysUserController { IPage pageList = sysUserService.page(page, queryWrapper); List userList = new ArrayList<>(); for (SysUser record : pageList.getRecords()) { - record.setEmail(PasswordUtil.decrypt(record.getEmail())); - record.setPhone(PasswordUtil.decrypt(record.getPhone())); + //处理邮箱和手机号的加密 + UserUtil.decryptUser(record); userList.add(record); } pageList.setRecords(userList); @@ -191,8 +192,8 @@ public class SysUserController { List userList = new ArrayList<>(); List records = pageList.getRecords(); for (SysUser record : records) { - record.setEmail(PasswordUtil.decrypt(record.getEmail())); - record.setPhone(PasswordUtil.decrypt(record.getPhone())); + //处理邮箱和手机号的加密 + UserUtil.decryptUser(record); userList.add(record); } pageList.setRecords(userList); @@ -540,12 +541,21 @@ public class SysUserController { } //update-end--Author:kangxiaolin Date:20180825 for:[03]用户导出,如果选择数据则只导出相关数据---------------------- List pageList = sysUserService.list(queryWrapper); - + for (SysUser record : pageList) { + String username = record.getUsername(); + String phone = record.getPhone(); + if (StringUtils.isNotBlank(phone)){ + record.setPhone(PasswordUtil.decrypt(phone)); + } + List roleIdsByUsername = sysBaseAPI.getRoleIdsByUsername(username); + List departIdsByUsername = sysBaseAPI.getDepartIdsByUsername(username); + record.setRoleIds(Joiner.on(",").join(roleIdsByUsername)); + record.setDepartIds(Joiner.on(",").join(departIdsByUsername)); + } //导出文件名称 mv.addObject(NormalExcelConstants.FILE_NAME, "用户列表"); mv.addObject(NormalExcelConstants.CLASS, SysUser.class); - LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - ExportParams exportParams = new ExportParams("用户列表数据", "导出人:"+user.getRealname(), "导出信息"); + ExportParams exportParams = new ExportParams("用户列表数据", "导出信息"); exportParams.setImageBasePath(upLoadPath); mv.addObject(NormalExcelConstants.PARAMS, exportParams); mv.addObject(NormalExcelConstants.DATA_LIST, pageList); @@ -555,7 +565,7 @@ public class SysUserController { /** * 导出excel模板 */ - @RequiresPermissions("defect:download:template") + @RequiresPermissions("sys:user:import") @ApiOperation(value="用户-导出excel模板", notes="用户-导出excel模板") @GetMapping(value = "/exportTemplate") public ModelAndView exportTemplate() { @@ -594,6 +604,7 @@ public class SysUserController { try { List listSysUsers = ExcelImportUtil.importExcel(file.getInputStream(), SysUser.class, params); for (int i = 0; i < listSysUsers.size(); i++) { + int lineNumber = i + 3; SysUser sysUserExcel = listSysUsers.get(i); if (StringUtils.isBlank(sysUserExcel.getPassword())) { // 存入默认密码 @@ -603,14 +614,22 @@ public class SysUserController { String salt = oConvertUtils.randomGen(8); sysUserExcel.setSalt(salt); String passwordEncode = PasswordUtil.encrypt(sysUserExcel.getUsername(), sysUserExcel.getPassword(), salt); + try { + ValidUtil.validate(sysUserExcel); + }catch (JeroBootException e) { + errorLines++; + errorMessage.add("第 " + lineNumber + " 行:" + e.getMessage()); + } sysUserExcel.setPassword(passwordEncode); + //处理邮箱和手机号的加密 + UserUtil.encryptUser(sysUserExcel); + sysUserExcel.setDelFlag(0); try { sysUserService.save(sysUserExcel); successLines++; } catch (Exception e) { errorLines++; String message = e.getMessage().toLowerCase(); - int lineNumber = i + 1; // 通过索引名判断出错信息 if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER_USERNAME)) { errorMessage.add("第 " + lineNumber + " 行:用户名已经存在,忽略导入。"); @@ -625,10 +644,10 @@ public class SysUserController { log.error(e.getMessage(), e); } } + String userId = sysUserExcel.getId(); // 批量将部门和用户信息建立关联关系 String departIds = sysUserExcel.getDepartIds(); if (StringUtils.isNotBlank(departIds)) { - String userId = sysUserExcel.getId(); String[] departIdArray = departIds.split(","); List userDepartList = new ArrayList<>(departIdArray.length); for (String departId : departIdArray) { @@ -636,6 +655,16 @@ public class SysUserController { } sysUserDepartService.saveBatch(userDepartList); } + //批量处理角色和用户的关联关系 + String roleIds = sysUserExcel.getRoleIds(); + if (StringUtils.isNotBlank(roleIds)) { + String[] roleIdArray = roleIds.split(","); + List userRoleList = new ArrayList<>(); + for (String roleId : roleIdArray) { + userRoleList.add(new SysUserRole(userId,roleId)); + } + sysUserRoleService.saveBatch(userRoleList); + } } } catch (Exception e) { @@ -649,7 +678,7 @@ public class SysUserController { } } } - return ImportExcelUtil.imporReturnRes(errorLines,successLines,errorMessage); + return ImportExcelUtil.importReturnRes(errorLines,successLines,errorMessage); } /** diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysUser.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysUser.java index 588a1936..15a65a7a 100644 --- a/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysUser.java +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysUser.java @@ -20,9 +20,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; -import javax.validation.constraints.Email; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.Size; +import javax.validation.constraints.*; /** *

@@ -48,17 +46,17 @@ public class SysUser implements Serializable { /** * 登录账号 */ - @Excel(name = "登录账号", width = 15) - @NotBlank(message = "账号不能为空") - @Size(max = 50,message = "账号最长为50") + @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") + @Excel(name = "用户姓名", width = 15) + @NotBlank(message = "用户姓名不能为空") + @Size(max = 50,message = "用户姓名最长为50") private String realname; /** @@ -77,13 +75,11 @@ public class SysUser implements Serializable { /** * 头像 */ - @Excel(name = "头像", width = 15,type = 2) private String avatar; /** * 生日 */ - @Excel(name = "生日", width = 15, format = "yyyy-MM-dd") @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private Date birthday; @@ -91,21 +87,21 @@ public class SysUser implements Serializable { /** * 性别(1:男 2:女) */ - @Excel(name = "性别", width = 15,dicCode="sex") @Dict(dicCode = "sex") private Integer sex; /** * 电子邮箱 */ - @Excel(name = "电子邮箱", width = 15) - @Email(message = "电子邮箱格式不正确") + @Email(message = "邮箱格式不正确") private String email; /** * 电话 */ - @Excel(name = "电话", width = 15) + @Excel(name = "手机号", width = 15) + @NotEmpty(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; /** @@ -119,27 +115,23 @@ public class SysUser implements Serializable { /** * 状态(1:正常 2:冻结 ) */ - @Excel(name = "状态", width = 15,dicCode="user_status") @Dict(dicCode = "user_status") private Integer status; /** * 删除状态(0,正常,1已删除) */ - @Excel(name = "删除状态", width = 15,dicCode="del_flag") @TableLogic private Integer delFlag; /** * 工号,唯一键 */ - @Excel(name = "工号", width = 15) private String workNo; /** * 座机号 */ - @Excel(name = "座机号", width = 15) private String telephone; /** @@ -150,6 +142,9 @@ public class SysUser implements Serializable { /** * 创建时间 */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "创建时间", orderNum = "1",format = "yyyy-MM-dd HH:mm:ss") private Date createTime; /** @@ -171,13 +166,6 @@ public class SysUser implements Serializable { */ private Integer userIdentity; - /** - * 负责部门 - */ - @Excel(name="负责部门",width = 15,dictTable ="sys_depart",dicText = "depart_name",dicCode = "id") - @Dict(dictTable ="sys_depart",dicText = "depart_name",dicCode = "id") - private String departIds; - /** * 角色类型 */ @@ -185,6 +173,13 @@ public class SysUser implements Serializable { @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配置,编辑用户的时候设置 */ diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysRoleServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysRoleServiceImpl.java index 9ce2f9c7..fa0c08bb 100644 --- a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysRoleServiceImpl.java +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysRoleServiceImpl.java @@ -64,7 +64,7 @@ public class SysRoleServiceImpl extends ServiceImpl impl List list = ImportExcelUtil.importDateSave(listSysRoles, ISysRoleService.class, errorStrs, CommonConstant.SQL_INDEX_UNIQ_SYS_ROLE_CODE); errorLines+=list.size(); successLines+=(listSysRoles.size()-errorLines); - return ImportExcelUtil.imporReturnRes(errorLines,successLines,list); + return ImportExcelUtil.importReturnRes(errorLines,successLines,list); } @Override diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/util/UserUtil.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/util/UserUtil.java new file mode 100644 index 00000000..9d1a10d7 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/util/UserUtil.java @@ -0,0 +1,47 @@ +package com.jero.modules.system.util; + +import com.jero.common.util.PasswordUtil; +import com.jero.modules.system.entity.SysUser; +import org.apache.commons.lang.StringUtils; + +/** + * @author liJiaRao + * @date 2021-08-30 16:42 + */ +public class UserUtil { + /** + * 解密密文SysUser手机号邮箱 + * + * @param record + * SysUser + */ + public static void decryptUser(SysUser record) { + //处理邮箱和手机号的加密 + String email = record.getEmail(); + if (StringUtils.isNotBlank(email)){ + record.setEmail(PasswordUtil.decrypt(email)); + } + String phone = record.getPhone(); + if (StringUtils.isNotBlank(phone)){ + record.setPhone(PasswordUtil.decrypt(phone)); + } + } + + /** + * 加密密文SysUser手机号邮箱 + * + * @param record + * SysUser + */ + public static void encryptUser(SysUser record) { + //处理邮箱和手机号的加密 + String email = record.getEmail(); + if (StringUtils.isNotBlank(email)){ + record.setEmail(PasswordUtil.encrypt(email)); + } + String phone = record.getPhone(); + if (StringUtils.isNotBlank(phone)){ + record.setPhone(PasswordUtil.encrypt(phone)); + } + } +}