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> armamentTree( @ApiParam(value = "父节点ID,指定从哪个节点开始返回装备树") Integer id) { List nodeList = new ArrayList<>(); List 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> organizedTree(Integer id) { List nodeList = new ArrayList<>(); List organizationList = fightpowerhierarchyService.list(); //排序 organizationList.sort(Comparator.comparingInt(Fightpowerhierarchy::getId)); addTreeNodeToList(nodeList, id, organizationList); return ResponseData.success(nodeList); } /** * 增加树节点到list */ private void addTreeNodeToList(List nodeList, Integer id, List list) { Map entityMap = idMap(list); Map> 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 void buildOneEntity(List nodeList, T entity, Map> 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 void buildRecursionArmamentTree(TreeNode info, Map> parentMap) { Integer key = Integer.parseInt(info.getKey()); if (parentMap.containsKey(key)) { List 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 Map idMap(List list) { return list.stream().collect(Collectors.toMap(TreeEntity::getId, a -> a)); } private Map> parentIdMap(List list) { return list.stream().collect(Collectors.groupingBy(a -> { if (a.getParentId() == null) { a.setParentId(0); } return a.getParentId(); }, LinkedHashMap::new, Collectors.toList())); } }