From e06e632f359ebeb9f1148c2450bc0c2c7437504d Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Tue, 23 Jul 2024 17:04:12 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E5=9F=BA=E7=A1=80?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=EF=BC=9A=E8=8E=B7=E5=8F=96=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E3=80=81=E6=A8=A1=E6=9D=BF=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E6=95=B0=E6=8D=AE=E6=BA=90=E4=B8=8D=E4=BB=8E?= =?UTF-8?q?xml=E4=B8=AD=E8=AF=BB=E5=8F=96=EF=BC=8C=E8=B5=B0=E5=AE=9E?= =?UTF-8?q?=E9=99=85=E7=9A=84=E6=95=B0=E6=8D=AE=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/type/CompressStringTypeHandler.java | 21 +++++-- .../dataobject/template/ReportTemplateDO.java | 4 +- .../template/ReportTemplateServiceImpl.java | 58 +++++++++++-------- 3 files changed, 54 insertions(+), 29 deletions(-) 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()); From 426e37e67e767e75b8f31119c42397d35df88229 Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Tue, 23 Jul 2024 17:40:02 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E5=9F=BA=E7=A1=80?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=EF=BC=9A1=E3=80=81=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E8=A1=A5=E5=85=85=E6=A0=A1=E9=AA=8C=EF=BC=9B?= =?UTF-8?q?2=E3=80=81=E6=95=B0=E6=8D=AE=E9=9B=86=E5=AE=9E=E4=BD=93?= =?UTF-8?q?=E8=A1=A5=E5=85=85organId=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/report/enums/ErrorCodeConstants.java | 1 - .../dal/dataobject/dataset/ReportDatasetDO.java | 8 ++++++++ .../service/template/ReportTemplateServiceImpl.java | 13 ++++++++++--- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/cf-module-report/cf-module-report-api/src/main/java/com/cf/imes/module/report/enums/ErrorCodeConstants.java b/cf-module-report/cf-module-report-api/src/main/java/com/cf/imes/module/report/enums/ErrorCodeConstants.java index 8179c7e81..030bcf8a8 100644 --- a/cf-module-report/cf-module-report-api/src/main/java/com/cf/imes/module/report/enums/ErrorCodeConstants.java +++ b/cf-module-report/cf-module-report-api/src/main/java/com/cf/imes/module/report/enums/ErrorCodeConstants.java @@ -12,7 +12,6 @@ public final class ErrorCodeConstants { // ========== UREPORT template模块 1-003-001-000 ========== public static ErrorCode TEMPLATE_NOT_EXISTS = new ErrorCode(1_003_001_001, "报表模板信息不存在"); - public static ErrorCode TEMPLATE_GENERATE_EXCEL_ERROR = new ErrorCode(1_003_001_002, "模板excel生成异常"); // ========== UREPORT datasource模块 1-003-002-000 ========== public static ErrorCode DATASOURCE_NOT_EXISTS = new ErrorCode(1_003_002_001, "报表数据源不存在"); diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/dataobject/dataset/ReportDatasetDO.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/dataobject/dataset/ReportDatasetDO.java index 3f1cade56..082c6408b 100644 --- a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/dataobject/dataset/ReportDatasetDO.java +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/dal/dataobject/dataset/ReportDatasetDO.java @@ -62,6 +62,14 @@ public class ReportDatasetDO extends BaseDO { @TableField(typeHandler = CompressObjectListTypeHandler.class) private List parameters; + /** + * 字段列表 + */ @TableField(typeHandler = CompressObjectListTypeHandler.class) private List fields; + + /** + * 组织id + */ + private Long organId; } 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 bdc1a9184..442db1210 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 @@ -38,7 +38,6 @@ import com.cf.imes.module.report.dal.dataobject.dataset.ReportDatasetDO; import com.cf.imes.module.report.dal.dataobject.datasource.ReportDatasourceDO; import com.cf.imes.module.report.dal.dataobject.template.ReportTemplateDO; import com.cf.imes.module.report.dal.mysql.template.ReportTemplateMapper; -import com.cf.imes.module.report.enums.ErrorCodeConstants; import com.cf.imes.module.report.service.dataset.ReportDatasetService; import com.cf.imes.module.report.service.datasource.ReportDatasourceService; import org.apache.commons.lang3.StringUtils; @@ -54,6 +53,7 @@ import java.util.List; import java.util.Map; import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.cf.imes.module.report.enums.ErrorCodeConstants.TEMPLATE_NOT_EXISTS; /** * 报表模板信息 Service 实现类 @@ -165,12 +165,14 @@ public class ReportTemplateServiceImpl implements ReportTemplateService { */ private void validateTemplateExists(Long id) { if (templateMapper.selectById(id) == null) { - throw exception(ErrorCodeConstants.TEMPLATE_NOT_EXISTS); + throw exception(TEMPLATE_NOT_EXISTS); } } @Override public ReportTemplateDO getReportTemplate(Long id) { + // 校验模板 + validateTemplateExists(id); // 查询模板 ReportTemplateDO template = templateMapper.selectById(id); if (ObjectUtil.isNotNull(template)) { @@ -188,6 +190,8 @@ public class ReportTemplateServiceImpl implements ReportTemplateService { @Override public ReportDefinitionWrapper getReportTemplateDefinition(Long id) { + // 校验模板 + validateTemplateExists(id); // 查询模板 ReportTemplateDO template = templateMapper.selectById(id); String xmlContent = template.getContent(); @@ -292,8 +296,11 @@ public class ReportTemplateServiceImpl implements ReportTemplateService { @Override public Report generateReport(ReportTemplateGenerateReqDTO reqDTO) { + Long templateId = reqDTO.getTemplateId(); + // 校验模板 + validateTemplateExists(templateId); // 查询模板 - ReportTemplateDO template = templateMapper.selectById(reqDTO.getTemplateId()); + ReportTemplateDO template = templateMapper.selectById(templateId); String xmlContent = template.getContent(); ReportRender reportRender = new ReportRender(); // 解析xml