mirror of
http://192.168.1.205:9980/cf_devdept2/cf_imes_server.git
synced 2026-08-12 21:02:08 +08:00
报表基础模块:新增通用预览打印、下载接口
This commit is contained in:
+14
@@ -128,6 +128,13 @@ public class ReportTemplateController {
|
|||||||
templateService.print(reqVO, response);
|
templateService.print(reqVO, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/template/print/common")
|
||||||
|
@Operation(summary = "模板预览打印")
|
||||||
|
@PreAuthorize("@ss.hasPermission('report:preview')")
|
||||||
|
public void commonPrint(@RequestBody ReportTemplateCommonPreviewReqVO reqVO, HttpServletResponse response) {
|
||||||
|
templateService.commonPrint(reqVO, response);
|
||||||
|
}
|
||||||
|
|
||||||
@PostMapping("/template/download/{type}")
|
@PostMapping("/template/download/{type}")
|
||||||
@Operation(summary = "模板预览下载")
|
@Operation(summary = "模板预览下载")
|
||||||
@PreAuthorize("@ss.hasPermission('report:preview')")
|
@PreAuthorize("@ss.hasPermission('report:preview')")
|
||||||
@@ -135,6 +142,13 @@ public class ReportTemplateController {
|
|||||||
templateService.download(type, reqVO, response);
|
templateService.download(type, reqVO, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/template/download/{type}/common")
|
||||||
|
@Operation(summary = "模板预览下载")
|
||||||
|
@PreAuthorize("@ss.hasPermission('report:preview')")
|
||||||
|
public void commonPrint(@PathVariable @ReportTemplateProducerTypeInEnum @NotBlank(message = "模板下载类型不能为空") String type, @RequestBody ReportTemplatePreviewReqVO reqVO, HttpServletResponse response) {
|
||||||
|
templateService.download(type, reqVO, response);
|
||||||
|
}
|
||||||
|
|
||||||
@PostMapping("/template/excel/import")
|
@PostMapping("/template/excel/import")
|
||||||
@Operation(summary = "导入excel模板")
|
@Operation(summary = "导入excel模板")
|
||||||
@PreAuthorize("@ss.hasPermission('report:design')")
|
@PreAuthorize("@ss.hasPermission('report:design')")
|
||||||
|
|||||||
+16
@@ -98,6 +98,12 @@ public interface ReportTemplateService {
|
|||||||
*/
|
*/
|
||||||
void print(ReportTemplatePreviewReqVO reqVO, HttpServletResponse response);
|
void print(ReportTemplatePreviewReqVO reqVO, HttpServletResponse response);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 模版通用预览打印
|
||||||
|
* 通过模板id+query参数获取打印内容
|
||||||
|
*/
|
||||||
|
void commonPrint(ReportTemplateCommonPreviewReqVO reqVO, HttpServletResponse response);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 模版预览下载
|
* 模版预览下载
|
||||||
*
|
*
|
||||||
@@ -107,6 +113,16 @@ public interface ReportTemplateService {
|
|||||||
*/
|
*/
|
||||||
void download(String type, ReportTemplatePreviewReqVO reqVO, HttpServletResponse response);
|
void download(String type, ReportTemplatePreviewReqVO reqVO, HttpServletResponse response);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 模版通用预览下载
|
||||||
|
* 通过模板id+query参数获取文件
|
||||||
|
*
|
||||||
|
* @param type 文件类型
|
||||||
|
* @param reqVO
|
||||||
|
* @param response
|
||||||
|
*/
|
||||||
|
void commonDownload(String type, ReportTemplateCommonPreviewReqVO reqVO, HttpServletResponse response);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 模板导出
|
* 模板导出
|
||||||
*
|
*
|
||||||
|
|||||||
+124
-12
@@ -28,6 +28,7 @@ import com.bstek.ureport.definition.datasource.SpringBeanDatasourceDefinition;
|
|||||||
import com.bstek.ureport.definition.searchform.Component;
|
import com.bstek.ureport.definition.searchform.Component;
|
||||||
import com.bstek.ureport.definition.searchform.InputComponent;
|
import com.bstek.ureport.definition.searchform.InputComponent;
|
||||||
import com.bstek.ureport.definition.searchform.SearchForm;
|
import com.bstek.ureport.definition.searchform.SearchForm;
|
||||||
|
import com.bstek.ureport.definition.searchform.TextInputComponent;
|
||||||
import com.bstek.ureport.exception.ReportComputeException;
|
import com.bstek.ureport.exception.ReportComputeException;
|
||||||
import com.bstek.ureport.exception.ReportException;
|
import com.bstek.ureport.exception.ReportException;
|
||||||
import com.bstek.ureport.export.ExportUtils;
|
import com.bstek.ureport.export.ExportUtils;
|
||||||
@@ -119,6 +120,7 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
|
|||||||
private static final String ATTACHMENT_PREFIX = "attachment; filename=";
|
private static final String ATTACHMENT_PREFIX = "attachment; filename=";
|
||||||
private static final String DATASETIDS_FIELD_NAME = "datasetIds";
|
private static final String DATASETIDS_FIELD_NAME = "datasetIds";
|
||||||
private static final String DATASOURCEIDS_FIELD_NAME = "datasourceIds";
|
private static final String DATASOURCEIDS_FIELD_NAME = "datasourceIds";
|
||||||
|
private static final String DOWNLOAD_SUCCESS_HEADER_CODE = "20000";
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private TenantParamsUtils tenantParamsUtils;
|
private TenantParamsUtils tenantParamsUtils;
|
||||||
@@ -423,8 +425,6 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public HtmlReport preview(ReportTemplatePreviewReqVO reqVO) {
|
public HtmlReport preview(ReportTemplatePreviewReqVO reqVO) {
|
||||||
// 检查查询参数中的空值
|
|
||||||
checkQueryNotEmpty(reqVO.getQuery());
|
|
||||||
// 自定义请求vo转ureport对象
|
// 自定义请求vo转ureport对象
|
||||||
PreviewParameters params = BeanUtils.toBean(reqVO, PreviewParameters.class);
|
PreviewParameters params = BeanUtils.toBean(reqVO, PreviewParameters.class);
|
||||||
|
|
||||||
@@ -432,10 +432,12 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
|
|||||||
ReportRender reportRender = new ReportRender();
|
ReportRender reportRender = new ReportRender();
|
||||||
ReportDefinition reportDefinition = getReportDefinition(reportRender, params, true);
|
ReportDefinition reportDefinition = getReportDefinition(reportRender, params, true);
|
||||||
|
|
||||||
|
Map<String, Object> query = params.getQuery();
|
||||||
|
// 检查表单配置
|
||||||
|
checkSearchForm(reportDefinition.getSearchForm(), query);
|
||||||
// 增加多租户参数
|
// 增加多租户参数
|
||||||
Map<String, Object> parameters = params.getQuery();
|
tenantParamsUtils.prepareTenantParam(query);
|
||||||
tenantParamsUtils.prepareTenantParam(parameters);
|
Report report = reportRender.render(reportDefinition, query);
|
||||||
Report report = reportRender.render(reportDefinition, parameters);
|
|
||||||
return htmlProducer.produce(reportDefinition, report);
|
return htmlProducer.produce(reportDefinition, report);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -460,13 +462,13 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
|
|||||||
ReportRender reportRender = new ReportRender();
|
ReportRender reportRender = new ReportRender();
|
||||||
ReportDefinition reportDefinition = getReportDefinition(reportRender, params, false);
|
ReportDefinition reportDefinition = getReportDefinition(reportRender, params, false);
|
||||||
|
|
||||||
Map<String, Object> parameters = params.getQuery();
|
Map<String, Object> query = params.getQuery();
|
||||||
// 检查表单配置
|
// 检查表单配置
|
||||||
checkSearchForm(reportDefinition.getSearchForm(), parameters);
|
checkSearchForm(reportDefinition.getSearchForm(), query);
|
||||||
|
|
||||||
// 增加多租户参数
|
// 增加多租户参数
|
||||||
tenantParamsUtils.prepareTenantParam(parameters);
|
tenantParamsUtils.prepareTenantParam(query);
|
||||||
Report report = reportRender.render(reportDefinition, parameters);
|
Report report = reportRender.render(reportDefinition, query);
|
||||||
return htmlProducer.produce(reportDefinition, report);
|
return htmlProducer.produce(reportDefinition, report);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -480,10 +482,25 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
|
|||||||
if (ObjectUtil.isNotNull(searchForm)) {
|
if (ObjectUtil.isNotNull(searchForm)) {
|
||||||
List<Component> components = Optional.ofNullable(searchForm.getComponents()).orElse(new ArrayList<>());
|
List<Component> components = Optional.ofNullable(searchForm.getComponents()).orElse(new ArrayList<>());
|
||||||
for (Component component : components) {
|
for (Component component : components) {
|
||||||
|
checkComponent(component, parameters);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查表单中的组件明细
|
||||||
|
*
|
||||||
|
* @param component
|
||||||
|
* @param parameters
|
||||||
|
*/
|
||||||
|
private void checkComponent(Component component, Map<String, Object> parameters) {
|
||||||
InputComponent inputComponent = (InputComponent) component;
|
InputComponent inputComponent = (InputComponent) component;
|
||||||
if (ObjectUtil.isNotNull(inputComponent)) {
|
if (ObjectUtil.isNotNull(inputComponent)) {
|
||||||
String bindParameter = inputComponent.getBindParameter();
|
String bindParameter = inputComponent.getBindParameter();
|
||||||
if (StringUtils.isNotEmpty(bindParameter) && !parameters.containsKey(bindParameter)) {
|
if (StringUtils.isNotEmpty(bindParameter)) {
|
||||||
|
if (inputComponent instanceof TextInputComponent) {
|
||||||
|
Object bindValue = parameters.get(bindParameter);
|
||||||
|
if (parameters.containsKey(bindParameter) && ObjectUtil.isNotNull(bindValue) && StringUtils.isEmpty(String.valueOf(bindValue))) {
|
||||||
throw ServiceExceptionUtil.exception(TEMPLATE_PREIVEW_QUERYPARAM_EMPTY, bindParameter);
|
throw ServiceExceptionUtil.exception(TEMPLATE_PREIVEW_QUERYPARAM_EMPTY, bindParameter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -501,6 +518,8 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
|
|||||||
ReportRender reportRender = new ReportRender();
|
ReportRender reportRender = new ReportRender();
|
||||||
ReportDefinition reportDefinition = getReportDefinition(reportRender, params, true);
|
ReportDefinition reportDefinition = getReportDefinition(reportRender, params, true);
|
||||||
Map<String, Object> query = params.getQuery();
|
Map<String, Object> query = params.getQuery();
|
||||||
|
// 检查表单配置
|
||||||
|
checkSearchForm(reportDefinition.getSearchForm(), query);
|
||||||
// 增加多租户参数
|
// 增加多租户参数
|
||||||
tenantParamsUtils.prepareTenantParam(query);
|
tenantParamsUtils.prepareTenantParam(query);
|
||||||
Report report = reportRender.render(reportDefinition, query);
|
Report report = reportRender.render(reportDefinition, query);
|
||||||
@@ -515,7 +534,53 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
|
|||||||
String downFileName = com.bstek.common.utils.StringUtils.randomFileName() + com.bstek.common.utils.StringUtils.getFileSuffix(p);
|
String downFileName = com.bstek.common.utils.StringUtils.randomFileName() + com.bstek.common.utils.StringUtils.getFileSuffix(p);
|
||||||
response.setHeader(Header.CONTENT_DISPOSITION.getValue(), ATTACHMENT_PREFIX + URLEncoder.encode(downFileName, UTF8_CHARSET));
|
response.setHeader(Header.CONTENT_DISPOSITION.getValue(), ATTACHMENT_PREFIX + URLEncoder.encode(downFileName, UTF8_CHARSET));
|
||||||
|
|
||||||
response.setHeader("code", "20000");
|
response.setHeader("code", DOWNLOAD_SUCCESS_HEADER_CODE);
|
||||||
|
ExportUtils.export(out, report, p);
|
||||||
|
long end = System.currentTimeMillis();
|
||||||
|
ToolUtils.logToConsole("获取打印文件耗时:" + (end - start) + "ms");
|
||||||
|
} catch (Exception ex) {
|
||||||
|
log.error("模版预览打印异常", ex);
|
||||||
|
throw new ReportException(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void commonPrint(ReportTemplateCommonPreviewReqVO reqVO, HttpServletResponse response) {
|
||||||
|
// 查询模板
|
||||||
|
ReportTemplateDO reportTemplateDO = templateMapper.selectById(reqVO.getTemplateId());
|
||||||
|
if (ObjectUtil.isNull(reportTemplateDO)) {
|
||||||
|
throw exception(TEMPLATE_NOT_EXISTS);
|
||||||
|
}
|
||||||
|
// 检查模板内容
|
||||||
|
String content = reportTemplateDO.getContent();
|
||||||
|
if (StringUtils.isEmpty(content)) {
|
||||||
|
throw exception(TEMPLATE_PREVIEW_TEMPLATE_CONTENT_EMPTY_ERROR);
|
||||||
|
}
|
||||||
|
// 自定义请求vo转ureport对象
|
||||||
|
PreviewParameters params = BeanUtils.toBean(reqVO, PreviewParameters.class);
|
||||||
|
params.setContent(content);
|
||||||
|
|
||||||
|
long start = System.currentTimeMillis();
|
||||||
|
ReportRender reportRender = new ReportRender();
|
||||||
|
ReportDefinition reportDefinition = getReportDefinition(reportRender, params, false);
|
||||||
|
Map<String, Object> query = params.getQuery();
|
||||||
|
// 检查表单配置
|
||||||
|
checkSearchForm(reportDefinition.getSearchForm(), query);
|
||||||
|
// 增加多租户参数
|
||||||
|
tenantParamsUtils.prepareTenantParam(query);
|
||||||
|
Report report = reportRender.render(reportDefinition, query);
|
||||||
|
Map<String, String> chartImages = params.getChartImages();
|
||||||
|
report.setChartImages(chartImages);
|
||||||
|
try {
|
||||||
|
OutputStream out = response.getOutputStream();
|
||||||
|
response.setCharacterEncoding(UTF8_CHARSET);
|
||||||
|
response.setContentType("application/pdf; charset=UTF-8");
|
||||||
|
// 创建下载文件
|
||||||
|
ProducerEnum p = ProducerEnum.PDF;
|
||||||
|
String downFileName = com.bstek.common.utils.StringUtils.randomFileName() + com.bstek.common.utils.StringUtils.getFileSuffix(p);
|
||||||
|
response.setHeader(Header.CONTENT_DISPOSITION.getValue(), ATTACHMENT_PREFIX + URLEncoder.encode(downFileName, UTF8_CHARSET));
|
||||||
|
|
||||||
|
response.setHeader("code", DOWNLOAD_SUCCESS_HEADER_CODE);
|
||||||
ExportUtils.export(out, report, p);
|
ExportUtils.export(out, report, p);
|
||||||
long end = System.currentTimeMillis();
|
long end = System.currentTimeMillis();
|
||||||
ToolUtils.logToConsole("获取打印文件耗时:" + (end - start) + "ms");
|
ToolUtils.logToConsole("获取打印文件耗时:" + (end - start) + "ms");
|
||||||
@@ -533,6 +598,8 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
|
|||||||
ReportRender reportRender = new ReportRender();
|
ReportRender reportRender = new ReportRender();
|
||||||
ReportDefinition reportDefinition = getReportDefinition(reportRender, params, true);
|
ReportDefinition reportDefinition = getReportDefinition(reportRender, params, true);
|
||||||
Map<String, Object> query = params.getQuery();
|
Map<String, Object> query = params.getQuery();
|
||||||
|
// 检查表单配置
|
||||||
|
checkSearchForm(reportDefinition.getSearchForm(), query);
|
||||||
// 增加多租户参数
|
// 增加多租户参数
|
||||||
tenantParamsUtils.prepareTenantParam(query);
|
tenantParamsUtils.prepareTenantParam(query);
|
||||||
Report report = reportRender.render(reportDefinition, query);
|
Report report = reportRender.render(reportDefinition, query);
|
||||||
@@ -546,7 +613,52 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
|
|||||||
ProducerEnum p = ProducerEnum.valueOf(type.toUpperCase());
|
ProducerEnum p = ProducerEnum.valueOf(type.toUpperCase());
|
||||||
String downFileName = com.bstek.common.utils.StringUtils.randomFileName() + com.bstek.common.utils.StringUtils.getFileSuffix(p);
|
String downFileName = com.bstek.common.utils.StringUtils.randomFileName() + com.bstek.common.utils.StringUtils.getFileSuffix(p);
|
||||||
response.setHeader(Header.CONTENT_DISPOSITION.getValue(), ATTACHMENT_PREFIX + URLEncoder.encode(downFileName, UTF8_CHARSET));
|
response.setHeader(Header.CONTENT_DISPOSITION.getValue(), ATTACHMENT_PREFIX + URLEncoder.encode(downFileName, UTF8_CHARSET));
|
||||||
response.setHeader("code", "20000");
|
response.setHeader("code", DOWNLOAD_SUCCESS_HEADER_CODE);
|
||||||
|
long start = System.currentTimeMillis();
|
||||||
|
ExportUtils.export(out, report, p);
|
||||||
|
long end = System.currentTimeMillis();
|
||||||
|
ToolUtils.logToConsole("下载 " + type + " 报表耗时:" + (end - start) + "ms");
|
||||||
|
} catch (Exception ex) {
|
||||||
|
log.error("模版预览下载文件异常", ex);
|
||||||
|
throw new ReportException(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void commonDownload(String type, ReportTemplateCommonPreviewReqVO reqVO, HttpServletResponse response) {
|
||||||
|
// 查询模板
|
||||||
|
ReportTemplateDO reportTemplateDO = templateMapper.selectById(reqVO.getTemplateId());
|
||||||
|
if (ObjectUtil.isNull(reportTemplateDO)) {
|
||||||
|
throw exception(TEMPLATE_NOT_EXISTS);
|
||||||
|
}
|
||||||
|
// 检查模板内容
|
||||||
|
String content = reportTemplateDO.getContent();
|
||||||
|
if (StringUtils.isEmpty(content)) {
|
||||||
|
throw exception(TEMPLATE_PREVIEW_TEMPLATE_CONTENT_EMPTY_ERROR);
|
||||||
|
}
|
||||||
|
// 自定义请求vo转ureport对象
|
||||||
|
PreviewParameters params = BeanUtils.toBean(reqVO, PreviewParameters.class);
|
||||||
|
params.setContent(content);
|
||||||
|
|
||||||
|
ReportRender reportRender = new ReportRender();
|
||||||
|
ReportDefinition reportDefinition = getReportDefinition(reportRender, params, true);
|
||||||
|
Map<String, Object> query = params.getQuery();
|
||||||
|
// 检查表单配置
|
||||||
|
checkSearchForm(reportDefinition.getSearchForm(), query);
|
||||||
|
// 增加多租户参数
|
||||||
|
tenantParamsUtils.prepareTenantParam(query);
|
||||||
|
Report report = reportRender.render(reportDefinition, query);
|
||||||
|
Map<String, String> chartImages = params.getChartImages();
|
||||||
|
report.setChartImages(chartImages);
|
||||||
|
try {
|
||||||
|
OutputStream out = response.getOutputStream();
|
||||||
|
response.setCharacterEncoding(UTF8_CHARSET);
|
||||||
|
response.setContentType("application/octet-stream; charset=UTF-8");
|
||||||
|
// 创建下载文件
|
||||||
|
ProducerEnum p = ProducerEnum.valueOf(type.toUpperCase());
|
||||||
|
String downFileName = com.bstek.common.utils.StringUtils.randomFileName() + com.bstek.common.utils.StringUtils.getFileSuffix(p);
|
||||||
|
response.setHeader(Header.CONTENT_DISPOSITION.getValue(), ATTACHMENT_PREFIX + URLEncoder.encode(downFileName, UTF8_CHARSET));
|
||||||
|
response.setHeader("code", DOWNLOAD_SUCCESS_HEADER_CODE);
|
||||||
long start = System.currentTimeMillis();
|
long start = System.currentTimeMillis();
|
||||||
ExportUtils.export(out, report, p);
|
ExportUtils.export(out, report, p);
|
||||||
long end = System.currentTimeMillis();
|
long end = System.currentTimeMillis();
|
||||||
|
|||||||
Reference in New Issue
Block a user