diff --git a/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/AppMenuDTO.java b/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/AppMenuDTO.java index 7f0cd1e00..beb5bc8cd 100644 --- a/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/AppMenuDTO.java +++ b/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/AppMenuDTO.java @@ -132,4 +132,8 @@ public class AppMenuDTO extends TreeNode implements Serializable { * 上级菜单名称 */ private String parentName; + /** + * 绑定菜单id + */ + private Long bindingId; } diff --git a/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/DeptGridDTO.java b/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/DeptGridDTO.java new file mode 100644 index 000000000..f443a4b38 --- /dev/null +++ b/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/DeptGridDTO.java @@ -0,0 +1,61 @@ +/** + * Copyright (c) 2018 人人开源 All rights reserved. + *

+ * https://www.renren.io + *

+ * 版权所有,侵权必究! + */ + +package com.elink.esua.epdc.dto; + +import com.elink.esua.epdc.commons.tools.utils.TreeNode; +import com.elink.esua.epdc.commons.tools.validator.group.AddGroup; +import com.elink.esua.epdc.commons.tools.validator.group.DefaultGroup; +import com.elink.esua.epdc.commons.tools.validator.group.UpdateGroup; +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.Min; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Null; +import java.io.Serializable; +import java.util.Date; + +/** + * 部门管理 + * + * @author Mark sunlightcs@gmail.com + * @since 1.0.0 + */ +@Data +public class DeptGridDTO implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 部门id + */ + private Long id; + /** + * 上级部门id + */ + private Long pid; + /** + * 部门名称 + */ + private String name; + + + /** + * 上级部门名称 + */ + private String parentName; + /** + * 部门总名称 + */ + private String deptName; + + +} diff --git a/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/SysAnalysisMenuDTO.java b/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/SysAnalysisMenuDTO.java index c06629052..ca85e22e3 100644 --- a/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/SysAnalysisMenuDTO.java +++ b/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/SysAnalysisMenuDTO.java @@ -137,5 +137,10 @@ public class SysAnalysisMenuDTO implements Serializable { */ private String modelname; + /** + * 绑定菜单id + */ + private Long bindingId; + } \ No newline at end of file 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..2de072642 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,25 @@ 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); + } + @GetMapping("deptOptions/getGridAuthByUser") + public Result> getGridAuthByUser() { + List deptOption = sysDeptService.getGridAuthByUser(); + 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..2bca8be97 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 @@ -10,10 +10,7 @@ package com.elink.esua.epdc.dao; import com.elink.esua.epdc.commons.mybatis.dao.BaseDao; import com.elink.esua.epdc.commons.tools.utils.Result; -import com.elink.esua.epdc.dto.CompleteDeptDTO; -import com.elink.esua.epdc.dto.DeptTreeDTO; -import com.elink.esua.epdc.dto.SysDeptDTO; -import com.elink.esua.epdc.dto.SysSimpleDeptDTO; +import com.elink.esua.epdc.dto.*; import com.elink.esua.epdc.dto.epdc.GridForLeaderRegisterDTO; import com.elink.esua.epdc.dto.epdc.form.UserSysDeptInfoFormDTO; import com.elink.esua.epdc.dto.epdc.result.UserSysDeptInfoResultDTO; @@ -130,6 +127,9 @@ public interface SysDeptDao extends BaseDao { */ List selectChildrenDeptNode(@Param("dataScopeDeptList") List dataScopeDeptList, @Param("parentDeptIdList") List parentDeptIdList); + List selectChildrenDeptAuth(@Param("dataScopeDeptList") List dataScopeDeptList); + List getGridAuthByUser(@Param("deptList") List deptList); + /** * @param formDTO * @return java.util.List diff --git a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/entity/SysAnalysisMenuEntity.java b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/entity/SysAnalysisMenuEntity.java index ac45ced4b..8668e0926 100644 --- a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/entity/SysAnalysisMenuEntity.java +++ b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/entity/SysAnalysisMenuEntity.java @@ -117,4 +117,5 @@ public class SysAnalysisMenuEntity extends BaseEntity { */ private String numFlag; + } \ No newline at end of file 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..1542efda1 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,10 @@ public interface SysDeptService extends BaseService { */ DeptOption getUserDeptOption(); + DeptOption getDeptAuthByUser(); + + List getGridAuthByUser(); + /** * @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..26b5dc272 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,41 @@ public class SysDeptServiceImpl extends BaseServiceImpl getGridAuthByUser() { + // 用户拥有的所有部门权限 + List deptList = SecurityUser.getUser().getDeptIdList(); + List list; + if (deptList != null && deptList.size() > 0) { + list = baseDao.getGridAuthByUser(deptList); + } else { + return null; + } + return list; + } + /** + * 根据userId,从redis取出用户部门层级关系(街道-社区-网格) + * + * @param userId + * @return com.elink.esua.epdc.dto.DeptOption + * @author work@yujt.net.cn + * @date 2020/2/11 11:18 + */ + private DeptOption getDeptAuthByUser(Long userId) { + String deptOptionKey = RedisKeys.getAdminUserDeptAuthOptionKey(userId); + Object obj = redisUtils.get(deptOptionKey); + if (null == obj) { + this.packageDeptAuthByUser(userId); + obj = redisUtils.get(deptOptionKey); + } + return (DeptOption) obj; + } /** * 根据userId,从redis取出用户部门层级关系(街道-社区-网格) * @@ -506,6 +539,10 @@ 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 +716,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/java/com/elink/esua/epdc/service/impl/SysRoleDataScopeServiceImpl.java b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/impl/SysRoleDataScopeServiceImpl.java index 4c7bb2903..09c2d6312 100644 --- a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/impl/SysRoleDataScopeServiceImpl.java +++ b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/impl/SysRoleDataScopeServiceImpl.java @@ -10,10 +10,12 @@ package com.elink.esua.epdc.service.impl; import cn.hutool.core.collection.CollUtil; import com.elink.esua.epdc.commons.mybatis.service.impl.BaseServiceImpl; +import com.elink.esua.epdc.commons.tools.redis.RedisUtils; import com.elink.esua.epdc.dao.SysRoleDataScopeDao; import com.elink.esua.epdc.dto.DataScopeDeptList; import com.elink.esua.epdc.entity.SysRoleDataScopeEntity; import com.elink.esua.epdc.service.SysRoleDataScopeService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -28,6 +30,8 @@ import java.util.List; @Service public class SysRoleDataScopeServiceImpl extends BaseServiceImpl implements SysRoleDataScopeService { + @Autowired + private RedisUtils redisUtils; @Override public List getDeptIdList(Long roleId) { @@ -64,6 +68,7 @@ public class SysRoleDataScopeServiceImpl extends BaseServiceImpl + +