From 7ad49224d29fb8b0c1ea1f17c21fe0badb1d6803 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Tue, 5 Aug 2025 16:25:22 +0800 Subject: [PATCH] =?UTF-8?q?refactor(oa):=20=E9=87=8D=E6=9E=84=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E6=9F=A5=E8=AF=A2=E6=9C=8D=E5=8A=A1=E4=BB=A5?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=95=B0=E6=8D=AE=E5=A4=84=E7=90=86=E5=92=8C?= =?UTF-8?q?=E5=85=83=E4=BF=A1=E6=81=AF=E5=8C=85=E5=90=AB=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 优化数据处理流程,优先使用查询结果的 key 生成 columns/fields - 改进元信息包含逻辑,通过列名映射获取表结构信息 - 调整数据结构组织方式,提高代码可读性和可维护性 --- .../impl/DatabaseQueryServiceImpl.java | 62 +++++++++++-------- 1 file changed, 36 insertions(+), 26 deletions(-) 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; }