Controller
@PostMapping("/getPropertyRightTree")
@ApiOperation(value="获取产权树列表")
public AjaxResult getPropertyRightTree() {
List<EnterpriseTreeVo> resultList = cqsPropertyRightInfoService.getPropertyRightTree();
return getObject(resultList);
}
service
@Override
public List<EnterpriseTreeVo> getPropertyRightTree() {
List<EnterpriseTreeVo> enterpriseTreeVoList = cqsPropertyRightInfoMapper.getPropertyRightTree2();
log.info("所有企业信息:", enterpriseTreeVoList);
//获取一级企业父级id
LambdaQueryWrapper<CqsPropertyRightInfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(CqsPropertyRightInfo::getZzjgdm, Constants.CQS_ZZJGDM);
CqsPropertyRightInfo cqsPropertyRightInfo = cqsPropertyRightInfoMapper.selectOne(queryWrapper);
//数据组装成树形结构返回
EnterpriseTree enterpriseTree = new EnterpriseTree(enterpriseTreeVoList);
List<EnterpriseTreeVo> treeVoList = enterpriseTree.getTree(cqsPropertyRightInfo.getParentId());
log.info("企业信息树型返回:", treeVoList);
return treeVoList;
}
mapper
<select id="getPropertyRightTree2" resultType="com.cgnpc.cqs.xsqy.model.EnterpriseTreeVo">
SELECT
c1.ZZJGDM AS id,
c1. NAME,
c1.PARENT_ID AS upCompanyId,
c1.ORDER_NO AS orderType,
c2. NAME AS upCompanyName
FROM
cqs_property_right_info c1
LEFT JOIN cqs_property_right_info c2 ON c1.parent_id = c2.zzjgdm
</select>
组装类
package com.cgnpc.cqs.xsqy.util;
import com.cgnpc.cqs.xsqy.model.EnterpriseTreeVo;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 企业信息树数据组装类
*/
public class EnterpriseTree {
private List<EnterpriseTreeVo> enterprises;
public EnterpriseTree(List<EnterpriseTreeVo> enterprises) {
this.enterprises = enterprises;
}
public List<EnterpriseTreeVo> getTree(String parentId) {
List<EnterpriseTreeVo> tree = new ArrayList<>();
Map<String, List<EnterpriseTreeVo>> map = new HashMap<>();
for (EnterpriseTreeVo enterprises : enterprises) {
if (!map.containsKey(enterprises.getUpCompanyId())) {
map.put(enterprises.getUpCompanyId(), new ArrayList<>());
}
map.get(enterprises.getUpCompanyId()).add(enterprises);
}
if (map.containsKey(parentId)) {
for (EnterpriseTreeVo enterprises : map.get(parentId)) {
tree.add(enterprises);
addChildren(map, enterprises);
}
}
return tree;
}
//递归调用返回子集信息
private void addChildren(Map<String, List<EnterpriseTreeVo>> map, EnterpriseTreeVo enterprises) {
List<EnterpriseTreeVo> treeChildren = new ArrayList<>();
if (map.containsKey(enterprises.getId())) {
for (EnterpriseTreeVo child : map.get(enterprises.getId())) {
treeChildren.add(child);
addChildren(map, child);
}
enterprises.setChildren(treeChildren);
}
}
}