diff --git a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/impl/SysDeptServiceImpl.java b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/impl/SysDeptServiceImpl.java index e6db05968..3240a44a8 100644 --- a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/impl/SysDeptServiceImpl.java +++ b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/impl/SysDeptServiceImpl.java @@ -35,6 +35,7 @@ import com.elink.esua.epdc.feign.GroupFeignClient; import com.elink.esua.epdc.service.SysDeptService; import com.elink.esua.epdc.service.SysUserService; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -255,14 +256,14 @@ public class SysDeptServiceImpl extends BaseServiceImpl dataScopeDeptList = userDetail.getDeptIdList(); @@ -341,16 +341,13 @@ public class SysDeptServiceImpl extends BaseServiceImpl parentDeptIdList = Lists.newArrayList(); - // 一级节点 相当于市区,此处虽然组装,但并没有应用第一级节点 - JSONArray NodeListLevel_1 = new JSONArray(); + // 所有父级节点 此处为第一次获取,为顶级节点,相当于市区 + JSONArray parentNodeArray = new JSONArray(); JSONObject node; for (int i = 0; i < headDepts.size(); i++) { // 父节点主键 @@ -358,102 +355,93 @@ public class SysDeptServiceImpl extends BaseServiceImpl cache = Lists.newArrayList(); + Map object; + while (CollUtil.isNotEmpty(dataScopeDeptList)) { + // 通过上级节点组装所有下级节点 + object = this.packageChildrenNodeArray(parentNodeArray, dataScopeDeptList, parentDeptIdList); + + dataScopeDeptList = (List) object.get("scope"); + parentDeptIdList = (List) object.get("pids"); + + parentNodeArray = (JSONArray) object.get("node"); + cache.add(parentNodeArray); } - // 查询所有一级节点的下级部门,用于组装 二级节点 + DeptOption option = new DeptOption(); + option.setOptions(cache.get(0)); + + redisUtils.set(RedisKeys.getAdminUserDeptOptionKey(userId), option); + } + + /** + * 组装下级结构节点 + * + * @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); + parentDeptIdList = Lists.newArrayList(); - // 所有二级节点 相当于街道 - JSONArray NodeListLevel_2 = new JSONArray(); - // 某个一级节点下所有的二级节点 + // 用于存储所有子节点 + JSONArray allChildrenNode = new JSONArray(); + // 某个父节点下所有的子节点 JSONArray childrenNodeList; - // 单个 二级节点 + // 单个 子节点 JSONObject nodeChild; - // 单个 一级节点 - JSONObject nodeParent; - - for (int i = 0; i < NodeListLevel_1.size(); i++) { - // 一个父节点 - nodeParent = NodeListLevel_1.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); - - NodeListLevel_2.add(nodeChild); - parentDeptIdList.add(deptId); - } - } - } + // 单个 父节点 + JSONObject nodeParent; + Long deptId; - // 查询所有二级节点的下级部门,用于组装 三级节点 - childDepts = baseDao.selectChildrenDeptNode(dataScopeDeptList, parentDeptIdList); - parentDeptIdList = Lists.newArrayList(); + for (int i = 0; i < allParentNode.size(); i++) { - // 所有三级节点 相当于社区 - JSONArray NodeListLevel_3 = new JSONArray(); - for (int i = 0; i < NodeListLevel_2.size(); i++) { - // 一个父节点 - nodeParent = NodeListLevel_2.getJSONObject(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()))) { + 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)); + nodeChild.put("label", childDepts.get(j).getName()); + nodeChild.put("value", String.valueOf(deptId)); childrenNodeList.add(nodeChild); - NodeListLevel_3.add(nodeChild); + allChildrenNode.add(nodeChild); parentDeptIdList.add(deptId); } } - if(childrenNodeList.size() > 0){ - nodeParent.put(children, childrenNodeList); + if (childrenNodeList.size() > 0) { + nodeParent.put("children", childrenNodeList); } } - // 查询所有三级节点的下级部门,用于组装 四级节点 - childDepts = baseDao.selectChildrenDeptNode(dataScopeDeptList, parentDeptIdList); - - - for (int i = 0; i < NodeListLevel_3.size(); i++) { - // 父节点 - nodeParent = NodeListLevel_3.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); - } - } - if(childrenNodeList.size() > 0){ - nodeParent.put(children, childrenNodeList); + List newDataScopeList = Lists.newArrayList(); + for (int i = 0; i < dataScopeDeptList.size(); i++) { + deptId = dataScopeDeptList.get(i); + if (!parentDeptIdList.contains(deptId)) { + newDataScopeList.add(deptId); } } - - DeptOption option = new DeptOption(); - option.setOptions(NodeListLevel_2); - - redisUtils.set(RedisKeys.getAdminUserDeptOptionKey(userId), option); + dataScopeDeptList = newDataScopeList; + Map result = Maps.newHashMap(); + result.put("node", allChildrenNode); + result.put("scope", dataScopeDeptList); + result.put("pids", parentDeptIdList); + return result; } }