mirror of
http://192.168.1.205:9980/cf_devdept2/cf_imes_server.git
synced 2026-08-12 12:52:07 +08:00
报表基础模块:新增通用预览打印、下载接口
This commit is contained in:
+14
@@ -128,6 +128,13 @@ public class ReportTemplateController {
|
||||
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}")
|
||||
@Operation(summary = "模板预览下载")
|
||||
@PreAuthorize("@ss.hasPermission('report:preview')")
|
||||
@@ -135,6 +142,13 @@ public class ReportTemplateController {
|
||||
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")
|
||||
@Operation(summary = "导入excel模板")
|
||||
@PreAuthorize("@ss.hasPermission('report:design')")
|
||||
|
||||
+16
@@ -98,6 +98,12 @@ public interface ReportTemplateService {
|
||||
*/
|
||||
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);
|
||||
|
||||
/**
|
||||
* 模版通用预览下载
|
||||
* 通过模板id+query参数获取文件
|
||||
*
|
||||
* @param type 文件类型
|
||||
* @param reqVO
|
||||
* @param response
|
||||
*/
|
||||
void commonDownload(String type, ReportTemplateCommonPreviewReqVO reqVO, HttpServletResponse response);
|
||||
|
||||
/**
|
||||
* 模板导出
|
||||
*
|
||||
|
||||
+127
-15
@@ -28,6 +28,7 @@ import com.bstek.ureport.definition.datasource.SpringBeanDatasourceDefinition;
|
||||
import com.bstek.ureport.definition.searchform.Component;
|
||||
import com.bstek.ureport.definition.searchform.InputComponent;
|
||||
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.ReportException;
|
||||
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 DATASETIDS_FIELD_NAME = "datasetIds";
|
||||
private static final String DATASOURCEIDS_FIELD_NAME = "datasourceIds";
|
||||
private static final String DOWNLOAD_SUCCESS_HEADER_CODE = "20000";
|
||||
|
||||
@Resource
|
||||
private TenantParamsUtils tenantParamsUtils;
|
||||
@@ -423,8 +425,6 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
|
||||
|
||||
@Override
|
||||
public HtmlReport preview(ReportTemplatePreviewReqVO reqVO) {
|
||||
// 检查查询参数中的空值
|
||||
checkQueryNotEmpty(reqVO.getQuery());
|
||||
// 自定义请求vo转ureport对象
|
||||
PreviewParameters params = BeanUtils.toBean(reqVO, PreviewParameters.class);
|
||||
|
||||
@@ -432,10 +432,12 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
|
||||
ReportRender reportRender = new ReportRender();
|
||||
ReportDefinition reportDefinition = getReportDefinition(reportRender, params, true);
|
||||
|
||||
Map<String, Object> query = params.getQuery();
|
||||
// 检查表单配置
|
||||
checkSearchForm(reportDefinition.getSearchForm(), query);
|
||||
// 增加多租户参数
|
||||
Map<String, Object> parameters = params.getQuery();
|
||||
tenantParamsUtils.prepareTenantParam(parameters);
|
||||
Report report = reportRender.render(reportDefinition, parameters);
|
||||
tenantParamsUtils.prepareTenantParam(query);
|
||||
Report report = reportRender.render(reportDefinition, query);
|
||||
return htmlProducer.produce(reportDefinition, report);
|
||||
}
|
||||
|
||||
@@ -460,13 +462,13 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
|
||||
ReportRender reportRender = new ReportRender();
|
||||
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);
|
||||
Report report = reportRender.render(reportDefinition, parameters);
|
||||
tenantParamsUtils.prepareTenantParam(query);
|
||||
Report report = reportRender.render(reportDefinition, query);
|
||||
return htmlProducer.produce(reportDefinition, report);
|
||||
}
|
||||
|
||||
@@ -480,10 +482,25 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
|
||||
if (ObjectUtil.isNotNull(searchForm)) {
|
||||
List<Component> components = Optional.ofNullable(searchForm.getComponents()).orElse(new ArrayList<>());
|
||||
for (Component component : components) {
|
||||
InputComponent inputComponent = (InputComponent) component;
|
||||
if (ObjectUtil.isNotNull(inputComponent)) {
|
||||
String bindParameter = inputComponent.getBindParameter();
|
||||
if (StringUtils.isNotEmpty(bindParameter) && !parameters.containsKey(bindParameter)) {
|
||||
checkComponent(component, parameters);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查表单中的组件明细
|
||||
*
|
||||
* @param component
|
||||
* @param parameters
|
||||
*/
|
||||
private void checkComponent(Component component, Map<String, Object> parameters) {
|
||||
InputComponent inputComponent = (InputComponent) component;
|
||||
if (ObjectUtil.isNotNull(inputComponent)) {
|
||||
String bindParameter = inputComponent.getBindParameter();
|
||||
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);
|
||||
}
|
||||
}
|
||||
@@ -501,6 +518,8 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
|
||||
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);
|
||||
@@ -515,7 +534,53 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
|
||||
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", "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);
|
||||
long end = System.currentTimeMillis();
|
||||
ToolUtils.logToConsole("获取打印文件耗时:" + (end - start) + "ms");
|
||||
@@ -533,6 +598,8 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
|
||||
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);
|
||||
@@ -546,7 +613,52 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
|
||||
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", "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();
|
||||
ExportUtils.export(out, report, p);
|
||||
long end = System.currentTimeMillis();
|
||||
|
||||
Reference in New Issue
Block a user