diff --git a/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/core/listener/SysDataChangeListener.java b/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/core/listener/SysDataChangeListener.java index 7e9a4b4d..11cf8a47 100644 --- a/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/core/listener/SysDataChangeListener.java +++ b/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/core/listener/SysDataChangeListener.java @@ -15,9 +15,13 @@ package vip.xiaonuo.sys.core.listener; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.json.JSONArray; import org.springframework.stereotype.Component; +import vip.xiaonuo.common.cache.CommonCacheOperator; import vip.xiaonuo.common.listener.CommonDataChangeListener; import vip.xiaonuo.sys.core.enums.SysDataTypeEnum; +import vip.xiaonuo.sys.modular.org.service.impl.SysOrgServiceImpl; +import vip.xiaonuo.sys.modular.user.service.impl.SysUserServiceImpl; +import javax.annotation.Resource; import java.util.List; /** @@ -29,9 +33,19 @@ import java.util.List; @Component public class SysDataChangeListener implements CommonDataChangeListener { + @Resource + private CommonCacheOperator commonCacheOperator; + @Override public void doAddWithDataIdList(String dataType, List dataIdList) { - // 此处可做额外处理 + // 如果检测到机构增加,则将机构的数据缓存清除 + if(dataType.equals(SysDataTypeEnum.ORG.getValue())) { + commonCacheOperator.remove(SysOrgServiceImpl.ORG_CACHE_ALL_KEY); + } + // 如果检测到用户增加,则将用户数据缓存清除 + if(dataType.equals(SysDataTypeEnum.USER.getValue())) { + commonCacheOperator.remove(SysUserServiceImpl.USER_CACHE_ALL_KEY); + } } @Override @@ -41,7 +55,14 @@ public class SysDataChangeListener implements CommonDataChangeListener { @Override public void doUpdateWithDataIdList(String dataType, List dataIdList) { - // 此处可做额外处理 + // 如果检测到机构更新,则将机构的数据缓存清除 + if(dataType.equals(SysDataTypeEnum.ORG.getValue())) { + commonCacheOperator.remove(SysOrgServiceImpl.ORG_CACHE_ALL_KEY); + } + // 如果检测到用户更新,则将用户数据缓存清除 + if(dataType.equals(SysDataTypeEnum.USER.getValue())) { + commonCacheOperator.remove(SysUserServiceImpl.USER_CACHE_ALL_KEY); + } } @Override @@ -51,8 +72,13 @@ public class SysDataChangeListener implements CommonDataChangeListener { @Override public void doDeleteWithDataIdList(String dataType, List dataIdList) { + // 如果检测到机构增加,则将机构的数据缓存清除 + if(dataType.equals(SysDataTypeEnum.ORG.getValue())) { + commonCacheOperator.remove(SysOrgServiceImpl.ORG_CACHE_ALL_KEY); + } + // 如果检测到用户删除,则将用户数据缓存清除,并将这些用户踢下线 if(dataType.equals(SysDataTypeEnum.USER.getValue())) { - // 当用户被删除时,此处将这些用户踢下线 + commonCacheOperator.remove(SysUserServiceImpl.USER_CACHE_ALL_KEY); dataIdList.forEach(StpUtil::kickout); } } diff --git a/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/org/service/SysOrgService.java b/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/org/service/SysOrgService.java index 85f7ea21..235877b8 100644 --- a/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/org/service/SysOrgService.java +++ b/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/org/service/SysOrgService.java @@ -85,6 +85,22 @@ public interface SysOrgService extends IService { **/ SysOrg queryEntity(String id); + /** + * 获取缓存的所有组织 + * + * @author xuyuxiang + * @date 2022/7/25 19:42 + **/ + List getCachedAllOrgList(); + + /** + * 根据id获取父子数据列表 + * + * @author xuyuxiang + * @date 2022/8/15 14:55 + **/ + List getParentAndChildListById(List originDataList, String id, boolean includeSelf); + /** * 根据id获取所有的子数据列表 * @@ -93,6 +109,14 @@ public interface SysOrgService extends IService { **/ List getChildListById(List originDataList, String id, boolean includeSelf); + /** + * 根据id获取所有的父数据列表 + * + * @author xuyuxiang + * @date 2022/8/15 14:55 + **/ + List getParentListById(List originDataList, String id, boolean includeSelf); + /** * 根据id获取数据 * @@ -101,6 +125,22 @@ public interface SysOrgService extends IService { **/ SysOrg getById(List originDataList, String id) ; + /** + * 根据id获取父数据 + * + * @author xuyuxiang + * @date 2022/8/15 14:55 + **/ + SysOrg getParentById(List originDataList, String id) ; + + /** + * 根据id获取子数据 + * + * @author xuyuxiang + * @date 2022/8/15 14:55 + **/ + SysOrg getChildById(List originDataList, String id) ; + /** * 获取组织树选择器 * 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 9300a287..41e0471a 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 @@ -29,6 +29,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import vip.xiaonuo.common.cache.CommonCacheOperator; import vip.xiaonuo.common.enums.CommonSortOrderEnum; import vip.xiaonuo.common.exception.CommonException; import vip.xiaonuo.common.listener.CommonDataChangeEventCenter; @@ -59,6 +60,11 @@ import java.util.stream.Collectors; @Service public class SysOrgServiceImpl extends ServiceImpl implements SysOrgService { + public static final String ORG_CACHE_ALL_KEY = "sys-org:all"; + + @Resource + private CommonCacheOperator commonCacheOperator; + @Resource private SysRoleService sysRoleService; @@ -92,9 +98,7 @@ public class SysOrgServiceImpl extends ServiceImpl impleme @Override public List> tree() { - LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.orderByAsc(SysOrg::getSortCode); - List sysOrgList = this.list(lambdaQueryWrapper); + List sysOrgList = this.getCachedAllOrgList(); List> treeNodeList = sysOrgList.stream().map(sysOrg -> new TreeNode<>(sysOrg.getId(), sysOrg.getParentId(), sysOrg.getName(), sysOrg.getSortCode()).setExtra(JSONUtil.parseObj(sysOrg))) @@ -131,7 +135,7 @@ public class SysOrgServiceImpl extends ServiceImpl impleme if(repeatName) { throw new CommonException("存在重复的同级组织,名称为:{}", sysOrg.getName()); } - List originDataList = this.list(); + List originDataList = this.getCachedAllOrgList(); boolean errorLevel = this.getChildListById(originDataList, sysOrg.getId(), true).stream() .map(SysOrg::getId).collect(Collectors.toList()).contains(sysOrg.getParentId()); if(errorLevel) { @@ -148,7 +152,7 @@ public class SysOrgServiceImpl extends ServiceImpl impleme public void delete(List sysOrgIdParamList) { List orgIdList = CollStreamUtil.toList(sysOrgIdParamList, SysOrgIdParam::getId); if(ObjectUtil.isNotEmpty(orgIdList)) { - List allOrgList = this.list(); + List allOrgList = this.getCachedAllOrgList(); // 获取所有子组织 List toDeleteOrgIdList = CollectionUtil.newArrayList(); orgIdList.forEach(orgId -> toDeleteOrgIdList.addAll(this.getChildListById(allOrgList, orgId, true).stream() @@ -203,13 +207,26 @@ public class SysOrgServiceImpl extends ServiceImpl impleme return sysOrg; } + @Override + public List getCachedAllOrgList() { + // 从缓存中取 + Object cacheValue = commonCacheOperator.get(ORG_CACHE_ALL_KEY); + if(ObjectUtil.isNotEmpty(cacheValue)) { + return JSONUtil.toList(JSONUtil.parseArray(cacheValue), SysOrg.class); + } + List orgList = this.list(new LambdaQueryWrapper().orderByAsc(SysOrg::getSortCode)); + if(ObjectUtil.isNotEmpty(orgList)) { + // 更新到缓存 + commonCacheOperator.put(ORG_CACHE_ALL_KEY, orgList); + } + return orgList; + } + /* ====组织部分所需要用到的选择器==== */ @Override public List> orgTreeSelector() { - LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.orderByAsc(SysOrg::getSortCode); - List sysOrgList = this.list(lambdaQueryWrapper); + List sysOrgList = this.getCachedAllOrgList(); List> treeNodeList = sysOrgList.stream().map(sysOrg -> new TreeNode<>(sysOrg.getId(), sysOrg.getParentId(), sysOrg.getName(), sysOrg.getSortCode())) .collect(Collectors.toList()); @@ -236,19 +253,39 @@ public class SysOrgServiceImpl extends ServiceImpl impleme public List userSelector(SysOrgSelectorUserParam sysOrgSelectorUserParam) { LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); // 只查询部分字段 - lambdaQueryWrapper.select(SysUser::getId, SysUser::getOrgId, SysUser::getAccount, SysUser::getName); - if(ObjectUtil.isNotEmpty(sysOrgSelectorUserParam.getOrgId())) { - lambdaQueryWrapper.eq(SysUser::getOrgId, sysOrgSelectorUserParam.getOrgId()); + lambdaQueryWrapper.select(SysUser::getId, SysUser::getOrgId, SysUser::getAccount, SysUser::getName, SysUser::getSortCode); + // 如果查询条件为空,则从缓存中查询 + if(ObjectUtil.isAllEmpty(sysOrgSelectorUserParam.getOrgId(), sysOrgSelectorUserParam.getSearchKey())) { + return sysUserService.getCachedAllUserList(); + } else { + if(ObjectUtil.isNotEmpty(sysOrgSelectorUserParam.getOrgId())) { + // 如果机构id不为空,则查询该机构所在顶级机构下的所有人 + List parentAndChildOrgIdList = CollStreamUtil.toList(this.getParentAndChildListById(this + .getCachedAllOrgList(), sysOrgSelectorUserParam.getOrgId(), true), SysOrg::getId); + if (ObjectUtil.isNotEmpty(parentAndChildOrgIdList)) { + lambdaQueryWrapper.in(SysUser::getOrgId, parentAndChildOrgIdList); + } else { + return CollectionUtil.newArrayList(); + } + } + if(ObjectUtil.isNotEmpty(sysOrgSelectorUserParam.getSearchKey())) { + lambdaQueryWrapper.like(SysUser::getName, sysOrgSelectorUserParam.getSearchKey()); + } + lambdaQueryWrapper.orderByAsc(SysUser::getSortCode); + return sysUserService.list(lambdaQueryWrapper); } - if(ObjectUtil.isNotEmpty(sysOrgSelectorUserParam.getSearchKey())) { - lambdaQueryWrapper.like(SysUser::getName, sysOrgSelectorUserParam.getSearchKey()); - } - lambdaQueryWrapper.orderByAsc(SysUser::getSortCode); - return sysUserService.list(lambdaQueryWrapper); } /* ====以下为各种递归方法==== */ + @Override + public List getParentAndChildListById(List originDataList, String id, boolean includeSelf) { + List parentListById = this.getParentListById(originDataList, id, false); + List childListById = this.getChildListById(originDataList, id, true); + parentListById.addAll(childListById); + return parentListById; + } + @Override public List getChildListById(List originDataList, String id, boolean includeSelf) { List resultList = CollectionUtil.newArrayList(); @@ -262,6 +299,7 @@ public class SysOrgServiceImpl extends ServiceImpl impleme return resultList; } + @Override public List getParentListById(List originDataList, String id, boolean includeSelf) { List resultList = CollectionUtil.newArrayList(); execRecursionFindParent(originDataList, id, resultList); @@ -301,11 +339,13 @@ public class SysOrgServiceImpl extends ServiceImpl impleme return index == -1?null:originDataList.get(index); } + @Override public SysOrg getParentById(List originDataList, String id) { SysOrg self = this.getById(originDataList, id); return ObjectUtil.isNotEmpty(self)?self:this.getById(originDataList, self.getParentId()); } + @Override public SysOrg getChildById(List originDataList, String id) { int index = CollStreamUtil.toList(originDataList, SysOrg::getParentId).indexOf(id); return index == -1?null:originDataList.get(index); diff --git a/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/service/impl/SysPositionServiceImpl.java b/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/service/impl/SysPositionServiceImpl.java index 7b349b55..193ba901 100644 --- a/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/service/impl/SysPositionServiceImpl.java +++ b/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/service/impl/SysPositionServiceImpl.java @@ -176,9 +176,7 @@ public class SysPositionServiceImpl extends ServiceImpl> orgTreeSelector() { - LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.orderByAsc(SysOrg::getSortCode); - List sysOrgList = sysOrgService.list(lambdaQueryWrapper); + List sysOrgList = sysOrgService.getCachedAllOrgList(); List> treeNodeList = sysOrgList.stream().map(sysOrg -> new TreeNode<>(sysOrg.getId(), sysOrg.getParentId(), sysOrg.getName(), sysOrg.getSortCode())) .collect(Collectors.toList()); 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 785e1ff3..4f19cd79 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 @@ -302,9 +302,7 @@ public class SysRoleServiceImpl extends ServiceImpl impl @Override public List> orgTreeSelector() { - LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.orderByAsc(SysOrg::getSortCode); - List sysOrgList = sysOrgService.list(lambdaQueryWrapper); + List sysOrgList = sysOrgService.getCachedAllOrgList(); List> treeNodeList = sysOrgList.stream().map(sysOrg -> new TreeNode<>(sysOrg.getId(), sysOrg.getParentId(), sysOrg.getName(), sysOrg.getSortCode())) .collect(Collectors.toList()); @@ -435,15 +433,27 @@ public class SysRoleServiceImpl extends ServiceImpl impl public List userSelector(SysRoleSelectorUserParam sysRoleSelectorUserParam) { LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); // 只查询部分字段 - lambdaQueryWrapper.select(SysUser::getId, SysUser::getOrgId, SysUser::getAccount, SysUser::getName); - if(ObjectUtil.isNotEmpty(sysRoleSelectorUserParam.getOrgId())) { - lambdaQueryWrapper.eq(SysUser::getOrgId, sysRoleSelectorUserParam.getOrgId()); + lambdaQueryWrapper.select(SysUser::getId, SysUser::getOrgId, SysUser::getAccount, SysUser::getName, SysUser::getSortCode); + // 如果查询条件为空,则从缓存中查询 + if(ObjectUtil.isAllEmpty(sysRoleSelectorUserParam.getOrgId(), sysRoleSelectorUserParam.getSearchKey())) { + return sysUserService.getCachedAllUserList(); + } else { + if (ObjectUtil.isNotEmpty(sysRoleSelectorUserParam.getOrgId())) { + // 如果机构id不为空,则查询该机构所在顶级机构下的所有人 + List parentAndChildOrgIdList = CollStreamUtil.toList(sysOrgService.getParentAndChildListById(sysOrgService + .getCachedAllOrgList(), sysRoleSelectorUserParam.getOrgId(), true), SysOrg::getId); + if (ObjectUtil.isNotEmpty(parentAndChildOrgIdList)) { + lambdaQueryWrapper.in(SysUser::getOrgId, parentAndChildOrgIdList); + } else { + return CollectionUtil.newArrayList(); + } + } + if (ObjectUtil.isNotEmpty(sysRoleSelectorUserParam.getSearchKey())) { + lambdaQueryWrapper.like(SysUser::getName, sysRoleSelectorUserParam.getSearchKey()); + } + lambdaQueryWrapper.orderByAsc(SysUser::getSortCode); + return sysUserService.list(lambdaQueryWrapper); } - if(ObjectUtil.isNotEmpty(sysRoleSelectorUserParam.getSearchKey())) { - lambdaQueryWrapper.like(SysUser::getName, sysRoleSelectorUserParam.getSearchKey()); - } - lambdaQueryWrapper.orderByAsc(SysUser::getSortCode); - return sysUserService.list(lambdaQueryWrapper); } /* ====以下为各种递归方法==== */ diff --git a/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/entity/SysUser.java b/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/entity/SysUser.java index dc700afc..fef63be3 100644 --- a/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/entity/SysUser.java +++ b/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/entity/SysUser.java @@ -37,7 +37,7 @@ import java.util.Date; **/ @Getter @Setter -@TableName(value = "SYS_USER", autoResultMap = true) +@TableName(value = "SYS_USER") public class SysUser extends CommonEntity implements TransPojo { /** id */ diff --git a/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/result/SysUserExportResult.java b/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/result/SysUserExportResult.java index 07218bba..62539749 100644 --- a/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/result/SysUserExportResult.java +++ b/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/result/SysUserExportResult.java @@ -14,9 +14,6 @@ package vip.xiaonuo.sys.modular.user.result; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.format.DateTimeFormat; -import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; -import com.alibaba.excel.annotation.write.style.HeadRowHeight; import lombok.Getter; import lombok.Setter; 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 f667673d..af52bf33 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 @@ -364,6 +364,14 @@ public interface SysUserService extends IService { **/ List loginPositionInfo(SysUserIdParam sysUserIdParam); + /** + * 获取缓存的所有用户 + * + * @author xuyuxiang + * @date 2022/7/25 19:42 + **/ + List getCachedAllUserList(); + /* ====用户部分所需要用到的选择器==== */ /** 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 76716e04..d52d2ee6 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 @@ -109,6 +109,8 @@ public class SysUserServiceImpl extends ServiceImpl impl private static final String USER_CACHE_KEY = "user-validCode:"; + public static final String USER_CACHE_ALL_KEY = "sys-user:all"; + @Resource private CommonCacheOperator commonCacheOperator; @@ -556,7 +558,7 @@ public class SysUserServiceImpl extends ServiceImpl impl // 获取菜单id列表 List menuIdList = sysRelationService.getRelationTargetIdListByObjectIdAndCategory(sysUserIdParam.getId(), - SysRelationCategoryEnum.SYS_USER_HAS_RESOURCE.getValue());; + SysRelationCategoryEnum.SYS_USER_HAS_RESOURCE.getValue()); if (ObjectUtil.isNotEmpty(roleIdList)) { menuIdList = sysRelationService.getRelationTargetIdListByObjectIdListAndCategory(roleIdList, @@ -789,9 +791,7 @@ public class SysUserServiceImpl extends ServiceImpl impl @Override public List> loginOrgTree(SysUserIdParam sysUserIdParam) { - LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.orderByAsc(SysOrg::getSortCode); - List sysOrgList = sysOrgService.list(lambdaQueryWrapper); + List sysOrgList = sysOrgService.getCachedAllOrgList(); SysUser sysUser = this.queryEntity(sysUserIdParam.getId()); List> treeNodeList = sysOrgList.stream().map(sysOrg -> { TreeNode treeNode = new TreeNode<>(sysOrg.getId(), sysOrg.getParentId(), sysOrg.getName(), sysOrg.getSortCode()); @@ -963,7 +963,7 @@ public class SysUserServiceImpl extends ServiceImpl impl public List getScopeListByMap(Map> groupMap, String orgId) { List resultList = CollectionUtil.newArrayList(); - List sysOrgList = sysOrgService.list(); + List sysOrgList = sysOrgService.getCachedAllOrgList(); List scopeAllList = sysOrgList.stream().map(SysOrg::getId).collect(Collectors.toList()); List scopeOrgList = CollectionUtil.newArrayList(orgId); List scopeOrgChildList = sysOrgService.getChildListById(sysOrgList, orgId, true) @@ -1054,7 +1054,7 @@ public class SysUserServiceImpl extends ServiceImpl impl public List loginPositionInfo(SysUserIdParam sysUserIdParam) { SysUser sysUser = this.queryEntity(sysUserIdParam.getId()); List sysUserPositionResultList = CollectionUtil.newArrayList(); - List sysOrgList = sysOrgService.list(); + List sysOrgList = sysOrgService.getCachedAllOrgList(); String primaryOrgId = sysUser.getOrgId(); SysOrg primarySysOrg = sysOrgService.getById(sysOrgList, primaryOrgId); if (ObjectUtil.isEmpty(primarySysOrg)) { @@ -1112,13 +1112,28 @@ public class SysUserServiceImpl extends ServiceImpl impl return sysUserPositionResultList; } + @Override + public List getCachedAllUserList() { + // 从缓存中取 + Object cacheValue = commonCacheOperator.get(USER_CACHE_ALL_KEY); + if(ObjectUtil.isNotEmpty(cacheValue)) { + return JSONUtil.toList(JSONUtil.parseArray(cacheValue), SysUser.class); + } + // 只查询部分字段 + List userList = this.list(new LambdaQueryWrapper().select(SysUser::getId, SysUser::getOrgId, + SysUser::getAccount, SysUser::getName, SysUser::getSortCode).orderByAsc(SysUser::getSortCode)); + if(ObjectUtil.isNotEmpty(userList)) { + // 更新到缓存 + commonCacheOperator.put(USER_CACHE_ALL_KEY, userList); + } + return userList; + } + /* ====用户部分所需要用到的选择器==== */ @Override public List> orgTreeSelector() { - LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.orderByAsc(SysOrg::getSortCode); - List sysOrgList = sysOrgService.list(lambdaQueryWrapper); + List sysOrgList = sysOrgService.getCachedAllOrgList(); List> treeNodeList = sysOrgList.stream().map(sysOrg -> new TreeNode<>(sysOrg.getId(), sysOrg.getParentId(), sysOrg.getName(), sysOrg.getSortCode())) .collect(Collectors.toList()); @@ -1180,14 +1195,26 @@ public class SysUserServiceImpl extends ServiceImpl impl LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); // 只查询部分字段 lambdaQueryWrapper.select(SysUser::getId, SysUser::getOrgId, SysUser::getAccount, SysUser::getName, SysUser::getSortCode); - if (ObjectUtil.isNotEmpty(sysUserSelectorUserParam.getOrgId())) { - lambdaQueryWrapper.eq(SysUser::getOrgId, sysUserSelectorUserParam.getOrgId()); + // 如果查询条件为空,则从缓存中查询 + if(ObjectUtil.isAllEmpty(sysUserSelectorUserParam.getOrgId(), sysUserSelectorUserParam.getSearchKey())) { + return this.getCachedAllUserList(); + } else { + if (ObjectUtil.isNotEmpty(sysUserSelectorUserParam.getOrgId())) { + // 如果机构id不为空,则查询该机构所在顶级机构下的所有人 + List parentAndChildOrgIdList = CollStreamUtil.toList(sysOrgService.getParentAndChildListById(sysOrgService + .getCachedAllOrgList(), sysUserSelectorUserParam.getOrgId(), true), SysOrg::getId); + if (ObjectUtil.isNotEmpty(parentAndChildOrgIdList)) { + lambdaQueryWrapper.in(SysUser::getOrgId, parentAndChildOrgIdList); + } else { + return CollectionUtil.newArrayList(); + } + } + if (ObjectUtil.isNotEmpty(sysUserSelectorUserParam.getSearchKey())) { + lambdaQueryWrapper.like(SysUser::getName, sysUserSelectorUserParam.getSearchKey()); + } + lambdaQueryWrapper.orderByAsc(SysUser::getSortCode); + return this.list(lambdaQueryWrapper); } - if (ObjectUtil.isNotEmpty(sysUserSelectorUserParam.getSearchKey())) { - lambdaQueryWrapper.like(SysUser::getName, sysUserSelectorUserParam.getSearchKey()); - } - lambdaQueryWrapper.orderByAsc(SysUser::getSortCode); - return this.list(lambdaQueryWrapper); } @Override