菜单树json格式
{
"metricsCategoryId": null,
"metricsCategoryCode": null,
"metricsCategoryName": "全部",
"parentMetricsCategoryCode": null,
"metricsCount": 7,
"children": [
{
"metricsCategoryId": 46,
"metricsCategoryCode": "sukt8mz1",
"metricsCategoryName": "一级分类",
"parentMetricsCategoryCode": null,
"metricsCount": 0,
"children": [
{
"metricsCategoryId": 47,
"metricsCategoryCode": "y6pt8mz1",
"metricsCategoryName": "二级分类",
"parentMetricsCategoryCode": "sukt8mz1",
"metricsCount": 0,
"children": [
{
"metricsCategoryId": 48,
"metricsCategoryCode": "pdku8mz1",
"metricsCategoryName": "三级分类",
"parentMetricsCategoryCode": "y6pt8mz1",
"metricsCount": 0,
"children": [
{
"metricsCategoryId": 49,
"metricsCategoryCode": "mequ8mz1",
"metricsCategoryName": "四级分类",
"parentMetricsCategoryCode": "pdku8mz1",
"metricsCount": 0,
"children": []
}
]
},
{
"metricsCategoryId": 52,
"metricsCategoryCode": "atv8hmz1",
"metricsCategoryName": "三级分类2",
"parentMetricsCategoryCode": "y6pt8mz1",
"metricsCount": 0,
"children": [
{
"metricsCategoryId": 53,
"metricsCategoryCode": "i78ahmz1",
"metricsCategoryName": "四级分类2",
"parentMetricsCategoryCode": "atv8hmz1",
"metricsCount": 0,
"children": []
}
]
},
{
"metricsCategoryId": 57,
"metricsCategoryCode": "i3dg0002",
"metricsCategoryName": "三级分类3",
"parentMetricsCategoryCode": "y6pt8mz1",
"metricsCount": 0,
"children": []
}
]
}
]
},
{
"metricsCategoryId": 54,
"metricsCategoryCode": "ucemhmz1",
"metricsCategoryName": "一级分类2",
"parentMetricsCategoryCode": null,
"metricsCount": 0,
"children": [
{
"metricsCategoryId": 55,
"metricsCategoryCode": "scqshmz1",
"metricsCategoryName": "二级分类2",
"parentMetricsCategoryCode": "ucemhmz1",
"metricsCount": 0,
"children": []
}
]
}
]
}
方法
public List<CategoryMetricsVO> getList(String metricsAlias) {
// 获取全部菜单数据
List<CdpMetricsCategory> list = this.list();
// 转换成前端返回VO对象
List<MetricsCategoryVO> categoryVoS = mapperFactory.getMapperFacade().mapAsList(list, MetricsCategoryVO.class);
// 转为上方树型结构 buildCategoryTree()方法自己实现即可
categoryVoS = buildCategoryTree(categoryVoS);
// 1、key:code,value:该code从父级到自己级别的name
List<Map<String, List<String>>> mapList = new ArrayList<>();
for (MetricsCategoryVO metricsCategoryVO : categoryVoS) {
Map<String, List<String>> mapTemp = new LinkedHashMap<>();
List<String> nameLists = new ArrayList<>();
Map<String, List<String>> categoryMetricsVOs = this.getCategoryMetricsVOs(metricsCategoryVO, mapTemp, nameLists);
mapList.add(categoryMetricsVOs);
}
List<CategoryMetricsVO> metricsVOs = mapperFactory.getMapperFacade().mapAsList(list, CategoryMetricsVO.class);
// 2、遍历匹配,有序添加进集合
List<CategoryMetricsVO> metricsVOList = new ArrayList<>(mapList.size());
for (Map<String, List<String>> map : mapList) {
map.forEach((key, value) -> {
metricsVOs.forEach(m -> {
if (StringUtils.equals(m.getMetricsCategoryCode(), key)) {
m.setMetricsCategoryName(String.join("/", value));
// 3、根据Code查找其对应指标
m.setModelMetricsVOS(this.queryAllByCodeAndTableType(m.getMetricsCategoryCode(), metricsAlias));
metricsVOList.add(m);
}
});
});
}
// 如果 metricsAlias 不为null,metricsAlias
if (StringUtils.isNotBlank(metricsAlias)) {
log.info("中文名字:{} 不为null,模糊查询返回", metricsAlias);
return metricsVOList.stream().filter(s -> CollectionUtil.isNotEmpty(s.getModelMetricsVOS())).collect(Collectors.toList());
}
return metricsVOList;
}
/**
* 向下递归查询顶级类型的各层级名称全称
*/
private Map<String, List<String>> getCategoryMetricsVOs(MetricsCategoryVO metricsCategoryVO, Map<String, List<String>> mapTemp, List<String> nameLists) {
nameLists.add(metricsCategoryVO.getMetricsCategoryName());
mapTemp.put(metricsCategoryVO.getMetricsCategoryCode(), nameLists);
// 必须新建一个,因为下方map中的value是存的nameLists的内存地址引用
List<MetricsCategoryVO> children = metricsCategoryVO.getChildren();
if (CollectionUtil.isNotEmpty(children)) {
for (MetricsCategoryVO c : children) {
List<String> strings = new ArrayList<>(nameLists);
// 去掉 mapTemp.put(c.getMetricsCategoryCode(), strings);放开 下面的 /*else{....}*/ 即可变为获取到最后一级
mapTemp.put(c.getMetricsCategoryCode(), strings);
getCategoryMetricsVOs(c, mapTemp, strings);
}
} /*else {
List<String> newNameLists = new ArrayList<>(nameLists);
mapTemp.put(metricsCategoryVO.getMetricsCategoryCode(), newNameLists);
}*/
return mapTemp;
}
结果:
1、获取每级
{
"data":[
{
"metricsCategoryCode":"sukt8mz1",
"metricsCategoryName":"一级分类",
"modelMetricsVOS":[]
},
{
"metricsCategoryCode":"y6pt8mz1",
"metricsCategoryName":"一级分类/二级分类",
"modelMetricsVOS":[]
},
{
"metricsCategoryCode":"pdku8mz1",
"metricsCategoryName":"一级分类/二级分类/三级分类",
"modelMetricsVOS":[]
},
{
"metricsCategoryCode":"mequ8mz1",
"metricsCategoryName":"一级分类/二级分类/三级分类/四级分类",
"modelMetricsVOS":[]
},
{
"metricsCategoryCode":"zkvu8mz1",
"metricsCategoryName":"一级分类/二级分类/三级分类/四级分类/五级分类",
"modelMetricsVOS":[]
},
{
"metricsCategoryCode":"atv8hmz1",
"metricsCategoryName":"一级分类/二级分类/三级分类2",
"modelMetricsVOS":[]
},
{
"metricsCategoryCode":"i78ahmz1",
"metricsCategoryName":"一级分类/二级分类/三级分类2/四级分类2",
"modelMetricsVOS":[]
},
{
"metricsCategoryCode":"ucemhmz1",
"metricsCategoryName":"一级分类2",
"modelMetricsVOS":[]
},
{
"metricsCategoryCode":"scqshmz1",
"metricsCategoryName":"一级分类2/二级分类2",
"modelMetricsVOS":[]
}
]
}
2、只获取每个层级最后一级
{
"data": [
{
"metricsCategoryCode": "zkvu8mz1",
"metricsCategoryName": "一级分类/二级分类/三级分类/四级分类/五级分类",
"modelMetricsVOS": []
},
{
"metricsCategoryCode": "i78ahmz1",
"metricsCategoryName": "一级分类/二级分类/三级分类2/四级分类2",
"modelMetricsVOS": []
},
{
"metricsCategoryCode": "i3dg0002",
"metricsCategoryName": "一级分类/二级分类/三级分类3",
"modelMetricsVOS": []
},
{
"metricsCategoryCode": "scqshmz1",
"metricsCategoryName": "一级分类2/二级分类2",
"modelMetricsVOS": []
}
]
}