Browse Source

部门权限接口

feature/dangjian
李鹏飞 6 years ago
parent
commit
555d2c8b2e
  1. 14
      esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/controller/SysUserController.java
  2. 2
      esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/dao/SysDeptDao.java
  3. 2
      esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/SysDeptService.java
  4. 134
      esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/impl/SysDeptServiceImpl.java
  5. 11
      esua-epdc/epdc-admin/epdc-admin-server/src/main/resources/mapper/SysDeptDao.xml
  6. 11
      esua-epdc/epdc-commons/epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/redis/RedisKeys.java

14
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
* <p>调接口从redis获取{@link SysUserController#packageUserDeptOption(Long)}接口生成的数据</p>
* <p>此接口展示三级机构层级街道-社区-网格不包括区级</p>
*
* @return com.elink.esua.epdc.commons.tools.utils.Result<com.elink.esua.epdc.dto.DeptOption>
* @author work@yujt.net.cn
* @date 2019/11/27 14:31
*/
@GetMapping("deptOptions/getDeptAuthByUser")
public Result<DeptOption> getDeptAuthByUser() {
DeptOption deptOption = sysDeptService.getDeptAuthByUser();
return new Result().ok(deptOption);
}
/**
* 获取用户部门多层结构完整层级结构包括顶级部门用户前端显示请求需携带token

2
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<SysDeptEntity> {
*/
List<SysDeptEntity> selectChildrenDeptNode(@Param("dataScopeDeptList") List<Long> dataScopeDeptList, @Param("parentDeptIdList") List<Long> parentDeptIdList);
List<SysDeptEntity> selectChildrenDeptAuth(@Param("dataScopeDeptList") List<Long> dataScopeDeptList);
/**
* @param formDTO
* @return java.util.List<com.elink.esua.epdc.dto.epdc.result.UserSysDeptInfoResultDTO>

2
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<SysDeptEntity> {
*/
DeptOption getUserDeptOption();
DeptOption getDeptAuthByUser();
/**
* @param formDTO
* @return java.util.List<com.elink.esua.epdc.dto.epdc.result.UserSysDeptInfoResultDTO>

134
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<SysDeptDao, SysDeptEntit
public DeptOption getUserDeptOption() {
return getUserDeptOption(SecurityUser.getUserId());
}
@Override
public DeptOption getDeptAuthByUser() {
return getDeptAuthByUser(SecurityUser.getUserId());
}
/**
* 根据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 +527,10 @@ public class SysDeptServiceImpl extends BaseServiceImpl<SysDeptDao, SysDeptEntit
packageDeptOptionByUser(userId, false);
}
public void packageDeptAuthByUser(Long userId) {
packageDeptOptionAuthByUser(userId);
}
public void packageAllUserDeptOption(Long userId) {
packageDeptOptionByUser(userId, true);
}
@ -576,6 +601,43 @@ public class SysDeptServiceImpl extends BaseServiceImpl<SysDeptDao, SysDeptEntit
}
}
/**
* 组装部门层级结构
*
* @param userId 用户id
* @return void
* @author work@yujt.net.cn
* @date 2020/1/28 10:49
*/
private void packageDeptOptionAuthByUser(long userId) {
UserDetail userDetail = userDetailRedis.get(userId);
// 用户拥有的所有部门权限
List<Long> dataScopeDeptList = userDetail.getDeptIdList();
if (CollUtil.isEmpty(dataScopeDeptList)) {
return;
}
// 某个部门id 声明变量,方便操作数据
Long deptId;
// 所有父级节点 此处为第一次获取,为顶级节点,相当于市区
JSONArray parentNodeArray = new JSONArray();
// 用于存放 每次组装好的 某一级节点。页面只需展示三级,所以没有存放顶级节点(市区)
List<JSONArray> cache = Lists.newArrayList();
Map<String, Object> object;
while (CollUtil.isNotEmpty(dataScopeDeptList)) {
// 通过上级节点组装所有下级节点
object = this.packageChildrenNodeAuth(parentNodeArray, dataScopeDeptList);
dataScopeDeptList = (List<Long>) 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<SysDeptDao, SysDeptEntit
result.put("pids", parentDeptIdList);
return result;
}
/**
* 组装下级结构节点
*
* @param allParentNode 所有的上级机构节点
* @param dataScopeDeptList 拥有数据权限的部门
* @return java.util.Map<java.lang.String, java.lang.Object>
* @author work@yujt.net.cn
* @date 2019/11/29 10:27
*/
private Map<String, Object> packageChildrenNodeAuth(JSONArray allParentNode, List<Long> dataScopeDeptList) {
List<SysDeptEntity> childDepts = baseDao.selectChildrenDeptAuth(dataScopeDeptList);
List<Long> 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<Long> 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<String, Object> result = Maps.newHashMap();
result.put("node", allChildrenNode);
result.put("scope", dataScopeDeptList);
return result;
}
@Override
public void packgeAllDeptOption() {
List<DeptTreeDTO> deptList = baseDao.selectListDeptTree();

11
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
</select>
<select id="selectChildrenDeptAuth" resultType="com.elink.esua.epdc.entity.SysDeptEntity">
SELECT
tem1.*
FROM
( SELECT * FROM sys_dept d1 WHERE d1.id IN <foreach collection="dataScopeDeptList" item="item" open="(" separator="," close=")">#{item}</foreach> ) tem1
LEFT JOIN ( SELECT * FROM sys_dept d2 WHERE d2.id IN <foreach collection="dataScopeDeptList" item="item" open="(" separator="," close=")">#{item}</foreach> ) tem2
on tem2.id = tem1.pid
WHERE tem2.id is null
GROUP BY tem1.ID
ORDER BY tem1.create_date ASC
</select>
<select id="selectListUserSysDeptInfo" parameterType="com.elink.esua.epdc.dto.epdc.form.UserSysDeptInfoFormDTO"
resultType="com.elink.esua.epdc.dto.epdc.result.UserSysDeptInfoResultDTO">

11
esua-epdc/epdc-commons/epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/redis/RedisKeys.java

@ -151,6 +151,17 @@ public class RedisKeys {
public static String getAdminUserDeptOptionKey(Long userId) {
return rootPrefix.concat("options:dept:user:").concat(String.valueOf(userId));
}
/**
* 管理员有数据权限的部门层级关系
*
* @param userId 用户id
* @return java.lang.String
* @author work@yujt.net.cn
* @date 2019/11/28 09:56
*/
public static String getAdminUserDeptAuthOptionKey(Long userId) {
return rootPrefix.concat("options:dept:userAuth:").concat(String.valueOf(userId));
}
/**
* 管理员完整部门层级关系

Loading…
Cancel
Save