报表基础模块:获取模板信息、模板导出接口数据源不从xml中读取,走实际的数据库

This commit is contained in:
gaoqr
2024-07-23 17:04:12 +08:00
parent 86bf4f8cb8
commit e06e632f35
3 changed files with 54 additions and 29 deletions
@@ -2,6 +2,7 @@ package com.cf.imes.module.report.dal.dataobject.template;
import com.baomidou.mybatisplus.annotation.*;
import com.cf.imes.framework.mybatis.core.dataobject.BaseDO;
import com.cf.imes.framework.mybatis.core.type.CompressStringTypeHandler;
import com.cf.imes.module.report.dal.dataobject.datasource.ReportDatasourceDO;
import lombok.*;
@@ -13,7 +14,7 @@ import java.util.List;
* @author Gqr
* @since 2024/7/8 11:01
*/
@TableName("report_template")
@TableName(value = "report_template", autoResultMap = true)
@KeySequence("report_template_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@@ -34,6 +35,7 @@ public class ReportTemplateDO extends BaseDO {
/**
* 报表模板
*/
@TableField(typeHandler = CompressStringTypeHandler.class)
private String content;
/**
* 模板类型,0内置、1自定义
@@ -193,34 +193,44 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
String xmlContent = template.getContent();
// 解析xml
ReportDefinition reportDefinition = new ReportParser().parse(new ByteArrayInputStream(xmlContent.getBytes()), template.getName());
List<DatasourceDefinition> datasourceDefinitions = new ArrayList<>();
if (ObjectUtil.isNotNull(template)) {
// 查询数据源
List<ReportDatasourceDO> datasourceList = datasourceService.getTemplateDatasourceList(ReportDatasourceReqVO.builder().templateId(template.getId()).build());
for (ReportDatasourceDO ds : datasourceList) {
// 查询数据集
List<ReportDatasetDO> datasetList = datasetService.getDatasetList(ReportDatasetReqVO.builder().datasourceId(ds.getId()).build());
List<DatasetDefinition> datasetDefinitions = new ArrayList<>();
switch (ds.getType()) {
case JDBC, BUILDIN -> {
// 转换对应的ureport对象
JdbcDatasourceDefinition jdbcDatasourceDefinition = BeanUtils.toBean(ds, JdbcDatasourceDefinition.class);
datasetDefinitions.addAll(BeanUtils.toBean(datasetList, SqlDatasetDefinition.class));
jdbcDatasourceDefinition.setDatasets(datasetDefinitions);
datasourceDefinitions.add(jdbcDatasourceDefinition);
}
case SPRING -> {
// 转换对应的ureport对象
SpringBeanDatasourceDefinition springBeanDatasourceDefinition = BeanUtils.toBean(ds, SpringBeanDatasourceDefinition.class);
datasetDefinitions.addAll(BeanUtils.toBean(datasetList, BeanDatasetDefinition.class));
springBeanDatasourceDefinition.setDatasets(datasetDefinitions);
datasourceDefinitions.add(springBeanDatasourceDefinition);
}
queryDatasource(template.getId(), reportDefinition);
}
return new ReportDefinitionWrapper(reportDefinition);
}
/**
* 查询数据源信息(替代ureport xml中的数据源)
*
* @param templateId 模板id
* @param reportDefinition 报表定义
*/
private void queryDatasource(Long templateId, ReportDefinition reportDefinition) {
List<DatasourceDefinition> datasourceDefinitions = new ArrayList<>();
// 查询数据源
List<ReportDatasourceDO> datasourceList = datasourceService.getTemplateDatasourceList(ReportDatasourceReqVO.builder().templateId(templateId).build());
for (ReportDatasourceDO ds : datasourceList) {
// 查询数据集
List<ReportDatasetDO> datasetList = datasetService.getDatasetList(ReportDatasetReqVO.builder().datasourceId(ds.getId()).build());
List<DatasetDefinition> datasetDefinitions = new ArrayList<>();
switch (ds.getType()) {
case JDBC, BUILDIN -> {
// 转换对应的ureport对象
JdbcDatasourceDefinition jdbcDatasourceDefinition = BeanUtils.toBean(ds, JdbcDatasourceDefinition.class);
datasetDefinitions.addAll(BeanUtils.toBean(datasetList, SqlDatasetDefinition.class));
jdbcDatasourceDefinition.setDatasets(datasetDefinitions);
datasourceDefinitions.add(jdbcDatasourceDefinition);
}
case SPRING -> {
// 转换对应的ureport对象
SpringBeanDatasourceDefinition springBeanDatasourceDefinition = BeanUtils.toBean(ds, SpringBeanDatasourceDefinition.class);
datasetDefinitions.addAll(BeanUtils.toBean(datasetList, BeanDatasetDefinition.class));
springBeanDatasourceDefinition.setDatasets(datasetDefinitions);
datasourceDefinitions.add(springBeanDatasourceDefinition);
}
}
}
reportDefinition.setDatasources(datasourceDefinitions);
return new ReportDefinitionWrapper(reportDefinition);
}
@Override
@@ -288,6 +298,8 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
ReportRender reportRender = new ReportRender();
// 解析xml
ReportDefinition reportDefinition = reportRender.getReportDefinition(xmlContent, CharsetUtil.UTF_8);
// 查询数据源
queryDatasource(template.getId(), reportDefinition);
// 设置参数
PreviewParameters previewParameters = new PreviewParameters();
previewParameters.setQuery(reqDTO.getParams());