diff --git a/dongjian-dashboard-back-controller/src/main/java/com/dongjian/dashboard/back/controller/OverviewController.java b/dongjian-dashboard-back-controller/src/main/java/com/dongjian/dashboard/back/controller/OverviewController.java index 95dd689..79aaaf5 100644 --- a/dongjian-dashboard-back-controller/src/main/java/com/dongjian/dashboard/back/controller/OverviewController.java +++ b/dongjian-dashboard-back-controller/src/main/java/com/dongjian/dashboard/back/controller/OverviewController.java @@ -3,6 +3,7 @@ package com.dongjian.dashboard.back.controller; import com.dongjian.dashboard.back.common.response.SimpleDataResponse; import com.dongjian.dashboard.back.configurator.interceptor.AccessRequired; import com.dongjian.dashboard.back.service.OverviewService; +import com.dongjian.dashboard.back.vo.TreeMenusDTO; import com.dongjian.dashboard.back.vo.dashboardnotification.DashboardNotificationPageVO; import com.dongjian.dashboard.back.vo.data.OverviewVO; import com.dongjian.dashboard.back.weather.JpMeshHourlyForecasts; @@ -66,4 +67,16 @@ public class OverviewController { @Parameter(name = "UTCOffset", description = "Time zone offset in minutes from GMT, e.g., +480 for UTC+8", required = true, schema = @Schema(defaultValue = "-480")) @RequestHeader(required = true) Integer UTCOffset) { return overviewService.getNotification(UserId, CompanyId, LanguageType, UTCOffset); } + + @Operation(summary = "获取当前登录用户绑定的层级树结构", description = "用于管理设置勾选层级ID") + @GetMapping("/bound/getOverallBoundLevel") + public SimpleDataResponse> getOverallBoundLevel( + @Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName, + @Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken, + @Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId, + @Parameter(name = "CompanyId", description = "ID of the company to which the user belongs", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId, + @Parameter(name = "LanguageType", description = "Language type (0: Chinese, 1: English, 2: Japanese)", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType + ){ + return overviewService.getOverallBoundLevel(CompanyId, UserId, LanguageType); + } } diff --git a/dongjian-dashboard-back-dao/src/main/java/com/dongjian/dashboard/back/dao/ex/LevelMapperExt.java b/dongjian-dashboard-back-dao/src/main/java/com/dongjian/dashboard/back/dao/ex/LevelMapperExt.java index 4cba028..bbf7649 100644 --- a/dongjian-dashboard-back-dao/src/main/java/com/dongjian/dashboard/back/dao/ex/LevelMapperExt.java +++ b/dongjian-dashboard-back-dao/src/main/java/com/dongjian/dashboard/back/dao/ex/LevelMapperExt.java @@ -5,6 +5,7 @@ import com.dongjian.dashboard.back.dto.level.LevelRelationEntity; import com.dongjian.dashboard.back.dto.level.OptLevelParam; import com.dongjian.dashboard.back.dto.level.PageLevelSearchParam; import com.dongjian.dashboard.back.vo.building.BindedBuildingVO; +import com.dongjian.dashboard.back.vo.level.BuildingPathDTO; import com.dongjian.dashboard.back.vo.level.LevelPageDTO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -35,4 +36,7 @@ public interface LevelMapperExt { List getListPage(PageLevelSearchParam pageSearchParam); List getBoundBuilding(Long userId); + + List selectBuildingFullPath(@Param("bindBuildingIdList") List bindBuildingIdList); + } \ 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 bbeb1f6..1b65e34 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 @@ -181,16 +181,151 @@ + + \ 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 new file mode 100644 index 0000000..daac4b4 --- /dev/null +++ b/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/vo/level/BuildingPathDTO.java @@ -0,0 +1,18 @@ +package com.dongjian.dashboard.back.vo.level; + +import lombok.Data; + +@Data +public class BuildingPathDTO { + private Long branchId; + private Long storeId; + private Long areaId; + private Long siteId; + private Long buildingId; + + private String branchName; + private String storeName; + private String areaName; + private String siteName; + private String buildingName; +} \ No newline at end of file diff --git a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/OverviewService.java b/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/OverviewService.java index 43a3a31..ed05f58 100644 --- a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/OverviewService.java +++ b/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/OverviewService.java @@ -1,6 +1,7 @@ package com.dongjian.dashboard.back.service; import com.dongjian.dashboard.back.common.response.SimpleDataResponse; +import com.dongjian.dashboard.back.vo.TreeMenusDTO; import com.dongjian.dashboard.back.vo.dashboardnotification.DashboardNotificationPageVO; import com.dongjian.dashboard.back.vo.data.OverviewVO; import com.dongjian.dashboard.back.weather.JpMeshHourlyForecasts; @@ -18,4 +19,6 @@ public interface OverviewService { SimpleDataResponse getWeatherInfo(QueryWeather queryWeather, Long userId, Long companyId, Integer languageType, Integer utcOffset); SimpleDataResponse> getNotification(Long userId, Long companyId, Integer languageType, Integer utcOffset); + + SimpleDataResponse> getOverallBoundLevel(Long companyId, Long userId, Integer languageType); } 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 908e518..ac698a6 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 @@ -241,21 +241,20 @@ public class CommonOpt { return result; } +// public List getBindBuildingIdList(Long userId) { +// Integer buildingManager = basicUserMapperExt.checkBuildingManager(userId); +// if (buildingManager > 0) { +// return null;//null表示不限制, sql里面判定bindedBuildingList=null的话,就不限制楼宇 +// } else { +// List bindedBuildingList = userBuildingRelationMapperExt.getBindedBuilding(userId); +// if (CollectionUtils.isEmpty(bindedBuildingList)) { +// return Collections.singletonList(-1L);//-1的话,表示没有绑定 +// } else { +// return bindedBuildingList.stream().map(BindedBuildingVO::getBuildingId).collect(Collectors.toList()); +// } +// } +// } public List getBindBuildingIdList(Long userId) { - Integer buildingManager = basicUserMapperExt.checkBuildingManager(userId); - if (buildingManager > 0) { - return null;//null表示不限制, sql里面判定bindedBuildingList=null的话,就不限制楼宇 - } else { - List bindedBuildingList = userBuildingRelationMapperExt.getBindedBuilding(userId); - if (CollectionUtils.isEmpty(bindedBuildingList)) { - return Collections.singletonList(-1L);//-1的话,表示没有绑定 - } else { - return bindedBuildingList.stream().map(BindedBuildingVO::getBuildingId).collect(Collectors.toList()); - } - } - } - - public List getBindLevelBuildingIdList(Long userId) { Integer levelManager = basicUserMapperExt.checkLevelManager(userId); if (levelManager > 0) { return null;//null表示不限制, sql里面判定bindedBuildingList=null的话,就不限制楼宇 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 b596a78..92bba6e 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 @@ -4,15 +4,19 @@ import com.dongjian.dashboard.back.common.Constants; import com.dongjian.dashboard.back.common.response.ResponseCode; import com.dongjian.dashboard.back.common.response.SimpleDataResponse; import com.dongjian.dashboard.back.dao.ex.DashboardNotificationMapperExt; +import com.dongjian.dashboard.back.dao.ex.LevelMapperExt; import com.dongjian.dashboard.back.dao.ex.MonitoringPointCategoryMapperExt; import com.dongjian.dashboard.back.dao.ex.OverviewInfoMapperExt; import com.dongjian.dashboard.back.dto.monitoringpointcategory.MonitoringPointCategorySearchParams; import com.dongjian.dashboard.back.service.OverviewService; import com.dongjian.dashboard.back.service.common.CommonOpt; +import com.dongjian.dashboard.back.service.common.MenuTree; +import com.dongjian.dashboard.back.vo.TreeMenusDTO; import com.dongjian.dashboard.back.vo.dashboardnotification.DashboardNotificationPageVO; import com.dongjian.dashboard.back.vo.data.OverviewCategoryVO; import com.dongjian.dashboard.back.vo.data.OverviewInfo; import com.dongjian.dashboard.back.vo.data.OverviewVO; +import com.dongjian.dashboard.back.vo.level.BuildingPathDTO; import com.dongjian.dashboard.back.vo.monitoringpointcategory.MonitoringPointCategoryPageVO; import com.dongjian.dashboard.back.weather.JpMeshHourlyForecasts; import com.dongjian.dashboard.back.weather.QueryWeather; @@ -53,6 +57,10 @@ public class OverviewServiceImpl implements OverviewService { private DashboardNotificationMapperExt dashboardNotificationMapperExt; @Autowired private MonitoringPointCategoryMapperExt monitoringPointCategoryMapperExt; + @Autowired + private LevelMapperExt levelMapperExt; + + @Autowired private CommonOpt commonOpt; @@ -60,7 +68,7 @@ public class OverviewServiceImpl implements OverviewService { public SimpleDataResponse> getOverviewInfo(Long userId, Long companyId, Integer languageType, Integer utcOffset) { Map buildingMap = new HashMap<>(); buildingMap.put("companyId", companyId); - buildingMap.put("bindBuildingIdList", commonOpt.getBindLevelBuildingIdList(userId)); + buildingMap.put("bindBuildingIdList", commonOpt.getBindBuildingIdList(userId)); List buildingInfoList = overviewInfoMapperExt.getBuildingInfo(buildingMap); @@ -264,4 +272,54 @@ public class OverviewServiceImpl implements OverviewService { return SimpleDataResponse.success(dashboardNotificationMapperExt.getNotification(companyId)); } + @Override + public SimpleDataResponse> getOverallBoundLevel(Long companyId, Long userId, Integer languageType) { + List bindBuildingIdList = commonOpt.getBindBuildingIdList(userId); + List selectBuildingFullPath = levelMapperExt.selectBuildingFullPath(bindBuildingIdList); + + // 构建节点 + Map nodeMap = new HashMap<>(); + + for (BuildingPathDTO row : selectBuildingFullPath) { + + 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; + + nodeMap.putIfAbsent(branchKey, + createNode(branchKey, "ROOT", row.getBranchName())); + + nodeMap.putIfAbsent(storeKey, + createNode(storeKey, branchKey, row.getStoreName())); + + nodeMap.putIfAbsent(areaKey, + createNode(areaKey, storeKey, row.getAreaName())); + + nodeMap.putIfAbsent(siteKey, + createNode(siteKey, areaKey, row.getSiteName())); + + nodeMap.putIfAbsent(buildingKey, + createNode(buildingKey, siteKey, row.getBuildingName())); + } + + List allNodes = new ArrayList<>(nodeMap.values()); + + // 原来的 MenuTree + MenuTree tree = new MenuTree(allNodes); + + List result = tree.buildTree("ROOT"); + return SimpleDataResponse.success(result); + } + + private TreeMenusDTO createNode(String key, String parentKey, String label) { + TreeMenusDTO node = new TreeMenusDTO(); + node.setKey(key); + node.setParentKey(parentKey); + node.setLabel(label); + return node; + } + }