diff --git a/dongjian-dashboard-back-dao/src/main/java/com/dongjian/dashboard/back/dao/ex/BasicUserMapperExt.java b/dongjian-dashboard-back-dao/src/main/java/com/dongjian/dashboard/back/dao/ex/BasicUserMapperExt.java index fa711dd..4491ce2 100644 --- a/dongjian-dashboard-back-dao/src/main/java/com/dongjian/dashboard/back/dao/ex/BasicUserMapperExt.java +++ b/dongjian-dashboard-back-dao/src/main/java/com/dongjian/dashboard/back/dao/ex/BasicUserMapperExt.java @@ -25,4 +25,6 @@ public interface BasicUserMapperExt extends BasicUserMapper{ Integer checkBuildingManager(Long userId); Integer checkLevelManager(Long userId); + + Integer getAdscFlagByUserId(@Param("userId") Long userId); } diff --git a/dongjian-dashboard-back-dao/src/main/resources/mappers/ex/BasicUserMapperExt.xml b/dongjian-dashboard-back-dao/src/main/resources/mappers/ex/BasicUserMapperExt.xml index 93f8233..b5086d9 100644 --- a/dongjian-dashboard-back-dao/src/main/resources/mappers/ex/BasicUserMapperExt.xml +++ b/dongjian-dashboard-back-dao/src/main/resources/mappers/ex/BasicUserMapperExt.xml @@ -125,5 +125,12 @@ INNER JOIN data_center_aeon_admin.basic_role_menu_relation rmr ON br.id = rmr.role_id WHERE rmr.menu_id = 88 AND br.flag != 1 AND rru.user_id = #{userId} - + + \ No newline at end of file diff --git a/dongjian-dashboard-back-dao/src/main/resources/mappers/ex/LevelMapperExt.xml b/dongjian-dashboard-back-dao/src/main/resources/mappers/ex/LevelMapperExt.xml index 9bbc136..6772f7d 100644 --- a/dongjian-dashboard-back-dao/src/main/resources/mappers/ex/LevelMapperExt.xml +++ b/dongjian-dashboard-back-dao/src/main/resources/mappers/ex/LevelMapperExt.xml @@ -6,17 +6,15 @@ dashboard_level_branch - dashboard_level_store - dashboard_level_area - dashboard_level_site + dashboard_level_store_area_merge + dashboard_level_site dashboard_level_branch - dashboard_level_store - dashboard_level_area + dashboard_level_store_area_merge @@ -46,9 +44,22 @@ INSERT INTO - (company_id, name, remark, created_by, created_at) + (company_id, name, `code`, remark, created_by, created_at) VALUES - (#{companyId}, #{name}, #{remark}, #{createdBy}, #{createdAt}) + ( + #{companyId}, + #{name}, + + #{code} + NULL + , + + #{remark} + NULL + , + #{createdBy}, + #{createdAt} + ) @@ -70,6 +81,7 @@ SET name = #{name}, + `code` = #{code}, remark = #{remark}, updated_at = #{updatedAt}, updated_by = #{updatedBy} @@ -102,6 +114,7 @@ base.`id`, base.company_id, base.`name` AS levelName, + base.`code` AS levelCode, base.remark, base.created_by, base.created_at, @@ -117,6 +130,9 @@ AND base.`name` like CONCAT('%',#{levelName},'%') + + AND base.`code` like CONCAT('%',#{levelCode},'%') + AND pa.id IN #{item} @@ -144,8 +160,8 @@ GROUP_CONCAT(pa.`name`) AS parentNames, FROM - dashboard_level_store base - LEFT JOIN dashboard_level_relation_branch_store rela ON base.`id` = rela.store_id + dashboard_level_store_area_merge base + LEFT JOIN dashboard_level_relation_branch_store_area rela ON base.`id` = rela.store_area_id LEFT JOIN dashboard_level_branch pa ON rela.branch_id = pa.`id` WHERE @@ -157,24 +173,10 @@ GROUP_CONCAT(pa.id) AS parentIds, GROUP_CONCAT(pa.`name`) AS parentNames, - FROM - dashboard_level_area base - LEFT JOIN dashboard_level_relation_store_area rela ON base.`id` = rela.area_id - LEFT JOIN dashboard_level_store pa ON rela.store_id = pa.`id` - WHERE - - GROUP BY base.`id` - - - SELECT - 4 AS levelType, - GROUP_CONCAT(pa.id) AS parentIds, - GROUP_CONCAT(pa.`name`) AS parentNames, - FROM dashboard_level_site base - LEFT JOIN dashboard_level_relation_area_site rela ON base.`id` = rela.site_id - LEFT JOIN dashboard_level_area pa ON rela.area_id = pa.`id` + LEFT JOIN dashboard_level_relation_store_area_site rela ON base.`id` = rela.site_id + LEFT JOIN dashboard_level_store_area_merge pa ON rela.store_area_id = pa.`id` WHERE GROUP BY base.`id` @@ -187,6 +189,7 @@ SELECT DISTINCT building_id FROM ( + -- BUILDING(直接绑定) SELECT b.building_id FROM dashboard_level_role_user ru JOIN dashboard_level_role_object ro @@ -199,6 +202,7 @@ UNION ALL + -- SITE → BUILDING SELECT b.building_id FROM dashboard_level_role_user ru JOIN dashboard_level_role_object ro @@ -214,66 +218,41 @@ UNION ALL + -- STORE_AREA → SITE → BUILDING(核心替代 AREA / STORE) SELECT b.building_id FROM dashboard_level_role_user ru JOIN dashboard_level_role_object ro ON ru.level_role_id = ro.level_role_id - JOIN dashboard_level_area a - ON ro.ref_id = a.id AND a.flag = 0 - JOIN dashboard_level_relation_area_site ras - ON a.id = ras.area_id - JOIN dashboard_level_site s - ON ras.site_id = s.id AND s.flag = 0 - JOIN dashboard_level_relation_site_building rsb - ON s.id = rsb.site_id - JOIN basic_building b - ON rsb.building_id = b.building_id AND b.flag = 0 - WHERE ru.user_id = #{userId} - AND ro.ref_type = 'AREA' - - UNION ALL - - SELECT b.building_id - FROM dashboard_level_role_user ru - JOIN dashboard_level_role_object ro - ON ru.level_role_id = ro.level_role_id - JOIN dashboard_level_store st - ON ro.ref_id = st.id AND st.flag = 0 - JOIN dashboard_level_relation_store_area rsa - ON st.id = rsa.store_id - JOIN dashboard_level_area a - ON rsa.area_id = a.id AND a.flag = 0 - JOIN dashboard_level_relation_area_site ras - ON a.id = ras.area_id + JOIN dashboard_level_store_area_merge sam + ON ro.ref_id = sam.id AND sam.flag = 0 + JOIN dashboard_level_relation_store_area_site rsas + ON sam.id = rsas.store_area_id JOIN dashboard_level_site s - ON ras.site_id = s.id AND s.flag = 0 + ON rsas.site_id = s.id AND s.flag = 0 JOIN dashboard_level_relation_site_building rsb ON s.id = rsb.site_id JOIN basic_building b ON rsb.building_id = b.building_id AND b.flag = 0 WHERE ru.user_id = #{userId} - AND ro.ref_type = 'STORE' + AND ro.ref_type = 'STORE_AREA' UNION ALL + -- BRANCH → STORE_AREA → SITE → BUILDING SELECT b.building_id FROM dashboard_level_role_user ru JOIN dashboard_level_role_object ro ON ru.level_role_id = ro.level_role_id JOIN dashboard_level_branch br ON ro.ref_id = br.id AND br.flag = 0 - JOIN dashboard_level_relation_branch_store rbs - ON br.id = rbs.branch_id - JOIN dashboard_level_store st - ON rbs.store_id = st.id AND st.flag = 0 - JOIN dashboard_level_relation_store_area rsa - ON st.id = rsa.store_id - JOIN dashboard_level_area a - ON rsa.area_id = a.id AND a.flag = 0 - JOIN dashboard_level_relation_area_site ras - ON a.id = ras.area_id + JOIN dashboard_level_relation_branch_store_area rbsa + ON br.id = rbsa.branch_id + JOIN dashboard_level_store_area_merge sam + ON rbsa.store_area_id = sam.id AND sam.flag = 0 + JOIN dashboard_level_relation_store_area_site rsas + ON sam.id = rsas.store_area_id JOIN dashboard_level_site s - ON ras.site_id = s.id AND s.flag = 0 + ON rsas.site_id = s.id AND s.flag = 0 JOIN dashboard_level_relation_site_building rsb ON s.id = rsb.site_id JOIN basic_building b @@ -281,7 +260,7 @@ WHERE ru.user_id = #{userId} AND ro.ref_type = 'BRANCH' - ) t; + ) t diff --git a/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/dto/level/DeleteLevelParam.java b/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/dto/level/DeleteLevelParam.java index db7601b..9d19f7a 100644 --- a/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/dto/level/DeleteLevelParam.java +++ b/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/dto/level/DeleteLevelParam.java @@ -19,8 +19,8 @@ public class DeleteLevelParam { private String ids; /** - * 物件级别类型(1-支社、2-各支店、3-area、4-site) + * 物件级别类型 (1-支社 2-各支店·area 3-site) */ - @Schema(description = "物件级别类型(1-支社、2-各支店、3-area、4-site)",example = "2", required = true) + @Schema(description = "级别类型:1-支社 2-各支店·area 3-site ",example = "2", required = true) private Integer levelType; } \ No newline at end of file diff --git a/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/dto/level/LevelEntity.java b/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/dto/level/LevelEntity.java index 58f8895..dc2fc73 100644 --- a/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/dto/level/LevelEntity.java +++ b/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/dto/level/LevelEntity.java @@ -1,5 +1,6 @@ package com.dongjian.dashboard.back.dto.level; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; import lombok.Setter; @@ -32,6 +33,11 @@ public class LevelEntity { */ private String remark; + /** + * 编码 + */ + private String code; + /** * 创建时间 */ diff --git a/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/dto/level/OptLevelParam.java b/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/dto/level/OptLevelParam.java index d9dba3a..78103b5 100644 --- a/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/dto/level/OptLevelParam.java +++ b/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/dto/level/OptLevelParam.java @@ -27,9 +27,9 @@ public class OptLevelParam { private String levelName; /** - * 物件级别类型:1-支社 2-各支店 3-area 4-site + * 物件级别类型 (1-支社 2-各支店·area 3-site) */ - @Schema(description = "级别类型:1-支社 2-各支店 3-area 4-site",example = "2", required = true) + @Schema(description = "级别类型:1-支社 2-各支店·area 3-site ",example = "2", required = true) private Integer levelType; /** @@ -48,6 +48,13 @@ public class OptLevelParam { private List buildingIdList; + /** + * 编码 + */ + @Schema(description = "编码",example = "2cc") + private String code; + + @Schema(description = "所属企业ID",example = "2", hidden = true) private Long companyId; } \ No newline at end of file diff --git a/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/dto/level/PageLevelSearchParam.java b/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/dto/level/PageLevelSearchParam.java index a27a100..99477d2 100644 --- a/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/dto/level/PageLevelSearchParam.java +++ b/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/dto/level/PageLevelSearchParam.java @@ -30,7 +30,13 @@ public class PageLevelSearchParam extends BaseSearchParams { @Schema(description = "名称",example = "jyk2") private String levelName; - @Schema(description = "级别类型:1-支社 2-各支店 3-area 4-site",example = "2", required = true) + @Schema(description = "编码",example = "2cc") + private String levelCode; + + /** + * 物件级别类型 (1-支社 2-各支店·area 3-site) + */ + @Schema(description = "级别类型:1-支社 2-各支店·area 3-site ",example = "2", required = true) private Integer levelType; } \ No newline at end of file diff --git a/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/vo/level/BuildingPathDTO.java b/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/vo/level/BuildingPathDTO.java index daac4b4..2b9ae01 100644 --- a/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/vo/level/BuildingPathDTO.java +++ b/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/vo/level/BuildingPathDTO.java @@ -4,15 +4,14 @@ import lombok.Data; @Data public class BuildingPathDTO { + private Long branchId; - private Long storeId; - private Long areaId; + private Long storeAreaId; private Long siteId; private Long buildingId; private String branchName; - private String storeName; - private String areaName; + private String storeAreaName; private String siteName; private String buildingName; } \ No newline at end of file diff --git a/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/vo/level/LevelPageDTO.java b/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/vo/level/LevelPageDTO.java index 335132f..6a87423 100644 --- a/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/vo/level/LevelPageDTO.java +++ b/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/vo/level/LevelPageDTO.java @@ -26,10 +26,16 @@ public class LevelPageDTO { @Schema(description = "名称)",example = "2", required = true) private String levelName; + /** + * 物件级别名称 + */ + @Schema(description = "编码)",example = "2cc", required = false) + private String levelCode; + /** * 物件级别类型:1-支社 2-各支店 3-area 4-site */ - @Schema(description = "级别类型:1-支社 2-各支店 3-area 4-site",example = "2", required = true) + @Schema(description = "级别类型:1-支社 2-各支店·area 3-site ",example = "2", required = true) private Integer levelType; /** diff --git a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/common/CommonOpt.java b/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/common/CommonOpt.java index 04f0132..bb8d253 100644 --- a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/common/CommonOpt.java +++ b/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/common/CommonOpt.java @@ -825,4 +825,9 @@ public class CommonOpt { }; } + public boolean isADSC(Long userId) { + Integer flag = basicUserMapperExt.getAdscFlagByUserId(userId); + return flag != null && flag == 1; + } + } diff --git a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/LevelServiceImpl.java b/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/LevelServiceImpl.java index 042d40a..67e7fa4 100644 --- a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/LevelServiceImpl.java +++ b/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/LevelServiceImpl.java @@ -79,7 +79,7 @@ public class LevelServiceImpl implements LevelService { //插入关联 insertLevelRelation(param, levelEntity, 1); //单独插入楼宇和site关系 - if (4 == param.getLevelType()) { + if (3 == param.getLevelType()) { insertSiteBuildingRelation(param, levelEntity, 1); } } @@ -127,18 +127,13 @@ public class LevelServiceImpl implements LevelService { switch (param.getLevelType()){ case 2: levelRelationEntity.setParentField("branch_id"); - levelRelationEntity.setChildField("store_id"); - levelRelationEntity.setTableName("dashboard_level_relation_branch_store"); + levelRelationEntity.setChildField("store_area_id"); + levelRelationEntity.setTableName("dashboard_level_relation_branch_store_area"); break; case 3: - levelRelationEntity.setParentField("store_id"); - levelRelationEntity.setChildField("area_id"); - levelRelationEntity.setTableName("dashboard_level_relation_store_area"); - break; - case 4: - levelRelationEntity.setParentField("area_id"); + levelRelationEntity.setParentField("store_area_id"); levelRelationEntity.setChildField("site_id"); - levelRelationEntity.setTableName("dashboard_level_relation_area_site"); + levelRelationEntity.setTableName("dashboard_level_relation_store_area_site"); break; } levelRelationEntity.setParentId(parentId); @@ -168,7 +163,7 @@ public class LevelServiceImpl implements LevelService { if(StringUtils.isBlank(param.getLevelName()) || param.getLevelName().length() > 255){ return new SimpleDataResponse(ResponseCode.MSG_ERROR, "Parameter [levelName] error"); } - if(null == param.getLevelType() || param.getLevelType() < 1 || param.getLevelType() > 4){ + if(null == param.getLevelType() || param.getLevelType() < 1 || param.getLevelType() > 3){ return new SimpleDataResponse(ResponseCode.MSG_ERROR, "Parameter [levelType] error"); } if(1 != param.getLevelType() && CollectionUtils.isEmpty(param.getParentIdList())){ @@ -209,23 +204,19 @@ public class LevelServiceImpl implements LevelService { deleteLevelRelationEntity.setChildId(param.getId()); switch (param.getLevelType()){ case 2: - deleteLevelRelationEntity.setChildField("store_id"); - deleteLevelRelationEntity.setTableName("dashboard_level_relation_branch_store"); + deleteLevelRelationEntity.setChildField("store_area_id"); + deleteLevelRelationEntity.setTableName("dashboard_level_relation_branch_store_area"); break; case 3: - deleteLevelRelationEntity.setChildField("area_id"); - deleteLevelRelationEntity.setTableName("dashboard_level_relation_store_area"); - break; - case 4: deleteLevelRelationEntity.setChildField("site_id"); - deleteLevelRelationEntity.setTableName("dashboard_level_relation_area_site"); + deleteLevelRelationEntity.setTableName("dashboard_level_relation_store_area_site"); break; } levelMapperExt.deleteLevelRelation(deleteLevelRelationEntity); //插入关联 insertLevelRelation(param, levelEntity, 2); //单独插入楼宇和site关系 - if (4 == param.getLevelType()) { + if (3 == param.getLevelType()) { insertSiteBuildingRelation(param, levelEntity, 2); } } @@ -249,17 +240,13 @@ public class LevelServiceImpl implements LevelService { switch (levelType){ case 1: levelRelationEntity.setParentField("branch_id"); - levelRelationEntity.setTableName("dashboard_level_relation_branch_store"); + levelRelationEntity.setTableName("dashboard_level_relation_branch_store_area"); break; case 2: - levelRelationEntity.setParentField("store_id"); - levelRelationEntity.setTableName("dashboard_level_relation_store_area"); + levelRelationEntity.setParentField("store_area_id"); + levelRelationEntity.setTableName("dashboard_level_relation_store_area_site"); break; case 3: - levelRelationEntity.setParentField("area_id"); - levelRelationEntity.setTableName("dashboard_level_relation_area_site"); - break; - case 4: levelRelationEntity.setParentField("site_id"); levelRelationEntity.setTableName("dashboard_level_relation_site_building"); break; @@ -271,9 +258,8 @@ public class LevelServiceImpl implements LevelService { //基础表删除 String tableName = switch (levelType) { case 1 -> "dashboard_level_branch"; - case 2 -> "dashboard_level_store"; - case 3 -> "dashboard_level_area"; - case 4 -> "dashboard_level_site"; + case 2 -> "dashboard_level_store_area_merge"; + case 3 -> "dashboard_level_site"; default -> ""; }; levelMapperExt.deleteLevelByIdList(tableName, idList); @@ -283,19 +269,15 @@ public class LevelServiceImpl implements LevelService { switch (levelType){ case 1: deleteEntity.setChildField("branch_id"); - deleteEntity.setTableName("dashboard_level_relation_branch_store"); + deleteEntity.setTableName("dashboard_level_relation_branch_store_area"); break; case 2: - deleteEntity.setChildField("store_id"); - deleteEntity.setTableName("dashboard_level_relation_branch_store"); + deleteEntity.setChildField("store_area_id"); + deleteEntity.setTableName("dashboard_level_relation_branch_store_area"); break; case 3: - deleteEntity.setChildField("area_id"); - deleteEntity.setTableName("dashboard_level_relation_store_area"); - break; - case 4: deleteEntity.setChildField("site_id"); - deleteEntity.setTableName("dashboard_level_relation_area_site"); + deleteEntity.setTableName("dashboard_level_relation_store_area_site"); break; } levelMapperExt.deleteLevelRelationByIdList(deleteEntity, idList); @@ -330,7 +312,7 @@ public class LevelServiceImpl implements LevelService { PageHelper.startPage(pageSearchParam.getPageNum() == null ? 1 : pageSearchParam.getPageNum(), pageSearchParam.getPageSize() == null ? 20 : pageSearchParam.getPageSize()); List resultList = levelMapperExt.getListPage(pageSearchParam); - if (4 == levelType && CollectionUtils.isNotEmpty(resultList)){ + if (3 == levelType && CollectionUtils.isNotEmpty(resultList)){ for (LevelPageDTO levelPageDTO : resultList) { List buildingList = basicBuildingMapperExt.getBuildingListBySiteId(levelPageDTO.getId()); if (CollectionUtils.isNotEmpty(buildingList)) { diff --git a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/OverviewServiceImpl.java b/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/OverviewServiceImpl.java index 2ddfa37..2b52fc6 100644 --- a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/OverviewServiceImpl.java +++ b/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/OverviewServiceImpl.java @@ -274,37 +274,57 @@ public class OverviewServiceImpl implements OverviewService { @Override public SimpleDataResponse> getOverallBoundLevel(Long companyId, Long userId, Integer languageType) { + + // 20260429需求:ADSC用户,楼宇以上能看全部,到了楼宇这一级,还是要看绑定的角色对应的楼宇 + boolean isADSC = commonOpt.isADSC(userId); + + List bindBuildingIdList = commonOpt.getBindBuildingIdList(userId, List.of(companyId)); + + Set bindBuildingIdSet = + bindBuildingIdList == null || bindBuildingIdList.isEmpty() + ? Collections.emptySet() + : new HashSet<>(bindBuildingIdList); + Map buildingMap = new HashMap<>(); buildingMap.put("companyId", companyId); - buildingMap.put("bindBuildingIdList", commonOpt.getBindBuildingIdList(userId, List.of(companyId))); - List selectBuildingFullPath = levelMapperExt.selectBuildingFullPath(buildingMap); + if (isADSC) { + buildingMap.put("isADSC", true); + } else { + // 普通用户:全链路限制 building + buildingMap.put("isADSC", false); + buildingMap.put("bindBuildingIdList", bindBuildingIdList); + } - // 构建节点 - Map nodeMap = new HashMap<>(); + List list = levelMapperExt.selectBuildingFullPath(buildingMap); - for (BuildingPathDTO row : selectBuildingFullPath) { + Map nodeMap = new LinkedHashMap<>(); - String branchKey = "BRANCH-" + row.getBranchId(); - - String storeKey = "STORE-" + row.getStoreId() + "-" + branchKey; - String areaKey = "AREA-" + row.getAreaId() + "-" + storeKey; - String siteKey = "SITE-" + row.getSiteId() + "-" + areaKey; - String buildingKey = "BUILDING-" + row.getBuildingId() + "-" + siteKey; + for (BuildingPathDTO row : list) { + String branchKey = "BRANCH-" + row.getBranchId(); nodeMap.putIfAbsent(branchKey, createNode(branchKey, "ROOT", row.getBranchName())); - nodeMap.putIfAbsent(storeKey, - createNode(storeKey, branchKey, row.getStoreName())); - - nodeMap.putIfAbsent(areaKey, - createNode(areaKey, storeKey, row.getAreaName())); + if (row.getStoreAreaId() == null) { + continue; + } + String storeAreaKey = "STORE_AREA-" + row.getStoreAreaId() + "-" + branchKey; + nodeMap.putIfAbsent(storeAreaKey, + createNode(storeAreaKey, branchKey, row.getStoreAreaName())); + if (row.getSiteId() == null) { + continue; + } + String siteKey = "SITE-" + row.getSiteId() + "-" + storeAreaKey; nodeMap.putIfAbsent(siteKey, - createNode(siteKey, areaKey, row.getSiteName())); + createNode(siteKey, storeAreaKey, row.getSiteName())); - nodeMap.putIfAbsent(buildingKey, - createNode(buildingKey, siteKey, row.getBuildingName())); + boolean isAllowedBuilding = !isADSC || bindBuildingIdSet.contains(row.getBuildingId()); + if (isAllowedBuilding) { + String buildingKey = "BUILDING-" + row.getBuildingId() + "-" + siteKey; + nodeMap.putIfAbsent(buildingKey, + createNode(buildingKey, siteKey, row.getBuildingName())); + } } List allNodes = new ArrayList<>(nodeMap.values());