继上一篇文章
最低层的数据往上层累加 ,计算总数
private List<Map<String, Object>> setTreeData(String officeId, List<Office> officeList, List<String> ids, List<Map<String, Object>> all) {
List<Map<String, Object>> list = new ArrayList<>();
if (!CollectionUtils.isEmpty(officeList)) {
for (Office office : officeList) {
Map<String, Object> map = new HashMap<>();
map.put("id", office.getId());
map.put("title", office.getName());
//查询数据量
List<User> sList = groupMachine(schoolId, camBusiness.getId());
Integer total = doHandleMachine(sList, status, date, silentType);
map.put("num", total);
String parentId = "";
List<Office> parents = officeDao.findByParentId(officeId, office.getId());
if (CollectionUtils.isNotEmpty(parents)) {//判断当前节点是否有子节点
List list1 = setTreeData(officeId, parents, ids, all);
map.put("children", list1);
parentId = camBusiness.getId();
} else {
ids.add(office.getId());
map.put("children", new ArrayList<>());
}
list.add(map);
//统计数量 //最上层数据赋值
for (Map<String, Object> objectMap : list) {
if (StringUtils.isNotBlank(parentId) && parentId.equals(objectMap.get("id"))) {
List<Map<String, Object>> mapList = (List<Map<String, Object>>) objectMap.get("children");
int sum = 0;
for (Map<String, Object> stringObjectMap : mapList) {
Integer num = (Integer) stringObjectMap.get("num");
sum += num;
}
map.put("num", sum);
}
}
}
}
return list;
}
最低层的数据往上层累加 ,每一层包含的集合,相同数据合并
1.先把每层的数据集合赋值给该有的节点上
2.每一层进行累加
private List<Map<String, Object>> setOderTreeTopData(List<Map<String, Object>> allTree) {
if (!CollectionUtils.isEmpty(allTree)) {
for (Map<String, Object> objectMap : allTree) {
String parentId = "";
Boolean flag = false;
List<Map<String, Object>> mapList = (List<Map<String, Object>>) objectMap.get("children");
if (CollectionUtils.isNotEmpty(mapList)) {
parentId = (String) objectMap.get("id");
List<Company> todayNewList = new ArrayList<>();
for (Map<String, Object> map : mapList) {
if (map.get("userList") == null) {
map.put("userList", new ArrayList<Company>());
} else {
List<Company> list = (List<Company>) map.get("userList");
for (Company vo : list) {
Company vo = new Company();
vo.setTitle(vo.getTitle());
vo.setOrderNum(vo.getOrderNum());
vo.setLastOrderNum(vo.getLastOrderNum());
vo.setRate(vo.getRate());
vo.setFlag(vo.getFlag());
todayNewList.add(vo);
}
}
}
objectMap.put("userList", merge(todayNewList));
setOderTreeTopData(mapList); //递归
}
//处理最上层的数据
if (StringUtils.isNotBlank(parentId) && parentId.equals(objectMap.get("id"))) {
List<Map<String, Object>> mapList2 = (List<Map<String, Object>>) objectMap.get("children");
List<Company> userList = new ArrayList<>();
for (Map<String, Object> stringObjectMap : mapList2) {
List<Company> list = (List<Company>) stringObjectMap.get("userList");
for (Company vo : list) {
if (vo.getFlag() != null && vo.getFlag()) {
flag = true;
}
Company vo = new Company();
vo.setTitle(vo.getTitle());
vo.setOrderNum(vo.getOrderNum());
vo.setLastOrderNum(vo.getLastOrderNum());
vo.setRate(vo.getRate());
vo.setFlag(vo.getFlag());
userList.add(vo);
}
}
objectMap.put("flag", flag);
objectMap.put("userList", merge(userList));//处理重复的数据 计算
}
}
}
return allTree;
}