diff --git a/cf-framework/cf-spring-boot-starter-mybatis/src/main/java/com/cf/imes/framework/mybatis/core/type/CompressStringTypeHandler.java b/cf-framework/cf-spring-boot-starter-mybatis/src/main/java/com/cf/imes/framework/mybatis/core/type/CompressStringTypeHandler.java index 084cb6b4e..0b805096d 100644 --- a/cf-framework/cf-spring-boot-starter-mybatis/src/main/java/com/cf/imes/framework/mybatis/core/type/CompressStringTypeHandler.java +++ b/cf-framework/cf-spring-boot-starter-mybatis/src/main/java/com/cf/imes/framework/mybatis/core/type/CompressStringTypeHandler.java @@ -1,6 +1,7 @@ package com.cf.imes.framework.mybatis.core.type; import com.cf.imes.framework.common.util.json.JsonUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.type.JdbcType; import org.apache.ibatis.type.StringTypeHandler; @@ -19,25 +20,35 @@ public class CompressStringTypeHandler extends StringTypeHandler { @Override public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException { - String compressString = JsonUtils.zipString(parameter); - ps.setString(i, compressString); + if (StringUtils.isNotEmpty(parameter)) { + String compressString = JsonUtils.zipString(parameter); + ps.setString(i, compressString); + } } @Override public String getNullableResult(ResultSet rs, String columnName) throws SQLException { String compressedString = rs.getString(columnName); - return JsonUtils.unzipString(compressedString); + return unzipString(compressedString); } @Override public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException { String compressedString = rs.getString(columnIndex); - return JsonUtils.unzipString(compressedString); + return unzipString(compressedString); } @Override public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { String compressedString = cs.getString(columnIndex); - return JsonUtils.unzipString(compressedString); + return unzipString(compressedString); + } + + private String unzipString(String compressedString) { + if (StringUtils.isNotEmpty(compressedString)) { + return JsonUtils.unzipString(compressedString); + } else { + return null; + } } } diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/dataobject/template/ReportTemplateDO.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/dataobject/template/ReportTemplateDO.java index ad550a9a7..c6d82b70a 100644 --- a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/dataobject/template/ReportTemplateDO.java +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/dataobject/template/ReportTemplateDO.java @@ -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自定义 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 e7b15fdce..bdc1a9184 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 @@ -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 datasourceDefinitions = new ArrayList<>(); if (ObjectUtil.isNotNull(template)) { - // 查询数据源 - List datasourceList = datasourceService.getTemplateDatasourceList(ReportDatasourceReqVO.builder().templateId(template.getId()).build()); - for (ReportDatasourceDO ds : datasourceList) { - // 查询数据集 - List datasetList = datasetService.getDatasetList(ReportDatasetReqVO.builder().datasourceId(ds.getId()).build()); - List 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 datasourceDefinitions = new ArrayList<>(); + // 查询数据源 + List datasourceList = datasourceService.getTemplateDatasourceList(ReportDatasourceReqVO.builder().templateId(templateId).build()); + for (ReportDatasourceDO ds : datasourceList) { + // 查询数据集 + List datasetList = datasetService.getDatasetList(ReportDatasetReqVO.builder().datasourceId(ds.getId()).build()); + List 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());