diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/DatabaseQueryServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/DatabaseQueryServiceImpl.java index aac09be..387e195 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/DatabaseQueryServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/DatabaseQueryServiceImpl.java @@ -105,48 +105,58 @@ public class DatabaseQueryServiceImpl implements IDatabaseQueryService { public DynamicDataVo executeQueryWithMeta(String sql, String tableName, boolean includeMeta) { // 执行查询 List> data = executeQuery(sql); - + DynamicDataVo result = new DynamicDataVo(); - - // 设置渲染类型为表格 result.setRenderType("table"); - - // 构建表格数据 + DynamicDataVo.TableData tableData = new DynamicDataVo.TableData(); - - // 如果需要元信息,则生成字段元信息 + tableData.setDatasource(data); + + // 动态生成 columns/fields,优先以 datasource 的 key 为主 + List fields = new ArrayList<>(); + List> columnsList = new ArrayList<>(); + Map columnMetaMap = new HashMap<>(); if (includeMeta && tableName != null) { List columns = getTableColumns(tableName); - DynamicDataVo.Meta meta = new DynamicDataVo.Meta(); - List fields = new ArrayList<>(); - List> columnsList = new ArrayList<>(); + for (TableColumnVo col : columns) { + columnMetaMap.put(col.getColumnName(), col); + } + } - for (TableColumnVo column : columns) { + if (data != null && !data.isEmpty()) { + Map 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 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; }