refactor(oa): 重构数据库查询服务以优化数据处理和元信息包含逻辑
- 优化数据处理流程,优先使用查询结果的 key 生成 columns/fields - 改进元信息包含逻辑,通过列名映射获取表结构信息 - 调整数据结构组织方式,提高代码可读性和可维护性
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user