Browse Source

楼宇下设备没有的监视点分类

zhc
review512jwy@163.com 4 weeks ago
parent
commit
184905917e
  1. 3
      dongjian-dashboard-back-dao/src/main/java/com/dongjian/dashboard/back/dao/ex/DeviceRawdataRealtimeMapperExt.java
  2. 19
      dongjian-dashboard-back-dao/src/main/java/com/dongjian/dashboard/back/dao/ex/OverviewInfoMapperExt.java
  3. 47
      dongjian-dashboard-back-dao/src/main/resources/mappers/ex/DeviceRawdataRealtimeMapperExt.xml
  4. 77
      dongjian-dashboard-back-dao/src/main/resources/mappers/ex/OverviewInfoMapperExt.xml
  5. 23
      dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/vo/data/OverviewCategoryVO.java
  6. 3
      dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/vo/data/OverviewVO.java
  7. 69
      dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/OverviewServiceImpl.java

3
dongjian-dashboard-back-dao/src/main/java/com/dongjian/dashboard/back/dao/ex/DeviceRawdataRealtimeMapperExt.java

@ -11,7 +11,4 @@ import java.util.Map;
@Mapper @Mapper
public interface DeviceRawdataRealtimeMapperExt extends DeviceRawdataRealtimeMapper { public interface DeviceRawdataRealtimeMapperExt extends DeviceRawdataRealtimeMapper {
List<OverviewInfo> getOverviewInfo(Map<String, Object> paramMap);
List<OverviewVO> getBuildingInfo(Map<String, Object> buildingMap);
} }

19
dongjian-dashboard-back-dao/src/main/java/com/dongjian/dashboard/back/dao/ex/OverviewInfoMapperExt.java

@ -0,0 +1,19 @@
package com.dongjian.dashboard.back.dao.ex;
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 org.apache.ibatis.annotations.Mapper;
import java.util.List;
import java.util.Map;
@Mapper
public interface OverviewInfoMapperExt {
List<OverviewInfo> getOverviewInfo(Map<String, Object> paramMap);
List<OverviewVO> getBuildingInfo(Map<String, Object> buildingMap);
List<OverviewCategoryVO> getExistingCategoryList(Map<String, Object> allCategoryParamMap);
}

47
dongjian-dashboard-back-dao/src/main/resources/mappers/ex/DeviceRawdataRealtimeMapperExt.xml

@ -2,52 +2,5 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dongjian.dashboard.back.dao.ex.DeviceRawdataRealtimeMapperExt"> <mapper namespace="com.dongjian.dashboard.back.dao.ex.DeviceRawdataRealtimeMapperExt">
<select id="getOverviewInfo" resultType="com.dongjian.dashboard.back.vo.data.OverviewInfo">
SELECT
bbuilding.building_id,
bbuilding.name AS buildingName,
ah.device_id,
ah.receive_ts,
basic_asset_class_big.id AS monitoringPointCategoryId,
basic_asset_class_big.class_name AS monitoringPointCategoryName
FROM
basic_building bbuilding
INNER JOIN basic_floor on basic_floor.building_id = bbuilding.building_id
INNER JOIN basic_space on basic_space.floor_id = basic_floor.floor_id
INNER JOIN basic_monitoring_asset on basic_monitoring_asset.space_id = basic_space.space_id
INNER JOIN device_info dinfo ON dinfo.asset_id = basic_monitoring_asset.equipment_id
INNER JOIN alert_history ah ON dinfo.device_id = ah.device_id
LEFT JOIN basic_asset_class_big on basic_asset_class_big.id = basic_monitoring_asset.class_big_id
LEFT JOIN type ty ON dinfo.type_id = ty.id
WHERE
bbuilding.company_id = #{companyId} AND bbuilding.flag = 0 AND basic_floor.flag = 0 AND basic_space.flag = 0
AND basic_monitoring_asset.flag = 0 AND dinfo.flag = 0 AND basic_asset_class_big.flag = 0
AND ah.confirm_status = 0 AND ah.handle_status = 1
AND ty.device_category_id in
<foreach collection="categoryIdList" item="categoryId" open="(" separator="," close=")">
#{categoryId}
</foreach>
</select>
<select id="getBuildingInfo" resultType="com.dongjian.dashboard.back.vo.data.OverviewVO">
SELECT
bbuilding.building_id,
bbuilding.name buildingName,
bbuilding.retain_alert,
bbuilding.latitude,
bbuilding.longitude,
bbuilding.picture_introduction,
bbuilding.udf_building_id
FROM
basic_building bbuilding
WHERE
bbuilding.flag != 1
AND bbuilding.company_id = #{companyId}
<if test="bindBuildingIdList != null">
AND bbuilding.building_id IN <foreach collection="bindBuildingIdList" item="item" open="(" separator="," close=")">#{item}</foreach>
</if>
order by bbuilding.building_id desc
</select>
</mapper> </mapper>

