fix: 优化逻辑
This commit is contained in:
parent
5188d526ec
commit
50f23abbb9
@ -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;
|
||||||
"FROM " + tableName +
|
if (config != null && StrUtil.isNotBlank(config.joinTableName())) {
|
||||||
" WHERE " + pkColumn + " IN (" + inPlaceholders + ")" +
|
// 名称列在关联表中:本表 joinColumn 关联到关联表同名主键列,取关联表名称列
|
||||||
" AND NVL(IS_DELETED, 0) = 0";
|
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 +
|
||||||
|
" WHERE " + pkColumn + " IN (" + inPlaceholders + ")" +
|
||||||
|
" 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 映射
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user