禅道#961问题修复:预览、打印、文件下载同步使用数据库中的数据源、数据集

This commit is contained in:
gaoqr
2025-04-14 17:58:37 +08:00
parent 3ad912b179
commit 5f792d37e1
@@ -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<String, Object> query, ReportDefinition reportDefinition) {
Object datasetIdsObj = query.get("datasetIds");
Object datasourceIdsObj = query.get("datasourceIds");
List<Long> datasetIds = new ArrayList<>();
if (ObjectUtil.isNotNull(datasetIdsObj)) {
datasetIds = (List) datasetIdsObj;
}
List<ReportDatasourceDO> reportDatasourceDOS = new ArrayList<>();
if (ObjectUtil.isNotNull(datasourceIdsObj)) {
List<Long> datasourceIds = (List) datasourceIdsObj;
// 查询模板下的数据源
reportDatasourceDOS = datasourceMapper.selectNormalDatasourceList(new HashSet<>(datasourceIds), SecurityFrameworkUtils.getUserOrganId());
}
List<ReportDatasetDO> reportDatasetDOS = new ArrayList<>();
if (CollUtil.isNotEmpty(datasetIds)) {
// 查询模板下的数据集
reportDatasetDOS = datasetMapper.selectNormalDatasetList(new HashSet<>(datasetIds));
}
// 转换ureport对象后的数据源列表
List<DatasourceDefinition> datasourceDefinitions = new ArrayList<>();
// 遍历列表转换为ureport对象
for (ReportDatasourceDO ds : reportDatasourceDOS) {
// 转换ureport对象后的数据集列表
List<DatasetDefinition> datasetDefinitions = new ArrayList<>();
// 匹配数据源下的数据集
List<ReportDatasetDO> 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<String, Object> 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<String, String> 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<String, String> 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<String, String> 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<String, String> chartImages = params.getChartImages();
report.setChartImages(chartImages);