diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/MsOperationLogServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/MsOperationLogServiceImpl.java index 3f19b30e..ffc6a31f 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/MsOperationLogServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/MsOperationLogServiceImpl.java @@ -44,17 +44,41 @@ public class MsOperationLogServiceImpl extends ServiceImpl + * 若名称列不在本表,而在关联表中(如 SD_QEC_R 本身无站名,需通过 STCD + * 关联 SD_ENGINFO_B_H 查出 ENNM),使用 {@link #join} 配置关联表信息。 */ - private record TableNameConfig(String pkColumn, String nameColumn) {} + private record TableNameConfig(String pkColumn, String nameColumn, + String joinColumn, String joinTableName, String joinTableNameColumn) { + /** + * 名称列在本表中:直接配置主键列和名称列 + */ + static TableNameConfig self(String pkColumn, String nameColumn) { + return new TableNameConfig(pkColumn, nameColumn, null, null, null); + } + + /** + * 名称列在关联表中:本表 joinColumn 关联到关联表同名主键列,取关联表名称列 + * + * @param pkColumn 本表主键列(IN 查询条件) + * @param joinColumn 本表关联列(也是关联表主键列,如 STCD) + * @param joinTableName 关联表名(如 SD_ENGINFO_B_H) + * @param joinTableNameColumn 关联表名称列(如 ENNM) + */ + static TableNameConfig join(String pkColumn, String joinColumn, String joinTableName, String joinTableNameColumn) { + return new TableNameConfig(pkColumn, null, joinColumn, joinTableName, joinTableNameColumn); + } + } private static final Map TABLE_NAME_CONFIG_MAP = new HashMap<>(); static { // Engine Info: 名称列是 ENNM 而非 STNM - TABLE_NAME_CONFIG_MAP.put("SD_ENGINFO_B_H", new TableNameConfig("STCD", "ENNM")); + TABLE_NAME_CONFIG_MAP.put("SD_ENGINFO_B_H", TableNameConfig.self("STCD", "ENNM")); // Hydro Base: 主键列是 BASEID,名称列是 BASENAME - TABLE_NAME_CONFIG_MAP.put("SD_HYDROBASE", new TableNameConfig("BASEID", "BASENAME")); + TABLE_NAME_CONFIG_MAP.put("SD_HYDROBASE", TableNameConfig.self("BASEID", "BASENAME")); // Fish Dictionary: 需确认结构后配置 - TABLE_NAME_CONFIG_MAP.put("SD_FISHDICTORY_B", new TableNameConfig("ID", "NAME")); - TABLE_NAME_CONFIG_MAP.put("SD_QEC_R", new TableNameConfig("ID", "STCD")); + TABLE_NAME_CONFIG_MAP.put("SD_FISHDICTORY_B", TableNameConfig.self("ID", "NAME")); + // 生态流量小时表本身无站名,通过 STCD 关联 SD_ENGINFO_B_H 查询 ENNM + TABLE_NAME_CONFIG_MAP.put("SD_QEC_R", TableNameConfig.join("ID", "STCD", "V_MS_STBPRP_T", "ENNM")); } private static final Map ENG_FIELD_MEANING_MAP = new LinkedHashMap<>(); @@ -1010,10 +1034,22 @@ public class MsOperationLogServiceImpl extends ServiceImpl> results = microservicDynamicSQLMapper.getAllList(sql, paramMap); // 构建 pkVal → nameVal 映射