Browse Source

用户部门层级关系相关代码

dev
yujintao 6 years ago
parent
commit
77aabfa1ec
  1. 20
      esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/DeptNode.java
  2. 17
      esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/DeptNodeLast.java
  3. 70
      esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/DeptOption.java
  4. 38
      esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/controller/SysUserController.java
  5. 21
      esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/dao/SysDeptDao.java
  6. 20
      esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/SysDeptService.java
  7. 10
      esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/SysUserService.java
  8. 159
      esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/impl/SysDeptServiceImpl.java
  9. 11
      esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/impl/SysUserServiceImpl.java
  10. 4
      esua-epdc/epdc-admin/epdc-admin-server/src/main/resources/mapper/AppMenuDao.xml
  11. 30
      esua-epdc/epdc-admin/epdc-admin-server/src/main/resources/mapper/SysDeptDao.xml
  12. 1
      esua-epdc/epdc-admin/epdc-admin-server/src/test/java/com/elink/esua/epdc/service/DynamicDataSourceTest.java
  13. 31
      esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/async/UserDeptTask.java
  14. 42
      esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/config/ThreadConfig.java
  15. 18
      esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/feign/UserFeignClient.java
  16. 9
      esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/feign/fallback/UserFeignClientFallback.java
  17. 10
      esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/service/impl/AuthServiceImpl.java
  18. 12
      esua-epdc/epdc-commons/epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/redis/RedisKeys.java

20
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<T> {
private String value;
private String label;
private List<T> children;
}

17
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;
}

70
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<T> {
private List<T> options;
public static void main(String[] args) {
// 第一层
List<DeptNode> nodeList1 = Lists.newArrayList();
DeptNode node1 = new DeptNode();
node1.setLabel("第一层 → 1");
node1.setValue("1::::1");
nodeList1.add(node1);
DeptOption<DeptNode> option = new DeptOption();
option.setOptions(nodeList1);
for (int i = 0; i < nodeList1.size(); i++) {
// 第二层
List<DeptNode> nodeList2 = Lists.newArrayList();
DeptNode<DeptNodeLast> 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<DeptNodeLast> 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));
}
}

38
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获取用户信息 * 根据openId获取用户信息
* *
* @params [openId]
* @return com.elink.esua.epdc.commons.tools.utils.Result<com.elink.esua.epdc.dto.SysUserDTO> * @return com.elink.esua.epdc.commons.tools.utils.Result<com.elink.esua.epdc.dto.SysUserDTO>
* @params [openId]
* @author liuchuang * @author liuchuang
* @since 2019/11/20 13:54 * @since 2019/11/20 13:54
*/ */
@ -205,11 +204,10 @@ public class SysUserController {
} }
/** /**
*
* 根据用户ID 获取用户角色权限信息 * 根据用户ID 获取用户角色权限信息
* *
* @params [id]
* @return com.elink.esua.epdc.commons.tools.utils.Result<java.util.List < com.elink.esua.epdc.dto.DataScopeDeptList>> * @return com.elink.esua.epdc.commons.tools.utils.Result<java.util.List < com.elink.esua.epdc.dto.DataScopeDeptList>>
* @params [id]
* @author liuchuang * @author liuchuang
* @since 2019/11/19 23:36 * @since 2019/11/19 23:36
*/ */
@ -221,11 +219,10 @@ public class SysUserController {
} }
/** /**
*
* 根据用户名更新用户微信openId * 根据用户名更新用户微信openId
* *
* @params [sysUserOpenIdFormDto]
* @return com.elink.esua.epdc.commons.tools.utils.Result * @return com.elink.esua.epdc.commons.tools.utils.Result
* @params [sysUserOpenIdFormDto]
* @author liuchuang * @author liuchuang
* @since 2019/11/20 9:52 * @since 2019/11/20 9:52
*/ */
@ -273,11 +270,10 @@ public class SysUserController {
} }
/** /**
*
* 获取部门下的所有用户ID * 获取部门下的所有用户ID
* *
* @params [deptId]
* @return com.elink.esua.epdc.commons.tools.utils.Result<java.util.List < java.lang.Long>> * @return com.elink.esua.epdc.commons.tools.utils.Result<java.util.List < java.lang.Long>>
* @params [deptId]
* @author liuchuang * @author liuchuang
* @since 2019/10/29 17:31 * @since 2019/10/29 17:31
*/ */
@ -287,4 +283,30 @@ public class SysUserController {
return new Result<List<Long>>().ok(data); return new Result<List<Long>>().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<com.elink.esua.epdc.dto.DeptOption>
* @author work@yujt.net.cn
* @date 2019/11/27 14:31
*/
@GetMapping("options/getByLoginUser")
public Result<DeptOption> getUserDeptOption() {
return sysDeptService.getUserDeptOption();
}
} }

