From 5f792d37e13e97081d6f04870fc4fc2a4c807e48 Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Mon, 14 Apr 2025 17:58:37 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A6=85=E9=81=93#961=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E9=A2=84=E8=A7=88=E3=80=81=E6=89=93?= =?UTF-8?q?=E5=8D=B0=E3=80=81=E6=96=87=E4=BB=B6=E4=B8=8B=E8=BD=BD=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E4=BD=BF=E7=94=A8=E6=95=B0=E6=8D=AE=E5=BA=93=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E6=95=B0=E6=8D=AE=E6=BA=90=E3=80=81=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../template/ReportTemplateServiceImpl.java | 87 ++++++++++++++++++- 1 file changed, 86 insertions(+), 1 deletion(-) diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportTemplateServiceImpl.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportTemplateServiceImpl.java index 26df11ba0..915ba6942 100644 --- a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportTemplateServiceImpl.java +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportTemplateServiceImpl.java @@ -80,6 +80,7 @@ import java.io.PrintWriter; import java.net.URLEncoder; import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Optional; @@ -437,10 +438,80 @@ public class ReportTemplateServiceImpl implements ReportTemplateService { checkSearchForm(reportDefinition.getSearchForm(), query); // 增加多租户参数 tenantParamsUtils.prepareTenantParam(query); + // 匹配数据源、数据集 + queryPreviewDatasource(query, reportDefinition); + Report report = reportRender.render(reportDefinition, query); return htmlProducer.produce(reportDefinition, report); } + /** + * 预览查询数据源信息(替代ureport xml中的数据源) + * + * @param query 预览参数 + * @param reportDefinition 报表定义 + */ + private void queryPreviewDatasource(Map query, ReportDefinition reportDefinition) { + Object datasetIdsObj = query.get("datasetIds"); + Object datasourceIdsObj = query.get("datasourceIds"); + + List datasetIds = new ArrayList<>(); + if (ObjectUtil.isNotNull(datasetIdsObj)) { + datasetIds = (List) datasetIdsObj; + } + + List reportDatasourceDOS = new ArrayList<>(); + + if (ObjectUtil.isNotNull(datasourceIdsObj)) { + List datasourceIds = (List) datasourceIdsObj; + // 查询模板下的数据源 + reportDatasourceDOS = datasourceMapper.selectNormalDatasourceList(new HashSet<>(datasourceIds), SecurityFrameworkUtils.getUserOrganId()); + } + + List reportDatasetDOS = new ArrayList<>(); + if (CollUtil.isNotEmpty(datasetIds)) { + // 查询模板下的数据集 + reportDatasetDOS = datasetMapper.selectNormalDatasetList(new HashSet<>(datasetIds)); + } + // 转换ureport对象后的数据源列表 + List datasourceDefinitions = new ArrayList<>(); + + + // 遍历列表转换为ureport对象 + for (ReportDatasourceDO ds : reportDatasourceDOS) { + // 转换ureport对象后的数据集列表 + List datasetDefinitions = new ArrayList<>(); + // 匹配数据源下的数据集 + List datasetInDatasourceList = reportDatasetDOS.stream().filter(reportDatasetDO -> ds.getId().equals(reportDatasetDO.getDatasourceId())).toList(); + // 忽略转换的字段名,手动转列表 + String ignorePropertieName = "datasets"; + switch (ds.getType()) { + case JDBC -> { + // 转换对应的ureport对象 + JdbcDatasourceDefinition jdbcDatasourceDefinition = BeanUtil.copyProperties(ds, JdbcDatasourceDefinition.class, ignorePropertieName); + datasetDefinitions.addAll(BeanUtils.toBean(datasetInDatasourceList, SqlDatasetDefinition.class)); + jdbcDatasourceDefinition.setDatasets(datasetDefinitions); + datasourceDefinitions.add(jdbcDatasourceDefinition); + } + case SPRING -> { + // 转换对应的ureport对象 + SpringBeanDatasourceDefinition springBeanDatasourceDefinition = BeanUtil.copyProperties(ds, SpringBeanDatasourceDefinition.class, ignorePropertieName); + datasetDefinitions.addAll(BeanUtils.toBean(datasetInDatasourceList, BeanDatasetDefinition.class)); + springBeanDatasourceDefinition.setDatasets(datasetDefinitions); + datasourceDefinitions.add(springBeanDatasourceDefinition); + } + case API -> { + // 转换对应的ureport对象 + ApiDatasourceDefinition apiDatasourceDefinition = BeanUtil.copyProperties(ds, ApiDatasourceDefinition.class, ignorePropertieName); + datasetDefinitions.addAll(BeanUtils.toBean(datasetInDatasourceList, ApiDatasetDefinition.class)); + apiDatasourceDefinition.setDatasets(datasetDefinitions); + datasourceDefinitions.add(apiDatasourceDefinition); + } + } + } + reportDefinition.setDatasources(datasourceDefinitions); + } + @Override public HtmlReport commonPreview(ReportTemplateCommonPreviewReqVO reqVO) { // 查询模板 @@ -465,9 +536,11 @@ public class ReportTemplateServiceImpl implements ReportTemplateService { Map query = params.getQuery(); // 检查表单配置 checkSearchForm(reportDefinition.getSearchForm(), query); - // 增加多租户参数 tenantParamsUtils.prepareTenantParam(query); + // 匹配数据源、数据集 + queryDatasource(reportTemplateDO, reportDefinition); + Report report = reportRender.render(reportDefinition, query); return htmlProducer.produce(reportDefinition, report); } @@ -522,6 +595,9 @@ public class ReportTemplateServiceImpl implements ReportTemplateService { checkSearchForm(reportDefinition.getSearchForm(), query); // 增加多租户参数 tenantParamsUtils.prepareTenantParam(query); + // 匹配数据源、数据集 + queryPreviewDatasource(query, reportDefinition); + Report report = reportRender.render(reportDefinition, query); Map chartImages = params.getChartImages(); report.setChartImages(chartImages); @@ -568,6 +644,9 @@ public class ReportTemplateServiceImpl implements ReportTemplateService { checkSearchForm(reportDefinition.getSearchForm(), query); // 增加多租户参数 tenantParamsUtils.prepareTenantParam(query); + // 匹配数据源、数据集 + queryDatasource(reportTemplateDO, reportDefinition); + Report report = reportRender.render(reportDefinition, query); Map chartImages = params.getChartImages(); report.setChartImages(chartImages); @@ -602,6 +681,9 @@ public class ReportTemplateServiceImpl implements ReportTemplateService { checkSearchForm(reportDefinition.getSearchForm(), query); // 增加多租户参数 tenantParamsUtils.prepareTenantParam(query); + // 匹配数据源、数据集 + queryPreviewDatasource(query, reportDefinition); + Report report = reportRender.render(reportDefinition, query); Map chartImages = params.getChartImages(); report.setChartImages(chartImages); @@ -647,6 +729,9 @@ public class ReportTemplateServiceImpl implements ReportTemplateService { checkSearchForm(reportDefinition.getSearchForm(), query); // 增加多租户参数 tenantParamsUtils.prepareTenantParam(query); + // 匹配数据源、数据集 + queryDatasource(reportTemplateDO, reportDefinition); + Report report = reportRender.render(reportDefinition, query); Map chartImages = params.getChartImages(); report.setChartImages(chartImages);