diff --git a/cf-module-report/cf-module-report-biz/pom.xml b/cf-module-report/cf-module-report-biz/pom.xml
index eef2d3137..84ad88f49 100644
--- a/cf-module-report/cf-module-report-biz/pom.xml
+++ b/cf-module-report/cf-module-report-biz/pom.xml
@@ -110,6 +110,26 @@
system
${project.basedir}/src/main/resources/lib/ureport-core-2.3.0-SNAPSHOT.jar
+
+ dom4j
+ dom4j
+ ${dom4j.version}
+
+
+ commons-io
+ commons-io
+ ${commons-io.version}
+
+
+ org.antlr
+ antlr4-runtime
+ ${antlr4.version}
+
+
+ org.apache.commons
+ commons-text
+ ${commons-text.version}
+
diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/dataset/vo/ReportDatasetRespVO.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/dataset/vo/ReportDatasetRespVO.java
index dc88d8a7a..c837beb69 100644
--- a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/dataset/vo/ReportDatasetRespVO.java
+++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/dataset/vo/ReportDatasetRespVO.java
@@ -29,6 +29,9 @@ public class ReportDatasetRespVO {
@Schema(description = "动态查询SQL")
private String sql;
+ @Schema(description = "bean数据源方法名")
+ private String method;
+
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime createTime;
diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/ReportTemplateController.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/ReportTemplateController.java
index 3c458a2ee..209a0cd3c 100644
--- a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/ReportTemplateController.java
+++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/ReportTemplateController.java
@@ -1,11 +1,13 @@
package com.cf.imes.module.report.controller.admin.template;
+import com.bstek.designer.bean.ReportDefinitionWrapper;
+import com.bstek.ureport.export.html.HtmlReport;
import com.cf.imes.framework.common.pojo.CommonResult;
import com.cf.imes.framework.common.util.object.BeanUtils;
+import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplatePreviewPageParametersVO;
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateReqVO;
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateRespVO;
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateSaveReqVO;
-import com.cf.imes.module.report.dal.dataobject.template.ReportTemplateDO;
import com.cf.imes.module.report.service.template.ReportTemplateService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
@@ -63,9 +65,8 @@ public class ReportTemplateController {
@Operation(summary = "获得报表模板信息")
@Parameter(name = "id", description = "编号", required = true, example = "1")
@PreAuthorize("@ss.hasPermission('report:template:query')")
- public CommonResult getReportTemplate(@PathVariable("id") Long id) {
- ReportTemplateDO template = templateService.getReportTemplate(id);
- return success(BeanUtils.toBean(template, ReportTemplateRespVO.class));
+ public CommonResult getReportTemplate(@PathVariable("id") Long id) {
+ return success(templateService.getReportTemplateDefinition(id));
}
@GetMapping("/templates")
@@ -75,4 +76,11 @@ public class ReportTemplateController {
ReportTemplateReqVO reqVO = new ReportTemplateReqVO(name, null);
return success(BeanUtils.toBean(templateService.getReportTemplateList(reqVO), ReportTemplateRespVO.class));
}
+
+ @PostMapping("/template/preview")
+ @Operation(summary = "模板预览")
+ @PreAuthorize("@ss.hasPermission('report:template:query')")
+ public CommonResult preview(@Valid @RequestBody ReportTemplatePreviewPageParametersVO pageParametersVO) {
+ return success(templateService.preview(pageParametersVO));
+ }
}
diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportTemplatePreviewPageParametersVO.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportTemplatePreviewPageParametersVO.java
new file mode 100644
index 000000000..8875547af
--- /dev/null
+++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportTemplatePreviewPageParametersVO.java
@@ -0,0 +1,18 @@
+package com.cf.imes.module.report.controller.admin.template.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @author Gqr
+ * @since 2024/7/19 9:22
+ */
+@Data
+@Schema(description = "管理后台 - 报表模板预览分页参数 Request VO")
+public class ReportTemplatePreviewPageParametersVO {
+ @Schema(description = "页码",example = "1")
+ private int pageIndex;
+
+ @Schema(description = "预览参数")
+ private ReportTemplatePreviewParametersVO params;
+}
\ No newline at end of file
diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportTemplatePreviewParametersVO.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportTemplatePreviewParametersVO.java
new file mode 100644
index 000000000..429024e9e
--- /dev/null
+++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportTemplatePreviewParametersVO.java
@@ -0,0 +1,48 @@
+package com.cf.imes.module.report.controller.admin.template.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author Gqr
+ * @since 2024/7/19 9:22
+ */
+@Schema(description = "管理后台 - 报表模板预览参数 Request VO")
+@Data
+public class ReportTemplatePreviewParametersVO {
+ /**
+ * 报表内容
+ */
+ @Schema(description = "报表内容")
+ @NotNull(message = "预览报表内容不能为空")
+ private String content;
+
+ /**
+ * 报表名称
+ */
+ @Schema(description = "报表名称")
+ private String reportName;
+
+ /**
+ * 表单参数
+ */
+ @Schema(description = "表单参数")
+ private Map query = new HashMap<>();
+
+ /**
+ * 表单对应组件唯一标识
+ */
+ @Schema(description = "表单对应组件唯一标识")
+ private Map component = new HashMap<>();
+
+ /**
+ * 图表图片目前用于PDF导出
+ */
+ @Schema(description = "图表图片目前用于PDF导出")
+ private Map chartImages = new HashMap<>();
+
+}
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 d998f5446..3f1cade56 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
@@ -46,6 +46,11 @@ public class ReportDatasetDO extends BaseDO {
* 数据源id
*/
private Long datasourceId;
+
+ /**
+ * bean数据源方法名
+ */
+ private String method;
/**
* 动态查询SQL
*/
diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportTemplateService.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportTemplateService.java
index 232057d53..dbf45136f 100644
--- a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportTemplateService.java
+++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportTemplateService.java
@@ -1,5 +1,8 @@
package com.cf.imes.module.report.service.template;
+import com.bstek.designer.bean.ReportDefinitionWrapper;
+import com.bstek.ureport.export.html.HtmlReport;
+import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplatePreviewPageParametersVO;
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateReqVO;
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateSaveReqVO;
import com.cf.imes.module.report.dal.dataobject.template.ReportTemplateDO;
@@ -37,13 +40,21 @@ public interface ReportTemplateService {
void deleteReportTemplate(Long id);
/**
- * 获得报表模板信息
+ * 获取报表模板信息
*
* @param id 编号
* @return 报表模板信息
*/
ReportTemplateDO getReportTemplate(Long id);
+ /**
+ * 获取模板定义信息(xml+数据源)
+ *
+ * @param id
+ * @return
+ */
+ ReportDefinitionWrapper getReportTemplateDefinition(Long id);
+
/**
* 获得报表模板信息列表
*
@@ -51,4 +62,12 @@ public interface ReportTemplateService {
* @return 报表模板信息列表
*/
List getReportTemplateList(ReportTemplateReqVO pageReqVO);
+
+ /**
+ * 模板预览
+ *
+ * @param pageParametersVO
+ * @return
+ */
+ HtmlReport preview(ReportTemplatePreviewPageParametersVO pageParametersVO);
}
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 bbe73c9fe..c696a9e4f 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
@@ -1,14 +1,36 @@
package com.cf.imes.module.report.service.template;
import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.URLUtil;
+import com.bstek.designer.bean.PreviewPageParameters;
+import com.bstek.designer.bean.PreviewParameters;
+import com.bstek.designer.bean.ReportDefinitionWrapper;
+import com.bstek.ureport.build.paging.Page;
+import com.bstek.ureport.definition.Paper;
+import com.bstek.ureport.definition.ReportDefinition;
+import com.bstek.ureport.definition.dataset.BeanDatasetDefinition;
+import com.bstek.ureport.definition.dataset.DatasetDefinition;
+import com.bstek.ureport.definition.dataset.SqlDatasetDefinition;
+import com.bstek.ureport.definition.datasource.DatasourceDefinition;
+import com.bstek.ureport.definition.datasource.JdbcDatasourceDefinition;
+import com.bstek.ureport.definition.datasource.SpringBeanDatasourceDefinition;
+import com.bstek.ureport.export.PageBuilder;
+import com.bstek.ureport.export.ReportRender;
+import com.bstek.ureport.export.SinglePageData;
+import com.bstek.ureport.export.html.HtmlProducer;
+import com.bstek.ureport.export.html.HtmlReport;
+import com.bstek.ureport.export.html.SearchFormData;
+import com.bstek.ureport.model.Report;
+import com.bstek.ureport.parser.ReportParser;
import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.module.report.controller.admin.dataset.vo.ReportDatasetReqVO;
import com.cf.imes.module.report.controller.admin.dataset.vo.ReportDatasetSaveReqVO;
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceReqVO;
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceSaveReqVO;
+import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplatePreviewPageParametersVO;
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateReqVO;
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateSaveReqVO;
import com.cf.imes.module.report.dal.dataobject.dataset.ReportDatasetDO;
@@ -24,8 +46,11 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
+import java.io.ByteArrayInputStream;
+
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -160,6 +185,43 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
return template;
}
+ @Override
+ public ReportDefinitionWrapper getReportTemplateDefinition(Long id) {
+ // 查询模板
+ ReportTemplateDO template = templateMapper.selectById(id);
+ 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);
+ }
+ }
+ }
+ }
+ reportDefinition.setDatasources(datasourceDefinitions);
+ return new ReportDefinitionWrapper(reportDefinition);
+ }
+
@Override
public List getReportTemplateList(ReportTemplateReqVO reqVO) {
return templateMapper.selectList(new LambdaQueryWrapperX()
@@ -169,4 +231,51 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
// 不返回content xml,点击具体的模板中返回xml
.select(ReportTemplateDO::getId, ReportTemplateDO::getName, ReportTemplateDO::getCreateTime, ReportTemplateDO::getRemark));
}
+
+ @Override
+ public HtmlReport preview(ReportTemplatePreviewPageParametersVO pageParametersVO) {
+ HtmlProducer htmlProducer = new HtmlProducer();
+ ReportRender reportRender = new ReportRender();
+ HtmlReport htmlReport = new HtmlReport();
+
+ // 转换ureport参数
+ PreviewPageParameters pageParameters = BeanUtils.toBean(pageParametersVO,PreviewPageParameters.class);
+ PreviewParameters params = pageParameters.getParams();
+
+ // 解析xml
+ ReportDefinition reportDefinition = reportRender.getReportDefinition(URLUtil.decode(params.getContent()), CharsetUtil.UTF_8);
+
+ Map parameters = params.getQuery();
+
+ Paper paper = reportDefinition.getPaper();
+ Report report;
+ String html;
+ // 构建html
+ if (paper.isPageEnabled()) {
+ // todo 后续有可能做成缓存
+ report = reportRender.render(reportDefinition, parameters);
+ int pageIndex = pageParameters.getPageIndex();
+ SinglePageData pageData = PageBuilder.buildSinglePageData(pageIndex, report);
+ List pages = pageData.getPages();
+ html = htmlProducer.produce(report.getContext(), pages, pageData.getColumnMargin(), false);
+ htmlReport.setTotalPage(pageData.getTotalPages());
+ htmlReport.setPageIndex(pageIndex);
+ if (reportDefinition.getPaper().isColumnEnabled()) {
+ htmlReport.setColumn(reportDefinition.getPaper().getColumnCount());
+ }
+ } else {
+ report = reportRender.render(reportDefinition, parameters);
+ html = htmlProducer.produce(report);
+ }
+ htmlReport.setChartDatas(report.getContext().getChartDataMap().values());
+ htmlReport.setContent(html);
+ htmlReport.setStyle(reportDefinition.getStyle());
+ SearchFormData searchFormData = reportDefinition.buildSearchFormData(report.getContext().getDatasetMap(),parameters);
+ htmlReport.setSearchFormData(searchFormData);
+ htmlReport.setReportAlign(report.getPaper().getHtmlReportAlign().name());
+ htmlReport.setBgImage(report.getPaper().getBgImage());
+ htmlReport.setFreeze(reportDefinition.getFreeze());
+ htmlReport.setFloatImages(reportDefinition.getFloatImages());
+ return htmlReport;
+ }
}
diff --git a/cf-module-report/cf-module-report-biz/src/main/resources/lib/ureport-core-2.3.0-SNAPSHOT.jar b/cf-module-report/cf-module-report-biz/src/main/resources/lib/ureport-core-2.3.0-SNAPSHOT.jar
index 89e49ecad..7f66b483d 100644
Binary files a/cf-module-report/cf-module-report-biz/src/main/resources/lib/ureport-core-2.3.0-SNAPSHOT.jar and b/cf-module-report/cf-module-report-biz/src/main/resources/lib/ureport-core-2.3.0-SNAPSHOT.jar differ
diff --git a/cf-module-report/pom.xml b/cf-module-report/pom.xml
index 75c3faf31..24f2451e9 100644
--- a/cf-module-report/pom.xml
+++ b/cf-module-report/pom.xml
@@ -20,4 +20,11 @@
report 模块,主要实现数据可视化报表等功能。
+
+
+ 1.6.1
+ 2.11.0
+ 4.5.3
+ 1.10.0
+