21
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<SysDeptEntity> {
* @date 2019/10/24 15:27 * @date 2019/10/24 15:27
*/ */
List<GridForLeaderRegisterDTO> selectListGridForLeader(@Param("gridIdList") List<String> gridIdList); List<GridForLeaderRegisterDTO> selectListGridForLeader(@Param("gridIdList") List<String> gridIdList);
/**
* 通过用户部门权限 获取第一级部门节点
*
* @param dataScopeDeptList
* @return java.util.List<com.elink.esua.epdc.entity.SysDeptEntity>
* @author work@yujt.net.cn
* @date 2019/11/27 19:10
*/
List<SysDeptEntity> selectListHeadDeptNode(@Param("dataScopeDeptList") List<Long> dataScopeDeptList);
/**
* s
*
* @param dataScopeDeptList
* @param parentDeptIdList
* @return java.util.List<com.elink.esua.epdc.entity.SysDeptEntity>
* @author work@yujt.net.cn
* @date 2019/11/27 19:32
*/
List<SysDeptEntity> selectChildrenDeptNode(@Param("dataScopeDeptList") List<Long> dataScopeDeptList, @Param("parentDeptIdList") List<Long> parentDeptIdList);
} }

20
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.commons.tools.utils.Result;
import com.elink.esua.epdc.dto.CompleteDeptDTO; 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.SysSimpleDeptDTO;
import com.elink.esua.epdc.dto.epdc.GridForLeaderRegisterDTO; import com.elink.esua.epdc.dto.epdc.GridForLeaderRegisterDTO;
import com.elink.esua.epdc.entity.SysDeptEntity; import com.elink.esua.epdc.entity.SysDeptEntity;
@ -132,4 +133,23 @@ public interface SysDeptService extends BaseService<SysDeptEntity> {
* @date 2019/11/27 15:09 * @date 2019/11/27 15:09
*/ */
Result<List<String>> getCompleteDeptList(Long deptId); Result<List<String>> 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<com.elink.esua.epdc.dto.DeptOption>
* @author work@yujt.net.cn
* @date 2019/11/28 11:13
*/
Result<DeptOption> getUserDeptOption();
} }

