|
|
|
|
@@ -7,9 +7,11 @@ import cn.hutool.core.util.IdUtil;
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
|
|
import com.njcn.csdevice.api.EquipmentFeignClient;
|
|
|
|
|
import com.njcn.csdevice.constant.DataParam;
|
|
|
|
|
import com.njcn.csdevice.enums.LineBaseEnum;
|
|
|
|
|
import com.njcn.csdevice.mapper.*;
|
|
|
|
|
import com.njcn.csdevice.pojo.dto.CsEquipmentDeliveryDTO;
|
|
|
|
|
import com.njcn.csdevice.pojo.dto.DevDetailDTO;
|
|
|
|
|
import com.njcn.csdevice.pojo.dto.LineParamDTO;
|
|
|
|
|
import com.njcn.csdevice.pojo.param.CsLedgerParam;
|
|
|
|
|
@@ -18,7 +20,10 @@ import com.njcn.csdevice.pojo.vo.CsLedgerVO;
|
|
|
|
|
import com.njcn.csdevice.service.*;
|
|
|
|
|
import com.njcn.redis.utils.RedisUtil;
|
|
|
|
|
import com.njcn.system.api.AreaFeignClient;
|
|
|
|
|
import com.njcn.system.api.DictTreeFeignClient;
|
|
|
|
|
import com.njcn.system.enums.DicDataEnum;
|
|
|
|
|
import com.njcn.system.pojo.po.Area;
|
|
|
|
|
import com.njcn.system.pojo.vo.DictTreeVO;
|
|
|
|
|
import lombok.AllArgsConstructor;
|
|
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
@@ -49,6 +54,8 @@ public class CsLedgerServiceImpl extends ServiceImpl<CsLedgerMapper, CsLedger> i
|
|
|
|
|
private final CsDevModelRelationService csDevModelRelationService;
|
|
|
|
|
private final CsEquipmentDeliveryMapper csEquipmentDeliveryMapper;
|
|
|
|
|
private final ICsDataSetService csDataSetService;
|
|
|
|
|
private final EquipmentFeignClient equipmentFeignClient;
|
|
|
|
|
private final DictTreeFeignClient dictTreeFeignClient;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public List<CsLedgerVO> getLedgerTree() {
|
|
|
|
|
@@ -72,6 +79,29 @@ public class CsLedgerServiceImpl extends ServiceImpl<CsLedgerMapper, CsLedger> i
|
|
|
|
|
/*获取用户工程,设备信息过滤*/
|
|
|
|
|
List<String> roleengineer = roleEngineerDevService.getRoleengineer();
|
|
|
|
|
List<String> device = roleEngineerDevService.getDevice();
|
|
|
|
|
//区分治理装置和云前置装置
|
|
|
|
|
List<String> zhiLianDevice = new ArrayList<>();
|
|
|
|
|
List<String> cldDevice = new ArrayList<>();
|
|
|
|
|
List<CsEquipmentDeliveryDTO> csEquipmentDeliveryPOS = equipmentFeignClient.queryDeviceById(device).getData();
|
|
|
|
|
if (CollectionUtil.isNotEmpty(csEquipmentDeliveryPOS)) {
|
|
|
|
|
DictTreeVO vo1 = dictTreeFeignClient.queryByCode(DicDataEnum.DEV_CLD.getCode()).getData();
|
|
|
|
|
Optional.ofNullable(vo1)
|
|
|
|
|
.map(DictTreeVO::getId)
|
|
|
|
|
.ifPresent(id -> csEquipmentDeliveryPOS.stream()
|
|
|
|
|
.filter(item -> Objects.equals(item.getDevType(), id))
|
|
|
|
|
.map(CsEquipmentDeliveryDTO::getId)
|
|
|
|
|
.forEach(cldDevice::add)
|
|
|
|
|
);
|
|
|
|
|
DictTreeVO vo2 = dictTreeFeignClient.queryByCode(DicDataEnum.CONNECT_DEV.getCode()).getData();
|
|
|
|
|
Optional.ofNullable(vo2)
|
|
|
|
|
.map(DictTreeVO::getId)
|
|
|
|
|
.ifPresent(id -> csEquipmentDeliveryPOS.stream()
|
|
|
|
|
.filter(item -> Objects.equals(item.getDevType(), id))
|
|
|
|
|
.map(CsEquipmentDeliveryDTO::getId)
|
|
|
|
|
.forEach(zhiLianDevice::add)
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
engineeringList = allList.stream().filter(item->roleengineer.contains(item.getId())).collect(Collectors.toList());
|
|
|
|
|
List<CsLedgerVO> projectList = allList.stream().filter(item -> item.getLevel().equals(LineBaseEnum.PROJECT_LEVEL.getCode())).sorted(Comparator.comparing(CsLedgerVO::getSort)).collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
@@ -85,7 +115,20 @@ public class CsLedgerServiceImpl extends ServiceImpl<CsLedgerMapper, CsLedger> i
|
|
|
|
|
));
|
|
|
|
|
|
|
|
|
|
List<CsLedgerVO> deviceList = allList.stream()
|
|
|
|
|
.filter(item -> device.contains(item.getId()) && !Objects.equals(item.getPid(), "0"))
|
|
|
|
|
.filter(item -> zhiLianDevice.contains(item.getId()) && !Objects.equals(item.getPid(), "0"))
|
|
|
|
|
.peek(item -> {
|
|
|
|
|
CsEquipmentDeliveryPO po = poMap.get(item.getId());
|
|
|
|
|
item.setComFlag(po.getRunStatus());
|
|
|
|
|
item.setNDId(po.getNdid());
|
|
|
|
|
item.setType("device");
|
|
|
|
|
item.setProcess(po.getProcess());
|
|
|
|
|
})
|
|
|
|
|
.filter(item -> Objects.equals(poMap.get(item.getId()).getUsageStatus(), 1))
|
|
|
|
|
.sorted(Comparator.comparing(CsLedgerVO::getSort))
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
List<CsLedgerVO> cldDeviceList = allList.stream()
|
|
|
|
|
.filter(item -> cldDevice.contains(item.getId()) && !Objects.equals(item.getPid(), "0"))
|
|
|
|
|
.peek(item -> {
|
|
|
|
|
CsEquipmentDeliveryPO po = poMap.get(item.getId());
|
|
|
|
|
item.setComFlag(po.getRunStatus());
|
|
|
|
|
@@ -116,11 +159,35 @@ public class CsLedgerServiceImpl extends ServiceImpl<CsLedgerMapper, CsLedger> i
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
checkDevSetData(deviceList);
|
|
|
|
|
deviceList.forEach(dev -> dev.setChildren(getChildren(dev, finalLineList)));
|
|
|
|
|
projectList.forEach(pro -> pro.setChildren(getChildren(pro, deviceList)));
|
|
|
|
|
engineeringList.forEach(eng -> eng.setChildren(getChildren(eng, projectList)));
|
|
|
|
|
engineeringList = engineeringList.stream().sorted(Comparator.comparing(CsLedgerVO::getSort)).collect(Collectors.toList());
|
|
|
|
|
List<CsLedgerVO> engineeringList1 = new ArrayList<>();
|
|
|
|
|
List<CsLedgerVO> projectList1 = new ArrayList<>();
|
|
|
|
|
List<String> dev = deviceList.stream().map(CsLedgerVO::getId).collect(Collectors.toList());
|
|
|
|
|
List<CsLedgerVO> ledger1 = getProAndEngineer(dev);
|
|
|
|
|
if (CollectionUtil.isNotEmpty(ledger1)) {
|
|
|
|
|
deviceList.forEach(dev1 -> dev1.setChildren(getChildren(dev1, finalLineList)));
|
|
|
|
|
engineeringList1 = ledger1.stream().filter(item -> item.getLevel().equals(LineBaseEnum.ENGINEERING_LEVEL.getCode())).sorted(Comparator.comparing(CsLedgerVO::getSort)).collect(Collectors.toList());
|
|
|
|
|
projectList1 = ledger1.stream().filter(item -> item.getLevel().equals(LineBaseEnum.PROJECT_LEVEL.getCode())).sorted(Comparator.comparing(CsLedgerVO::getSort)).collect(Collectors.toList());
|
|
|
|
|
projectList1.forEach(pro -> pro.setChildren(getChildren(pro, deviceList)));
|
|
|
|
|
List<CsLedgerVO> finalProjectList = projectList1;
|
|
|
|
|
engineeringList1.forEach(eng -> eng.setChildren(getChildren(eng, finalProjectList)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
checkDevSetData(cldDeviceList);
|
|
|
|
|
List<CsLedgerVO> engineeringList2 = new ArrayList<>();
|
|
|
|
|
List<CsLedgerVO> projectList2 = new ArrayList<>();
|
|
|
|
|
List<String> dev2 = cldDeviceList.stream().map(CsLedgerVO::getId).collect(Collectors.toList());
|
|
|
|
|
List<CsLedgerVO> ledger2 = getProAndEngineer(dev2);
|
|
|
|
|
if (CollectionUtil.isNotEmpty(ledger2)) {
|
|
|
|
|
cldDeviceList.forEach(dev1 -> dev1.setChildren(getChildren(dev1, finalLineList)));
|
|
|
|
|
engineeringList2 = ledger2.stream().filter(item -> item.getLevel().equals(LineBaseEnum.ENGINEERING_LEVEL.getCode())).sorted(Comparator.comparing(CsLedgerVO::getSort)).collect(Collectors.toList());
|
|
|
|
|
projectList2 = ledger2.stream().filter(item -> item.getLevel().equals(LineBaseEnum.PROJECT_LEVEL.getCode())).sorted(Comparator.comparing(CsLedgerVO::getSort)).collect(Collectors.toList());
|
|
|
|
|
projectList2.forEach(pro -> pro.setChildren(getChildren(pro, cldDeviceList)));
|
|
|
|
|
List<CsLedgerVO> finalProjectList = projectList2;
|
|
|
|
|
engineeringList2.forEach(eng -> eng.setChildren(getChildren(eng, finalProjectList)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//获取便携式设备树
|
|
|
|
|
CsLedgerVO portable = new CsLedgerVO();
|
|
|
|
|
portable.setLevel(0);
|
|
|
|
|
@@ -150,7 +217,7 @@ public class CsLedgerServiceImpl extends ServiceImpl<CsLedgerMapper, CsLedger> i
|
|
|
|
|
.filter(c -> poMap2.get(c.getId()).getUsageStatus() == 1)
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
portables = portables.stream().sorted(Comparator.comparing(CsLedgerVO::getSort)).collect(Collectors.toList());
|
|
|
|
|
portables.forEach(dev -> dev.setChildren(getChildren(dev, finalLineList)));
|
|
|
|
|
portables.forEach(dev3 -> dev3.setChildren(getChildren(dev3, finalLineList)));
|
|
|
|
|
checkDevSetData(portables);
|
|
|
|
|
portable.setChildren(portables);
|
|
|
|
|
|
|
|
|
|
@@ -159,7 +226,16 @@ public class CsLedgerServiceImpl extends ServiceImpl<CsLedgerMapper, CsLedger> i
|
|
|
|
|
government.setName(DataParam.governmentDev);
|
|
|
|
|
government.setPid("0");
|
|
|
|
|
government.setId(IdUtil.simpleUUID());
|
|
|
|
|
government.setChildren(engineeringList);
|
|
|
|
|
government.setChildren(engineeringList1);
|
|
|
|
|
|
|
|
|
|
//获取云前置设备树
|
|
|
|
|
CsLedgerVO cld = new CsLedgerVO();
|
|
|
|
|
cld.setLevel(0);
|
|
|
|
|
cld.setName(DataParam.cldDev);
|
|
|
|
|
cld.setPid("0");
|
|
|
|
|
cld.setId(IdUtil.simpleUUID());
|
|
|
|
|
cld.setChildren(engineeringList2);
|
|
|
|
|
|
|
|
|
|
List<CsLedgerVO> tree = new ArrayList<>();
|
|
|
|
|
if (CollUtil.isNotEmpty(portables)) {
|
|
|
|
|
tree.add(portable);
|
|
|
|
|
@@ -167,6 +243,9 @@ public class CsLedgerServiceImpl extends ServiceImpl<CsLedgerMapper, CsLedger> i
|
|
|
|
|
if (CollUtil.isNotEmpty(deviceList)) {
|
|
|
|
|
tree.add(government);
|
|
|
|
|
}
|
|
|
|
|
if (CollUtil.isNotEmpty(cldDeviceList)) {
|
|
|
|
|
tree.add(cld);
|
|
|
|
|
}
|
|
|
|
|
return tree;
|
|
|
|
|
}
|
|
|
|
|
//剔除未接入的设备(根据status判断不太稳,所有这里直接判断该设备有没有对应的模板指标)
|
|
|
|
|
@@ -205,6 +284,28 @@ public class CsLedgerServiceImpl extends ServiceImpl<CsLedgerMapper, CsLedger> i
|
|
|
|
|
/*获取用户工程,设备信息过滤*/
|
|
|
|
|
List<String> roleengineer = roleEngineerDevService.getRoleengineer();
|
|
|
|
|
List<String> device = roleEngineerDevService.getDevice();
|
|
|
|
|
|
|
|
|
|
List<String> zhiLianDevice = new ArrayList<>();
|
|
|
|
|
List<String> cldDevice = new ArrayList<>();
|
|
|
|
|
List<CsEquipmentDeliveryDTO> csEquipmentDeliveryPOS = equipmentFeignClient.queryDeviceById(device).getData();
|
|
|
|
|
if (CollectionUtil.isNotEmpty(csEquipmentDeliveryPOS)) {
|
|
|
|
|
DictTreeVO vo1 = dictTreeFeignClient.queryByCode(DicDataEnum.DEV_CLD.getCode()).getData();
|
|
|
|
|
Optional.ofNullable(vo1)
|
|
|
|
|
.map(DictTreeVO::getId)
|
|
|
|
|
.ifPresent(id -> csEquipmentDeliveryPOS.stream()
|
|
|
|
|
.filter(item -> Objects.equals(item.getDevType(), id))
|
|
|
|
|
.map(CsEquipmentDeliveryDTO::getId)
|
|
|
|
|
.forEach(cldDevice::add)
|
|
|
|
|
);
|
|
|
|
|
DictTreeVO vo2 = dictTreeFeignClient.queryByCode(DicDataEnum.CONNECT_DEV.getCode()).getData();
|
|
|
|
|
Optional.ofNullable(vo2)
|
|
|
|
|
.map(DictTreeVO::getId)
|
|
|
|
|
.ifPresent(id -> csEquipmentDeliveryPOS.stream()
|
|
|
|
|
.filter(item -> Objects.equals(item.getDevType(), id))
|
|
|
|
|
.map(CsEquipmentDeliveryDTO::getId)
|
|
|
|
|
.forEach(zhiLianDevice::add)
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
engineeringList = allList.stream().filter(item->roleengineer.contains(item.getId())).collect(Collectors.toList());
|
|
|
|
|
List<CsLedgerVO> projectList = allList.stream().filter(item -> item.getLevel().equals(LineBaseEnum.PROJECT_LEVEL.getCode())).sorted(Comparator.comparing(CsLedgerVO::getSort)).collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
@@ -217,8 +318,9 @@ public class CsLedgerServiceImpl extends ServiceImpl<CsLedgerMapper, CsLedger> i
|
|
|
|
|
csEquipmentDeliveryMapper::selectById
|
|
|
|
|
));
|
|
|
|
|
|
|
|
|
|
//获取治理设备
|
|
|
|
|
List<CsLedgerVO> deviceList = allList.stream()
|
|
|
|
|
.filter(item -> device.contains(item.getId()) && !Objects.equals(item.getPid(), "0"))
|
|
|
|
|
.filter(item -> zhiLianDevice.contains(item.getId()) && !Objects.equals(item.getPid(), "0"))
|
|
|
|
|
.peek(item -> {
|
|
|
|
|
CsEquipmentDeliveryPO po = poMap.get(item.getId());
|
|
|
|
|
item.setComFlag(po.getRunStatus());
|
|
|
|
|
@@ -230,9 +332,45 @@ public class CsLedgerServiceImpl extends ServiceImpl<CsLedgerMapper, CsLedger> i
|
|
|
|
|
.sorted(Comparator.comparing(CsLedgerVO::getSort))
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
List<CsLedgerVO> engineeringList1 = new ArrayList<>();
|
|
|
|
|
List<CsLedgerVO> projectList1 = new ArrayList<>();
|
|
|
|
|
checkDevSetData(deviceList);
|
|
|
|
|
projectList.forEach(pro -> pro.setChildren(getChildren(pro, deviceList)));
|
|
|
|
|
engineeringList.forEach(eng -> eng.setChildren(getChildren(eng, projectList)));
|
|
|
|
|
List<String> dev = deviceList.stream().map(CsLedgerVO::getId).collect(Collectors.toList());
|
|
|
|
|
List<CsLedgerVO> ledger1 = getProAndEngineer(dev);
|
|
|
|
|
if (CollectionUtil.isNotEmpty(ledger1)) {
|
|
|
|
|
engineeringList1 = ledger1.stream().filter(item -> item.getLevel().equals(LineBaseEnum.ENGINEERING_LEVEL.getCode())).sorted(Comparator.comparing(CsLedgerVO::getSort)).collect(Collectors.toList());
|
|
|
|
|
projectList1 = ledger1.stream().filter(item -> item.getLevel().equals(LineBaseEnum.PROJECT_LEVEL.getCode())).sorted(Comparator.comparing(CsLedgerVO::getSort)).collect(Collectors.toList());
|
|
|
|
|
projectList1.forEach(pro -> pro.setChildren(getChildren(pro, deviceList)));
|
|
|
|
|
List<CsLedgerVO> finalProjectList = projectList1;
|
|
|
|
|
engineeringList1.forEach(eng -> eng.setChildren(getChildren(eng, finalProjectList)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//获取云前置设备
|
|
|
|
|
List<CsLedgerVO> cldDevList = allList.stream()
|
|
|
|
|
.filter(item -> cldDevice.contains(item.getId()) && !Objects.equals(item.getPid(), "0"))
|
|
|
|
|
.peek(item -> {
|
|
|
|
|
CsEquipmentDeliveryPO po = poMap.get(item.getId());
|
|
|
|
|
item.setComFlag(po.getRunStatus());
|
|
|
|
|
item.setNDId(po.getNdid());
|
|
|
|
|
item.setType("device");
|
|
|
|
|
item.setProcess(po.getProcess());
|
|
|
|
|
})
|
|
|
|
|
.filter(item -> Objects.equals(poMap.get(item.getId()).getUsageStatus(), 1))
|
|
|
|
|
.sorted(Comparator.comparing(CsLedgerVO::getSort))
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
checkDevSetData(cldDevList);
|
|
|
|
|
List<CsLedgerVO> engineeringList2 = new ArrayList<>();
|
|
|
|
|
List<CsLedgerVO> projectList2 = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
List<String> dev2 = cldDevList.stream().map(CsLedgerVO::getId).collect(Collectors.toList());
|
|
|
|
|
List<CsLedgerVO> ledger2 = getProAndEngineer(dev2);
|
|
|
|
|
if (CollectionUtil.isNotEmpty(ledger2)) {
|
|
|
|
|
engineeringList2 = ledger2.stream().filter(item -> item.getLevel().equals(LineBaseEnum.ENGINEERING_LEVEL.getCode())).sorted(Comparator.comparing(CsLedgerVO::getSort)).collect(Collectors.toList());
|
|
|
|
|
projectList2 = ledger2.stream().filter(item -> item.getLevel().equals(LineBaseEnum.PROJECT_LEVEL.getCode())).sorted(Comparator.comparing(CsLedgerVO::getSort)).collect(Collectors.toList());
|
|
|
|
|
projectList2.forEach(pro -> pro.setChildren(getChildren(pro, cldDevList)));
|
|
|
|
|
List<CsLedgerVO> finalProjectList = projectList2;
|
|
|
|
|
engineeringList2.forEach(eng -> eng.setChildren(getChildren(eng, finalProjectList)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//获取便携式设备树
|
|
|
|
|
CsLedgerVO portable = new CsLedgerVO();
|
|
|
|
|
@@ -272,7 +410,16 @@ public class CsLedgerServiceImpl extends ServiceImpl<CsLedgerMapper, CsLedger> i
|
|
|
|
|
government.setName(DataParam.governmentDev);
|
|
|
|
|
government.setPid("0");
|
|
|
|
|
government.setId(IdUtil.simpleUUID());
|
|
|
|
|
government.setChildren(engineeringList);
|
|
|
|
|
government.setChildren(engineeringList1);
|
|
|
|
|
|
|
|
|
|
//获取云前置设备树
|
|
|
|
|
CsLedgerVO cld = new CsLedgerVO();
|
|
|
|
|
cld.setLevel(0);
|
|
|
|
|
cld.setName(DataParam.cldDev);
|
|
|
|
|
cld.setPid("0");
|
|
|
|
|
cld.setId(IdUtil.simpleUUID());
|
|
|
|
|
cld.setChildren(engineeringList2);
|
|
|
|
|
|
|
|
|
|
List<CsLedgerVO> tree = new ArrayList<>();
|
|
|
|
|
if (CollUtil.isNotEmpty(portables)) {
|
|
|
|
|
tree.add(portable);
|
|
|
|
|
@@ -280,6 +427,9 @@ public class CsLedgerServiceImpl extends ServiceImpl<CsLedgerMapper, CsLedger> i
|
|
|
|
|
if (CollUtil.isNotEmpty(deviceList)) {
|
|
|
|
|
tree.add(government);
|
|
|
|
|
}
|
|
|
|
|
if (CollUtil.isNotEmpty(cldDevList)) {
|
|
|
|
|
tree.add(cld);
|
|
|
|
|
}
|
|
|
|
|
return tree;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -474,6 +624,32 @@ public class CsLedgerServiceImpl extends ServiceImpl<CsLedgerMapper, CsLedger> i
|
|
|
|
|
return tree;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public List<CsLedgerVO> getProAndEngineer(List<String> id) {
|
|
|
|
|
List<CsLedgerVO> result = new ArrayList<>();
|
|
|
|
|
List<CsLedgerVO> allList = this.baseMapper.getAll();
|
|
|
|
|
Set<String> idSet = new HashSet<>(id);
|
|
|
|
|
if (CollectionUtil.isNotEmpty(id)) {
|
|
|
|
|
id.forEach(item->{
|
|
|
|
|
allList.forEach(item2->{
|
|
|
|
|
if (Objects.equals(item2.getId(),item)) {
|
|
|
|
|
idSet.addAll(Arrays.asList(item2.getPids().split( ",")));
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
if (CollectionUtil.isNotEmpty(idSet)) {
|
|
|
|
|
idSet.forEach(item->{
|
|
|
|
|
allList.forEach(item2->{
|
|
|
|
|
if (Objects.equals(item2.getId(),item)) {
|
|
|
|
|
result.add(item2);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取子节点
|
|
|
|
|
*/
|
|
|
|
|
|