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

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

View File

@@ -107,46 +107,56 @@ public class DatabaseQueryServiceImpl implements IDatabaseQueryService {
List<Map<String, Object>> data = executeQuery(sql); List<Map<String, Object>> data = executeQuery(sql);
DynamicDataVo result = new DynamicDataVo(); DynamicDataVo result = new DynamicDataVo();
// 设置渲染类型为表格
result.setRenderType("table"); result.setRenderType("table");
// 构建表格数据
DynamicDataVo.TableData tableData = new DynamicDataVo.TableData(); 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) { if (includeMeta && tableName != null) {
List<TableColumnVo> columns = getTableColumns(tableName); List<TableColumnVo> columns = getTableColumns(tableName);
DynamicDataVo.Meta meta = new DynamicDataVo.Meta(); for (TableColumnVo col : columns) {
List<DynamicDataVo.Field> fields = new ArrayList<>(); columnMetaMap.put(col.getColumnName(), col);
List<Map<String, Object>> columnsList = new ArrayList<>();
for (TableColumnVo column : columns) {
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));
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));
columnsList.add(columnInfo);
} }
meta.setFields(fields);
result.setMeta(meta);
tableData.setColumns(columnsList);
} }
// 设置数据源 if (data != null && !data.isEmpty()) {
tableData.setDatasource(data); Map<String, Object> firstRow = data.get(0);
result.setResponse(tableData); for (String key : firstRow.keySet()) {
DynamicDataVo.Field field = new DynamicDataVo.Field();
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", 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);
result.setResponse(tableData);
return result; return result;
} }