10
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.mybatis.service.BaseService;
import com.elink.esua.epdc.commons.tools.page.PageData; import com.elink.esua.epdc.commons.tools.page.PageData;
import com.elink.esua.epdc.commons.tools.utils.Result; 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.SysUserOpenIdFormDTO;
import com.elink.esua.epdc.dto.epdc.GridLeaderRegisterDTO; import com.elink.esua.epdc.dto.epdc.GridLeaderRegisterDTO;
import com.elink.esua.epdc.dto.SysUserDTO; import com.elink.esua.epdc.dto.SysUserDTO;
@ -65,33 +66,30 @@ public interface SysUserService extends BaseService<SysUserEntity> {
Result<GridLeaderRegisterDTO> listGridWhileLeaderRegister(String mobile); Result<GridLeaderRegisterDTO> listGridWhileLeaderRegister(String mobile);
/** /**
*
* 根据openId获取用户信息 * 根据openId获取用户信息
* *
* @params [openId]
* @return com.elink.esua.epdc.dto.SysUserDTO * @return com.elink.esua.epdc.dto.SysUserDTO
* @params [openId]
* @author liuchuang * @author liuchuang
* @since 2019/11/20 13:56 * @since 2019/11/20 13:56
*/ */
SysUserDTO getSysUserInfoByOpenId(String openId); SysUserDTO getSysUserInfoByOpenId(String openId);
/** /**
*
* 获取部门下的所有用户ID * 获取部门下的所有用户ID
* *
* @params [deptId]
* @return java.util.List<java.lang.Long> * @return java.util.List<java.lang.Long>
* @params [deptId]
* @author liuchuang * @author liuchuang
* @since 2019/10/29 16:14 * @since 2019/10/29 16:14
*/ */
List<Long> listOfUserIdsByDeptId(Long deptId); List<Long> listOfUserIdsByDeptId(Long deptId);
/** /**
*
* 根据用户名更新用户微信openId * 根据用户名更新用户微信openId
* *
* @params [sysUserOpenIdFormDto]
* @return com.elink.esua.epdc.commons.tools.utils.Result * @return com.elink.esua.epdc.commons.tools.utils.Result
* @params [sysUserOpenIdFormDto]
* @author liuchuang * @author liuchuang
* @since 2019/11/20 9:56 * @since 2019/11/20 9:56
*/ */

159
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; package com.elink.esua.epdc.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.elink.esua.epdc.commons.mybatis.service.impl.BaseServiceImpl; import com.elink.esua.epdc.commons.mybatis.service.impl.BaseServiceImpl;
import com.elink.esua.epdc.commons.tools.constant.Constant; 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.enums.SuperAdminEnum;
import com.elink.esua.epdc.commons.tools.exception.ErrorCode; 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.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.SecurityUser;
import com.elink.esua.epdc.commons.tools.security.user.UserDetail; 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.ConvertUtils;
import com.elink.esua.epdc.commons.tools.utils.Result; import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.commons.tools.utils.TreeUtils; import com.elink.esua.epdc.commons.tools.utils.TreeUtils;
import com.elink.esua.epdc.dao.SysDeptDao; import com.elink.esua.epdc.dao.SysDeptDao;
import com.elink.esua.epdc.dto.CompleteDeptDTO; import com.elink.esua.epdc.dto.*;
import com.elink.esua.epdc.dto.SysDeptDTO;
import com.elink.esua.epdc.dto.SysSimpleDeptDTO;
import com.elink.esua.epdc.dto.epdc.GridForLeaderRegisterDTO; import com.elink.esua.epdc.dto.epdc.GridForLeaderRegisterDTO;
import com.elink.esua.epdc.entity.SysDeptEntity; import com.elink.esua.epdc.entity.SysDeptEntity;
import com.elink.esua.epdc.feign.GroupFeignClient; import com.elink.esua.epdc.feign.GroupFeignClient;
@ -57,6 +59,12 @@ public class SysDeptServiceImpl extends BaseServiceImpl<SysDeptDao, SysDeptEntit
@Autowired @Autowired
private GroupFeignClient groupFeignClient; private GroupFeignClient groupFeignClient;
@Autowired
private UserDetailRedis userDetailRedis;
@Autowired
private RedisUtils redisUtils;
@Override @Override
public List<SysDeptDTO> list(Map<String, Object> params) { public List<SysDeptDTO> list(Map<String, Object> params) {
//普通管理员,只能查询所属部门及子部门的数据 //普通管理员,只能查询所属部门及子部门的数据
@ -273,4 +281,149 @@ public class SysDeptServiceImpl extends BaseServiceImpl<SysDeptDao, SysDeptEntit
list.add(completeDept.getGrid()); list.add(completeDept.getGrid());
return new Result().ok(list); return new Result().ok(list);
} }
@Override
public void packageUserDeptOption(Long userId) {
UserDetail userDetail = userDetailRedis.get(userId);
// 用户拥有的所有部门权限
List<Long> dataScopeDeptList = userDetail.getDeptIdList();
if (CollUtil.isEmpty(dataScopeDeptList)) {
return;
}
// 通过用户部门权限 获取第一级部门节点
List<SysDeptEntity> headDepts = baseDao.selectListHeadDeptNode(dataScopeDeptList);
if (CollUtil.isEmpty(headDepts)) {
return;
}
// 存放上级节点的主键,查询下级节点用
List<Long> parentDeptIdList = Lists.newArrayList();
Long deptId;
// 一级节点
List<DeptNode> headNodeList = Lists.newArrayList();
DeptNode<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<SysDeptEntity> childDepts = baseDao.selectChildrenDeptNode(dataScopeDeptList, parentDeptIdList);
if (CollUtil.isEmpty(childDepts)) {
return;
}
parentDeptIdList = Lists.newArrayList();
// 所有上级节点下 所有下级节点
List<DeptNode> allChildrenNodeList = Lists.newArrayList();
// 单个上级节点下 所有下级节点
List<DeptNode> childrenNodeList;
// 单个 下级节点
DeptNode<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<DeptNode<DeptNodeLast>> allChildrenBeforeLast = Lists.newArrayList();
// 单个上级节点下 所有下级节点
List<DeptNode> childrenBeforeLastList;
DeptNode<DeptNodeLast> 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<DeptNodeLast> 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<DeptOption> getUserDeptOption() {
Long userId = SecurityUser.getUserId();
DeptOption option = (DeptOption) redisUtils.get(RedisKeys.getAdminUserDeptOptionKey(userId));
return new Result<DeptOption>().ok(option);
}
} }

