fix: 优化逻辑

This commit is contained in:
tangwei 2026-08-19 19:18:26 +08:00
parent 5188d526ec
commit 50f23abbb9

View File

@ -44,17 +44,41 @@ public class MsOperationLogServiceImpl extends ServiceImpl<MsOperationLogMapper,
* 表名 (主键列, 名称列) 配置映射 * 表名 (主键列, 名称列) 配置映射
* 默认主键列 = STCD名称列 = STNM无需显式配置 * 默认主键列 = STCD名称列 = STNM无需显式配置
* 仅在主键列或名称列与默认不同的情况下才需配置 * 仅在主键列或名称列与默认不同的情况下才需配置
* <p>
* 若名称列不在本表而在关联表中 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<String, TableNameConfig> TABLE_NAME_CONFIG_MAP = new HashMap<>(); private static final Map<String, TableNameConfig> TABLE_NAME_CONFIG_MAP = new HashMap<>();
static { static {
// Engine Info: 名称列是 ENNM 而非 STNM // 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 // 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: 需确认结构后配置 // Fish Dictionary: 需确认结构后配置
TABLE_NAME_CONFIG_MAP.put("SD_FISHDICTORY_B", new TableNameConfig("ID", "NAME")); TABLE_NAME_CONFIG_MAP.put("SD_FISHDICTORY_B", TableNameConfig.self("ID", "NAME"));
TABLE_NAME_CONFIG_MAP.put("SD_QEC_R", new TableNameConfig("ID", "STCD")); // 生态流量小时表本身无站名通过 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<String, String> ENG_FIELD_MEANING_MAP = new LinkedHashMap<>(); private static final Map<String, String> ENG_FIELD_MEANING_MAP = new LinkedHashMap<>();
@ -1010,10 +1034,22 @@ public class MsOperationLogServiceImpl extends ServiceImpl<MsOperationLogMapper,
// 注意如果配置的表在数据库中不存在跳过 // 注意如果配置的表在数据库中不存在跳过
try { try {
String sql = "SELECT " + pkColumn + " AS pkVal, " + nameColumn + " AS nameVal " + String sql;
if (config != null && StrUtil.isNotBlank(config.joinTableName())) {
// 名称列在关联表中本表 joinColumn 关联到关联表同名主键列取关联表名称列
sql = "SELECT t." + pkColumn + " AS pkVal, nt." + config.joinTableNameColumn() + " AS nameVal " +
"FROM " + tableName + " t " +
"LEFT JOIN " + config.joinTableName() + " nt " +
" ON t." + config.joinColumn() + " = nt." + config.joinColumn() + " " +
" AND NVL(nt.IS_DELETED, 0) = 0 " +
"WHERE t." + pkColumn + " IN (" + inPlaceholders + ")" +
" AND NVL(t.IS_DELETED, 0) = 0";
} else {
sql = "SELECT " + pkColumn + " AS pkVal, " + nameColumn + " AS nameVal " +
"FROM " + tableName + "FROM " + tableName +
" WHERE " + pkColumn + " IN (" + inPlaceholders + ")" + " WHERE " + pkColumn + " IN (" + inPlaceholders + ")" +
" AND NVL(IS_DELETED, 0) = 0"; " AND NVL(IS_DELETED, 0) = 0";
}
List<Map<String, Object>> results = microservicDynamicSQLMapper.getAllList(sql, paramMap); List<Map<String, Object>> results = microservicDynamicSQLMapper.getAllList(sql, paramMap);
// 构建 pkVal nameVal 映射 // 构建 pkVal nameVal 映射