simulation-backend/src/main/java/com/hivekion/baseData/controller/TreeController.java
2025-08-08 13:31:51 +08:00

124 lines
4.3 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.hivekion.baseData.controller;
import com.hivekion.baseData.domain.TblEntity;
import com.hivekion.baseData.entity.Fightpowerhierarchy;
import com.hivekion.baseData.service.FightpowerhierarchyService;
import com.hivekion.baseData.service.ITblEntityService;
import com.hivekion.common.entity.ResponseData;
import com.hivekion.common.entity.TreeEntity;
import com.hivekion.common.entity.TreeNode;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/tree")
@Api(value = "", tags = {"树数据-系统中各类树接口"})
public class TreeController {
@Resource
private ITblEntityService tblEntityService;
@Resource
private FightpowerhierarchyService fightpowerhierarchyService;
@GetMapping("/armament")
@ApiOperation(value = "装备树", notes = "")
public ResponseData<List<TreeNode>> armamentTree(
@ApiParam(value = "父节点ID指定从哪个节点开始返回装备树") Integer id) {
List<TreeNode> nodeList = new ArrayList<>();
List<TblEntity> list = tblEntityService.list();
//排序
list.sort((a, b) -> {
if (a.getDisplayIndex() == null) {
a.setDisplayIndex("999");
}
if (b.getDisplayIndex() == null) {
b.setDisplayIndex("999");
}
return Integer.compare(Integer.parseInt(a.getDisplayIndex()),
Integer.parseInt(b.getDisplayIndex()));
});
addTreeNodeToList(nodeList, id, list);
return ResponseData.success(nodeList);
}
@GetMapping("/organization")
@ApiOperation(value = "组织机构树", notes = "")
public ResponseData<List<TreeNode>> organizedTree(Integer id) {
List<TreeNode> nodeList = new ArrayList<>();
List<Fightpowerhierarchy> organizationList = fightpowerhierarchyService.list();
//排序
organizationList.sort(Comparator.comparingInt(Fightpowerhierarchy::getId));
addTreeNodeToList(nodeList, id, organizationList);
return ResponseData.success(nodeList);
}
/**
* 增加树节点到list
*/
private <T extends TreeEntity> void addTreeNodeToList(List<TreeNode> nodeList, Integer id, List<T> list) {
Map<Integer, T> entityMap = idMap(list);
Map<Integer, List<T>> parentMap = parentIdMap(list);
if (id != null) {
T entity = entityMap.get(id);
if (entity != null) {
buildOneEntity(nodeList, entity, parentMap);
}
} else {
parentMap.forEach((key, value) -> {
if (key == null || key <= 0) {
value.forEach(t -> buildOneEntity(nodeList, t, parentMap));
}
});
}
}
/**
* 建立一个节点的树形数据
*/
private <T extends TreeEntity> void buildOneEntity(List<TreeNode> nodeList, T entity,
Map<Integer, List<T>> parentMap) {
TreeNode node = new TreeNode(String.valueOf(entity.getId()), entity.getTitleName(),
String.valueOf(entity.getId()));
nodeList.add(node);
node.setData(entity);
buildRecursionArmamentTree(node, parentMap);
}
private <T extends TreeEntity> void buildRecursionArmamentTree(TreeNode info, Map<Integer, List<T>> parentMap) {
Integer key = Integer.parseInt(info.getKey());
if (parentMap.containsKey(key)) {
List<TreeNode> children = new ArrayList<>();
info.setChildren(children);
parentMap.get(key).forEach(a -> {
TreeNode innerNode = new TreeNode(String.valueOf(a.getId()), a.getTitleName(),
String.valueOf(a.getId()));
children.add(innerNode);
buildRecursionArmamentTree(innerNode, parentMap);
});
}
}
private <T extends TreeEntity> Map<Integer, T> idMap(List<T> list) {
return list.stream().collect(Collectors.toMap(TreeEntity::getId, a -> a));
}
private <T extends TreeEntity> Map<Integer, List<T>> parentIdMap(List<T> list) {
return list.stream().collect(Collectors.groupingBy(a -> {
if (a.getParentId() == null) {
a.setParentId(0);
}
return a.getParentId();
}, LinkedHashMap::new, Collectors.toList()));
}
}