11
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.enums.SuperAdminEnum;
import com.elink.esua.epdc.commons.tools.exception.RenException; 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.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.password.PasswordUtils;
import com.elink.esua.epdc.commons.tools.security.user.SecurityUser; 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.security.user.UserDetail;
import com.elink.esua.epdc.commons.tools.utils.ConvertUtils; 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.Result;
import com.elink.esua.epdc.dao.SysUserDao; 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.GridForLeaderRegisterDTO;
import com.elink.esua.epdc.dto.epdc.GridLeaderRegisterDTO; 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.entity.SysUserEntity;
import com.elink.esua.epdc.service.SysDeptService; import com.elink.esua.epdc.service.SysDeptService;
import com.elink.esua.epdc.service.SysRoleUserService; import com.elink.esua.epdc.service.SysRoleUserService;
import com.elink.esua.epdc.service.SysUserService; import com.elink.esua.epdc.service.SysUserService;
import com.google.common.collect.Lists;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -240,4 +245,6 @@ public class SysUserServiceImpl extends BaseServiceImpl<SysUserDao, SysUserEntit
public SysUserDTO getSysUserInfoByOpenId(String openId) { public SysUserDTO getSysUserInfoByOpenId(String openId) {
return baseDao.selectOneOfSysUserByOpenId(openId); return baseDao.selectOneOfSysUserByOpenId(openId);
} }
} }

4
esua-epdc/epdc-admin/epdc-admin-server/src/main/resources/mapper/AppMenuDao.xml

@ -73,7 +73,7 @@
<association property="templateInfo" javaType="com.elink.esua.epdc.dto.epdc.result.EpdcAppTemplateInfoResultDTO" > <association property="templateInfo" javaType="com.elink.esua.epdc.dto.epdc.result.EpdcAppTemplateInfoResultDTO" >
<result column="columnAmount" property="columnAmount"/> <result column="columnAmount" property="columnAmount"/>
<result column="backgroundColor" property="backgroundColor"/> <result column="backgroundColor" property="backgroundColor"/>
<result column="className" property="className"/> <result column="tpClassName" property="className"/>
<result column="spareClassName" property="spareClassName"/> <result column="spareClassName" property="spareClassName"/>
<result column="templateCode" property="templateCode"/> <result column="templateCode" property="templateCode"/>
</association> </association>
@ -91,7 +91,7 @@
lp.field_value AS mainLabel, lp.field_value AS mainLabel,
t.COLUMN_AMOUNT AS columnAmount, t.COLUMN_AMOUNT AS columnAmount,
t.BACKGROUND_COLOR AS backgroundColor, t.BACKGROUND_COLOR AS backgroundColor,
t.CLASS_NAME AS className, t.CLASS_NAME AS tpClassName,
t.SPARE_CLASS_NAME AS spareClassName, t.SPARE_CLASS_NAME AS spareClassName,
t.TEMPLATE_CODE AS templateCode, t.TEMPLATE_CODE AS templateCode,
lc.field_value AS label, lc.field_value AS label,

30
esua-epdc/epdc-admin/epdc-admin-server/src/main/resources/mapper/SysDeptDao.xml

@ -112,4 +112,34 @@
AND dis.id IS NOT NULL AND dis.id IS NOT NULL
</select> </select>
<select id="selectListHeadDeptNode" resultType="com.elink.esua.epdc.entity.SysDeptEntity">
SELECT
d1.id,
d1.`name`
FROM
sys_dept d
LEFT JOIN sys_dept d1 ON d.pids LIKE CONCAT( '%', d1.id, '%' )
WHERE
d.id IN
<foreach collection="dataScopeDeptList" item="deptId" open="(" separator="," close=")" >
#{deptId}
</foreach>
AND d1.pid = 0
GROUP BY d1.id
ORDER BY d1.create_date ASC
</select>
<select id="selectChildrenDeptNode" resultType="com.elink.esua.epdc.entity.SysDeptEntity">
SELECT
tem2.*
FROM
( SELECT * FROM sys_dept d1 WHERE d1.id IN <foreach collection="dataScopeDeptList" item="item" open="(" separator="," close=")" > #{item} </foreach> ) tem1,
( SELECT * FROM sys_dept d2 WHERE d2.pid IN <foreach collection="parentDeptIdList" item="deptId" open="(" separator="," close=")" > #{deptId} </foreach>) tem2
WHERE
tem1.PIDS LIKE CONCAT( '%', tem2.id, '%' )
OR NOT EXISTS ( SELECT 1 FROM sys_dept d WHERE d.PID = tem2.ID )
AND tem2.ID != ''
GROUP BY tem2.ID
ORDER BY tem2.create_date ASC
</select>
</mapper> </mapper>

1
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); dynamicDataSourceTestService.updateUserBySlave2(id);
} }
} }