77
dongjian-dashboard-back-dao/src/main/resources/mappers/ex/OverviewInfoMapperExt.xml

@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dongjian.dashboard.back.dao.ex.OverviewInfoMapperExt">
<select id="getOverviewInfo" resultType="com.dongjian.dashboard.back.vo.data.OverviewInfo">
SELECT
bbuilding.building_id,
bbuilding.name AS buildingName,
ah.device_id,
ah.receive_ts,
basic_asset_class_big.id AS monitoringPointCategoryId,
basic_asset_class_big.class_name AS monitoringPointCategoryName
FROM
basic_building bbuilding
INNER JOIN basic_floor on basic_floor.building_id = bbuilding.building_id
INNER JOIN basic_space on basic_space.floor_id = basic_floor.floor_id
INNER JOIN basic_monitoring_asset on basic_monitoring_asset.space_id = basic_space.space_id
INNER JOIN device_info dinfo ON dinfo.asset_id = basic_monitoring_asset.equipment_id
INNER JOIN alert_history ah ON dinfo.device_id = ah.device_id
LEFT JOIN basic_asset_class_big on basic_asset_class_big.id = basic_monitoring_asset.class_big_id
LEFT JOIN type ty ON dinfo.type_id = ty.id
WHERE
bbuilding.company_id = #{companyId} AND bbuilding.flag = 0 AND basic_floor.flag = 0 AND basic_space.flag = 0
AND basic_monitoring_asset.flag = 0 AND dinfo.flag = 0 AND basic_asset_class_big.flag = 0
AND ah.confirm_status = 0 AND ah.handle_status = 1
AND ty.device_category_id in
<foreach collection="categoryIdList" item="categoryId" open="(" separator="," close=")">
#{categoryId}
</foreach>
</select>
<select id="getBuildingInfo" resultType="com.dongjian.dashboard.back.vo.data.OverviewVO">
SELECT
bbuilding.building_id,
bbuilding.name buildingName,
bbuilding.retain_alert,
bbuilding.latitude,
bbuilding.longitude,
bbuilding.picture_introduction,
bbuilding.udf_building_id
FROM
basic_building bbuilding
WHERE
bbuilding.flag != 1
AND bbuilding.company_id = #{companyId}
<if test="bindBuildingIdList != null">
AND bbuilding.building_id IN <foreach collection="bindBuildingIdList" item="item" open="(" separator="," close=")">#{item}</foreach>
</if>
order by bbuilding.building_id desc
</select>
<select id="getExistingCategoryList" resultType="com.dongjian.dashboard.back.vo.data.OverviewCategoryVO">
SELECT
bbuilding.building_id,
bbuilding.name AS buildingName,
dinfo.device_id,
basic_asset_class_big.id AS monitoringPointCategoryId,
basic_asset_class_big.class_name AS monitoringPointCategoryName
FROM
basic_building bbuilding
INNER JOIN basic_floor on basic_floor.building_id = bbuilding.building_id
INNER JOIN basic_space on basic_space.floor_id = basic_floor.floor_id
INNER JOIN basic_monitoring_asset on basic_monitoring_asset.space_id = basic_space.space_id
INNER JOIN device_info dinfo ON dinfo.asset_id = basic_monitoring_asset.equipment_id
LEFT JOIN basic_asset_class_big on basic_asset_class_big.id = basic_monitoring_asset.class_big_id
LEFT JOIN type ty ON dinfo.type_id = ty.id
WHERE
bbuilding.company_id = #{companyId} AND bbuilding.flag = 0 AND basic_floor.flag = 0 AND basic_space.flag = 0
AND basic_monitoring_asset.flag = 0 AND dinfo.flag = 0 AND basic_asset_class_big.flag = 0 AND ty.flag = 0
AND ty.device_category_id in
<foreach collection="categoryIdList" item="categoryId" open="(" separator="," close=")">
#{categoryId}
</foreach>
</select>
</mapper>

23
dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/vo/data/OverviewCategoryVO.java

