diff --git a/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/controller/SysUserController.java b/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/controller/SysUserController.java index f508e28..6b100f4 100644 --- a/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/controller/SysUserController.java +++ b/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/controller/SysUserController.java @@ -523,5 +523,16 @@ public class SysUserController { public Result> getRoleMembers(SysRoleMembersFormDTO formDTO) { return sysUserService.getRoleMembers(formDTO); } + /** + * 获取用户部门多层结构,用户前端显示,请求需携带token - 工作日志使用 + * + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @author songyunpeng + * @date 2020/1/27 14:31 + */ + @PostMapping("deptOptions/getUserDeptOptionByUserId") + public Result getUserDeptOptionByUserId() { + return sysDeptService.getUserDeptOptionByUserId(String.valueOf(SecurityUser.getUserId())); + } } diff --git a/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/service/SysDeptService.java b/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/service/SysDeptService.java index cc159bb..d975a5a 100644 --- a/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/service/SysDeptService.java +++ b/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/service/SysDeptService.java @@ -290,4 +290,12 @@ public interface SysDeptService extends BaseService { * @date 2021/1/11 18:01 */ List getEpmetAreaCode(UserSysDeptAreaCodeFormDTO dto); + /** + * @Description 获取用户部门多层结构,用户前端显示,请求需携带token - 工作日志使用 + * @Author songyunpeng + * @Date 2021/1/27 + * @Param [userId] + * @return com.elink.esua.epdc.commons.tools.utils.Result + **/ + Result getUserDeptOptionByUserId(String userId); } diff --git a/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/service/impl/SysDeptServiceImpl.java b/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/service/impl/SysDeptServiceImpl.java index 49e362a..75bd5a2 100644 --- a/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/service/impl/SysDeptServiceImpl.java +++ b/epdc-cloud-admin/src/main/java/com/elink/esua/epdc/service/impl/SysDeptServiceImpl.java @@ -598,7 +598,63 @@ public class SysDeptServiceImpl extends BaseServiceImpl dataScopeDeptList = userDetail.getDeptIdList(); + if (CollUtil.isEmpty(dataScopeDeptList)) { + return; + } + // 通过用户部门权限 获取第一级部门节点 + List headDepts = baseDao.selectListHeadDeptNode(dataScopeDeptList); + + + // 某个部门id 声明变量,方便操作数据 + Long deptId; + + // 存放上级节点的主键,查询下级节点用 + List parentDeptIdList = Lists.newArrayList(); + // 所有父级节点 此处为第一次获取,为顶级节点,相当于市区 + JSONArray parentNodeArray = new JSONArray(); + JSONObject node; + for (int i = 0; i < headDepts.size(); i++) { + // 父节点主键 + deptId = headDepts.get(i).getId(); + parentDeptIdList.add(deptId); + node = new JSONObject(); + node.put("label", headDepts.get(i).getName()); + node.put("typeKey", headDepts.get(i).getTypeKey()); + node.put("value", String.valueOf(deptId)); + parentNodeArray.add(node); + } + // 用于存放 每次组装好的 某一级节点。页面只需展示三级,所以没有存放顶级节点(市区) + List cache = Lists.newArrayList(); + //判断用户所属部门是否属于一级部门 属于则添加头 + SysDeptEntity sysDeptEntity = baseDao.selectById(SecurityUser.getDeptId()); + if(0L == sysDeptEntity.getPid()){ + cache.add(parentNodeArray); + } + Map object; + while (CollUtil.isNotEmpty(dataScopeDeptList) && CollUtil.isNotEmpty(parentDeptIdList)) { + // 通过上级节点组装所有下级节点 + 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.getWorkLogUserDeptOptionKey(userId), option); + } /** * 组装部门层级结构 * @@ -877,6 +933,7 @@ public class SysDeptServiceImpl extends BaseServiceImpl getUserDeptOptionByUserId(String userId) { + Long realUserId = Long.parseLong(userId); + String deptOptionKey = RedisKeys.getWorkLogUserDeptOptionKey(realUserId); + Object obj = redisUtils.get(deptOptionKey); + if (null == obj) { + this.packageWorkLogsUserDeptOption(realUserId); + obj = redisUtils.get(deptOptionKey); + } + return new Result().ok((DeptOption) obj); + } } diff --git a/epdc-cloud-admin/src/main/resources/mapper/SysDeptDao.xml b/epdc-cloud-admin/src/main/resources/mapper/SysDeptDao.xml index 31e2165..0779b5c 100644 --- a/epdc-cloud-admin/src/main/resources/mapper/SysDeptDao.xml +++ b/epdc-cloud-admin/src/main/resources/mapper/SysDeptDao.xml @@ -136,13 +136,13 @@ @@ -150,8 +150,8 @@ SELECT tem2.* FROM - ( SELECT * FROM sys_dept d1 WHERE d1.id IN #{item} ) tem1, - ( SELECT * FROM sys_dept d2 WHERE d2.pid IN #{deptId}) tem2 + ( SELECT * FROM sys_dept d1 WHERE DEL_FLAG = '0' and d1.id IN #{item} ) tem1, + ( SELECT * FROM sys_dept d2 WHERE DEL_FLAG = '0' and d2.pid IN #{deptId} ) tem2 WHERE ( tem1.PIDS LIKE CONCAT( '%', tem2.id, '%' ) OR tem1.PID = tem2.ID ) OR ( tem2.ID = tem1.ID AND NOT EXISTS ( SELECT 1 FROM sys_dept d WHERE d.PID = tem2.ID ) ) @@ -256,7 +256,8 @@ SELECT sd.id, sd.pid, - sd.`name` + sd.`name`, + sd.type_key FROM sys_dept sd where sd.del_flag='0'