|
|
@@ -1,8 +1,10 @@
|
|
|
package com.uas.report.controller;
|
|
|
|
|
|
import java.io.File;
|
|
|
+import java.io.FileInputStream;
|
|
|
import java.io.IOException;
|
|
|
import java.io.OutputStream;
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.Map;
|
|
|
|
|
|
import javax.servlet.ServletException;
|
|
|
@@ -115,12 +117,45 @@ public class PrintController {
|
|
|
exportFileType = "pdf";
|
|
|
}
|
|
|
|
|
|
- byte[] data = printService.export(userName, reportName, whereCondition, otherParameters, exportFileType);
|
|
|
- String message = "";
|
|
|
- if (ArrayUtils.isEmpty(data)) {
|
|
|
- message = "报表导出失败:" + reportName;
|
|
|
- logger.error(message);
|
|
|
- throw new SystemError(message);
|
|
|
+ byte[] data = null;
|
|
|
+
|
|
|
+ String filePath = ReportConstants.GENERATED_FILES_PATH
|
|
|
+ + printService.generateFileName(userName, reportName, whereCondition, otherParameters);
|
|
|
+ if (exportFileType.equals("xls_with_only_data")) {
|
|
|
+ filePath += ".xls";
|
|
|
+ } else {
|
|
|
+ filePath += "." + exportFileType;
|
|
|
+ }
|
|
|
+ File file = new File(PathUtils.getAppPath() + filePath);
|
|
|
+ // 文件无效(不存在或过期),创建
|
|
|
+ if (!printService.isFileValid(file.getPath())) {
|
|
|
+ data = printService.export(userName, reportName, whereCondition, otherParameters, exportFileType);
|
|
|
+ String message = "";
|
|
|
+ if (ArrayUtils.isEmpty(data)) {
|
|
|
+ message = "报表导出失败:" + reportName;
|
|
|
+ logger.error(message);
|
|
|
+ throw new SystemError(message);
|
|
|
+ }
|
|
|
+ printService.writeDataToFile(file.getPath(), data);
|
|
|
+ } else {
|
|
|
+ FileInputStream fileInputStream = null;
|
|
|
+ try {
|
|
|
+ fileInputStream = new FileInputStream(file);
|
|
|
+ data = new byte[fileInputStream.available()];
|
|
|
+ fileInputStream.read(data);
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ throw new SystemError(e.getMessage());
|
|
|
+ } finally {
|
|
|
+ if (fileInputStream != null) {
|
|
|
+ try {
|
|
|
+ fileInputStream.close();
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ throw new SystemError(e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
try {
|
|
|
@@ -162,29 +197,33 @@ public class PrintController {
|
|
|
public Map<String, Object> loadPdfData(String userName, String reportName, String whereCondition,
|
|
|
String otherParameters, Integer pageIndex, HttpServletResponse response) {
|
|
|
checkParameters(userName, reportName);
|
|
|
-
|
|
|
logger.info("开始预览报表:" + reportName);
|
|
|
- Map<String, Object> result = printService.preview(userName, reportName, whereCondition, otherParameters,
|
|
|
- pageIndex);
|
|
|
- byte[] data = null;
|
|
|
- if (result != null && result.containsKey("data")) {
|
|
|
- data = (byte[]) result.remove("data");
|
|
|
- }
|
|
|
- String message = "";
|
|
|
- if (data == null) {
|
|
|
- message = "获取预览数据失败";
|
|
|
- logger.error(message);
|
|
|
- throw new SystemError(message);
|
|
|
- }
|
|
|
+ Map<String, Object> result = null;
|
|
|
|
|
|
+ // 相对路径,返回给前端
|
|
|
String pdfPath = ReportConstants.GENERATED_FILES_PATH
|
|
|
+ printService.generateFileName(userName, reportName, whereCondition, otherParameters) + ".pdf";
|
|
|
File file = new File(PathUtils.getAppPath() + pdfPath);
|
|
|
- // 文件过期或不存在,重新创建pdf文件
|
|
|
- if (printService.isFileExpired(file)) {
|
|
|
- printService.writePdfFile(file.getPath(), data);
|
|
|
+ // 文件无效(不存在或过期),重新创建pdf文件
|
|
|
+ if (!printService.isFileValid(file.getPath())) {
|
|
|
+ result = printService.preview(userName, reportName, whereCondition, otherParameters, pageIndex);
|
|
|
+ byte[] data = null;
|
|
|
+ if (result != null && result.containsKey("data")) {
|
|
|
+ data = (byte[]) result.remove("data");
|
|
|
+ }
|
|
|
+ String message = "";
|
|
|
+ if (data == null) {
|
|
|
+ message = "获取预览数据失败";
|
|
|
+ logger.error(message);
|
|
|
+ throw new SystemError(message);
|
|
|
+ }
|
|
|
+ printService.writeDataToFile(file.getPath(), data);
|
|
|
+ // 同时生成分页的pdf
|
|
|
+ printService.writePagedPdfFiles(file.getPath());
|
|
|
+ } else {
|
|
|
+ result = new HashMap<>();
|
|
|
+ result.put("pageSize", printService.getPageSize(file.getPath()));
|
|
|
}
|
|
|
-
|
|
|
result.put("pdfPath", pdfPath);
|
|
|
logger.info("预览报表成功:" + reportName);
|
|
|
return result;
|