From 55a02c6053b585a12b086ebd3c8c1a6dfb316b33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E7=8E=89=E7=A5=A5?= Date: Tue, 7 Mar 2023 23:48:26 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E6=9B=B4=E6=96=B0=E3=80=91=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=AF=BC=E5=85=A5=EF=BC=8C=E5=BE=85=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/service/impl/SysOrgServiceImpl.java | 5 +- .../role/service/impl/SysRoleServiceImpl.java | 2 +- .../modular/user/service/SysUserService.java | 4 +- .../user/service/impl/SysUserServiceImpl.java | 123 ++++++++++++------ 4 files changed, 88 insertions(+), 46 deletions(-) diff --git a/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/org/service/impl/SysOrgServiceImpl.java b/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/org/service/impl/SysOrgServiceImpl.java index 0bf6f836..95fdad86 100644 --- a/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/org/service/impl/SysOrgServiceImpl.java +++ b/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/org/service/impl/SysOrgServiceImpl.java @@ -234,6 +234,7 @@ public class SysOrgServiceImpl extends ServiceImpl impleme public String findOrgIdByOrgName(String parentId, Iterator iterator, List cachedAllOrgList, List> treeList) { String next = iterator.next(); + // TODO List> findList = treeList.stream().filter(tree -> tree.getName().equals(next)).collect(Collectors.toList()); if(ObjectUtil.isNotEmpty(findList)) { if(iterator.hasNext()) { @@ -250,7 +251,7 @@ public class SysOrgServiceImpl extends ServiceImpl impleme sysOrg.setCategory(parentId.equals("0")?SysOrgCategoryEnum.COMPANY.getValue():SysOrgCategoryEnum.DEPT.getValue()); sysOrg.setSortCode(99); this.save(sysOrg); - // 发布增加事件 + // TODO 发布增加事件 CommonDataChangeEventCenter.doAddWithData(SysDataTypeEnum.ORG.getValue(), JSONUtil.createArray().put(sysOrg)); // 将该机构加入缓存 cachedAllOrgList.add(sysOrg); @@ -301,7 +302,7 @@ public class SysOrgServiceImpl extends ServiceImpl impleme lambdaQueryWrapper.select(SysUser::getId, SysUser::getOrgId, SysUser::getAccount, SysUser::getName, SysUser::getSortCode); // 如果查询条件为空,则从缓存中查询 if(ObjectUtil.isAllEmpty(sysOrgSelectorUserParam.getOrgId(), sysOrgSelectorUserParam.getSearchKey())) { - return sysUserService.getCachedAllUserList(); + return sysUserService.getCachedAllUserSelectorList(); } else { if(ObjectUtil.isNotEmpty(sysOrgSelectorUserParam.getOrgId())) { // 如果机构id不为空,则查询该机构所在顶级机构下的所有人 diff --git a/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/role/service/impl/SysRoleServiceImpl.java b/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/role/service/impl/SysRoleServiceImpl.java index 4f19cd79..d1180971 100644 --- a/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/role/service/impl/SysRoleServiceImpl.java +++ b/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/role/service/impl/SysRoleServiceImpl.java @@ -436,7 +436,7 @@ public class SysRoleServiceImpl extends ServiceImpl impl lambdaQueryWrapper.select(SysUser::getId, SysUser::getOrgId, SysUser::getAccount, SysUser::getName, SysUser::getSortCode); // 如果查询条件为空,则从缓存中查询 if(ObjectUtil.isAllEmpty(sysRoleSelectorUserParam.getOrgId(), sysRoleSelectorUserParam.getSearchKey())) { - return sysUserService.getCachedAllUserList(); + return sysUserService.getCachedAllUserSelectorList(); } else { if (ObjectUtil.isNotEmpty(sysRoleSelectorUserParam.getOrgId())) { // 如果机构id不为空,则查询该机构所在顶级机构下的所有人 diff --git a/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/service/SysUserService.java b/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/service/SysUserService.java index fb191013..64fb2c8e 100644 --- a/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/service/SysUserService.java +++ b/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/service/SysUserService.java @@ -381,12 +381,12 @@ public interface SysUserService extends IService { List loginPositionInfo(SysUserIdParam sysUserIdParam); /** - * 获取缓存的所有用户 + * 获取缓存的所有用户选择器 * * @author xuyuxiang * @date 2022/7/25 19:42 **/ - List getCachedAllUserList(); + List getCachedAllUserSelectorList(); /* ====用户部分所需要用到的选择器==== */ diff --git a/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/service/impl/SysUserServiceImpl.java b/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/service/impl/SysUserServiceImpl.java index 85dd7259..0f7e0528 100644 --- a/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/service/impl/SysUserServiceImpl.java +++ b/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/service/impl/SysUserServiceImpl.java @@ -986,10 +986,11 @@ public class SysUserServiceImpl extends ServiceImpl impl int successCount = 0; int errorCount = 0; JSONArray errorDetail = JSONUtil.createArray(); - List sysUserImportParamList = EasyExcel.read("D://import.xlsx") + List sysUserImportParamList = EasyExcel.read("D://userImportTemplate.xlsx") .head(SysUserImportParam.class).sheet().headRowNumber(2).doReadSync(); + List allUserList = this.list(); for (int i = 0; i < sysUserImportParamList.size(); i++) { - JSONObject jsonObject = this.doImport(sysUserImportParamList.get(i), i); + JSONObject jsonObject = this.doImport(allUserList, sysUserImportParamList.get(i), i); if(jsonObject.getBool("success")) { successCount += 1; } else{ @@ -1014,81 +1015,121 @@ public class SysUserServiceImpl extends ServiceImpl impl * @author xuyuxiang * @date 2023/3/7 13:22 **/ - public JSONObject doImport(SysUserImportParam sysUserImportParam, int i) { + public JSONObject doImport(List allUserList, SysUserImportParam sysUserImportParam, int i) { String account = sysUserImportParam.getAccount(); String name = sysUserImportParam.getName(); - String orgName = sysUserImportParam.getOrgName(); - String positionName = sysUserImportParam.getPositionName(); - if(ObjectUtil.hasEmpty(account, name, orgName, positionName)) { + String orgFullName = sysUserImportParam.getOrgName(); + String positionFullName = sysUserImportParam.getPositionName(); + // 校验必填参数 + if(ObjectUtil.hasEmpty(account, name, orgFullName, positionFullName)) { return JSONUtil.createObj().set("index", i + 1).set("success", false).set("msg", "必填字段存在空值"); } else { try { - List cachedAllUserList = this.getCachedAllUserList(); - String orgId = sysOrgService.getOrgIdByOrgFullNameWithCreate(sysUserImportParam.getOrgName()); - String positionId = sysPositionService.getPositionIdByPositionNameWithCreate(orgId, sysUserImportParam.getPositionName()); - SysUser sysUser = this.getOne(new LambdaQueryWrapper().eq(SysUser::getAccount, account)); + // 机构名称 + String orgName = CollectionUtil.getLast(StrUtil.split(orgFullName, StrUtil.DASHED)); + // 职位名称 + String positionName = CollectionUtil.getLast(StrUtil.split(positionFullName, StrUtil.DASHED)); + // 机构id + String orgId = sysOrgService.getOrgIdByOrgFullNameWithCreate(orgFullName); + // 职位id + String positionId = sysPositionService.getPositionIdByPositionNameWithCreate(orgId, positionFullName); + + // 查找账号对应索引 + int index = CollStreamUtil.toList(allUserList, SysUser::getAccount).indexOf(account); + SysUser sysUser = new SysUser(); boolean isAdd = false; - String existUserId = null; - if(ObjectUtil.isEmpty(sysUser)) { - sysUser = new SysUser(); + if(index == -1) { isAdd = true; } else { - existUserId = sysUser.getId(); + sysUser = allUserList.get(index); } - String phone = sysUser.getPhone(); - String email = sysUser.getEmail(); - // 拷贝属性 - BeanUtil.copyProperties(sysUserImportParam, sysUser); - sysUser.setOrgId(orgId); - sysUser.setPositionId(positionId); + + // 获取手机号和邮箱 + String phone = sysUserImportParam.getPhone(); + String email = sysUserImportParam.getEmail(); + // 判断手机号是否跟系统现有的重复 if(ObjectUtil.isNotEmpty(phone)) { if(isAdd) { - boolean repeatPhone = cachedAllUserList.stream().anyMatch(tempSysUser -> ObjectUtil + boolean repeatPhone = allUserList.stream().anyMatch(tempSysUser -> ObjectUtil .isNotEmpty(tempSysUser.getPhone()) && tempSysUser.getPhone().equals(phone)); if(repeatPhone) { - sysUser.setPhone(null); + // 新增用户手机号重复则不导入该手机号 + sysUserImportParam.setPhone(null); } } else { - String finalExistUserId = existUserId; - boolean repeatPhone = cachedAllUserList.stream().anyMatch(tempSysUser -> ObjectUtil + String finalExistUserId = sysUser.getId(); + boolean repeatPhone = allUserList.stream().anyMatch(tempSysUser -> ObjectUtil .isNotEmpty(tempSysUser.getPhone()) && tempSysUser.getPhone() .equals(phone) && !tempSysUser.getId().equals(finalExistUserId)); if(repeatPhone) { - sysUser.setPhone(phone); + // 更新用户手机号重复则使用原手机号 + sysUser.setPhone(sysUser.getPhone()); } } } // 判断邮箱是否跟系统现有的重复 if(ObjectUtil.isNotEmpty(email)) { if(isAdd) { - boolean repeatPhone = cachedAllUserList.stream().anyMatch(tempSysUser -> ObjectUtil + boolean repeatEmail = allUserList.stream().anyMatch(tempSysUser -> ObjectUtil .isNotEmpty(tempSysUser.getEmail()) && tempSysUser.getEmail().equals(email)); - if(repeatPhone) { - sysUser.setPhone(null); + if(repeatEmail) { + // 新增邮箱重复则不导入该邮箱 + sysUserImportParam.setEmail(null); } } else { - String finalExistUserId = existUserId; - boolean repeatPhone = cachedAllUserList.stream().anyMatch(tempSysUser -> ObjectUtil + String finalExistUserId = sysUser.getId(); + boolean repeatEmail = allUserList.stream().anyMatch(tempSysUser -> ObjectUtil .isNotEmpty(tempSysUser.getEmail()) && tempSysUser.getEmail() .equals(email) && !tempSysUser.getId().equals(finalExistUserId)); - if(repeatPhone) { - sysUser.setPhone(email); + if(repeatEmail) { + // 更新用户手机号重复则使用原邮箱 + sysUser.setEmail(sysUser.getEmail()); } } } + // 拷贝属性 + BeanUtil.copyProperties(sysUserImportParam, sysUser); + + // 设置机构id和职位id + sysUser.setOrgId(orgId); + sysUser.setPositionId(positionId); + + // 设置机构名称和职位名称(暂时无作用) + sysUser.setOrgName(orgName); + sysUser.setPositionName(positionName); + + // 发布事件 + if(isAdd) { + // 设置id + sysUser.setId(IdWorker.getIdStr()); + // 设置默认头像 + sysUser.setAvatar(CommonAvatarUtil.generateImg(sysUser.getName())); + // 设置默认密码 + sysUser.setPassword(CommonCryptogramUtil.doHashValue(devConfigApi.getValueByKey(SNOWY_SYS_DEFAULT_PASSWORD_KEY))); + // 设置状态 + sysUser.setUserStatus(SysUserStatusEnum.ENABLE.getValue()); + // 发布增加事件 + CommonDataChangeEventCenter.doAddWithData(SysDataTypeEnum.USER.getValue(), JSONUtil.createArray().put(sysUser)); + // 更新全部用户 + allUserList.add(sysUser); + } else { + // 发布更新事件 + CommonDataChangeEventCenter.doUpdateWithData(SysDataTypeEnum.USER.getValue(), JSONUtil.createArray().put(sysUser)); + // 删除指定索引元素 + allUserList.remove(index); + // 插入指定索引元素 + allUserList.add(index, sysUser); + } + + // 保存或更新 this.saveOrUpdate(sysUser); - // 发布增加事件 - CommonDataChangeEventCenter.doAddWithData(SysDataTypeEnum.ORG.getValue(), JSONUtil.createArray().put(sysUser)); - // 将该用户加入缓存 - cachedAllUserList.add(sysUser); - // 更新缓存 - commonCacheOperator.put(USER_CACHE_ALL_KEY, cachedAllUserList); + // 返回成功 return JSONUtil.createObj().set("success", true); } catch (Exception e) { e.printStackTrace(); - return JSONUtil.createObj().set("index", i + 1).set("success", false).set("msg", "数据导入异常"); + return JSONUtil.createObj().set("success", false).set("index", i + 1).set("msg", "数据导入异常"); } } } @@ -1346,7 +1387,7 @@ public class SysUserServiceImpl extends ServiceImpl impl } @Override - public List getCachedAllUserList() { + public List getCachedAllUserSelectorList() { // 从缓存中取 Object cacheValue = commonCacheOperator.get(USER_CACHE_ALL_KEY); if(ObjectUtil.isNotEmpty(cacheValue)) { @@ -1430,7 +1471,7 @@ public class SysUserServiceImpl extends ServiceImpl impl lambdaQueryWrapper.select(SysUser::getId, SysUser::getOrgId, SysUser::getAccount, SysUser::getName, SysUser::getSortCode); // 如果查询条件为空,则从缓存中查询 if(ObjectUtil.isAllEmpty(sysUserSelectorUserParam.getOrgId(), sysUserSelectorUserParam.getSearchKey())) { - return this.getCachedAllUserList(); + return this.getCachedAllUserSelectorList(); } else { if (ObjectUtil.isNotEmpty(sysUserSelectorUserParam.getOrgId())) { // 如果机构id不为空,则查询该机构所在顶级机构下的所有人