From 9d2700d27f7861d3d29222a5bb39f437779a8d08 Mon Sep 17 00:00:00 2001 From: yujt Date: Tue, 26 May 2020 13:40:03 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=96=B0=E6=A2=B3=E7=90=86=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E9=83=A8=E9=97=A8=E5=B1=82=E7=BA=A7=E7=9A=84=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../epdc/controller/SysUserController.java | 46 +++- .../src/main/resources/application-dev.yml | 4 +- epdc-cloud-client-yushan | 2 +- .../optimize/constant/OptimizeConstant.java | 15 ++ .../optimize/constant/OptimizeRedisKeys.java | 28 +++ .../modules/deptlevel/dao/OptSysDeptDao.java | 34 ++- .../deptlevel/service/OptSysDeptService.java | 14 ++ .../service/impl/OptSysDeptServiceImpl.java | 220 ++++++++++++++++++ .../mapper/deptlevel/OptSysDeptDao.xml | 39 ++++ 9 files changed, 391 insertions(+), 11 deletions(-) create mode 100644 epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/java/com/elink/esua/epdc/optimize/constant/OptimizeConstant.java create mode 100644 epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/java/com/elink/esua/epdc/optimize/constant/OptimizeRedisKeys.java diff --git a/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/controller/SysUserController.java b/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/controller/SysUserController.java index fa9e086..e68dd09 100644 --- a/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/controller/SysUserController.java +++ b/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/controller/SysUserController.java @@ -10,6 +10,7 @@ package com.elink.esua.epdc.controller; import com.elink.esua.epdc.commons.tools.annotation.LogOperation; import com.elink.esua.epdc.commons.tools.constant.Constant; +import com.elink.esua.epdc.commons.tools.constant.OrganizationTypeConstant; import com.elink.esua.epdc.commons.tools.exception.ErrorCode; import com.elink.esua.epdc.commons.tools.page.PageData; import com.elink.esua.epdc.commons.tools.security.bo.ResourceBO; @@ -27,6 +28,7 @@ import com.elink.esua.epdc.commons.tools.validator.group.UpdateGroup; import com.elink.esua.epdc.dto.*; import com.elink.esua.epdc.dto.epdc.GridLeaderRegisterDTO; import com.elink.esua.epdc.excel.SysUserExcel; +import com.elink.esua.epdc.optimize.modules.deptlevel.service.OptSysDeptService; import com.elink.esua.epdc.service.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -60,6 +62,8 @@ public class SysUserController { private SysResourceService sysResourceService; @Autowired private SysDeptService sysDeptService; + @Autowired + private OptSysDeptService optSysDeptService; @GetMapping("page") @ApiOperation("分页") @@ -316,7 +320,7 @@ public class SysUserController { */ @GetMapping("packageOption/{userId}") public Result packageUserDeptOption(@PathVariable("userId") Long userId) { - sysDeptService.packageUserDeptOption(userId); +// sysDeptService.packageUserDeptOption(userId); return new Result(); } @@ -331,7 +335,12 @@ public class SysUserController { */ @GetMapping("deptOptions/getByLoginUser") public Result getUserDeptOption() { - DeptOption deptOption = sysDeptService.getUserDeptOption(); + UserDetail user = SecurityUser.getUser(); + DeptOption deptOption = optSysDeptService.getDeptOption(user.getId(), user.getDeptIdList(), + OrganizationTypeConstant.ORG_TYPE_STREET_PARTY, + OrganizationTypeConstant.ORG_TYPE_COMMUNITY_PARTY, + OrganizationTypeConstant.ORG_TYPE_GRID_PARTY); +// DeptOption deptOption = sysDeptService.getUserDeptOption(); return new Result().ok(deptOption); } @@ -346,7 +355,12 @@ public class SysUserController { */ @GetMapping("deptOptions/getDeptAuthByUser") public Result getDeptAuthByUser() { - DeptOption deptOption = sysDeptService.getDeptAuthByUser(); + UserDetail user = SecurityUser.getUser(); + DeptOption deptOption = optSysDeptService.getDeptOption(user.getId(), user.getDeptIdList(), + OrganizationTypeConstant.ORG_TYPE_STREET_PARTY, + OrganizationTypeConstant.ORG_TYPE_COMMUNITY_PARTY, + OrganizationTypeConstant.ORG_TYPE_GRID_PARTY); +// DeptOption deptOption = sysDeptService.getDeptAuthByUser(); return new Result().ok(deptOption); } @@ -361,7 +375,13 @@ public class SysUserController { */ @GetMapping("deptOptions/getAllByLoginUser") public Result getAllDeptOptionByLoginUser() { - DeptOption option = sysDeptService.getAllDeptOptionByLoginUser(); +// DeptOption option = sysDeptService.getAllDeptOptionByLoginUser(); + UserDetail user = SecurityUser.getUser(); + DeptOption option = optSysDeptService.getDeptOption(user.getId(), user.getDeptIdList(), + OrganizationTypeConstant.ORG_TYPE_DISTRICT_PARTY, + OrganizationTypeConstant.ORG_TYPE_STREET_PARTY, + OrganizationTypeConstant.ORG_TYPE_COMMUNITY_PARTY, + OrganizationTypeConstant.ORG_TYPE_GRID_PARTY); return new Result().ok(option); } @@ -376,7 +396,12 @@ public class SysUserController { */ @GetMapping("deptOptions/getBusinessDeptByUser") public Result getBusinessDeptByUser() { - DeptOption deptOption = sysDeptService.getBusinessDeptByUser(); + UserDetail user = SecurityUser.getUser(); + DeptOption deptOption = optSysDeptService.getDeptOption(user.getId(), user.getDeptIdList(), + OrganizationTypeConstant.ORG_TYPE_STREET_PARTY, + OrganizationTypeConstant.ORG_TYPE_COMMUNITY_PARTY, + OrganizationTypeConstant.ORG_TYPE_GRID_PARTY); +// DeptOption deptOption = sysDeptService.getUserDeptOption(); return new Result().ok(deptOption); } @@ -392,7 +417,11 @@ public class SysUserController { */ @GetMapping("deptOptions/getMiddleByLoginUser") public Result getMiddleByLoginUser() { - DeptOption option = sysDeptService.getMiddleByLoginUser(); + UserDetail user = SecurityUser.getUser(); + DeptOption option = optSysDeptService.getDeptOption(user.getId(), user.getDeptIdList(), + OrganizationTypeConstant.ORG_TYPE_STREET_PARTY, + OrganizationTypeConstant.ORG_TYPE_COMMUNITY_PARTY); +// DeptOption option = sysDeptService.getMiddleByLoginUser(); return new Result().ok(option); } @@ -409,7 +438,10 @@ public class SysUserController { */ @GetMapping("deptOptions/getStreetByLoginUser") public Result getStreetByLoginUser() { - DeptOption option = sysDeptService.getStreetByLoginUser(); + UserDetail user = SecurityUser.getUser(); + DeptOption option = optSysDeptService.getDeptOption(user.getId(), user.getDeptIdList(), + OrganizationTypeConstant.ORG_TYPE_STREET_PARTY); +// DeptOption option = sysDeptService.getStreetByLoginUser(); return new Result().ok(option); } diff --git a/epdc-cloud-admin/src/main/resources/application-dev.yml b/epdc-cloud-admin/src/main/resources/application-dev.yml index 225439f..b78cba8 100644 --- a/epdc-cloud-admin/src/main/resources/application-dev.yml +++ b/epdc-cloud-admin/src/main/resources/application-dev.yml @@ -8,8 +8,8 @@ spring: datasource: druid: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://47.104.224.45:3308/esua_epdc_admin?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai - username: epdc + url: jdbc:mysql://47.104.224.45:3308/yushan_esua_epdc_admin?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai + username: epdcyushan password: elink833066 #Oracle # driver-class-name: oracle.jdbc.OracleDriver diff --git a/epdc-cloud-client-yushan b/epdc-cloud-client-yushan index 1051010..209b0c0 160000 --- a/epdc-cloud-client-yushan +++ b/epdc-cloud-client-yushan @@ -1 +1 @@ -Subproject commit 10510102d70421c13a8f70bd667f881fd26c476b +Subproject commit 209b0c062cc410b30b9d3cd5f2b570b3ba924000 diff --git a/epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/java/com/elink/esua/epdc/optimize/constant/OptimizeConstant.java b/epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/java/com/elink/esua/epdc/optimize/constant/OptimizeConstant.java new file mode 100644 index 0000000..cbe7043 --- /dev/null +++ b/epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/java/com/elink/esua/epdc/optimize/constant/OptimizeConstant.java @@ -0,0 +1,15 @@ +package com.elink.esua.epdc.optimize.constant; + +/** + * 常量 + * + * @author work@yujt.net.cn + * @date 2020/5/26 10:39 + */ +public class OptimizeConstant { + + /** + * 组装全部机构层级时,rediskey标识 + */ + public final static String COMPLETE_DEPT_LEVEL_KEY = "COMPLETE_DEPT_LEVEL_KEY"; +} diff --git a/epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/java/com/elink/esua/epdc/optimize/constant/OptimizeRedisKeys.java b/epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/java/com/elink/esua/epdc/optimize/constant/OptimizeRedisKeys.java new file mode 100644 index 0000000..1024d9c --- /dev/null +++ b/epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/java/com/elink/esua/epdc/optimize/constant/OptimizeRedisKeys.java @@ -0,0 +1,28 @@ +package com.elink.esua.epdc.optimize.constant; + +import com.elink.esua.epdc.commons.tools.constant.StrConstant; + +/** + * 优化功能所用到的redis key + * + * @author work@yujt.net.cn + * @date 2020/5/25 15:04 + */ +public class OptimizeRedisKeys { + + private static final String PREFIX = "epdc:optimize:"; + + /** + * 用于存放用户部门层级关系 + * + * @param userId 用户id + * @param keyStr 关键字 + * @return java.lang.String + * @author work@yujt.net.cn + * @date 2020/5/25 15:05 + */ + public static String getUserDeptLevelOptionKey(Long userId, String keyStr) { + return PREFIX.concat("deptlevel:").concat(String.valueOf(userId)).concat(StrConstant.COLON).concat(keyStr); + } + +} diff --git a/epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/java/com/elink/esua/epdc/optimize/modules/deptlevel/dao/OptSysDeptDao.java b/epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/java/com/elink/esua/epdc/optimize/modules/deptlevel/dao/OptSysDeptDao.java index 3915c75..dedfe4e 100644 --- a/epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/java/com/elink/esua/epdc/optimize/modules/deptlevel/dao/OptSysDeptDao.java +++ b/epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/java/com/elink/esua/epdc/optimize/modules/deptlevel/dao/OptSysDeptDao.java @@ -26,7 +26,7 @@ public interface OptSysDeptDao extends BaseDao { * @author work@yujt.net.cn * @date 2020/5/22 09:33 */ - List selectListChildDept(@Param("typeKey") String typeKey,@Param("deptId") Long deptId); + List selectListChildDept(@Param("typeKey") String typeKey, @Param("deptId") Long deptId); /** * 根据机构id和机构父id,查询机构及父机构名称 @@ -38,4 +38,36 @@ public interface OptSysDeptDao extends BaseDao { * @date 2020/5/15 14:10 */ List selectListDeptAndParents(@Param("deptId") Long deptId, @Param("parentIds") String[] parentIds); + + /** + * 从数据权限筛选指定类别的部门id + * + * @param dataScopeDeptIdList 数据权限 + * @param typeKeys 部门类别关键字 + * @return java.util.List + * @author work@yujt.net.cn + * @date 2020/5/25 15:28 + */ + List selectListDeptIdByTypeKeyAndScope(@Param("dataScopeDeptIdList") List dataScopeDeptIdList, @Param("typeKeys") String[] typeKeys); + + /** + * 通过数据权限查询顶级部门 + * + * @param dataScopeDeptList + * @return java.util.List + * @author work@yujt.net.cn + * @date 2020/5/26 09:26 + */ + List selectListHeadDeptNode(@Param("dataScopeDeptList") List dataScopeDeptList); + + /** + * 通过数据权限及上级部门,查询下级部门 + * + * @param dataScopeDeptList + * @param parentDeptIdList + * @return java.util.List + * @author work@yujt.net.cn + * @date 2020/5/26 09:26 + */ + List selectChildrenDeptNode(@Param("dataScopeDeptList") List dataScopeDeptList, @Param("parentDeptIdList") List parentDeptIdList); } diff --git a/epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/java/com/elink/esua/epdc/optimize/modules/deptlevel/service/OptSysDeptService.java b/epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/java/com/elink/esua/epdc/optimize/modules/deptlevel/service/OptSysDeptService.java index 4508243..953eda9 100644 --- a/epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/java/com/elink/esua/epdc/optimize/modules/deptlevel/service/OptSysDeptService.java +++ b/epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/java/com/elink/esua/epdc/optimize/modules/deptlevel/service/OptSysDeptService.java @@ -2,6 +2,7 @@ package com.elink.esua.epdc.optimize.modules.deptlevel.service; import com.elink.esua.epdc.commons.mybatis.service.BaseService; import com.elink.esua.epdc.dto.DeptLevelAndLeaderDTO; +import com.elink.esua.epdc.dto.DeptOption; import com.elink.esua.epdc.optimize.modules.deptlevel.entity.OptSysDeptEntity; import java.util.List; @@ -24,4 +25,17 @@ public interface OptSysDeptService extends BaseService { * @date 2020/5/22 09:13 */ List listChildDeptLevelById(String typeKey, Long deptId); + + + /** + * 根据数据权限获取用户部门层级关系 + * + * @param userId 用户主键 + * @param dataScopeDeptIdList 用户数据权限部门id集合 + * @param typeKeys 需要组装的部门类别的关键字 + * @return com.elink.esua.epdc.dto.DeptOption + * @author work@yujt.net.cn + * @date 2020/5/25 15:17 + */ + DeptOption getDeptOption(Long userId, List dataScopeDeptIdList, String... typeKeys); } diff --git a/epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/java/com/elink/esua/epdc/optimize/modules/deptlevel/service/impl/OptSysDeptServiceImpl.java b/epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/java/com/elink/esua/epdc/optimize/modules/deptlevel/service/impl/OptSysDeptServiceImpl.java index 11b866f..9aacc70 100644 --- a/epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/java/com/elink/esua/epdc/optimize/modules/deptlevel/service/impl/OptSysDeptServiceImpl.java +++ b/epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/java/com/elink/esua/epdc/optimize/modules/deptlevel/service/impl/OptSysDeptServiceImpl.java @@ -1,17 +1,32 @@ package com.elink.esua.epdc.optimize.modules.deptlevel.service.impl; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ArrayUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.elink.esua.epdc.commons.mybatis.service.impl.BaseServiceImpl; +import com.elink.esua.epdc.commons.tools.constant.NumConstant; +import com.elink.esua.epdc.commons.tools.constant.OrganizationTypeConstant; import com.elink.esua.epdc.commons.tools.constant.StrConstant; +import com.elink.esua.epdc.commons.tools.exception.RenException; +import com.elink.esua.epdc.commons.tools.redis.RedisUtils; import com.elink.esua.epdc.dto.DeptLevelAndLeaderDTO; +import com.elink.esua.epdc.dto.DeptOption; +import com.elink.esua.epdc.optimize.constant.OptimizeConstant; +import com.elink.esua.epdc.optimize.constant.OptimizeRedisKeys; import com.elink.esua.epdc.optimize.modules.deptlevel.dao.OptSysDeptDao; import com.elink.esua.epdc.optimize.modules.deptlevel.entity.OptSysDeptEntity; import com.elink.esua.epdc.optimize.modules.deptlevel.service.OptSysDeptService; import com.elink.esua.epdc.optimize.utils.DeptUtils; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * 部门相关业务实现 @@ -22,6 +37,9 @@ import java.util.List; @Service public class OptSysDeptServiceImpl extends BaseServiceImpl implements OptSysDeptService { + @Autowired + private RedisUtils redisUtils; + @Override public List listChildDeptLevelById(String typeKey, Long deptId) { OptSysDeptEntity parentDept = baseDao.selectById(deptId); @@ -52,6 +70,208 @@ public class OptSysDeptServiceImpl extends BaseServiceImpl dataScopeDeptIdList, String... typeKeys) { + if (null == userId || CollUtil.isEmpty(dataScopeDeptIdList)) { + return new DeptOption(); + } + // 是否需要对数据权限部门进行二次筛选 + boolean filterDataScope = false; + if (ArrayUtil.isEmpty(typeKeys)) { + typeKeys = new String[]{OptimizeConstant.COMPLETE_DEPT_LEVEL_KEY}; + } else { + filterDataScope = true; + } + // 先从redis获取,减少重复查询 + String redisKey = OptimizeRedisKeys.getUserDeptLevelOptionKey(userId, StringUtils.join(escapeDeptTypeKey(typeKeys), StrConstant.HYPHEN)); + Object obj = redisUtils.get(redisKey); + if (null != obj) { + return (DeptOption) obj; + } + // 根据部门类型,二次筛选数据权限部门 + if (filterDataScope) { + dataScopeDeptIdList = baseDao.selectListDeptIdByTypeKeyAndScope(dataScopeDeptIdList, typeKeys); + if (CollUtil.isEmpty(dataScopeDeptIdList)) { + return new DeptOption(); + } + } + // 组装部门层级结构 + DeptOption deptOption = packageDeptOptionByUser(dataScopeDeptIdList); + // 存入redis,超时时长设置为一小时 + redisUtils.set(redisKey, deptOption, RedisUtils.HOUR_ONE_EXPIRE); + + return deptOption; + } + + /** + * 根据部门数据权限组装部门层级结构 + * + * @param dataScopeDeptList + * @return com.elink.esua.epdc.dto.DeptOption + * @author work@yujt.net.cn + * @date 2020/5/26 10:27 + */ + private DeptOption packageDeptOptionByUser(List dataScopeDeptList) { + // 通过用户部门权限 获取第一级部门节点 + List headDepts = baseDao.selectListHeadDeptNode(dataScopeDeptList); + if (CollUtil.isEmpty(headDepts)) { + return new DeptOption(); + } + List holdDataScope = dataScopeDeptList.stream().filter(id -> null != id).collect(Collectors.toList()); + // 某个部门id 声明变量,方便操作数据 + Long deptId; + // 取第几级机构 + int startLevel = NumConstant.ONE_NEG; + // 用于循环计数 + int loopIndex = NumConstant.ZERO; + + // 存放上级节点的主键,查询下级节点用 + List parentDeptIdList = Lists.newArrayList(); + // 所有父级节点 此处为第一次获取,为顶级节点 + JSONArray parentNodeArray = new JSONArray(); + JSONObject node; + for (int i = 0; i < headDepts.size(); i++) { + // 父节点主键 + deptId = headDepts.get(i).getId(); + if (holdDataScope.contains(deptId)) { + startLevel = NumConstant.ZERO; + } + parentDeptIdList.add(deptId); + + node = new JSONObject(); + node.put("label", headDepts.get(i).getName()); + node.put("value", String.valueOf(deptId)); + parentNodeArray.add(node); + } + // 用于存放 每次组装好的 某一级节点。 + List cache = Lists.newArrayList(); + cache.add(parentNodeArray); + Map object; + while (CollUtil.isNotEmpty(dataScopeDeptList) && CollUtil.isNotEmpty(parentDeptIdList)) { + + loopIndex++; + // 通过上级节点组装所有下级节点 + object = this.packageChildrenNodeArray(parentNodeArray, dataScopeDeptList, parentDeptIdList); + parentDeptIdList = (List) object.get("pids"); + if (startLevel == NumConstant.ONE_NEG) { + List collect = parentDeptIdList.stream().filter(id -> holdDataScope.contains(id)).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(collect)) { + startLevel = loopIndex; + } + } + dataScopeDeptList = (List) object.get("scope"); + parentNodeArray = (JSONArray) object.get("node"); + cache.add(parentNodeArray); + } + + DeptOption option = new DeptOption(); + option.setOptions(cache.get(startLevel)); + + return option; + } + + /** + * 将数组内元素进行一对一替换,用于拼接rediskey时缩短字符串长度 + * + * @param typeKeys 一个以上的机构类别关键字 + * @return java.lang.String[] + * @author work@yujt.net.cn + * @date 2020/5/26 10:45 + */ + private String[] escapeDeptTypeKey(String[] typeKeys) { + String[] escapeTypeKeys = new String[typeKeys.length]; + for (int i = 0; i < typeKeys.length; i++) { + String typeKey = typeKeys[i]; + switch (typeKey) { + case OrganizationTypeConstant.ORG_TYPE_DISTRICT_DEPT: + escapeTypeKeys[i] = NumConstant.ZERO_STR; + break; + case OrganizationTypeConstant.ORG_TYPE_DISTRICT_PARTY: + escapeTypeKeys[i] = NumConstant.ONE_STR; + break; + case OrganizationTypeConstant.ORG_TYPE_STREET_DEPT: + escapeTypeKeys[i] = NumConstant.THREE_STR; + break; + case OrganizationTypeConstant.ORG_TYPE_STREET_PARTY: + escapeTypeKeys[i] = NumConstant.FOUR_STR; + break; + case OrganizationTypeConstant.ORG_TYPE_COMMUNITY_PARTY: + escapeTypeKeys[i] = NumConstant.FIVE_STR; + break; + case OrganizationTypeConstant.ORG_TYPE_GRID_PARTY: + escapeTypeKeys[i] = String.valueOf(NumConstant.SIX); + break; + case OptimizeConstant.COMPLETE_DEPT_LEVEL_KEY: + escapeTypeKeys[i] = String.valueOf(NumConstant.ONE_HUNDRED); + break; + default: + throw new RenException("非法的机构类别"); + } + } + return escapeTypeKeys; + } + + /** + * 组装下级结构节点 + * + * @param allParentNode 所有的上级机构节点 + * @param dataScopeDeptList 拥有数据权限的部门 + * @param parentDeptIdList 上级部门id + * @return java.util.Map + * @author work@yujt.net.cn + * @date 2019/11/29 10:27 + */ + private Map packageChildrenNodeArray(JSONArray allParentNode, List dataScopeDeptList, List parentDeptIdList) { + + List childDepts = baseDao.selectChildrenDeptNode(dataScopeDeptList, parentDeptIdList); + + List newParentDeptIdList = Lists.newArrayList(); + + // 用于存储所有子节点 + JSONArray allChildrenNodeList = new JSONArray(); + // 某个父节点下所有的子节点 + JSONArray childrenNodeList; + // 单个 子节点 + JSONObject nodeChild; + // 单个 父节点 + JSONObject nodeParent; + Long deptId; + + for (int i = 0; i < allParentNode.size(); i++) { + + nodeParent = allParentNode.getJSONObject(i); + // 用于存储 一个父节点的所有下级节点 + childrenNodeList = new JSONArray(); + + for (int j = 0; j < childDepts.size(); j++) { + deptId = childDepts.get(j).getId(); + + if (nodeParent.get("value").equals(String.valueOf(childDepts.get(j).getPid()))) { + nodeChild = new JSONObject(); + nodeChild.put("label", childDepts.get(j).getName()); + nodeChild.put("value", String.valueOf(deptId)); + childrenNodeList.add(nodeChild); + + allChildrenNodeList.add(nodeChild); + newParentDeptIdList.add(deptId); + } + } + if (childrenNodeList.size() > 0) { + nodeParent.put("children", childrenNodeList); + } + } + + List newDataScopeList = dataScopeDeptList.stream() + .filter(did -> !newParentDeptIdList.contains(did)) + .collect(Collectors.toList()); + + Map result = Maps.newHashMap(); + result.put("node", allChildrenNodeList); + result.put("scope", newDataScopeList); + result.put("pids", newParentDeptIdList); + return result; + } + /** * 组装所有子部门(父部门直属)的层级关系 * diff --git a/epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/resources/mapper/deptlevel/OptSysDeptDao.xml b/epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/resources/mapper/deptlevel/OptSysDeptDao.xml index 03e8a4b..c115cc5 100644 --- a/epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/resources/mapper/deptlevel/OptSysDeptDao.xml +++ b/epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/resources/mapper/deptlevel/OptSysDeptDao.xml @@ -22,4 +22,43 @@ ORDER BY t.update_date ASC; + + + + + + + \ No newline at end of file