@ -0,0 +1,23 @@
package com.dongjian.dashboard.back.vo.data;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class OverviewCategoryVO {
private Long buildingId;
private String buildingName;
private String deviceId;
private Long monitoringPointCategoryId;
private String monitoringPointCategoryName;
}

3
dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/vo/data/OverviewVO.java

@ -33,6 +33,9 @@ public class OverviewVO {
@Schema(description = "今天告警数量",example = "1111") @Schema(description = "今天告警数量",example = "1111")
private Integer alarmCountToday = 0; private Integer alarmCountToday = 0;
@Schema(description = "楼宇下设备没有的监视点分类",example = "[]")
private List<Long> missingMonitoringPointCategoryList = new ArrayList<>();
@Schema(description = "监视点分类告警数量",example = "1111") @Schema(description = "监视点分类告警数量",example = "1111")
private List<MonitoringPointCategoryAlarm> monitoringPointCategoryAlarmList = new ArrayList<>(); private List<MonitoringPointCategoryAlarm> monitoringPointCategoryAlarmList = new ArrayList<>();

69
dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/OverviewServiceImpl.java

@ -1,18 +1,19 @@
package com.dongjian.dashboard.back.service.impl; package com.dongjian.dashboard.back.service.impl;
import com.dongjian.dashboard.back.common.Constants; import com.dongjian.dashboard.back.common.Constants;
import com.dongjian.dashboard.back.common.language.msg.MsgLanguageChange;
import com.dongjian.dashboard.back.common.response.ResponseCode; import com.dongjian.dashboard.back.common.response.ResponseCode;
import com.dongjian.dashboard.back.common.response.SimpleDataResponse; import com.dongjian.dashboard.back.common.response.SimpleDataResponse;
import com.dongjian.dashboard.back.dao.ex.DashboardNotificationMapperExt; import com.dongjian.dashboard.back.dao.ex.DashboardNotificationMapperExt;
import com.dongjian.dashboard.back.dao.ex.DeviceRawdataRealtimeMapperExt; import com.dongjian.dashboard.back.dao.ex.MonitoringPointCategoryMapperExt;
import com.dongjian.dashboard.back.model.DashboardNotification; import com.dongjian.dashboard.back.dao.ex.OverviewInfoMapperExt;
import com.dongjian.dashboard.back.model.DashboardNotificationExample; import com.dongjian.dashboard.back.dto.monitoringpointcategory.MonitoringPointCategorySearchParams;
import com.dongjian.dashboard.back.service.OverviewService; import com.dongjian.dashboard.back.service.OverviewService;
import com.dongjian.dashboard.back.service.common.CommonOpt; import com.dongjian.dashboard.back.service.common.CommonOpt;
import com.dongjian.dashboard.back.vo.dashboardnotification.DashboardNotificationPageVO; 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.OverviewInfo;
import com.dongjian.dashboard.back.vo.data.OverviewVO; import com.dongjian.dashboard.back.vo.data.OverviewVO;
import com.dongjian.dashboard.back.vo.monitoringpointcategory.MonitoringPointCategoryPageVO;
import com.dongjian.dashboard.back.weather.JpMeshHourlyForecasts; import com.dongjian.dashboard.back.weather.JpMeshHourlyForecasts;
import com.dongjian.dashboard.back.weather.QueryWeather; import com.dongjian.dashboard.back.weather.QueryWeather;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
@ -47,11 +48,11 @@ public class OverviewServiceImpl implements OverviewService {
@Autowired @Autowired
private DeviceRawdataRealtimeMapperExt deviceRawdataRealtimeMapperExt; private OverviewInfoMapperExt overviewInfoMapperExt;
@Autowired @Autowired
private DashboardNotificationMapperExt dashboardNotificationMapperExt; private DashboardNotificationMapperExt dashboardNotificationMapperExt;
@Autowired @Autowired
private MsgLanguageChange msgLanguageChange; private MonitoringPointCategoryMapperExt monitoringPointCategoryMapperExt;
@Autowired @Autowired
private CommonOpt commonOpt; private CommonOpt commonOpt;
@ -61,21 +62,71 @@ public class OverviewServiceImpl implements OverviewService {
buildingMap.put("companyId", companyId); buildingMap.put("companyId", companyId);
buildingMap.put("bindBuildingIdList", commonOpt.getBindBuildingIdList(userId)); buildingMap.put("bindBuildingIdList", commonOpt.getBindBuildingIdList(userId));
List<OverviewVO> buildingInfoList = deviceRawdataRealtimeMapperExt.getBuildingInfo(buildingMap); List<OverviewVO> buildingInfoList = overviewInfoMapperExt.getBuildingInfo(buildingMap);
if (CollectionUtils.isNotEmpty(buildingInfoList)){ if (CollectionUtils.isNotEmpty(buildingInfoList)){
Map<String, Object> paramMap = new HashMap<>(); Map<String, Object> paramMap = new HashMap<>();
paramMap.put("companyId", companyId); paramMap.put("companyId", companyId);
paramMap.put("categoryIdList", Constants.CATEGORY_MAP.get(Constants.CATEGORY_ALARM)); paramMap.put("categoryIdList", Constants.CATEGORY_MAP.get(Constants.CATEGORY_ALARM));
List<OverviewInfo> alarmInfoList = deviceRawdataRealtimeMapperExt.getOverviewInfo(paramMap); List<OverviewInfo> alarmInfoList = overviewInfoMapperExt.getOverviewInfo(paramMap);
List<OverviewVO> overviewVOList = convert(alarmInfoList, utcOffset); List<OverviewVO> overviewVOList = convert(alarmInfoList, utcOffset);
mergeOverviewList(buildingInfoList, overviewVOList); mergeOverviewList(buildingInfoList, overviewVOList);
// 查找楼宇没有的监测点分类
Map<Long, List<Long>> notExistingCategoryMap = handleMissingMonitoringPointCategory(companyId, buildingInfoList);
mergeMissingMonitoringPointCategory(buildingInfoList, notExistingCategoryMap);
} }
return SimpleDataResponse.success(buildingInfoList); return SimpleDataResponse.success(buildingInfoList);
} }
private void mergeMissingMonitoringPointCategory(List<OverviewVO> buildingInfoList, Map<Long, List<Long>> notExistingCategoryMap) {
buildingInfoList.forEach(building -> {
List<Long> missingCategoryIds = notExistingCategoryMap.get(building.getBuildingId());
if (missingCategoryIds != null && !missingCategoryIds.isEmpty()) {
building.setMissingMonitoringPointCategoryList(missingCategoryIds);
}
});
}
private Map<Long, List<Long>> handleMissingMonitoringPointCategory(Long companyId, List<OverviewVO> buildingInfoList) {
//全部分类
MonitoringPointCategorySearchParams categorySearchParam = new MonitoringPointCategorySearchParams();
categorySearchParam.setCompanyIdList(List.of(companyId));
List<MonitoringPointCategoryPageVO> categoryList = monitoringPointCategoryMapperExt.getListPage(categorySearchParam);
//所有楼宇的监测点分类
Map<String, Object> allCategoryParamMap = new HashMap<>();
allCategoryParamMap.put("companyId", companyId);
allCategoryParamMap.put("categoryIdList", Constants.ALL_CATEGORY_IDS);
List<OverviewCategoryVO> existingCategoryList = overviewInfoMapperExt.getExistingCategoryList(allCategoryParamMap);
Map<Long, Set<Long>> existingCategoryMap =
existingCategoryList.stream()
.filter(e -> e.getBuildingId() != null && e.getMonitoringPointCategoryId() != null)
.collect(Collectors.groupingBy(
OverviewCategoryVO::getBuildingId,
Collectors.mapping(
OverviewCategoryVO::getMonitoringPointCategoryId,
Collectors.toSet()
)
));
Map<Long, List<Long>> notExistingCategoryMap = new HashMap<>();
existingCategoryMap.forEach((buildingId, existingCategoryIds) -> {
List<Long> missingCategoryIds =
categoryList.stream()
.map(MonitoringPointCategoryPageVO::getMonitoringPointCategoryId)
.filter(Objects::nonNull)
.filter(id -> !existingCategoryIds.contains(id))
.collect(Collectors.toList());
notExistingCategoryMap.put(buildingId, missingCategoryIds);
});
return notExistingCategoryMap;
}
public static void mergeOverviewList(List<OverviewVO> buildingInfoList, List<OverviewVO> overviewVOList) { public static void mergeOverviewList(List<OverviewVO> buildingInfoList, List<OverviewVO> overviewVOList) {
// 构建 buildingId 到 OverviewVO 的映射表 // 构建 buildingId 到 OverviewVO 的映射表
Map<Long, OverviewVO> overviewMap = overviewVOList.stream() Map<Long, OverviewVO> overviewMap = overviewVOList.stream()

Loading…
Cancel
Save