Browse Source

优化获取部门层级的代码

dev
yujintao 6 years ago
parent
commit
bd5145e9de
  1. 152
      esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/impl/SysDeptServiceImpl.java

152
esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/impl/SysDeptServiceImpl.java

@ -35,6 +35,7 @@ import com.elink.esua.epdc.feign.GroupFeignClient;
import com.elink.esua.epdc.service.SysDeptService; import com.elink.esua.epdc.service.SysDeptService;
import com.elink.esua.epdc.service.SysUserService; import com.elink.esua.epdc.service.SysUserService;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -255,14 +256,14 @@ public class SysDeptServiceImpl extends BaseServiceImpl<SysDeptDao, SysDeptEntit
parentAndAllDeptDTO.setGridId(completeDept.getGridId()); parentAndAllDeptDTO.setGridId(completeDept.getGridId());
// 父所有部门(包含街道、社区) // 父所有部门(包含街道、社区)
String deptNames = (StringUtils.isNotEmpty(completeDept.getStreet()) ? completeDept.getStreet() : ""); String deptNames = (StringUtils.isNotEmpty(completeDept.getStreet()) ? completeDept.getStreet() : "");
deptNames += (StringUtils.isNotEmpty(completeDept.getCommunity()) ? "-"+completeDept.getCommunity() : ""); deptNames += (StringUtils.isNotEmpty(completeDept.getCommunity()) ? "-" + completeDept.getCommunity() : "");
String deptIds = (completeDept.getStreetId()!=null && completeDept.getStreetId()!= 0 ? completeDept.getStreetId().toString() : ""); String deptIds = (completeDept.getStreetId() != null && completeDept.getStreetId() != 0 ? completeDept.getStreetId().toString() : "");
deptIds += (completeDept.getCommunityId()!=null && completeDept.getCommunityId()!= 0 ? ","+completeDept.getCommunityId().toString() : ""); deptIds += (completeDept.getCommunityId() != null && completeDept.getCommunityId() != 0 ? "," + completeDept.getCommunityId().toString() : "");
parentAndAllDeptDTO.setParentDeptIds(deptIds); parentAndAllDeptDTO.setParentDeptIds(deptIds);
parentAndAllDeptDTO.setParentDeptNames(deptNames); parentAndAllDeptDTO.setParentDeptNames(deptNames);
// 所有部门(包含街道、社区、网格) // 所有部门(包含街道、社区、网格)
deptNames += (StringUtils.isNotEmpty(completeDept.getGrid()) ? "-"+completeDept.getGrid() : ""); deptNames += (StringUtils.isNotEmpty(completeDept.getGrid()) ? "-" + completeDept.getGrid() : "");
deptIds += (completeDept.getGridId()!=null && completeDept.getGridId()!= 0 ? ","+completeDept.getGridId().toString() : ""); deptIds += (completeDept.getGridId() != null && completeDept.getGridId() != 0 ? "," + completeDept.getGridId().toString() : "");
parentAndAllDeptDTO.setAllDeptIds(deptIds); parentAndAllDeptDTO.setAllDeptIds(deptIds);
parentAndAllDeptDTO.setAllDeptNames(deptNames); parentAndAllDeptDTO.setAllDeptNames(deptNames);
@ -329,7 +330,6 @@ public class SysDeptServiceImpl extends BaseServiceImpl<SysDeptDao, SysDeptEntit
@Override @Override
public void packageUserDeptOption(Long userId) { public void packageUserDeptOption(Long userId) {
UserDetail userDetail = userDetailRedis.get(userId); UserDetail userDetail = userDetailRedis.get(userId);
// 用户拥有的所有部门权限 // 用户拥有的所有部门权限
List<Long> dataScopeDeptList = userDetail.getDeptIdList(); List<Long> dataScopeDeptList = userDetail.getDeptIdList();
@ -341,16 +341,13 @@ public class SysDeptServiceImpl extends BaseServiceImpl<SysDeptDao, SysDeptEntit
if (CollUtil.isEmpty(headDepts)) { if (CollUtil.isEmpty(headDepts)) {
return; return;
} }
String label = "label";
String value = "value";
String children = "children";
// 某个部门id 声明变量,方便操作数据 // 某个部门id 声明变量,方便操作数据
Long deptId; Long deptId;
// 存放上级节点的主键,查询下级节点用 // 存放上级节点的主键,查询下级节点用
List<Long> parentDeptIdList = Lists.newArrayList(); List<Long> parentDeptIdList = Lists.newArrayList();
// 一级节点 相当于市区,此处虽然组装,但并没有应用第一级节点 // 所有父级节点 此处为第一次获取,为顶级节点,相当于市区
JSONArray NodeListLevel_1 = new JSONArray(); JSONArray parentNodeArray = new JSONArray();
JSONObject node; JSONObject node;
for (int i = 0; i < headDepts.size(); i++) { for (int i = 0; i < headDepts.size(); i++) {
// 父节点主键 // 父节点主键
@ -358,102 +355,93 @@ public class SysDeptServiceImpl extends BaseServiceImpl<SysDeptDao, SysDeptEntit
parentDeptIdList.add(deptId); parentDeptIdList.add(deptId);
node = new JSONObject(); node = new JSONObject();
node.put(label, headDepts.get(i).getName()); node.put("label", headDepts.get(i).getName());
node.put(value, String.valueOf(deptId)); node.put("value", String.valueOf(deptId));
NodeListLevel_1.add(node); parentNodeArray.add(node);
}
// 用于存放 每次组装好的 某一级节点。页面只需展示三级,所以没有存放顶级节点(市区)
List<JSONArray> cache = Lists.newArrayList();
Map<String, Object> object;
while (CollUtil.isNotEmpty(dataScopeDeptList)) {
// 通过上级节点组装所有下级节点
object = this.packageChildrenNodeArray(parentNodeArray, dataScopeDeptList, parentDeptIdList);
dataScopeDeptList = (List<Long>) object.get("scope");
parentDeptIdList = (List<Long>) object.get("pids");
parentNodeArray = (JSONArray) object.get("node");
cache.add(parentNodeArray);
} }
// 查询所有一级节点的下级部门,用于组装 二级节点 DeptOption option = new DeptOption();
option.setOptions(cache.get(0));
redisUtils.set(RedisKeys.getAdminUserDeptOptionKey(userId), option);
}
/**
* 组装下级结构节点
*
* @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<SysDeptEntity> childDepts = baseDao.selectChildrenDeptNode(dataScopeDeptList, parentDeptIdList); List<SysDeptEntity> childDepts = baseDao.selectChildrenDeptNode(dataScopeDeptList, parentDeptIdList);
parentDeptIdList = Lists.newArrayList(); parentDeptIdList = Lists.newArrayList();
// 所有二级节点 相当于街道 // 用于存储所有子节点
JSONArray NodeListLevel_2 = new JSONArray(); JSONArray allChildrenNode = new JSONArray();
// 某个一级节点下所有的二级节点 // 某个父节点下所有的子节点
JSONArray childrenNodeList; JSONArray childrenNodeList;
// 单个 二级节点 // 单个 节点
JSONObject nodeChild; JSONObject nodeChild;
// 单个 一级节点
JSONObject nodeParent;
for (int i = 0; i < NodeListLevel_1.size(); i++) {
// 一个父节点
nodeParent = NodeListLevel_1.getJSONObject(i);
// 一个父节点的所有下级节点
childrenNodeList = new JSONArray();
for (int j = 0; j < childDepts.size(); j++) { // 单个 父节点
deptId = childDepts.get(j).getId(); JSONObject nodeParent;
Long deptId;
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);
NodeListLevel_2.add(nodeChild);
parentDeptIdList.add(deptId);
}
}
}
// 查询所有二级节点的下级部门,用于组装 三级节点 for (int i = 0; i < allParentNode.size(); i++) {
childDepts = baseDao.selectChildrenDeptNode(dataScopeDeptList, parentDeptIdList);
parentDeptIdList = Lists.newArrayList();
// 所有三级节点 相当于社区 nodeParent = allParentNode.getJSONObject(i);
JSONArray NodeListLevel_3 = new JSONArray(); // 用于存储 一个父节点的所有下级节点
for (int i = 0; i < NodeListLevel_2.size(); i++) {
// 一个父节点
nodeParent = NodeListLevel_2.getJSONObject(i);
// 一个父节点的所有下级节点
childrenNodeList = new JSONArray(); childrenNodeList = new JSONArray();
for (int j = 0; j < childDepts.size(); j++) { for (int j = 0; j < childDepts.size(); j++) {
deptId = childDepts.get(j).getId(); deptId = childDepts.get(j).getId();
if (nodeParent.get(value).equals(String.valueOf(childDepts.get(j).getPid()))) { if (nodeParent.get("value").equals(String.valueOf(childDepts.get(j).getPid()))) {
nodeChild = new JSONObject(); nodeChild = new JSONObject();
nodeChild.put(label, childDepts.get(j).getName()); nodeChild.put("label", childDepts.get(j).getName());
nodeChild.put(value, String.valueOf(deptId)); nodeChild.put("value", String.valueOf(deptId));
childrenNodeList.add(nodeChild); childrenNodeList.add(nodeChild);
NodeListLevel_3.add(nodeChild); allChildrenNode.add(nodeChild);
parentDeptIdList.add(deptId); parentDeptIdList.add(deptId);
} }
} }
if(childrenNodeList.size() > 0){ if (childrenNodeList.size() > 0) {
nodeParent.put(children, childrenNodeList); nodeParent.put("children", childrenNodeList);
} }
} }
// 查询所有三级节点的下级部门,用于组装 四级节点 List<Long> newDataScopeList = Lists.newArrayList();
childDepts = baseDao.selectChildrenDeptNode(dataScopeDeptList, parentDeptIdList); for (int i = 0; i < dataScopeDeptList.size(); i++) {
deptId = dataScopeDeptList.get(i);
if (!parentDeptIdList.contains(deptId)) {
for (int i = 0; i < NodeListLevel_3.size(); i++) { newDataScopeList.add(deptId);
// 父节点
nodeParent = NodeListLevel_3.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);
}
}
if(childrenNodeList.size() > 0){
nodeParent.put(children, childrenNodeList);
} }
} }
dataScopeDeptList = newDataScopeList;
DeptOption option = new DeptOption(); Map<String, Object> result = Maps.newHashMap();
option.setOptions(NodeListLevel_2); result.put("node", allChildrenNode);
result.put("scope", dataScopeDeptList);
redisUtils.set(RedisKeys.getAdminUserDeptOptionKey(userId), option); result.put("pids", parentDeptIdList);
return result;
} }
} }

Loading…
Cancel
Save