查出所有的節點,根據父節點找到一級節點填充數據:
1 @PostMapping(value = "/TRACK140101") 2 public R TRACK140101(@RequestBody TRACK140101Request param) { 3 String inputParam = ""; 4 try { 5 inputParam = objectMapper.writeValueAsString(param); 6 //查詢能看到的節點 7 List<String> dpIds = remoteCommonService.queryDimensions(param.getJobNo(), DimensionIdEnum.DIMENSIONID.getValue()); 8 //查詢所有組織機構 9 List<CommonDataDimensionVal> commonDataDimensionVals = commonDataDimensionValService.findAll(dpIds); 10 //一級節點 11 List<TRACK140101Response> response = new ArrayList<>(); 12 List<CommonDataDimensionVal> CommonDataDimensionValList = commonDataDimensionVals.stream().filter(one -> one.getParentId().equals(DPID)).collect(Collectors.toList()); 13 //遍歷一級機構 14 CommonDataDimensionValList.forEach(commonDataDimens -> { 15 TRACK140101Response trackReponse = new TRACK140101Response(); 16 trackReponse.setId(commonDataDimens.getDpId()); 17 trackReponse.setLabel(commonDataDimens.getDpName()); 18 //調用遞歸體 19 trackReponse.setChildren(getchild(commonDataDimens, commonDataDimensionVals)); 20 response.add(trackReponse); 21 }); 22 23 return R.ok(response); 24 } catch (Exception e) { 25 log.error("【TRACK140101-組織機構樹查詢 入參 】:" + inputParam); 26 log.error("【TRACK140101-組織機構樹查詢 】", e); 27 return R.error(); 28 } 29 }
根據父節點id查找對應的子節點信息填充 遞歸調用
/** * 遞歸體 * * @return */ public List<TRACK140101Response> getchild(CommonDataDimensionVal commonDataDimens, List<CommonDataDimensionVal> commonDataDimensionVals) { //篩選出下一級的機構信息 List<CommonDataDimensionVal> CommonDataDimensionValList = commonDataDimensionVals.stream().filter(one -> one.getParentId().equals(commonDataDimens.getDpId())).collect(Collectors.toList()); List<TRACK140101Response> response = new ArrayList<>(); if (StringUtils.isNotEmpty(CommonDataDimensionValList)) { //遍歷下一級的機構信息,並封裝返回參數 CommonDataDimensionValList.forEach(childCommonDataDimens -> { TRACK140101Response trackReponse = new TRACK140101Response(); trackReponse.setId(childCommonDataDimens.getDpId()); trackReponse.setLabel(childCommonDataDimens.getDpName()); //調用遞歸體 trackReponse.setChildren(getchild(childCommonDataDimens, commonDataDimensionVals)); response.add(trackReponse); }); } return response; }
樹形結構對應的實體類:
@Data public class TRACK140101Response { /** * 機構id */ private String id; /** * 機構名稱 */ private String label; /** * 子節點 */ private List<TRACK140101Response> children; }
以上.