31
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);
}
}

42
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;
}
}

18
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 com.elink.esua.epdc.commons.tools.utils.Result;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping; 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.PostMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
@ -45,11 +46,10 @@ public interface UserFeignClient {
Result<UserDetail> getByUsername(@RequestParam("username") String username); Result<UserDetail> getByUsername(@RequestParam("username") String username);
/** /**
*
* 根据用户ID获取用户角色权限信息 * 根据用户ID获取用户角色权限信息
* *
* @params [id]
* @return com.elink.esua.epdc.commons.tools.utils.Result<com.elink.esua.epdc.dto.DataScopeDeptList> * @return com.elink.esua.epdc.commons.tools.utils.Result<com.elink.esua.epdc.dto.DataScopeDeptList>
* @params [id]
* @author liuchuang * @author liuchuang
* @since 2019/11/19 23:31 * @since 2019/11/19 23:31
*/ */
@ -57,15 +57,25 @@ public interface UserFeignClient {
Result<List<DataScopeDeptList>> getDataScopeList(@RequestParam("id") Long id); Result<List<DataScopeDeptList>> getDataScopeList(@RequestParam("id") Long id);
/** /**
*
* 根据用户名更新用户微信openId * 根据用户名更新用户微信openId
* *
* @params [sysUserOpenIdFormDto]
* @return com.elink.esua.epdc.commons.tools.utils.Result * @return com.elink.esua.epdc.commons.tools.utils.Result
* @params [sysUserOpenIdFormDto]
* @author liuchuang * @author liuchuang
* @since 2019/11/20 9:52 * @since 2019/11/20 9:52
*/ */
@PostMapping("sys/user/modifyOpenId") @PostMapping("sys/user/modifyOpenId")
Result modifyOpenIdByUsername(SysUserOpenIdFormDTO sysUserOpenIdFormDto); 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);
} }

9
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. * Copyright (c) 2018 人人开源 All rights reserved.
* * <p>
* https://www.renren.io * https://www.renren.io
* * <p>
* 版权所有侵权必究 * 版权所有侵权必究
*/ */
@ -45,4 +45,9 @@ public class UserFeignClientFallback implements UserFeignClient {
public Result modifyOpenIdByUsername(SysUserOpenIdFormDTO sysUserOpenIdFormDto) { public Result modifyOpenIdByUsername(SysUserOpenIdFormDTO sysUserOpenIdFormDto) {
return new Result<>(); return new Result<>();
} }
@Override
public Result packageUserDeptOption(Long userId) {
return new Result<>();
}
} }

10
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; 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.DeptDataScopeDTO;
import com.elink.esua.epdc.common.token.dto.TokenDto; 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.WorkUserAuthorizationDTO;
import com.elink.esua.epdc.common.token.dto.WorkUserTokenFormDTO;
import com.elink.esua.epdc.common.token.util.CpUserDetailRedis; 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.Constant;
import com.elink.esua.epdc.commons.tools.constant.NumConstant; 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 io.jsonwebtoken.Claims;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
@ -69,6 +70,9 @@ public class AuthServiceImpl implements AuthService {
@Autowired @Autowired
private JwtProperties jwtProperties; private JwtProperties jwtProperties;
@Autowired
private UserDeptTask userDeptTask;
@Override @Override
public AuthorizationDTO login(LoginDTO login) { public AuthorizationDTO login(LoginDTO login) {
HttpServletRequest request = HttpContextUtils.getHttpServletRequest(); HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
@ -132,6 +136,8 @@ public class AuthServiceImpl implements AuthService {
log.setStatus(LoginStatusEnum.SUCCESS.value()); log.setStatus(LoginStatusEnum.SUCCESS.value());
logProducer.saveLog(log); logProducer.saveLog(log);
userDeptTask.packageUserDeptOptions(user.getId());
return authorization; return authorization;
} }
@ -206,6 +212,8 @@ public class AuthServiceImpl implements AuthService {
authorization.setUserTagKey(user.getTypeKey()); authorization.setUserTagKey(user.getTypeKey());
authorization.setRegisterState(NumConstant.ONE_STR); authorization.setRegisterState(NumConstant.ONE_STR);
userDeptTask.packageUserDeptOptions(user.getId());
return new Result<WorkUserAuthorizationDTO>().ok(authorization); return new Result<WorkUserAuthorizationDTO>().ok(authorization);
} }

12
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) { public static String getPhoneSmsCodeKey(String phone) {
return rootPrefix.concat("phone:sms:code:").concat(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));
}
} }

Loading…
Cancel
Save