From 77aabfa1ec5d3c2e2e9a05959202a728e9ffa937 Mon Sep 17 00:00:00 2001 From: yujintao Date: Thu, 28 Nov 2019 13:25:38 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=E6=88=B7=E9=83=A8=E9=97=A8=E5=B1=82?= =?UTF-8?q?=E7=BA=A7=E5=85=B3=E7=B3=BB=E7=9B=B8=E5=85=B3=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/elink/esua/epdc/dto/DeptNode.java | 20 +++ .../com/elink/esua/epdc/dto/DeptNodeLast.java | 17 ++ .../com/elink/esua/epdc/dto/DeptOption.java | 70 ++++++++ .../epdc/controller/SysUserController.java | 38 ++++- .../com/elink/esua/epdc/dao/SysDeptDao.java | 21 +++ .../esua/epdc/service/SysDeptService.java | 20 +++ .../esua/epdc/service/SysUserService.java | 10 +- .../epdc/service/impl/SysDeptServiceImpl.java | 159 +++++++++++++++++- .../epdc/service/impl/SysUserServiceImpl.java | 11 +- .../src/main/resources/mapper/AppMenuDao.xml | 4 +- .../src/main/resources/mapper/SysDeptDao.xml | 30 ++++ .../epdc/service/DynamicDataSourceTest.java | 1 - .../elink/esua/epdc/async/UserDeptTask.java | 31 ++++ .../elink/esua/epdc/config/ThreadConfig.java | 42 +++++ .../esua/epdc/feign/UserFeignClient.java | 18 +- .../fallback/UserFeignClientFallback.java | 11 +- .../epdc/service/impl/AuthServiceImpl.java | 10 +- .../epdc/commons/tools/redis/RedisKeys.java | 12 ++ 18 files changed, 495 insertions(+), 30 deletions(-) create mode 100644 esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/DeptNode.java create mode 100644 esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/DeptNodeLast.java create mode 100644 esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/DeptOption.java create mode 100644 esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/async/UserDeptTask.java create mode 100644 esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/config/ThreadConfig.java diff --git a/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/DeptNode.java b/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/DeptNode.java new file mode 100644 index 000000000..03f5a032d --- /dev/null +++ b/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/DeptNode.java @@ -0,0 +1,20 @@ +package com.elink.esua.epdc.dto; + +import lombok.Data; + +import java.util.List; + +/** + * @author work@yujt.net.cn + * @date 1 1 + */ +@Data +public class DeptNode { + + private String value; + + private String label; + + private List children; + +} diff --git a/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/DeptNodeLast.java b/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/DeptNodeLast.java new file mode 100644 index 000000000..2adcb675a --- /dev/null +++ b/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/DeptNodeLast.java @@ -0,0 +1,17 @@ +package com.elink.esua.epdc.dto; + +import lombok.Data; + + +/** + * @author work@yujt.net.cn + * @date 1 1 + */ +@Data +public class DeptNodeLast { + + private String value; + + private String label; + +} diff --git a/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/DeptOption.java b/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/DeptOption.java new file mode 100644 index 000000000..eec16176a --- /dev/null +++ b/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/DeptOption.java @@ -0,0 +1,70 @@ +package com.elink.esua.epdc.dto; + +import com.alibaba.fastjson.JSONObject; +import com.google.common.collect.Lists; +import lombok.Data; + +import java.util.List; + +/** + * 部门节点 + * + * @author work@yujt.net.cn + * @date 2019/11/27 10:03 + */ +@Data +public class DeptOption { + + private List options; + + public static void main(String[] args) { + + + // 第一层 + List nodeList1 = Lists.newArrayList(); + DeptNode node1 = new DeptNode(); + node1.setLabel("第一层 → 1"); + node1.setValue("1::::1"); + nodeList1.add(node1); + + DeptOption option = new DeptOption(); + option.setOptions(nodeList1); + + for (int i = 0; i < nodeList1.size(); i++) { + + // 第二层 + List nodeList2 = Lists.newArrayList(); + + DeptNode node2 = new DeptNode(); + node2.setLabel("第二层 → 1"); + node2.setValue("2::::1"); + nodeList2.add(node2); + + node2 = new DeptNode(); + node2.setLabel("第二层2"); + node2.setValue("2::::2"); + nodeList2.add(node2); + + nodeList1.get(i).setChildren(nodeList2); + + for (int j = 0; j < nodeList2.size(); j++) { + + // 第三层 + List nodeList3 = Lists.newArrayList(); + DeptNodeLast nodeLast = new DeptNodeLast(); + nodeLast.setLabel("第三层 → 1"); + nodeLast.setValue("3::::1"); + nodeList3.add(nodeLast); + + nodeLast = new DeptNodeLast(); + nodeLast.setLabel("第三层 → 2"); + nodeLast.setValue("3::::2"); + nodeList3.add(nodeLast); + + nodeList2.get(j).setChildren(nodeList3); + } + } + + System.out.println(JSONObject.toJSONString(option)); + } +} 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 ea10d98bf..3246bf97e 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 @@ -189,11 +189,10 @@ public class SysUserController { } /** - * * 根据openId获取用户信息 * - * @params [openId] * @return com.elink.esua.epdc.commons.tools.utils.Result + * @params [openId] * @author liuchuang * @since 2019/11/20 13:54 */ @@ -205,11 +204,10 @@ public class SysUserController { } /** - * * 根据用户ID 获取用户角色权限信息 * + * @return com.elink.esua.epdc.commons.tools.utils.Result> * @params [id] - * @return com.elink.esua.epdc.commons.tools.utils.Result> * @author liuchuang * @since 2019/11/19 23:36 */ @@ -221,11 +219,10 @@ public class SysUserController { } /** - * * 根据用户名更新用户微信openId * - * @params [sysUserOpenIdFormDto] * @return com.elink.esua.epdc.commons.tools.utils.Result + * @params [sysUserOpenIdFormDto] * @author liuchuang * @since 2019/11/20 9:52 */ @@ -273,11 +270,10 @@ public class SysUserController { } /** - * * 获取部门下的所有用户ID * + * @return com.elink.esua.epdc.commons.tools.utils.Result> * @params [deptId] - * @return com.elink.esua.epdc.commons.tools.utils.Result> * @author liuchuang * @since 2019/10/29 17:31 */ @@ -287,4 +283,30 @@ public class SysUserController { return new Result>().ok(data); } + /** + * 组装用户部门多层结构 + * + * @param userId + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @author work@yujt.net.cn + * @date 2019/11/27 14:31 + */ + @GetMapping("packageOption/{userId}") + public Result packageUserDeptOption(@PathVariable("userId") Long userId) { + sysDeptService.packageUserDeptOption(userId); + return new Result(); + } + + /** + * 获取用户部门多层结构,用户前端显示,请求需携带token + * + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @author work@yujt.net.cn + * @date 2019/11/27 14:31 + */ + @GetMapping("options/getByLoginUser") + public Result getUserDeptOption() { + return sysDeptService.getUserDeptOption(); + } + } 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 bd7e3c979..2f92fb044 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 @@ -94,4 +94,25 @@ public interface SysDeptDao extends BaseDao { * @date 2019/10/24 15:27 */ List selectListGridForLeader(@Param("gridIdList") List gridIdList); + + /** + * 通过用户部门权限 获取第一级部门节点 + * + * @param dataScopeDeptList + * @return java.util.List + * @author work@yujt.net.cn + * @date 2019/11/27 19:10 + */ + List selectListHeadDeptNode(@Param("dataScopeDeptList") List dataScopeDeptList); + + /** + * s + * + * @param dataScopeDeptList + * @param parentDeptIdList + * @return java.util.List + * @author work@yujt.net.cn + * @date 2019/11/27 19:32 + */ + List selectChildrenDeptNode(@Param("dataScopeDeptList") List dataScopeDeptList, @Param("parentDeptIdList") List parentDeptIdList); } 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 c1194b91d..8a0edb974 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 @@ -10,6 +10,7 @@ package com.elink.esua.epdc.service; import com.elink.esua.epdc.commons.tools.utils.Result; import com.elink.esua.epdc.dto.CompleteDeptDTO; +import com.elink.esua.epdc.dto.DeptOption; import com.elink.esua.epdc.dto.SysSimpleDeptDTO; import com.elink.esua.epdc.dto.epdc.GridForLeaderRegisterDTO; import com.elink.esua.epdc.entity.SysDeptEntity; @@ -132,4 +133,23 @@ public interface SysDeptService extends BaseService { * @date 2019/11/27 15:09 */ Result> getCompleteDeptList(Long deptId); + + /** + * 组装用户部门多层结构 + * + * @param userId + * @return void + * @author work@yujt.net.cn + * @date 2019/11/27 14:33 + */ + void packageUserDeptOption(Long userId); + + /** + * 从缓存中读取用户部门层级结构 + * + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @author work@yujt.net.cn + * @date 2019/11/28 11:13 + */ + Result getUserDeptOption(); } diff --git a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/SysUserService.java b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/SysUserService.java index 98d469c70..7d8681786 100644 --- a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/SysUserService.java +++ b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/SysUserService.java @@ -11,6 +11,7 @@ package com.elink.esua.epdc.service; import com.elink.esua.epdc.commons.mybatis.service.BaseService; import com.elink.esua.epdc.commons.tools.page.PageData; import com.elink.esua.epdc.commons.tools.utils.Result; +import com.elink.esua.epdc.dto.DeptOption; import com.elink.esua.epdc.dto.SysUserOpenIdFormDTO; import com.elink.esua.epdc.dto.epdc.GridLeaderRegisterDTO; import com.elink.esua.epdc.dto.SysUserDTO; @@ -65,33 +66,30 @@ public interface SysUserService extends BaseService { Result listGridWhileLeaderRegister(String mobile); /** - * * 根据openId获取用户信息 * - * @params [openId] * @return com.elink.esua.epdc.dto.SysUserDTO + * @params [openId] * @author liuchuang * @since 2019/11/20 13:56 */ SysUserDTO getSysUserInfoByOpenId(String openId); /** - * * 获取部门下的所有用户ID * - * @params [deptId] * @return java.util.List + * @params [deptId] * @author liuchuang * @since 2019/10/29 16:14 */ List listOfUserIdsByDeptId(Long deptId); /** - * * 根据用户名更新用户微信openId * - * @params [sysUserOpenIdFormDto] * @return com.elink.esua.epdc.commons.tools.utils.Result + * @params [sysUserOpenIdFormDto] * @author liuchuang * @since 2019/11/20 9:56 */ 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 42d1c7010..798393eb5 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 @@ -8,6 +8,7 @@ package com.elink.esua.epdc.service.impl; +import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.elink.esua.epdc.commons.mybatis.service.impl.BaseServiceImpl; import com.elink.esua.epdc.commons.tools.constant.Constant; @@ -16,15 +17,16 @@ import com.elink.esua.epdc.commons.tools.constant.OrganizationTypeConstant; import com.elink.esua.epdc.commons.tools.enums.SuperAdminEnum; import com.elink.esua.epdc.commons.tools.exception.ErrorCode; import com.elink.esua.epdc.commons.tools.exception.RenException; +import com.elink.esua.epdc.commons.tools.redis.RedisKeys; +import com.elink.esua.epdc.commons.tools.redis.RedisUtils; +import com.elink.esua.epdc.commons.tools.redis.UserDetailRedis; import com.elink.esua.epdc.commons.tools.security.user.SecurityUser; import com.elink.esua.epdc.commons.tools.security.user.UserDetail; import com.elink.esua.epdc.commons.tools.utils.ConvertUtils; import com.elink.esua.epdc.commons.tools.utils.Result; import com.elink.esua.epdc.commons.tools.utils.TreeUtils; import com.elink.esua.epdc.dao.SysDeptDao; -import com.elink.esua.epdc.dto.CompleteDeptDTO; -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.entity.SysDeptEntity; import com.elink.esua.epdc.feign.GroupFeignClient; @@ -57,6 +59,12 @@ public class SysDeptServiceImpl extends BaseServiceImpl list(Map params) { //普通管理员,只能查询所属部门及子部门的数据 @@ -273,4 +281,149 @@ public class SysDeptServiceImpl extends BaseServiceImpl dataScopeDeptList = userDetail.getDeptIdList(); + if (CollUtil.isEmpty(dataScopeDeptList)) { + return; + } + // 通过用户部门权限 获取第一级部门节点 + List headDepts = baseDao.selectListHeadDeptNode(dataScopeDeptList); + if (CollUtil.isEmpty(headDepts)) { + return; + } + + // 存放上级节点的主键,查询下级节点用 + List parentDeptIdList = Lists.newArrayList(); + Long deptId; + // 一级节点 + List headNodeList = Lists.newArrayList(); + DeptNode node; + for (int i = 0; i < headDepts.size(); i++) { + deptId = headDepts.get(i).getId(); + parentDeptIdList.add(deptId); + + node = new DeptNode(); + node.setLabel(headDepts.get(i).getName()); + node.setValue(String.valueOf(deptId)); + headNodeList.add(node); + } + + // 查询所有一级节点的下级部门,用于组装 二级节点 + List childDepts = baseDao.selectChildrenDeptNode(dataScopeDeptList, parentDeptIdList); + if (CollUtil.isEmpty(childDepts)) { + return; + } + + parentDeptIdList = Lists.newArrayList(); + + // 所有上级节点下 所有下级节点 + List allChildrenNodeList = Lists.newArrayList(); + // 单个上级节点下 所有下级节点 + List childrenNodeList; + // 单个 下级节点 + DeptNode childrenNode; + // 单个 上级节点 + DeptNode parentNode; + + for (int i = 0; i < headNodeList.size(); i++) { + // 父节点 + parentNode = headNodeList.get(i); + childrenNodeList = Lists.newArrayList(); + + for (int j = 0; j < childDepts.size(); j++) { + deptId = childDepts.get(j).getId(); + + if (parentNode.getValue().equals(String.valueOf(childDepts.get(j).getPid()))) { + childrenNode = new DeptNode<>(); + childrenNode.setLabel(childDepts.get(j).getName()); + childrenNode.setValue(String.valueOf(deptId)); + childrenNodeList.add(childrenNode); + + allChildrenNodeList.add(childrenNode); + parentDeptIdList.add(deptId); + } + } + parentNode.setChildren(childrenNodeList); + } + + // 查询所有二级节点的下级部门,用于组装 三级节点 + childDepts = baseDao.selectChildrenDeptNode(dataScopeDeptList, parentDeptIdList); + + + parentDeptIdList = Lists.newArrayList(); + + // 所有上级节点下 所有下级节点 + List> allChildrenBeforeLast = Lists.newArrayList(); + // 单个上级节点下 所有下级节点 + List childrenBeforeLastList; + + DeptNode childrenBeforeLast; + + for (int i = 0; i < allChildrenNodeList.size(); i++) { + // 父节点 + parentNode = allChildrenNodeList.get(i); + childrenBeforeLastList = Lists.newArrayList(); + + for (int j = 0; j < childDepts.size(); j++) { + deptId = childDepts.get(j).getId(); + + if (parentNode.getValue().equals(String.valueOf(childDepts.get(j).getPid()))) { + childrenBeforeLast = new DeptNode<>(); + childrenBeforeLast.setLabel(childDepts.get(j).getName()); + childrenBeforeLast.setValue(String.valueOf(deptId)); + childrenBeforeLastList.add(childrenBeforeLast); + + allChildrenBeforeLast.add(childrenBeforeLast); + parentDeptIdList.add(deptId); + } + } + parentNode.setChildren(childrenBeforeLastList); + } + + // 查询所有三级节点的下级部门,用于组装 四级节点 + childDepts = baseDao.selectChildrenDeptNode(dataScopeDeptList, parentDeptIdList); + if (CollUtil.isEmpty(childDepts)) { + return; + } + + // 单个上级节点下 所有下级节点 + List childrenLastList; + + DeptNodeLast childrenLast; + + for (int i = 0; i < allChildrenBeforeLast.size(); i++) { + // 父节点 + parentNode = allChildrenBeforeLast.get(i); + childrenLastList = Lists.newArrayList(); + + for (int j = 0; j < childDepts.size(); j++) { + deptId = childDepts.get(j).getId(); + + if (parentNode.getValue().equals(String.valueOf(childDepts.get(j).getPid()))) { + childrenLast = new DeptNodeLast(); + childrenLast.setLabel(childDepts.get(j).getName()); + childrenLast.setValue(String.valueOf(deptId)); + childrenLastList.add(childrenLast); + } + } + parentNode.setChildren(childrenLastList); + } + + DeptOption option = new DeptOption(); + option.setOptions(allChildrenNodeList); + + redisUtils.set(RedisKeys.getAdminUserDeptOptionKey(userId), option); + } + + + @Override + public Result getUserDeptOption() { + Long userId = SecurityUser.getUserId(); + DeptOption option = (DeptOption) redisUtils.get(RedisKeys.getAdminUserDeptOptionKey(userId)); + return new Result().ok(option); + } } diff --git a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/impl/SysUserServiceImpl.java b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/impl/SysUserServiceImpl.java index 2952e9ba1..1b187b044 100644 --- a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/impl/SysUserServiceImpl.java +++ b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/impl/SysUserServiceImpl.java @@ -19,21 +19,26 @@ import com.elink.esua.epdc.commons.tools.constant.NumConstant; import com.elink.esua.epdc.commons.tools.enums.SuperAdminEnum; import com.elink.esua.epdc.commons.tools.exception.RenException; import com.elink.esua.epdc.commons.tools.page.PageData; +import com.elink.esua.epdc.commons.tools.redis.RedisKeys; +import com.elink.esua.epdc.commons.tools.redis.RedisUtils; +import com.elink.esua.epdc.commons.tools.redis.UserDetailRedis; import com.elink.esua.epdc.commons.tools.security.password.PasswordUtils; import com.elink.esua.epdc.commons.tools.security.user.SecurityUser; import com.elink.esua.epdc.commons.tools.security.user.UserDetail; import com.elink.esua.epdc.commons.tools.utils.ConvertUtils; import com.elink.esua.epdc.commons.tools.utils.Result; import com.elink.esua.epdc.dao.SysUserDao; -import com.elink.esua.epdc.dto.SysUserOpenIdFormDTO; +import com.elink.esua.epdc.dto.*; import com.elink.esua.epdc.dto.epdc.GridForLeaderRegisterDTO; import com.elink.esua.epdc.dto.epdc.GridLeaderRegisterDTO; -import com.elink.esua.epdc.dto.SysUserDTO; +import com.elink.esua.epdc.entity.SysDeptEntity; import com.elink.esua.epdc.entity.SysUserEntity; import com.elink.esua.epdc.service.SysDeptService; import com.elink.esua.epdc.service.SysRoleUserService; import com.elink.esua.epdc.service.SysUserService; +import com.google.common.collect.Lists; import org.apache.commons.lang3.StringUtils; +import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -240,4 +245,6 @@ public class SysUserServiceImpl extends BaseServiceImpl - + @@ -91,7 +91,7 @@ lp.field_value AS mainLabel, t.COLUMN_AMOUNT AS columnAmount, t.BACKGROUND_COLOR AS backgroundColor, - t.CLASS_NAME AS className, + t.CLASS_NAME AS tpClassName, t.SPARE_CLASS_NAME AS spareClassName, t.TEMPLATE_CODE AS templateCode, lc.field_value AS label, 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 f3ed6ebbe..e90d6bb19 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 @@ -112,4 +112,34 @@ AND dis.id IS NOT NULL + + + diff --git a/esua-epdc/epdc-admin/epdc-admin-server/src/test/java/com/elink/esua/epdc/service/DynamicDataSourceTest.java b/esua-epdc/epdc-admin/epdc-admin-server/src/test/java/com/elink/esua/epdc/service/DynamicDataSourceTest.java index 8fe4f3dd2..90f95cd04 100644 --- a/esua-epdc/epdc-admin/epdc-admin-server/src/test/java/com/elink/esua/epdc/service/DynamicDataSourceTest.java +++ b/esua-epdc/epdc-admin/epdc-admin-server/src/test/java/com/elink/esua/epdc/service/DynamicDataSourceTest.java @@ -44,5 +44,4 @@ public class DynamicDataSourceTest { dynamicDataSourceTestService.updateUserBySlave2(id); } - } diff --git a/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/async/UserDeptTask.java b/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/async/UserDeptTask.java new file mode 100644 index 000000000..c1305cf4c --- /dev/null +++ b/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/async/UserDeptTask.java @@ -0,0 +1,31 @@ +package com.elink.esua.epdc.async; + +import com.elink.esua.epdc.feign.UserFeignClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; + +/** + * 用户部门相关任务 + * + * @author work@yujt.net.cn + * @date 2019/11/28 13:20 + */ +@Component +public class UserDeptTask { + + @Autowired + private UserFeignClient userFeignClient; + + /** + * 组装用户部门层级结构 + * + * @param userId + * @author work@yujt.net.cn + * @date 2019/11/28 13:21 + */ + @Async + public void packageUserDeptOptions(Long userId) { + userFeignClient.packageUserDeptOption(userId); + } +} diff --git a/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/config/ThreadConfig.java b/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/config/ThreadConfig.java new file mode 100644 index 000000000..589e6e990 --- /dev/null +++ b/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/config/ThreadConfig.java @@ -0,0 +1,42 @@ +package com.elink.esua.epdc.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.task.TaskExecutor; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.ThreadPoolExecutor; + +/** + * 线程池 + * + * @author rongchao + * @Date 18-11-27 + */ +@Configuration +@EnableAsync +public class ThreadConfig { + + @Bean + public TaskExecutor taskExecutor() { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + // 设置核心线程数 + executor.setCorePoolSize(5); + // 设置最大线程数 + executor.setMaxPoolSize(10); + // 设置队列容量 + executor.setQueueCapacity(20); + // 设置线程活跃时间(秒) + executor.setKeepAliveSeconds(60); + // 设置默认线程名称 + executor.setThreadNamePrefix("esd-"); + // 设置拒绝策略 + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + // 等待所有任务结束后再关闭线程池 + executor.setWaitForTasksToCompleteOnShutdown(true); + executor.setAwaitTerminationSeconds(60); + executor.initialize(); + return executor; + } +} diff --git a/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/feign/UserFeignClient.java b/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/feign/UserFeignClient.java index ca790017b..88e354940 100644 --- a/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/feign/UserFeignClient.java +++ b/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/feign/UserFeignClient.java @@ -16,6 +16,7 @@ import com.elink.esua.epdc.commons.tools.security.user.UserDetail; import com.elink.esua.epdc.commons.tools.utils.Result; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; @@ -45,11 +46,10 @@ public interface UserFeignClient { Result getByUsername(@RequestParam("username") String username); /** - * * 根据用户ID获取用户角色权限信息 * - * @params [id] * @return com.elink.esua.epdc.commons.tools.utils.Result + * @params [id] * @author liuchuang * @since 2019/11/19 23:31 */ @@ -57,15 +57,25 @@ public interface UserFeignClient { Result> getDataScopeList(@RequestParam("id") Long id); /** - * * 根据用户名更新用户微信openId * - * @params [sysUserOpenIdFormDto] * @return com.elink.esua.epdc.commons.tools.utils.Result + * @params [sysUserOpenIdFormDto] * @author liuchuang * @since 2019/11/20 9:52 */ @PostMapping("sys/user/modifyOpenId") Result modifyOpenIdByUsername(SysUserOpenIdFormDTO sysUserOpenIdFormDto); + /** + * 组装用户部门层级结构 + * + * @param userId + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @author work@yujt.net.cn + * @date 2019/11/28 13:19 + */ + @GetMapping("sys/user/packageOption/{userId}") + Result packageUserDeptOption(@PathVariable("userId") Long userId); + } diff --git a/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/feign/fallback/UserFeignClientFallback.java b/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/feign/fallback/UserFeignClientFallback.java index 8e0e09368..b05ace690 100644 --- a/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/feign/fallback/UserFeignClientFallback.java +++ b/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/feign/fallback/UserFeignClientFallback.java @@ -1,8 +1,8 @@ /** * Copyright (c) 2018 人人开源 All rights reserved. - * + *

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

* 版权所有,侵权必究! */ @@ -32,7 +32,7 @@ public class UserFeignClientFallback implements UserFeignClient { } @Override - public Result getByUsername(String username) { + public Result getByUsername(String username) { return new Result<>(); } @@ -45,4 +45,9 @@ public class UserFeignClientFallback implements UserFeignClient { public Result modifyOpenIdByUsername(SysUserOpenIdFormDTO sysUserOpenIdFormDto) { return new Result<>(); } + + @Override + public Result packageUserDeptOption(Long userId) { + return new Result<>(); + } } diff --git a/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/service/impl/AuthServiceImpl.java b/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/service/impl/AuthServiceImpl.java index debe7e8b7..39023f35b 100644 --- a/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/service/impl/AuthServiceImpl.java +++ b/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/service/impl/AuthServiceImpl.java @@ -8,10 +8,10 @@ package com.elink.esua.epdc.service.impl; +import com.elink.esua.epdc.async.UserDeptTask; import com.elink.esua.epdc.common.token.dto.DeptDataScopeDTO; import com.elink.esua.epdc.common.token.dto.TokenDto; import com.elink.esua.epdc.common.token.dto.WorkUserAuthorizationDTO; -import com.elink.esua.epdc.common.token.dto.WorkUserTokenFormDTO; import com.elink.esua.epdc.common.token.util.CpUserDetailRedis; import com.elink.esua.epdc.commons.tools.constant.Constant; import com.elink.esua.epdc.commons.tools.constant.NumConstant; @@ -42,6 +42,7 @@ import com.elink.esua.epdc.service.AuthService; import io.jsonwebtoken.Claims; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; @@ -69,6 +70,9 @@ public class AuthServiceImpl implements AuthService { @Autowired private JwtProperties jwtProperties; + @Autowired + private UserDeptTask userDeptTask; + @Override public AuthorizationDTO login(LoginDTO login) { HttpServletRequest request = HttpContextUtils.getHttpServletRequest(); @@ -132,6 +136,8 @@ public class AuthServiceImpl implements AuthService { log.setStatus(LoginStatusEnum.SUCCESS.value()); logProducer.saveLog(log); + userDeptTask.packageUserDeptOptions(user.getId()); + return authorization; } @@ -206,6 +212,8 @@ public class AuthServiceImpl implements AuthService { authorization.setUserTagKey(user.getTypeKey()); authorization.setRegisterState(NumConstant.ONE_STR); + userDeptTask.packageUserDeptOptions(user.getId()); + return new Result().ok(authorization); } diff --git a/esua-epdc/epdc-commons/epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/redis/RedisKeys.java b/esua-epdc/epdc-commons/epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/redis/RedisKeys.java index 3610e433a..fabb55dbb 100644 --- a/esua-epdc/epdc-commons/epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/redis/RedisKeys.java +++ b/esua-epdc/epdc-commons/epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/redis/RedisKeys.java @@ -114,4 +114,16 @@ public class RedisKeys { public static String getPhoneSmsCodeKey(String phone) { return rootPrefix.concat("phone:sms:code:").concat(phone); } + + /** + * 管理员部门层级关系 + * + * @param userId 用户id + * @return java.lang.String + * @author work@yujt.net.cn + * @date 2019/11/28 09:56 + */ + public static String getAdminUserDeptOptionKey(Long userId) { + return rootPrefix.concat("sys:user:dept:options:").concat(String.valueOf(userId)); + } }