报表基础模块:同步最新ureport-community最新预览代码

This commit is contained in:
gaoqr
2024-08-29 12:19:03 +08:00
parent fdb153296d
commit 12f446b638
3 changed files with 43 additions and 54 deletions
@@ -1,5 +1,6 @@
package com.cf.imes.module.report.controller.admin.template;
import com.bstek.designer.bean.PreviewParameters;
import com.bstek.designer.bean.ReportDefinitionWrapper;
import com.bstek.designer.excel.ExcelParserUtils;
import com.bstek.ureport.definition.ReportDefinition;
@@ -16,7 +17,6 @@ import com.cf.imes.framework.common.exception.ServiceException;
import com.cf.imes.framework.common.pojo.CommonResult;
import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.module.report.api.template.dto.ReportTemplateGenerateReqDTO;
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;
@@ -105,8 +105,8 @@ public class ReportTemplateController {
@PostMapping("/template/preview")
@Operation(summary = "模板预览")
// @PreAuthorize("@ss.hasPermission('report:template:query')")
public CommonResult<HtmlReport> preview(@Valid @RequestBody ReportTemplatePreviewPageParametersVO pageParametersVO) {
return success(templateService.preview(pageParametersVO));
public CommonResult<HtmlReport> preview(@RequestBody PreviewParameters params) {
return success(templateService.preview(params));
}
@PostMapping("/template/export")
@@ -1,10 +1,10 @@
package com.cf.imes.module.report.service.template;
import com.bstek.designer.bean.PreviewParameters;
import com.bstek.designer.bean.ReportDefinitionWrapper;
import com.bstek.ureport.export.html.HtmlReport;
import com.bstek.ureport.model.Report;
import com.cf.imes.module.report.api.template.dto.ReportTemplateGenerateReqDTO;
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;
@@ -68,10 +68,10 @@ public interface ReportTemplateService {
/**
* 模板预览
*
* @param pageParametersVO
* @param params
* @return
*/
HtmlReport preview(ReportTemplatePreviewPageParametersVO pageParametersVO);
HtmlReport preview(PreviewParameters params);
/**
@@ -6,11 +6,9 @@ import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.URLUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.bstek.designer.bean.PreviewPageParameters;
import com.bstek.common.exception.ReportDesignException;
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.ApiDatasetDefinition;
import com.bstek.ureport.definition.dataset.BeanDatasetDefinition;
@@ -20,12 +18,10 @@ import com.bstek.ureport.definition.datasource.ApiDatasourceDefinition;
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.exception.ReportComputeException;
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;
@@ -38,7 +34,6 @@ 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;
@@ -60,6 +55,7 @@ import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -329,51 +325,44 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
}
@Override
public HtmlReport preview(ReportTemplatePreviewPageParametersVO pageParametersVO) {
public HtmlReport preview(PreviewParameters params) {
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);
ReportDefinition reportDefinition = getReportDefinition(reportRender, params);
Map<String, Object> parameters = params.getQuery();
Report report = reportRender.render(reportDefinition, parameters);
return htmlProducer.produce(reportDefinition, report);
}
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<Page> 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());
}
private ReportDefinition getReportDefinition(ReportRender reportRender, PreviewParameters params) {
ReportDefinition reportDefinition;
String content = params.getContent();
if (StringUtils.isNotBlank(content)) {
content = URLUtil.decode(content);
reportDefinition = reportRender.getReportDefinition(content, "utf-8");
} else {
report = reportRender.render(reportDefinition, parameters);
html = htmlProducer.produce(report);
throw new ReportComputeException("模版文件不能为空");
}
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;
if (reportDefinition == null) {
throw new ReportDesignException("模板数据已过期,无法预览");
}
Map<String, Object> parameters = params.getQuery();
if (parameters == null) {
parameters = new HashMap<>();
params.setQuery(parameters);
}
Map<String, String> component = params.getComponent();
if (component == null) {
component = new HashMap<>();
params.setComponent(component);
}
// 相同的低优先级的参数会被高优先级参数覆盖
// 参数优先级, token参数 > 页面表单参数 > url链接参数 > 数据集默认参数
parameters.put("pageIndex", params.getPageIndex());
return reportDefinition;
}
@Override
public Report generateReport(ReportTemplateGenerateReqDTO reqDTO) {