|
@@ -2,21 +2,20 @@ package com.persagy.fm.department.service.impl;
|
|
|
|
|
|
import com.google.common.collect.Lists;
|
|
|
import com.persagy.fm.common.constant.DefaultValueConstants;
|
|
|
+import com.persagy.fm.common.constant.enums.BoolEnum;
|
|
|
import com.persagy.fm.department.model.ConvertDepartmentTool;
|
|
|
import com.persagy.fm.department.model.Department;
|
|
|
-import com.persagy.fm.department.service.IDepartmentService;
|
|
|
-import com.persagy.fm.common.constant.enums.BoolEnum;
|
|
|
+import com.persagy.fm.department.model.dto.QueryDepartmentDTO;
|
|
|
import com.persagy.fm.department.model.dto.QueryDepartmentTreeDTO;
|
|
|
import com.persagy.fm.department.model.vo.ResponseDepartmentTreeItemVO;
|
|
|
import com.persagy.fm.department.service.IDepTreeService;
|
|
|
+import com.persagy.fm.department.service.IDepartmentService;
|
|
|
import com.persagy.fm.department.utils.DepDataUtil;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
@@ -38,21 +37,38 @@ public class DepTreeServiceImpl implements IDepTreeService {
|
|
|
* @version V1.0 2021/3/12 11:58 上午
|
|
|
*/
|
|
|
private Map<Integer, List<Department>> initTreeData(QueryDepartmentTreeDTO queryDepartmentTreeDTO) {
|
|
|
- String checkedId = queryDepartmentTreeDTO.getCheckedId();
|
|
|
- if (checkedId != null) {
|
|
|
- Department checkedDep = departmentService.queryDepartmentDetail(checkedId);
|
|
|
- // 获取部门全路径,计算部门所在层级
|
|
|
- String fullPath = checkedDep.getFullPath();
|
|
|
+ Integer showLevel = getShowLevel(queryDepartmentTreeDTO);
|
|
|
+ queryDepartmentTreeDTO.setShowLevel(showLevel);
|
|
|
+ return initDefaultTreeData(showLevel);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据选中的节点判断需要加载的层级
|
|
|
+ *
|
|
|
+ * @param checkIdsSet 选中的节点
|
|
|
+ * @return 需要加载的层级
|
|
|
+ * @author lixing
|
|
|
+ * @version V1.0 2021/4/28 10:39 上午
|
|
|
+ */
|
|
|
+ private int getShowLevel(Set<String> checkIdsSet) {
|
|
|
+ int result = getDefaultShowLevel();
|
|
|
+
|
|
|
+ if (CollectionUtils.isEmpty(checkIdsSet)) {
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ QueryDepartmentDTO queryDepartmentDTO = new QueryDepartmentDTO();
|
|
|
+ queryDepartmentDTO.setIds(new ArrayList<>(checkIdsSet));
|
|
|
+ List<Department> departments = departmentService.queryDepartmentList(queryDepartmentDTO);
|
|
|
+
|
|
|
+
|
|
|
+ for (Department department : departments) {
|
|
|
+ String fullPath = department.getFullPath();
|
|
|
String separator = "-";
|
|
|
String[] paths = fullPath.split(separator);
|
|
|
- int defaultShowLevel = getDefaultShowLevel();
|
|
|
- int showLevel = Math.max(paths.length, defaultShowLevel);
|
|
|
- // 拼装树时会用到queryDepartmentTreeDTO中的showLevel
|
|
|
- queryDepartmentTreeDTO.setShowLevel(showLevel);
|
|
|
- return initDefaultTreeData(showLevel);
|
|
|
- } else {
|
|
|
- return initDefaultTreeData(getShowLevel(queryDepartmentTreeDTO));
|
|
|
+ result = Math.max(paths.length, result);
|
|
|
}
|
|
|
+
|
|
|
+ return result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -62,9 +78,19 @@ public class DepTreeServiceImpl implements IDepTreeService {
|
|
|
* @return 需要展示的层级
|
|
|
*/
|
|
|
private Integer getShowLevel(QueryDepartmentTreeDTO queryDepartmentTreeDTO) {
|
|
|
+ // 如果查询条件中有选中的节点,先判断选中节点的展示等级
|
|
|
+ List<String> checkedIds = queryDepartmentTreeDTO.getCheckedIds();
|
|
|
+ if (checkedIds == null) {
|
|
|
+ checkedIds = Lists.newArrayList();
|
|
|
+ }
|
|
|
+ Set<String> checkIdsSet = new HashSet<>(checkedIds);
|
|
|
+ int showLevelFromCheckedIds = getShowLevel(checkIdsSet);
|
|
|
+
|
|
|
Integer showLevel = queryDepartmentTreeDTO.getShowLevel();
|
|
|
if (showLevel == null) {
|
|
|
- showLevel = getDefaultShowLevel();
|
|
|
+ showLevel = showLevelFromCheckedIds;
|
|
|
+ } else {
|
|
|
+ showLevel = Math.max(showLevelFromCheckedIds, showLevel);
|
|
|
}
|
|
|
return showLevel;
|
|
|
}
|
|
@@ -104,7 +130,7 @@ public class DepTreeServiceImpl implements IDepTreeService {
|
|
|
* @param levelDepListMap level -> depList
|
|
|
* @param level 当前层级
|
|
|
* @param parentDepIdList 上一层部门Id列表
|
|
|
- * @param showLevel 前端传入的要展示的层级
|
|
|
+ * @param showLevel 前端传入的要展示的层级
|
|
|
* @return 需要展示的每一层级的部门:level -> depList
|
|
|
* @author lixing
|
|
|
* @version V1.0 2021/3/12 12:02 下午
|
|
@@ -133,9 +159,9 @@ public class DepTreeServiceImpl implements IDepTreeService {
|
|
|
* 获取节点的子节点,追加到部门树
|
|
|
*
|
|
|
* @param levelParentIdMap level -> { parentId -> depList }
|
|
|
- * @param treeItem 节点
|
|
|
- * @param level 节点的下一级,例如根节点的下一级为 1
|
|
|
- * @param showLevel 前端传入的需要展示的层级
|
|
|
+ * @param treeItem 节点
|
|
|
+ * @param level 节点的下一级,例如根节点的下一级为 1
|
|
|
+ * @param showLevel 前端传入的需要展示的层级
|
|
|
* @author lixing
|
|
|
* @version V1.0 2021/3/12 3:12 下午
|
|
|
*/
|