feat: 全过程AI识别监测日历表

This commit is contained in:
tangwei 2026-06-24 08:51:54 +08:00
parent 939ddd11e0
commit 2e69b3e73c
3 changed files with 126 additions and 0 deletions

View File

@ -57,6 +57,12 @@ public class WarnDataController {
return ResponseResult.successData(warnDataService.getAiPfwRecordKendoListCust(dataSourceRequest));
}
@PostMapping("/ai/com/qgc/aiRecord/GetKendoListCust")
@Operation(summary = "全过程AI识别监测日历表")
public ResponseResult getAiRecordKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(warnDataService.getAiRecordKendoListCust(dataSourceRequest));
}
@PostMapping("/alarmPoint/GetKendoListCust")
@Operation(summary = "电站告警描点列表")
public ResponseResult getAlarmPointKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {

View File

@ -26,5 +26,7 @@ public interface WarnDataService {
List<AiRecordVo> getAiPfwRecordKendoListCust(DataSourceRequest dataSourceRequest);
List<AiRecordVo> getAiRecordKendoListCust(DataSourceRequest dataSourceRequest);
DataSourceResult<AlarmPointVo> getAlarmPointKendoListCust(DataSourceRequest dataSourceRequest);
}

View File

@ -238,6 +238,23 @@ public class WarnDataServiceImpl implements WarnDataService {
return list;
}
@Override
public List<AiRecordVo> getAiRecordKendoListCust(DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
String baseId = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "baseId");
String startTime = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "startTime");
String endTime = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "endTime");
String rstcd = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "rstcd");
String stcd = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "stcd");
String type = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "type");
Map<String, Object> paramMap = new HashMap<>();
String sql = buildAiRecordSql(baseId, parseAiTime(startTime), parseAiTime(endTime), parseAiCodes(rstcd), stcd, type, paramMap);
List<AiRecordVo> list = microservicDynamicSQLMapper.getAllListWithResultType(sql, paramMap, AiRecordVo.class);
fillAiRecordStatus(list);
return list;
}
@Override
public DataSourceResult<AlarmPointVo> getAlarmPointKendoListCust(DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
@ -370,6 +387,48 @@ public class WarnDataServiceImpl implements WarnDataService {
return sql.toString();
}
private String buildAiRecordSql(String baseId,
Date startTime,
Date endTime,
List<String> rstcdList,
String stcd,
String type,
Map<String, Object> paramMap) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT a.dt AS dt, b.cnt AS cnt ")
.append("FROM (")
.append("SELECT TO_CHAR(hb.TM, 'yyyy-MM-dd') AS dt ")
.append("FROM SD_AIHEARTBEAT_R hb ")
.append("INNER JOIN SD_AIMONITOR_B_H ai ON ai.STCD = hb.STCD ")
.append("WHERE NVL(hb.IS_DELETED, 0) = 0 ")
.append("AND NVL(ai.IS_DELETED, 0) = 0 ")
.append("AND ai.STTP LIKE 'AI_%' ");
appendAiRecordFilterSql(sql, "aiRecordHeartbeat", "ai", "hb", baseId, startTime, endTime, rstcdList, stcd, type, paramMap);
sql.append("GROUP BY TO_CHAR(hb.TM, 'yyyy-MM-dd') ")
.append("UNION ")
.append("SELECT TO_CHAR(rec.TM, 'yyyy-MM-dd') AS dt ")
.append("FROM SD_AICOM_R rec ")
.append("INNER JOIN SD_AIMONITOR_B_H ai ON ai.STCD = rec.STCD ")
.append("WHERE NVL(rec.IS_DELETED, 0) = 0 ")
.append("AND NVL(ai.IS_DELETED, 0) = 0 ")
.append("AND ai.STTP LIKE 'AI_%' ");
appendAiRecordFilterSql(sql, "aiRecordAicomDate", "ai", "rec", baseId, startTime, endTime, rstcdList, stcd, type, paramMap);
sql.append("GROUP BY TO_CHAR(rec.TM, 'yyyy-MM-dd') ")
.append(") a ")
.append("LEFT JOIN (")
.append("SELECT TO_CHAR(rec.TM, 'yyyy-MM-dd') AS dt, COUNT(1) AS cnt ")
.append("FROM SD_AICOM_R rec ")
.append("INNER JOIN SD_AIMONITOR_B_H ai ON ai.STCD = rec.STCD ")
.append("WHERE NVL(rec.IS_DELETED, 0) = 0 ")
.append("AND NVL(ai.IS_DELETED, 0) = 0 ")
.append("AND ai.STTP LIKE 'AI_%' ");
appendAiRecordFilterSql(sql, "aiRecordAicomCnt", "ai", "rec", baseId, startTime, endTime, rstcdList, stcd, type, paramMap);
sql.append("GROUP BY TO_CHAR(rec.TM, 'yyyy-MM-dd') ")
.append(") b ON a.dt = b.dt ")
.append("ORDER BY a.dt");
return sql.toString();
}
private String buildAlarmPointBaseSql() {
return "SELECT " +
"eng.STCD AS stcd, " +
@ -533,6 +592,48 @@ public class WarnDataServiceImpl implements WarnDataService {
}
}
private void appendAiRecordFilterSql(StringBuilder sql,
String keyPrefix,
String aiAlias,
String recordAlias,
String baseId,
Date startTime,
Date endTime,
List<String> rstcdList,
String stcd,
String type,
Map<String, Object> paramMap) {
if (StrUtil.isNotBlank(baseId)) {
paramMap.put(keyPrefix + "BaseId", baseId.trim());
sql.append("AND ").append(aiAlias).append(".BASE_ID = #{map.").append(keyPrefix).append("BaseId} ");
}
if (StrUtil.isNotBlank(stcd)) {
paramMap.put(keyPrefix + "Stcd", stcd.trim());
sql.append("AND ").append(aiAlias).append(".STCD = #{map.").append(keyPrefix).append("Stcd} ");
}
if (StrUtil.isNotBlank(type)) {
paramMap.put(keyPrefix + "Type", type.trim());
sql.append("AND ").append(aiAlias).append(".STTP = #{map.").append(keyPrefix).append("Type} ");
}
if (CollUtil.isNotEmpty(rstcdList)) {
List<String> placeholders = new ArrayList<>();
for (int i = 0; i < rstcdList.size(); i++) {
String key = keyPrefix + "Rstcd" + i;
paramMap.put(key, rstcdList.get(i));
placeholders.add("#{map." + key + "}");
}
sql.append("AND ").append(aiAlias).append(".RSTCD IN (").append(String.join(", ", placeholders)).append(") ");
}
if (startTime != null) {
paramMap.put(keyPrefix + "StartTime", startTime);
sql.append("AND ").append(recordAlias).append(".TM >= #{map.").append(keyPrefix).append("StartTime} ");
}
if (endTime != null) {
paramMap.put(keyPrefix + "EndTime", endTime);
sql.append("AND ").append(recordAlias).append(".TM <= #{map.").append(keyPrefix).append("EndTime} ");
}
}
private Map<String, Date> buildAlarmPointYearRange(String yearText) {
Date endTime = new Date();
String currentYear = String.valueOf(DateUtil.year(endTime));
@ -720,6 +821,23 @@ public class WarnDataServiceImpl implements WarnDataService {
}
}
private void fillAiRecordStatus(List<AiRecordVo> list) {
if (CollUtil.isEmpty(list)) {
return;
}
for (AiRecordVo item : list) {
if (item == null) {
continue;
}
if (item.getCnt() != null) {
item.setStatus(3);
} else {
item.setStatus(4);
}
item.setStatusName(resolveAiStatusName(item.getStatus()));
}
}
private String resolveAiStatusName(Integer status) {
if (status == null) {
return null;