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 index 097e3d7..e3f7d0b 100644 --- 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 @@ -41,4 +41,17 @@ public class OptimizeRedisKeys { .concat(keyStr); } + /** + * 用于存放上级部门的id + * + * @param deptId 部门 + * @param keyStr 关键字 + * @return java.lang.String + * @author work@yujt.net.cn + * @date 2020/7/6 10:40 + */ + public static String getParentDeptIdsKey(Long deptId, String keyStr) { + return "epdc:resident:dept:parent:".concat(String.valueOf(deptId)).concat(keyStr); + } + } diff --git a/epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/java/com/elink/esua/epdc/optimize/modules/deptlevel/controller/OptDeptLevelController.java b/epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/java/com/elink/esua/epdc/optimize/modules/deptlevel/controller/OptDeptLevelController.java index 952670b..0678d1e 100644 --- a/epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/java/com/elink/esua/epdc/optimize/modules/deptlevel/controller/OptDeptLevelController.java +++ b/epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/java/com/elink/esua/epdc/optimize/modules/deptlevel/controller/OptDeptLevelController.java @@ -38,6 +38,21 @@ public class OptDeptLevelController { return new Result().ok(childDeptLevelList); } + /** + * 根据部门id,获取某部门指定类型的上级机构 + * + * @param typeKeys 上级机构类型 + * @param deptId 某部门id + * @return com.elink.esua.epdc.commons.tools.utils.Result> + * @author work@yujt.net.cn + * @date 2020/7/7 09:22 + */ + @GetMapping("deptlevel/listParentId/{deptId}") + public Result> listChildDeptLevelById(@PathVariable("deptId") Long deptId, @RequestBody String[] typeKeys) { + List parentDeptIds = optSysDeptService.listParentDeptIds(typeKeys, deptId); + return new Result().ok(parentDeptIds); + } + /** * 根据部门类别,过滤部门权限 * 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 37585c8..081ecbd 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 @@ -59,4 +59,15 @@ public interface OptSysDeptService extends BaseService { * @date 2020/5/29 15:16 */ List getUserDeptScope(Long userId, String... typeKeys); + + /** + * 根据部门id,获取某部门指定类型的上级机构 + * + * @param typeKeys 上级机构类型 + * @param deptId 某部门id + * @return java.util.List + * @author work@yujt.net.cn + * @date 2020/7/7 09:21 + */ + List listParentDeptIds(String[] typeKeys, Long deptId); } 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 d70c8f5..9fe60b6 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 @@ -26,6 +26,7 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -147,6 +148,42 @@ public class OptSysDeptServiceImpl extends BaseServiceImpl listParentDeptIds(String[] typeKeys, Long deptId) { + List result = Lists.newArrayList(); + if (ArrayUtil.isNotEmpty(typeKeys)) { + String deptIdsKey = OptimizeRedisKeys.getParentDeptIdsKey(deptId, StringUtils.join(escapeDeptTypeKey(typeKeys), StrConstant.HYPHEN)); + Object obj = redisUtils.get(deptIdsKey); + if (null != obj) { + return (List) obj; + } + // 查询部门信息 + OptSysDeptEntity optSysDeptEntity = baseDao.selectById(deptId); + if (!optSysDeptEntity.getPid().equals(NumConstant.ONE_L)) { + // 获取所有上级部门id + String[] pids = optSysDeptEntity.getPids().split(StrConstant.COMMA); + List sysDeptEntityList = baseDao.selectBatchIds(Arrays.asList(pids)); + if (CollUtil.isNotEmpty(sysDeptEntityList)) { + // 按顺序循环查询条件中所有部门类别,确保结果按顺序返回 + for (int i = 0; i < typeKeys.length; i++) { + String typeKey = typeKeys[i]; + // 声明上级机构id为 -1,如果未匹配到,以-1站位 + Long parentId = NumConstant.ZERO_L - NumConstant.ONE_L; + for (OptSysDeptEntity sysDeptEntity : sysDeptEntityList) { + if (typeKey.equals(sysDeptEntity.getTypeKey())) { + parentId = sysDeptEntity.getId(); + // 只取关系最近的上级机构 + break; + } + } + result.add(parentId); + } + } + redisUtils.set(deptIdsKey, result, RedisUtils.MINUTE_TEN_EXPIRE); + } + } + return result; + } /** * 根据部门数据权限组装部门层级结构