Browse Source

概览层级树

zhc
review512jwy@163.com 2 weeks ago
parent
commit
06e0ed15cf
  1. 13
      dongjian-dashboard-back-controller/src/main/java/com/dongjian/dashboard/back/controller/OverviewController.java
  2. 4
      dongjian-dashboard-back-dao/src/main/java/com/dongjian/dashboard/back/dao/ex/LevelMapperExt.java
  3. 153
      dongjian-dashboard-back-dao/src/main/resources/mappers/ex/LevelMapperExt.xml
  4. 18
      dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/vo/level/BuildingPathDTO.java
  5. 3
      dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/OverviewService.java
  6. 27
      dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/common/CommonOpt.java
  7. 60
      dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/OverviewServiceImpl.java

13
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<List<TreeMenusDTO>> 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);
}
}

4
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<LevelPageDTO> getListPage(PageLevelSearchParam pageSearchParam);
List<Long> getBoundBuilding(Long userId);
List<BuildingPathDTO> selectBuildingFullPath(@Param("bindBuildingIdList") List<Long> bindBuildingIdList);
}

153
dongjian-dashboard-back-dao/src/main/resources/mappers/ex/LevelMapperExt.xml

@ -181,16 +181,151 @@
</select>
<select id="getBoundBuilding" resultType="java.lang.Long">
SELECT DISTINCT building_id
FROM (
-- 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 basic_building b
ON ro.ref_id = b.building_id
WHERE ru.user_id = #{userId}
AND ro.ref_type = 'BUILDING'
AND b.flag = 0
UNION ALL
-- 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_site s
ON ro.ref_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 = 'SITE'
UNION ALL
-- 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_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
-- 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_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_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 = 'STORE'
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_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 = 'BRANCH'
) t;
</select>
<select id="selectBuildingFullPath" resultType="com.dongjian.dashboard.back.vo.level.BuildingPathDTO">
SELECT
DISTINCT sb.building_id
FROM dashboard_level_role_user rl
INNER JOIN dashboard_level_role_object ro ON rl.level_role_id = ro.level_role_id
INNER JOIN dashboard_level_relation_branch_store brs ON ro.ref_type = 'BRANCH' AND ro.ref_id = brs.branch_id
INNER JOIN dashboard_level_relation_store_area sra ON brs.store_id = sra.store_id
INNER JOIN dashboard_level_relation_area_site ras ON sra.area_id = ras.area_id
INNER JOIN dashboard_level_relation_site_building sb ON ras.site_id = sb.site_id
INNER JOIN basic_building bb ON sb.building_id = bb.building_id
WHERE bb.flag = 0 AND rl.user_id = #{userId}
br.id AS branch_id,
br.name AS branch_name,
st.id AS store_id,
st.name AS store_name,
a.id AS area_id,
a.name AS area_name,
s.id AS site_id,
s.name AS site_name,
b.building_id,
b.name AS building_name
FROM basic_building b
JOIN dashboard_level_relation_site_building rsb ON b.building_id = rsb.building_id
JOIN dashboard_level_site s ON rsb.site_id = s.id AND s.flag = 0
JOIN dashboard_level_relation_area_site ras ON s.id = ras.site_id
JOIN dashboard_level_area a ON ras.area_id = a.id AND a.flag = 0
JOIN dashboard_level_relation_store_area rsa ON a.id = rsa.area_id
JOIN dashboard_level_store st ON rsa.store_id = st.id AND st.flag = 0
JOIN dashboard_level_relation_branch_store rbs ON st.id = rbs.store_id
JOIN dashboard_level_branch br ON rbs.branch_id = br.id AND br.flag = 0
WHERE b.building_id IN
<foreach collection="bindBuildingIdList" item="id" open="(" separator="," close=")">
#{id}
</foreach>
AND b.flag = 0;
</select>
</mapper>

18
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;
}

3
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<JpMeshHourlyForecasts> getWeatherInfo(QueryWeather queryWeather, Long userId, Long companyId, Integer languageType, Integer utcOffset);
SimpleDataResponse<List<DashboardNotificationPageVO>> getNotification(Long userId, Long companyId, Integer languageType, Integer utcOffset);
SimpleDataResponse<List<TreeMenusDTO>> getOverallBoundLevel(Long companyId, Long userId, Integer languageType);
}

27
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<Long> getBindBuildingIdList(Long userId) {
// Integer buildingManager = basicUserMapperExt.checkBuildingManager(userId);
// if (buildingManager > 0) {
// return null;//null表示不限制, sql里面判定bindedBuildingList=null的话,就不限制楼宇
// } else {
// List<BindedBuildingVO> 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<Long> getBindBuildingIdList(Long userId) {
Integer buildingManager = basicUserMapperExt.checkBuildingManager(userId);
if (buildingManager > 0) {
return null;//null表示不限制, sql里面判定bindedBuildingList=null的话,就不限制楼宇
} else {
List<BindedBuildingVO> 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<Long> getBindLevelBuildingIdList(Long userId) {
Integer levelManager = basicUserMapperExt.checkLevelManager(userId);
if (levelManager > 0) {
return null;//null表示不限制, sql里面判定bindedBuildingList=null的话,就不限制楼宇

60
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<List<OverviewVO>> getOverviewInfo(Long userId, Long companyId, Integer languageType, Integer utcOffset) {
Map<String, Object> buildingMap = new HashMap<>();
buildingMap.put("companyId", companyId);
buildingMap.put("bindBuildingIdList", commonOpt.getBindLevelBuildingIdList(userId));
buildingMap.put("bindBuildingIdList", commonOpt.getBindBuildingIdList(userId));
List<OverviewVO> buildingInfoList = overviewInfoMapperExt.getBuildingInfo(buildingMap);
@ -264,4 +272,54 @@ public class OverviewServiceImpl implements OverviewService {
return SimpleDataResponse.success(dashboardNotificationMapperExt.getNotification(companyId));
}
@Override
public SimpleDataResponse<List<TreeMenusDTO>> getOverallBoundLevel(Long companyId, Long userId, Integer languageType) {
List<Long> bindBuildingIdList = commonOpt.getBindBuildingIdList(userId);
List<BuildingPathDTO> selectBuildingFullPath = levelMapperExt.selectBuildingFullPath(bindBuildingIdList);
// 构建节点
Map<String, TreeMenusDTO> 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<TreeMenusDTO> allNodes = new ArrayList<>(nodeMap.values());
// 原来的 MenuTree
MenuTree tree = new MenuTree(allNodes);
List<TreeMenusDTO> 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;
}
}

Loading…
Cancel
Save