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);