feat: 全过程AI识别有数据的电站下拉

This commit is contained in:
tangwei 2026-06-23 17:54:30 +08:00
parent e8489a4f56
commit 2fbdb0cdef
4 changed files with 126 additions and 0 deletions

View File

@ -44,4 +44,10 @@ public class WarnDataController {
public ResponseResult getAiComKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(warnDataService.getAiComKendoListCust(dataSourceRequest));
}
@PostMapping("/ai/com/qgc/aiRstcd/GetKendoListCust")
@Operation(summary = "全过程AI识别有数据的电站下拉")
public ResponseResult getAiRstcdListKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(warnDataService.getAiRstcdListKendoListCust(dataSourceRequest));
}
}

View File

@ -0,0 +1,15 @@
package com.yfd.platform.qgc_env.warn.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@Schema(description = "全过程AI识别电站下拉")
public class AiRstcdVo {
@Schema(description = "电站编码")
private String stcd;
@Schema(description = "电站名称")
private String stnm;
}

View File

@ -5,6 +5,7 @@ import com.yfd.platform.common.DataSourceResult;
import com.yfd.platform.qgc_env.warn.entity.vo.AiProtectVo;
import com.yfd.platform.qgc_env.warn.entity.vo.AiDmRunVo;
import com.yfd.platform.qgc_env.warn.entity.vo.AiComListVo;
import com.yfd.platform.qgc_env.warn.entity.vo.AiRstcdVo;
import com.yfd.platform.qgc_env.warn.entity.vo.EngWarnCountVo;
public interface WarnDataService {
@ -16,4 +17,6 @@ public interface WarnDataService {
AiProtectVo getAiProtectCount(DataSourceRequest dataSourceRequest);
DataSourceResult<AiComListVo> getAiComKendoListCust(DataSourceRequest dataSourceRequest);
DataSourceResult<AiRstcdVo> getAiRstcdListKendoListCust(DataSourceRequest dataSourceRequest);
}

View File

@ -13,6 +13,8 @@ import com.yfd.platform.common.MicroservicDynamicSQLMapper;
import com.yfd.platform.qgc_env.warn.entity.vo.AiComListVo;
import com.yfd.platform.qgc_env.warn.entity.vo.AiDmRunVo;
import com.yfd.platform.qgc_env.warn.entity.vo.AiProtectVo;
import com.yfd.platform.qgc_env.warn.entity.vo.AiProtectVo;
import com.yfd.platform.qgc_env.warn.entity.vo.AiRstcdVo;
import com.yfd.platform.qgc_env.warn.entity.vo.EngWarnCountVo;
import com.yfd.platform.qgc_env.warn.service.WarnDataService;
import com.yfd.platform.utils.QgcQueryWrapperUtil;
@ -200,6 +202,25 @@ public class WarnDataServiceImpl implements WarnDataService {
return result;
}
@Override
public DataSourceResult<AiRstcdVo> getAiRstcdListKendoListCust(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 type = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "type");
Map<String, Object> paramMap = new HashMap<>();
String sql = buildAiRstcdListSql(baseId, parseAiTime(startTime), parseAiTime(endTime), type, paramMap);
List<AiRstcdVo> list = microservicDynamicSQLMapper.getAllListWithResultType(sql, paramMap, AiRstcdVo.class);
DataSourceResult<AiRstcdVo> result = new DataSourceResult<>();
result.setData(list);
result.setTotal(list.size());
result.setAggregates(new HashMap<>());
return result;
}
private AiDmRunVo buildAiDmRunVo(Map<String, Object> row) {
if (row == null || row.isEmpty()) {
return null;
@ -211,6 +232,87 @@ public class WarnDataServiceImpl implements WarnDataService {
return vo;
}
private String buildAiRstcdListSql(String baseId,
Date startTime,
Date endTime,
String type,
Map<String, Object> paramMap) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT DISTINCT t.stcd AS stcd, t.stnm AS stnm FROM (");
sql.append("SELECT ai.RSTCD AS stcd, eng.ENNM AS stnm ")
.append("FROM SD_AIMONITOR_B_H ai ")
.append("INNER JOIN SD_AICOM_R rec ON ai.STCD = rec.STCD ")
.append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = ai.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 ")
.append("WHERE NVL(ai.IS_DELETED, 0) = 0 ")
.append("AND NVL(rec.IS_DELETED, 0) = 0 ")
.append("AND ai.STTP LIKE 'AI_%' ")
.append("AND ai.RSTCD IS NOT NULL ");
appendAiRstcdCommonFilterSql(sql, "aiRstcdAicom", "ai", "rec", baseId, startTime, endTime, paramMap);
appendAiRstcdTypeFilterSql(sql, "aiRstcdType", "rec.TYPE", type, paramMap);
sql.append(" UNION ");
sql.append("SELECT ai.RSTCD AS stcd, eng.ENNM AS stnm ")
.append("FROM SD_AIMONITOR_B_H ai ")
.append("INNER JOIN SD_AIHEARTBEAT_R hb ON ai.STCD = hb.STCD ")
.append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = ai.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 ")
.append("WHERE NVL(ai.IS_DELETED, 0) = 0 ")
.append("AND NVL(hb.IS_DELETED, 0) = 0 ")
.append("AND ai.STTP LIKE 'AI_%' ")
.append("AND ai.RSTCD IS NOT NULL ");
appendAiRstcdCommonFilterSql(sql, "aiRstcdHeartbeat", "ai", "hb", baseId, startTime, endTime, paramMap);
appendAiRstcdHeartbeatTypeFilterSql(sql, type, paramMap);
sql.append(") t ORDER BY t.stnm, t.stcd");
return sql.toString();
}
private void appendAiRstcdCommonFilterSql(StringBuilder sql,
String keyPrefix,
String aiAlias,
String recordAlias,
String baseId,
Date startTime,
Date endTime,
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 (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 void appendAiRstcdTypeFilterSql(StringBuilder sql,
String keyPrefix,
String typeColumn,
String type,
Map<String, Object> paramMap) {
if (StrUtil.isBlank(type)) {
return;
}
paramMap.put(keyPrefix, type.trim());
sql.append("AND ").append(typeColumn).append(" = #{map.").append(keyPrefix).append("} ");
}
private void appendAiRstcdHeartbeatTypeFilterSql(StringBuilder sql,
String type,
Map<String, Object> paramMap) {
if (StrUtil.isBlank(type)) {
return;
}
String normalizedType = type.trim();
if ("AI_5011".equalsIgnoreCase(normalizedType)) {
paramMap.put("aiRstcdHeartbeatType", "AI_5001");
} else {
paramMap.put("aiRstcdHeartbeatType", normalizedType);
}
sql.append("AND ai.STTP = #{map.aiRstcdHeartbeatType} ");
}
private AiProtectVo buildAiProtectVo(Map<String, Object> row) {
if (row == null || row.isEmpty()) {
return null;