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.HttpServletResponse;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.*;
import java.util.concurrent.atomic.AtomicLong;
@ -57,23 +54,44 @@ public class DataSourceInterceptor implements HandlerInterceptor {
public long getTopCompanyId(String companyId) {
String sql="SELECT "
+ " bcom.id, bcom.parent_id parentId"
+ " FROM data_center_aeon_admin.basic_company bcom "
+ " WHERE bcom.flag != 1 and bcom.id = " + companyId;
if (StringUtils.isBlank(companyId)) {
throw new IllegalArgumentException("companyId不能为空");
}
AtomicLong parentId = new AtomicLong(0);
AtomicLong id = new AtomicLong(0);
jdbcTemplate.query(sql,rs -> {
parentId.set(rs.getLong("parentId"));
id.set(rs.getLong("id"));
});
//Recursive logic
if (1 == parentId.get() || -1 == parentId.get()) {
return id.get();
} else {
return getTopCompanyId(parentId.get()+"");
return getTopCompanyIdInternal(Long.parseLong(companyId), new HashSet<>());
}
private long getTopCompanyIdInternal(Long companyId, Set<Long> visited) {
// 防止循环引用
if (!visited.add(companyId)) {
throw new IllegalStateException("检测到公司父子结构循环,companyId=" + companyId);
}
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
dinfo.flag != 1 AND basic_monitoring_asset.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}
</if>
AND dinfo.company_id IN <foreach collection="companyIdList" item="item" open="(" separator="," close=")">#{item}</foreach>
<if test="categoryIdList != null and categoryIdList.size() > 0">
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.thumbnail_normal_base64,
mpc.thumbnail_alarm_base64,
mpc.thumbnail_dis_base64,
mpc.`name`,
mpc.remark
FROM

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

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

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

@ -26,7 +26,7 @@
</foreach>
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 basic_monitoring_asset.flag = 0 AND dinfo.flag = 0
AND ah.confirm_status = 0 AND ah.handle_status = 1
</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());
if (null != cacheLastValue) {
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())
.atZone(Constants.ZONE_TOKYO)
.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();
categorySearchParam.setCompanyIdList(List.of(companyId));
List<MonitoringPointCategoryPageVO> categoryList = monitoringPointCategoryMapperExt.getListPage(categorySearchParam);
List<Long> allCategoryIds = categoryList.stream()
.map(MonitoringPointCategoryPageVO::getMonitoringPointCategoryId)
.filter(Objects::nonNull)
.toList();
//所有楼宇的监测点分类
Map<String, Object> allCategoryParamMap = new HashMap<>();
allCategoryParamMap.put("companyId", companyId);
@ -113,16 +119,17 @@ public class OverviewServiceImpl implements OverviewService {
));
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);
});
for (OverviewVO building : buildingInfoList) {
Long buildingId = building.getBuildingId();
Set<Long> existingIds = existingCategoryMap.getOrDefault(buildingId, Collections.emptySet());
List<Long> missingIds = new ArrayList<>();
for (Long categoryId : allCategoryIds) {
if (!existingIds.contains(categoryId)) {
missingIds.add(categoryId);
}
}
notExistingCategoryMap.put(buildingId, missingIds);
}
return notExistingCategoryMap;
}
@ -189,6 +196,7 @@ public class OverviewServiceImpl implements OverviewService {
// 分组监测点分类
List<OverviewVO.MonitoringPointCategoryAlarm> categoryAlarms = buildingInfos.stream()
.filter(dto -> dto.getMonitoringPointCategoryId() != null)
.collect(Collectors.groupingBy(OverviewInfo::getMonitoringPointCategoryId))
.entrySet()
.stream()

Loading…
Cancel
Save