diff --git a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/controller/SysUserController.java b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/controller/SysUserController.java index 8d3cfb4f1..5bc562fc3 100644 --- a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/controller/SysUserController.java +++ b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/controller/SysUserController.java @@ -333,6 +333,20 @@ public class SysUserController { DeptOption deptOption = sysDeptService.getUserDeptOption(); return new Result().ok(deptOption); } + /** + * 获取用户部门多层结构,用户前端显示,请求需携带token + *

调接口,从redis获取{@link SysUserController#packageUserDeptOption(Long)}接口生成的数据。

+ *

此接口展示三级机构层级(街道-社区-网格),不包括区级

+ * + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @author work@yujt.net.cn + * @date 2019/11/27 14:31 + */ + @GetMapping("deptOptions/getDeptAuthByUser") + public Result getDeptAuthByUser() { + DeptOption deptOption = sysDeptService.getDeptAuthByUser(); + return new Result().ok(deptOption); + } /** * 获取用户部门多层结构(完整层级结构,包括顶级部门),用户前端显示,请求需携带token diff --git a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/dao/SysDeptDao.java b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/dao/SysDeptDao.java index 8193bca28..2c3e9516a 100644 --- a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/dao/SysDeptDao.java +++ b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/dao/SysDeptDao.java @@ -130,6 +130,8 @@ public interface SysDeptDao extends BaseDao { */ List selectChildrenDeptNode(@Param("dataScopeDeptList") List dataScopeDeptList, @Param("parentDeptIdList") List parentDeptIdList); + List selectChildrenDeptAuth(@Param("dataScopeDeptList") List dataScopeDeptList); + /** * @param formDTO * @return java.util.List diff --git a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/SysDeptService.java b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/SysDeptService.java index dd0b5b198..38bedcbe8 100644 --- a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/SysDeptService.java +++ b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/SysDeptService.java @@ -163,6 +163,8 @@ public interface SysDeptService extends BaseService { */ DeptOption getUserDeptOption(); + DeptOption getDeptAuthByUser(); + /** * @param formDTO * @return java.util.List 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 a7e54abf8..f83e6657a 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 @@ -349,8 +349,29 @@ public class SysDeptServiceImpl extends BaseServiceImpl dataScopeDeptList = userDetail.getDeptIdList(); + if (CollUtil.isEmpty(dataScopeDeptList)) { + return; + } + // 某个部门id 声明变量,方便操作数据 + Long deptId; + + // 所有父级节点 此处为第一次获取,为顶级节点,相当于市区 + JSONArray parentNodeArray = new JSONArray(); + // 用于存放 每次组装好的 某一级节点。页面只需展示三级,所以没有存放顶级节点(市区) + List cache = Lists.newArrayList(); + Map object; + while (CollUtil.isNotEmpty(dataScopeDeptList)) { + // 通过上级节点组装所有下级节点 + object = this.packageChildrenNodeAuth(parentNodeArray, dataScopeDeptList); + + dataScopeDeptList = (List) object.get("scope"); + + parentNodeArray = (JSONArray) object.get("node"); + cache.add(parentNodeArray); + } + + DeptOption option = new DeptOption(); + option.setOptions(cache.get(0)); + redisUtils.set(RedisKeys.getAdminUserDeptAuthOptionKey(userId), option); + } /** * 组装下级结构节点 @@ -642,7 +704,79 @@ public class SysDeptServiceImpl extends BaseServiceImpl + * @author work@yujt.net.cn + * @date 2019/11/29 10:27 + */ + private Map packageChildrenNodeAuth(JSONArray allParentNode, List dataScopeDeptList) { + + List childDepts = baseDao.selectChildrenDeptAuth(dataScopeDeptList); + + List parentDeptIdList = Lists.newArrayList(); + + // 用于存储所有子节点 + JSONArray allChildrenNode = 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); + + allChildrenNode.add(nodeChild); + parentDeptIdList.add(deptId); + } + } + if (childrenNodeList.size() > 0) { + nodeParent.put("children", childrenNodeList); + } + } + if(allParentNode.size() == 0){ + for (int index = 0; index < childDepts.size(); index++) { + JSONObject node = new JSONObject(); + node.put("label", childDepts.get(index).getName()); + node.put("value", String.valueOf(childDepts.get(index).getId())); + allParentNode.add(node); + parentDeptIdList.add(childDepts.get(index).getId()); + allChildrenNode.add(node); + } + } + List newDataScopeList = Lists.newArrayList(); + for (int i = 0; i < dataScopeDeptList.size(); i++) { + deptId = dataScopeDeptList.get(i); + if (!parentDeptIdList.contains(deptId)) { + newDataScopeList.add(deptId); + } + } + dataScopeDeptList = newDataScopeList; + Map result = Maps.newHashMap(); + result.put("node", allChildrenNode); + result.put("scope", dataScopeDeptList); + return result; + } @Override public void packgeAllDeptOption() { List deptList = baseDao.selectListDeptTree(); diff --git a/esua-epdc/epdc-admin/epdc-admin-server/src/main/resources/mapper/SysDeptDao.xml b/esua-epdc/epdc-admin/epdc-admin-server/src/main/resources/mapper/SysDeptDao.xml index d316d0c1f..6b75d0f15 100644 --- a/esua-epdc/epdc-admin/epdc-admin-server/src/main/resources/mapper/SysDeptDao.xml +++ b/esua-epdc/epdc-admin/epdc-admin-server/src/main/resources/mapper/SysDeptDao.xml @@ -156,6 +156,17 @@ GROUP BY tem2.ID ORDER BY tem2.create_date ASC +