Browse Source

Merge branch 'ppt-20260120' into jwy

zhc
review512jwy@163.com 1 month ago
parent
commit
6c21b23e42
  1. 56
      dongjian-dashboard-back-common/src/main/java/com/dongjian/dashboard/back/common/config/DataSourceInterceptor.java
  2. 2
      dongjian-dashboard-back-dao/src/main/resources/mappers/ex/FavoritedDeviceMapperExt.xml
  3. 2
      dongjian-dashboard-back-dao/src/main/resources/mappers/ex/MonitoringPointCategoryGroupMapperExt.xml
  4. 1
      dongjian-dashboard-back-dao/src/main/resources/mappers/ex/MonitoringPointCategoryMapperExt.xml
  5. 2
      dongjian-dashboard-back-dao/src/main/resources/mappers/ex/OverviewInfoMapperExt.xml
  6. 7
      dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataBaStatusServiceImpl.java
  7. 28
      dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/OverviewServiceImpl.java

56
dongjian-dashboard-back-common/src/main/java/com/dongjian/dashboard/back/common/config/DataSourceInterceptor.java

@ -13,10 +13,7 @@ import com.dongjian.dashboard.back.common.Constants;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import java.util.ArrayList; import java.util.*;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicLong;
@ -57,23 +54,44 @@ public class DataSourceInterceptor implements HandlerInterceptor {
public long getTopCompanyId(String companyId) { public long getTopCompanyId(String companyId) {
String sql="SELECT " if (StringUtils.isBlank(companyId)) {
+ " bcom.id, bcom.parent_id parentId" throw new IllegalArgumentException("companyId不能为空");
+ " FROM data_center_aeon_admin.basic_company bcom " }
+ " WHERE bcom.flag != 1 and bcom.id = " + companyId;
AtomicLong parentId = new AtomicLong(0); return getTopCompanyIdInternal(Long.parseLong(companyId), new HashSet<>());
AtomicLong id = new AtomicLong(0); }
jdbcTemplate.query(sql,rs -> {
parentId.set(rs.getLong("parentId")); private long getTopCompanyIdInternal(Long companyId, Set<Long> visited) {
id.set(rs.getLong("id"));
}); // 防止循环引用
//Recursive logic if (!visited.add(companyId)) {
if (1 == parentId.get() || -1 == parentId.get()) { throw new IllegalStateException("检测到公司父子结构循环,companyId=" + companyId);
return id.get();
} else {
return getTopCompanyId(parentId.get()+"");
} }
String sql = """
SELECT id, parent_id
FROM data_center_aeon_admin.basic_company
WHERE flag != 1 AND id = ?
""";
List<Map<String, Object>> result = jdbcTemplate.queryForList(sql, companyId);
if (result.isEmpty()) {
throw new IllegalStateException("公司不存在,companyId=" + companyId);
}
Map<String, Object> row = result.get(0);
Long parentId = row.get("parent_id") == null
? null
: ((Number) row.get("parent_id")).longValue();
// 顶级企业
if (parentId == null || parentId == 1 || parentId == -1) {
return companyId;
}
return getTopCompanyIdInternal(parentId, visited);
} }
/** /**

2
dongjian-dashboard-back-dao/src/main/resources/mappers/ex/FavoritedDeviceMapperExt.xml

@ -20,7 +20,9 @@
WHERE WHERE
dinfo.flag != 1 AND basic_monitoring_asset.flag != 1 dinfo.flag != 1 AND basic_monitoring_asset.flag != 1
AND basic_space.flag != 1 AND basic_floor.flag != 1 AND basic_building.flag != 1 AND basic_space.flag != 1 AND basic_floor.flag != 1 AND basic_building.flag != 1
<if test="buildingId != null">
AND basic_building.building_id = #{buildingId} AND basic_building.building_id = #{buildingId}
</if>
AND dinfo.company_id IN <foreach collection="companyIdList" item="item" open="(" separator="," close=")">#{item}</foreach> AND dinfo.company_id IN <foreach collection="companyIdList" item="item" open="(" separator="," close=")">#{item}</foreach>
<if test="categoryIdList != null and categoryIdList.size() > 0"> <if test="categoryIdList != null and categoryIdList.size() > 0">
and ty.device_category_id in and ty.device_category_id in

2
dongjian-dashboard-back-dao/src/main/resources/mappers/ex/MonitoringPointCategoryGroupMapperExt.xml

@ -67,7 +67,7 @@
mpc.company_id, mpc.company_id,
mpc.thumbnail_normal_base64, mpc.thumbnail_normal_base64,
mpc.thumbnail_alarm_base64, mpc.thumbnail_alarm_base64,
mpc.thumbnail_dis_base64,
mpc.`name`, mpc.`name`,
mpc.remark mpc.remark
FROM FROM

1
dongjian-dashboard-back-dao/src/main/resources/mappers/ex/MonitoringPointCategoryMapperExt.xml

@ -24,6 +24,7 @@
mpc.company_id, mpc.company_id,
mpc.thumbnail_normal_base64, mpc.thumbnail_normal_base64,
mpc.thumbnail_alarm_base64, mpc.thumbnail_alarm_base64,
mpc.thumbnail_dis_base64,
mpc.class_name AS `name` mpc.class_name AS `name`
FROM FROM
basic_asset_class_big mpc basic_asset_class_big mpc

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

@ -26,7 +26,7 @@
</foreach> </foreach>
WHERE WHERE
bbuilding.company_id = #{companyId} AND bbuilding.flag = 0 AND basic_floor.flag = 0 AND basic_space.flag = 0 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 basic_monitoring_asset.flag = 0 AND dinfo.flag = 0
AND ah.confirm_status = 0 AND ah.handle_status = 1 AND ah.confirm_status = 0 AND ah.handle_status = 1
</select> </select>

7
dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataBaStatusServiceImpl.java

@ -200,7 +200,12 @@ public class DeviceDataBaStatusServiceImpl implements DeviceDataBaStatusService
Object cacheLastValue = redisUtil.HGet(redisKey, lineDataSearchParams.getDeviceId().toLowerCase()); Object cacheLastValue = redisUtil.HGet(redisKey, lineDataSearchParams.getDeviceId().toLowerCase());
if (null != cacheLastValue) { if (null != cacheLastValue) {
try { try {
LatestValueBO latestValueBO = objectMapper.readValue(JSONObject.toJSONString(cacheLastValue), LatestValueBO.class); String value = cacheLastValue.toString();
// 如果是被双引号包住的 JSON(双层 JSON)
if (value.startsWith("\"")) {
value = objectMapper.readValue(value, String.class);
}
LatestValueBO latestValueBO = objectMapper.readValue(value, LatestValueBO.class);
String dateFormatted = Instant.ofEpochMilli(latestValueBO.getUpdateTs()) String dateFormatted = Instant.ofEpochMilli(latestValueBO.getUpdateTs())
.atZone(Constants.ZONE_TOKYO) .atZone(Constants.ZONE_TOKYO)
.format(Constants.FORMATTER_YMDHMS); .format(Constants.FORMATTER_YMDHMS);

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

@ -95,6 +95,12 @@ public class OverviewServiceImpl implements OverviewService {
MonitoringPointCategorySearchParams categorySearchParam = new MonitoringPointCategorySearchParams(); MonitoringPointCategorySearchParams categorySearchParam = new MonitoringPointCategorySearchParams();
categorySearchParam.setCompanyIdList(List.of(companyId)); categorySearchParam.setCompanyIdList(List.of(companyId));
List<MonitoringPointCategoryPageVO> categoryList = monitoringPointCategoryMapperExt.getListPage(categorySearchParam); List<MonitoringPointCategoryPageVO> categoryList = monitoringPointCategoryMapperExt.getListPage(categorySearchParam);
List<Long> allCategoryIds = categoryList.stream()
.map(MonitoringPointCategoryPageVO::getMonitoringPointCategoryId)
.filter(Objects::nonNull)
.toList();
//所有楼宇的监测点分类 //所有楼宇的监测点分类
Map<String, Object> allCategoryParamMap = new HashMap<>(); Map<String, Object> allCategoryParamMap = new HashMap<>();
allCategoryParamMap.put("companyId", companyId); allCategoryParamMap.put("companyId", companyId);
@ -113,16 +119,17 @@ public class OverviewServiceImpl implements OverviewService {
)); ));
Map<Long, List<Long>> notExistingCategoryMap = new HashMap<>(); Map<Long, List<Long>> notExistingCategoryMap = new HashMap<>();
existingCategoryMap.forEach((buildingId, existingCategoryIds) -> { for (OverviewVO building : buildingInfoList) {
List<Long> missingCategoryIds = Long buildingId = building.getBuildingId();
categoryList.stream() Set<Long> existingIds = existingCategoryMap.getOrDefault(buildingId, Collections.emptySet());
.map(MonitoringPointCategoryPageVO::getMonitoringPointCategoryId) List<Long> missingIds = new ArrayList<>();
.filter(Objects::nonNull) for (Long categoryId : allCategoryIds) {
.filter(id -> !existingCategoryIds.contains(id)) if (!existingIds.contains(categoryId)) {
.collect(Collectors.toList()); missingIds.add(categoryId);
}
notExistingCategoryMap.put(buildingId, missingCategoryIds); }
}); notExistingCategoryMap.put(buildingId, missingIds);
}
return notExistingCategoryMap; return notExistingCategoryMap;
} }
@ -189,6 +196,7 @@ public class OverviewServiceImpl implements OverviewService {
// 分组监测点分类 // 分组监测点分类
List<OverviewVO.MonitoringPointCategoryAlarm> categoryAlarms = buildingInfos.stream() List<OverviewVO.MonitoringPointCategoryAlarm> categoryAlarms = buildingInfos.stream()
.filter(dto -> dto.getMonitoringPointCategoryId() != null)
.collect(Collectors.groupingBy(OverviewInfo::getMonitoringPointCategoryId)) .collect(Collectors.groupingBy(OverviewInfo::getMonitoringPointCategoryId))
.entrySet() .entrySet()
.stream() .stream()

Loading…
Cancel
Save