refactor(oa): 重构数据库查询服务以优化数据处理和元信息包含逻辑

- 优化数据处理流程,优先使用查询结果的 key 生成 columns/fields
- 改进元信息包含逻辑,通过列名映射获取表结构信息
- 调整数据结构组织方式,提高代码可读性和可维护性
This commit is contained in:
2025-08-05 16:25:22 +08:00
parent f38072f148
commit 7ad49224d2

View File

@@ -105,48 +105,58 @@ public class DatabaseQueryServiceImpl implements IDatabaseQueryService {
public DynamicDataVo executeQueryWithMeta(String sql, String tableName, boolean includeMeta) {
// 执行查询
List<Map<String, Object>> data = executeQuery(sql);
DynamicDataVo result = new DynamicDataVo();
// 设置渲染类型为表格
result.setRenderType("table");
// 构建表格数据
DynamicDataVo.TableData tableData = new DynamicDataVo.TableData();
// 如果需要元信息,则生成字段元信息
tableData.setDatasource(data);
// 动态生成 columns/fields优先以 datasource 的 key 为主
List<DynamicDataVo.Field> fields = new ArrayList<>();
List<Map<String, Object>> columnsList = new ArrayList<>();
Map<String, TableColumnVo> columnMetaMap = new HashMap<>();
if (includeMeta && tableName != null) {
List<TableColumnVo> columns = getTableColumns(tableName);
DynamicDataVo.Meta meta = new DynamicDataVo.Meta();
List<DynamicDataVo.Field> fields = new ArrayList<>();
List<Map<String, Object>> columnsList = new ArrayList<>();
for (TableColumnVo col : columns) {
columnMetaMap.put(col.getColumnName(), col);
}
}
for (TableColumnVo column : columns) {
if (data != null && !data.isEmpty()) {
Map<String, Object> firstRow = data.get(0);
for (String key : firstRow.keySet()) {
DynamicDataVo.Field field = new DynamicDataVo.Field();
field.setFieldName(column.getColumnName());
field.setLabel(column.getColumnComment() != null ? column.getColumnComment() : column.getColumnName());
field.setType(getFieldType(column));
field.setFormat(getFieldFormat(column));
field.setFieldName(key);
TableColumnVo meta = columnMetaMap.get(key);
if (meta != null) {
field.setLabel(meta.getColumnComment() != null ? meta.getColumnComment() : key);
field.setType(getFieldType(meta));
field.setFormat(getFieldFormat(meta));
} else {
field.setLabel(key);
field.setType("string");
field.setFormat(null);
}
fields.add(field);
// 构建列信息
Map<String, Object> columnInfo = new HashMap<>();
columnInfo.put("field", column.getColumnName());
columnInfo.put("title", column.getColumnComment() != null ? column.getColumnComment() : column.getColumnName());
columnInfo.put("type", getFieldType(column));
columnInfo.put("format", getFieldFormat(column));
columnInfo.put("field", key);
columnInfo.put("title", field.getLabel());
columnInfo.put("type", field.getType());
columnInfo.put("format", field.getFormat());
columnsList.add(columnInfo);
}
}
// meta 只做补充
if (includeMeta) {
DynamicDataVo.Meta meta = new DynamicDataVo.Meta();
meta.setFields(fields);
result.setMeta(meta);
tableData.setColumns(columnsList);
}
// 设置数据源
tableData.setDatasource(data);
tableData.setColumns(columnsList);
result.setResponse(tableData);
return result;
}