Browse Source

重新梳理获取部门层级的功能

hotfix/yujt_opt
yujt 6 years ago
parent
commit
9d2700d27f
  1. 46
      epdc-cloud-admin/src/main/java/com/elink/esua/epdc/controller/SysUserController.java
  2. 4
      epdc-cloud-admin/src/main/resources/application-dev.yml
  3. 2
      epdc-cloud-client-yushan
  4. 15
      epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/java/com/elink/esua/epdc/optimize/constant/OptimizeConstant.java
  5. 28
      epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/java/com/elink/esua/epdc/optimize/constant/OptimizeRedisKeys.java
  6. 34
      epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/java/com/elink/esua/epdc/optimize/modules/deptlevel/dao/OptSysDeptDao.java
  7. 14
      epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/java/com/elink/esua/epdc/optimize/modules/deptlevel/service/OptSysDeptService.java
  8. 220
      epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/java/com/elink/esua/epdc/optimize/modules/deptlevel/service/impl/OptSysDeptServiceImpl.java
  9. 39
      epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/resources/mapper/deptlevel/OptSysDeptDao.xml

46
epdc-cloud-admin/src/main/java/com/elink/esua/epdc/controller/SysUserController.java

@ -10,6 +10,7 @@ package com.elink.esua.epdc.controller;
import com.elink.esua.epdc.commons.tools.annotation.LogOperation;
import com.elink.esua.epdc.commons.tools.constant.Constant;
import com.elink.esua.epdc.commons.tools.constant.OrganizationTypeConstant;
import com.elink.esua.epdc.commons.tools.exception.ErrorCode;
import com.elink.esua.epdc.commons.tools.page.PageData;
import com.elink.esua.epdc.commons.tools.security.bo.ResourceBO;
@ -27,6 +28,7 @@ import com.elink.esua.epdc.commons.tools.validator.group.UpdateGroup;
import com.elink.esua.epdc.dto.*;
import com.elink.esua.epdc.dto.epdc.GridLeaderRegisterDTO;
import com.elink.esua.epdc.excel.SysUserExcel;
import com.elink.esua.epdc.optimize.modules.deptlevel.service.OptSysDeptService;
import com.elink.esua.epdc.service.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@ -60,6 +62,8 @@ public class SysUserController {
private SysResourceService sysResourceService;
@Autowired
private SysDeptService sysDeptService;
@Autowired
private OptSysDeptService optSysDeptService;
@GetMapping("page")
@ApiOperation("分页")
@ -316,7 +320,7 @@ public class SysUserController {
*/
@GetMapping("packageOption/{userId}")
public Result packageUserDeptOption(@PathVariable("userId") Long userId) {
sysDeptService.packageUserDeptOption(userId);
// sysDeptService.packageUserDeptOption(userId);
return new Result();
}
@ -331,7 +335,12 @@ public class SysUserController {
*/
@GetMapping("deptOptions/getByLoginUser")
public Result<DeptOption> getUserDeptOption() {
DeptOption deptOption = sysDeptService.getUserDeptOption();
UserDetail user = SecurityUser.getUser();
DeptOption deptOption = optSysDeptService.getDeptOption(user.getId(), user.getDeptIdList(),
OrganizationTypeConstant.ORG_TYPE_STREET_PARTY,
OrganizationTypeConstant.ORG_TYPE_COMMUNITY_PARTY,
OrganizationTypeConstant.ORG_TYPE_GRID_PARTY);
// DeptOption deptOption = sysDeptService.getUserDeptOption();
return new Result().ok(deptOption);
}
@ -346,7 +355,12 @@ public class SysUserController {
*/
@GetMapping("deptOptions/getDeptAuthByUser")
public Result<DeptOption> getDeptAuthByUser() {
DeptOption deptOption = sysDeptService.getDeptAuthByUser();
UserDetail user = SecurityUser.getUser();
DeptOption deptOption = optSysDeptService.getDeptOption(user.getId(), user.getDeptIdList(),
OrganizationTypeConstant.ORG_TYPE_STREET_PARTY,
OrganizationTypeConstant.ORG_TYPE_COMMUNITY_PARTY,
OrganizationTypeConstant.ORG_TYPE_GRID_PARTY);
// DeptOption deptOption = sysDeptService.getDeptAuthByUser();
return new Result().ok(deptOption);
}
@ -361,7 +375,13 @@ public class SysUserController {
*/
@GetMapping("deptOptions/getAllByLoginUser")
public Result<DeptOption> getAllDeptOptionByLoginUser() {
DeptOption option = sysDeptService.getAllDeptOptionByLoginUser();
// DeptOption option = sysDeptService.getAllDeptOptionByLoginUser();
UserDetail user = SecurityUser.getUser();
DeptOption option = optSysDeptService.getDeptOption(user.getId(), user.getDeptIdList(),
OrganizationTypeConstant.ORG_TYPE_DISTRICT_PARTY,
OrganizationTypeConstant.ORG_TYPE_STREET_PARTY,
OrganizationTypeConstant.ORG_TYPE_COMMUNITY_PARTY,
OrganizationTypeConstant.ORG_TYPE_GRID_PARTY);
return new Result().ok(option);
}
@ -376,7 +396,12 @@ public class SysUserController {
*/
@GetMapping("deptOptions/getBusinessDeptByUser")
public Result<DeptOption> getBusinessDeptByUser() {
DeptOption deptOption = sysDeptService.getBusinessDeptByUser();
UserDetail user = SecurityUser.getUser();
DeptOption deptOption = optSysDeptService.getDeptOption(user.getId(), user.getDeptIdList(),
OrganizationTypeConstant.ORG_TYPE_STREET_PARTY,
OrganizationTypeConstant.ORG_TYPE_COMMUNITY_PARTY,
OrganizationTypeConstant.ORG_TYPE_GRID_PARTY);
// DeptOption deptOption = sysDeptService.getUserDeptOption();
return new Result().ok(deptOption);
}
@ -392,7 +417,11 @@ public class SysUserController {
*/
@GetMapping("deptOptions/getMiddleByLoginUser")
public Result<DeptOption> getMiddleByLoginUser() {
DeptOption option = sysDeptService.getMiddleByLoginUser();
UserDetail user = SecurityUser.getUser();
DeptOption option = optSysDeptService.getDeptOption(user.getId(), user.getDeptIdList(),
OrganizationTypeConstant.ORG_TYPE_STREET_PARTY,
OrganizationTypeConstant.ORG_TYPE_COMMUNITY_PARTY);
// DeptOption option = sysDeptService.getMiddleByLoginUser();
return new Result().ok(option);
}
@ -409,7 +438,10 @@ public class SysUserController {
*/
@GetMapping("deptOptions/getStreetByLoginUser")
public Result<DeptOption> getStreetByLoginUser() {
DeptOption option = sysDeptService.getStreetByLoginUser();
UserDetail user = SecurityUser.getUser();
DeptOption option = optSysDeptService.getDeptOption(user.getId(), user.getDeptIdList(),
OrganizationTypeConstant.ORG_TYPE_STREET_PARTY);
// DeptOption option = sysDeptService.getStreetByLoginUser();
return new Result().ok(option);
}

4
epdc-cloud-admin/src/main/resources/application-dev.yml

@ -8,8 +8,8 @@ spring:
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://47.104.224.45:3308/esua_epdc_admin?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
username: epdc
url: jdbc:mysql://47.104.224.45:3308/yushan_esua_epdc_admin?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
username: epdcyushan
password: elink833066
#Oracle
# driver-class-name: oracle.jdbc.OracleDriver

2
epdc-cloud-client-yushan

@ -1 +1 @@
Subproject commit 10510102d70421c13a8f70bd667f881fd26c476b
Subproject commit 209b0c062cc410b30b9d3cd5f2b570b3ba924000

15
epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/java/com/elink/esua/epdc/optimize/constant/OptimizeConstant.java

@ -0,0 +1,15 @@
package com.elink.esua.epdc.optimize.constant;
/**
* 常量
*
* @author work@yujt.net.cn
* @date 2020/5/26 10:39
*/
public class OptimizeConstant {
/**
* 组装全部机构层级时rediskey标识
*/
public final static String COMPLETE_DEPT_LEVEL_KEY = "COMPLETE_DEPT_LEVEL_KEY";
}

28
epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/java/com/elink/esua/epdc/optimize/constant/OptimizeRedisKeys.java

@ -0,0 +1,28 @@
package com.elink.esua.epdc.optimize.constant;
import com.elink.esua.epdc.commons.tools.constant.StrConstant;
/**
* 优化功能所用到的redis key
*
* @author work@yujt.net.cn
* @date 2020/5/25 15:04
*/
public class OptimizeRedisKeys {
private static final String PREFIX = "epdc:optimize:";
/**
* 用于存放用户部门层级关系
*
* @param userId 用户id
* @param keyStr 关键字
* @return java.lang.String
* @author work@yujt.net.cn
* @date 2020/5/25 15:05
*/
public static String getUserDeptLevelOptionKey(Long userId, String keyStr) {
return PREFIX.concat("deptlevel:").concat(String.valueOf(userId)).concat(StrConstant.COLON).concat(keyStr);
}
}

34
epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/java/com/elink/esua/epdc/optimize/modules/deptlevel/dao/OptSysDeptDao.java

@ -26,7 +26,7 @@ public interface OptSysDeptDao extends BaseDao<OptSysDeptEntity> {
* @author work@yujt.net.cn
* @date 2020/5/22 09:33
*/
List<OptSysDeptEntity> selectListChildDept(@Param("typeKey") String typeKey,@Param("deptId") Long deptId);
List<OptSysDeptEntity> selectListChildDept(@Param("typeKey") String typeKey, @Param("deptId") Long deptId);
/**
* 根据机构id和机构父id查询机构及父机构名称
@ -38,4 +38,36 @@ public interface OptSysDeptDao extends BaseDao<OptSysDeptEntity> {
* @date 2020/5/15 14:10
*/
List<DeptLevelAndLeaderDTO> selectListDeptAndParents(@Param("deptId") Long deptId, @Param("parentIds") String[] parentIds);
/**
* 从数据权限筛选指定类别的部门id
*
* @param dataScopeDeptIdList 数据权限
* @param typeKeys 部门类别关键字
* @return java.util.List<java.lang.Long>
* @author work@yujt.net.cn
* @date 2020/5/25 15:28
*/
List<Long> selectListDeptIdByTypeKeyAndScope(@Param("dataScopeDeptIdList") List<Long> dataScopeDeptIdList, @Param("typeKeys") String[] typeKeys);
/**
* 通过数据权限查询顶级部门
*
* @param dataScopeDeptList
* @return java.util.List<com.elink.esua.epdc.optimize.modules.deptlevel.entity.OptSysDeptEntity>
* @author work@yujt.net.cn
* @date 2020/5/26 09:26
*/
List<OptSysDeptEntity> selectListHeadDeptNode(@Param("dataScopeDeptList") List<Long> dataScopeDeptList);
/**
* 通过数据权限及上级部门查询下级部门
*
* @param dataScopeDeptList
* @param parentDeptIdList
* @return java.util.List<com.elink.esua.epdc.optimize.modules.deptlevel.entity.OptSysDeptEntity>
* @author work@yujt.net.cn
* @date 2020/5/26 09:26
*/
List<OptSysDeptEntity> selectChildrenDeptNode(@Param("dataScopeDeptList") List<Long> dataScopeDeptList, @Param("parentDeptIdList") List<Long> parentDeptIdList);
}

14
epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/java/com/elink/esua/epdc/optimize/modules/deptlevel/service/OptSysDeptService.java

@ -2,6 +2,7 @@ package com.elink.esua.epdc.optimize.modules.deptlevel.service;
import com.elink.esua.epdc.commons.mybatis.service.BaseService;
import com.elink.esua.epdc.dto.DeptLevelAndLeaderDTO;
import com.elink.esua.epdc.dto.DeptOption;
import com.elink.esua.epdc.optimize.modules.deptlevel.entity.OptSysDeptEntity;
import java.util.List;
@ -24,4 +25,17 @@ public interface OptSysDeptService extends BaseService<OptSysDeptEntity> {
* @date 2020/5/22 09:13
*/
List<DeptLevelAndLeaderDTO> listChildDeptLevelById(String typeKey, Long deptId);
/**
* 根据数据权限获取用户部门层级关系
*
* @param userId 用户主键
* @param dataScopeDeptIdList 用户数据权限部门id集合
* @param typeKeys 需要组装的部门类别的关键字
* @return com.elink.esua.epdc.dto.DeptOption
* @author work@yujt.net.cn
* @date 2020/5/25 15:17
*/
DeptOption getDeptOption(Long userId, List<Long> dataScopeDeptIdList, String... typeKeys);
}

220
epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/java/com/elink/esua/epdc/optimize/modules/deptlevel/service/impl/OptSysDeptServiceImpl.java

@ -1,17 +1,32 @@
package com.elink.esua.epdc.optimize.modules.deptlevel.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ArrayUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.elink.esua.epdc.commons.mybatis.service.impl.BaseServiceImpl;
import com.elink.esua.epdc.commons.tools.constant.NumConstant;
import com.elink.esua.epdc.commons.tools.constant.OrganizationTypeConstant;
import com.elink.esua.epdc.commons.tools.constant.StrConstant;
import com.elink.esua.epdc.commons.tools.exception.RenException;
import com.elink.esua.epdc.commons.tools.redis.RedisUtils;
import com.elink.esua.epdc.dto.DeptLevelAndLeaderDTO;
import com.elink.esua.epdc.dto.DeptOption;
import com.elink.esua.epdc.optimize.constant.OptimizeConstant;
import com.elink.esua.epdc.optimize.constant.OptimizeRedisKeys;
import com.elink.esua.epdc.optimize.modules.deptlevel.dao.OptSysDeptDao;
import com.elink.esua.epdc.optimize.modules.deptlevel.entity.OptSysDeptEntity;
import com.elink.esua.epdc.optimize.modules.deptlevel.service.OptSysDeptService;
import com.elink.esua.epdc.optimize.utils.DeptUtils;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 部门相关业务实现
@ -22,6 +37,9 @@ import java.util.List;
@Service
public class OptSysDeptServiceImpl extends BaseServiceImpl<OptSysDeptDao, OptSysDeptEntity> implements OptSysDeptService {
@Autowired
private RedisUtils redisUtils;
@Override
public List<DeptLevelAndLeaderDTO> listChildDeptLevelById(String typeKey, Long deptId) {
OptSysDeptEntity parentDept = baseDao.selectById(deptId);
@ -52,6 +70,208 @@ public class OptSysDeptServiceImpl extends BaseServiceImpl<OptSysDeptDao, OptSys
}
@Override
public DeptOption getDeptOption(Long userId, List<Long> dataScopeDeptIdList, String... typeKeys) {
if (null == userId || CollUtil.isEmpty(dataScopeDeptIdList)) {
return new DeptOption();
}
// 是否需要对数据权限部门进行二次筛选
boolean filterDataScope = false;
if (ArrayUtil.isEmpty(typeKeys)) {
typeKeys = new String[]{OptimizeConstant.COMPLETE_DEPT_LEVEL_KEY};
} else {
filterDataScope = true;
}
// 先从redis获取,减少重复查询
String redisKey = OptimizeRedisKeys.getUserDeptLevelOptionKey(userId, StringUtils.join(escapeDeptTypeKey(typeKeys), StrConstant.HYPHEN));
Object obj = redisUtils.get(redisKey);
if (null != obj) {
return (DeptOption) obj;
}
// 根据部门类型,二次筛选数据权限部门
if (filterDataScope) {
dataScopeDeptIdList = baseDao.selectListDeptIdByTypeKeyAndScope(dataScopeDeptIdList, typeKeys);
if (CollUtil.isEmpty(dataScopeDeptIdList)) {
return new DeptOption();
}
}
// 组装部门层级结构
DeptOption deptOption = packageDeptOptionByUser(dataScopeDeptIdList);
// 存入redis,超时时长设置为一小时
redisUtils.set(redisKey, deptOption, RedisUtils.HOUR_ONE_EXPIRE);
return deptOption;
}
/**
* 根据部门数据权限组装部门层级结构
*
* @param dataScopeDeptList
* @return com.elink.esua.epdc.dto.DeptOption
* @author work@yujt.net.cn
* @date 2020/5/26 10:27
*/
private DeptOption packageDeptOptionByUser(List<Long> dataScopeDeptList) {
// 通过用户部门权限 获取第一级部门节点
List<OptSysDeptEntity> headDepts = baseDao.selectListHeadDeptNode(dataScopeDeptList);
if (CollUtil.isEmpty(headDepts)) {
return new DeptOption();
}
List<Long> holdDataScope = dataScopeDeptList.stream().filter(id -> null != id).collect(Collectors.toList());
// 某个部门id 声明变量,方便操作数据
Long deptId;
// 取第几级机构
int startLevel = NumConstant.ONE_NEG;
// 用于循环计数
int loopIndex = NumConstant.ZERO;
// 存放上级节点的主键,查询下级节点用
List<Long> parentDeptIdList = Lists.newArrayList();
// 所有父级节点 此处为第一次获取,为顶级节点
JSONArray parentNodeArray = new JSONArray();
JSONObject node;
for (int i = 0; i < headDepts.size(); i++) {
// 父节点主键
deptId = headDepts.get(i).getId();
if (holdDataScope.contains(deptId)) {
startLevel = NumConstant.ZERO;
}
parentDeptIdList.add(deptId);
node = new JSONObject();
node.put("label", headDepts.get(i).getName());
node.put("value", String.valueOf(deptId));
parentNodeArray.add(node);
}
// 用于存放 每次组装好的 某一级节点。
List<JSONArray> cache = Lists.newArrayList();
cache.add(parentNodeArray);
Map<String, Object> object;
while (CollUtil.isNotEmpty(dataScopeDeptList) && CollUtil.isNotEmpty(parentDeptIdList)) {
loopIndex++;
// 通过上级节点组装所有下级节点
object = this.packageChildrenNodeArray(parentNodeArray, dataScopeDeptList, parentDeptIdList);
parentDeptIdList = (List<Long>) object.get("pids");
if (startLevel == NumConstant.ONE_NEG) {
List<Long> collect = parentDeptIdList.stream().filter(id -> holdDataScope.contains(id)).collect(Collectors.toList());
if (CollUtil.isNotEmpty(collect)) {
startLevel = loopIndex;
}
}
dataScopeDeptList = (List<Long>) object.get("scope");
parentNodeArray = (JSONArray) object.get("node");
cache.add(parentNodeArray);
}
DeptOption option = new DeptOption();
option.setOptions(cache.get(startLevel));
return option;
}
/**
* 将数组内元素进行一对一替换用于拼接rediskey时缩短字符串长度
*
* @param typeKeys 一个以上的机构类别关键字
* @return java.lang.String[]
* @author work@yujt.net.cn
* @date 2020/5/26 10:45
*/
private String[] escapeDeptTypeKey(String[] typeKeys) {
String[] escapeTypeKeys = new String[typeKeys.length];
for (int i = 0; i < typeKeys.length; i++) {
String typeKey = typeKeys[i];
switch (typeKey) {
case OrganizationTypeConstant.ORG_TYPE_DISTRICT_DEPT:
escapeTypeKeys[i] = NumConstant.ZERO_STR;
break;
case OrganizationTypeConstant.ORG_TYPE_DISTRICT_PARTY:
escapeTypeKeys[i] = NumConstant.ONE_STR;
break;
case OrganizationTypeConstant.ORG_TYPE_STREET_DEPT:
escapeTypeKeys[i] = NumConstant.THREE_STR;
break;
case OrganizationTypeConstant.ORG_TYPE_STREET_PARTY:
escapeTypeKeys[i] = NumConstant.FOUR_STR;
break;
case OrganizationTypeConstant.ORG_TYPE_COMMUNITY_PARTY:
escapeTypeKeys[i] = NumConstant.FIVE_STR;
break;
case OrganizationTypeConstant.ORG_TYPE_GRID_PARTY:
escapeTypeKeys[i] = String.valueOf(NumConstant.SIX);
break;
case OptimizeConstant.COMPLETE_DEPT_LEVEL_KEY:
escapeTypeKeys[i] = String.valueOf(NumConstant.ONE_HUNDRED);
break;
default:
throw new RenException("非法的机构类别");
}
}
return escapeTypeKeys;
}
/**
* 组装下级结构节点
*
* @param allParentNode 所有的上级机构节点
* @param dataScopeDeptList 拥有数据权限的部门
* @param parentDeptIdList 上级部门id
* @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> packageChildrenNodeArray(JSONArray allParentNode, List<Long> dataScopeDeptList, List<Long> parentDeptIdList) {
List<OptSysDeptEntity> childDepts = baseDao.selectChildrenDeptNode(dataScopeDeptList, parentDeptIdList);
List newParentDeptIdList = Lists.newArrayList();
// 用于存储所有子节点
JSONArray allChildrenNodeList = 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);
allChildrenNodeList.add(nodeChild);
newParentDeptIdList.add(deptId);
}
}
if (childrenNodeList.size() > 0) {
nodeParent.put("children", childrenNodeList);
}
}
List<Long> newDataScopeList = dataScopeDeptList.stream()
.filter(did -> !newParentDeptIdList.contains(did))
.collect(Collectors.toList());
Map<String, Object> result = Maps.newHashMap();
result.put("node", allChildrenNodeList);
result.put("scope", newDataScopeList);
result.put("pids", newParentDeptIdList);
return result;
}
/**
* 组装所有子部门(父部门直属)的层级关系
*

39
epdc-cloud-optimize-yushan/epdc-optimize-department/src/main/resources/mapper/deptlevel/OptSysDeptDao.xml

@ -22,4 +22,43 @@
</if>
ORDER BY t.update_date ASC;
</select>
<select id="selectListDeptIdByTypeKeyAndScope" resultType="java.lang.Long">
SELECT id FROM sys_dept where del_flag = 0
<if test="dataScopeDeptIdList != null and dataScopeDeptIdList.size() > 0">
and id in <foreach collection="dataScopeDeptIdList" open="(" separator="," close=")" item="deptId">#{deptId}</foreach>
</if>
<if test="typeKeys != null and typeKeys.length > 0">
and type_key in <foreach collection="typeKeys" open="(" separator="," close=")" item="typeKey">#{typeKey}</foreach>
</if>
</select>
<select id="selectListHeadDeptNode" resultType="com.elink.esua.epdc.optimize.modules.deptlevel.entity.OptSysDeptEntity">
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.optimize.modules.deptlevel.entity.OptSysDeptEntity">
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 tem1.PID = tem2.ID )
OR ( tem2.ID = tem1.ID )
AND tem2.ID != ''
GROUP BY tem2.ID
ORDER BY tem2.create_date ASC
</select>
</mapper>
Loading…
Cancel
Save