Browse Source

预览页面设置过期时间、限制对pdf状态的查询次数,超过后,需重新加载页面,防止报表数据出现不同步的问题

sunyj 9 years ago
parent
commit
19d7c63ff9

+ 12 - 24
src/main/java/com/uas/report/service/impl/FileServiceImpl.java

@@ -109,16 +109,11 @@ public class FileServiceImpl implements FileService {
 
 	@Override
 	public String upload(final String userName, String fileType, final MultipartFile file) {
-		String message = "";
 		if (StringUtils.isEmpty(userName)) {
-			message = "未传入当前账套名称!";
-			logger.error(message);
-			return message;
+			return "未传入当前账套名称!";
 		}
 		if (file == null) {
-			message = "文件为空,无法进行上传!";
-			logger.error(message);
-			return message;
+			return "文件为空,无法进行上传!";
 		}
 		if (StringUtils.isEmpty(fileType)) {
 			fileType = "jrxml";
@@ -126,8 +121,6 @@ public class FileServiceImpl implements FileService {
 
 		// 如果上传的是模板zip包,直接获取字节数据,将其解压到相应的账套下
 		if (fileType.equals("zip")) {
-			message = "文件上传成功";
-			logger.info(message);
 			new Thread(new Runnable() {
 				@Override
 				public void run() {
@@ -138,7 +131,7 @@ public class FileServiceImpl implements FileService {
 					}
 				}
 			}).start();
-			return message;
+			return "文件上传成功";
 		}
 
 		String fileName = file.getOriginalFilename();
@@ -162,24 +155,17 @@ public class FileServiceImpl implements FileService {
 		}
 		try {
 			file.transferTo(targetFile);
-			message = "成功上传文件至:" + targetFile.getPath();
-			logger.info(message);
-			return message;
+			return "成功上传文件至:" + targetFile.getPath();
 		} catch (IllegalStateException | IOException e) {
 			e.printStackTrace();
-			message = "文件上传失败: " + fileName;
-			logger.error(message);
-			return message;
+			return "文件上传失败: " + fileName;
 		}
 	}
 
 	@Override
 	public String upload(String filePath, Boolean isAbsolutePath, MultipartFile[] files) {
-		String message = "";
 		if (ArrayUtils.isEmpty(files)) {
-			message = "文件为空,无法进行上传!";
-			logger.error(message);
-			return message;
+			return "文件为空,无法进行上传!";
 		}
 		filePath = getAbsolutePath(filePath, isAbsolutePath);
 		File targetFile = new File(filePath + "/" + files[0].getOriginalFilename());
@@ -187,18 +173,20 @@ public class FileServiceImpl implements FileService {
 		if (!targetFile.getParentFile().exists()) {
 			targetFile.getParentFile().mkdirs();
 		}
+
+		StringBuilder stringBuilder = new StringBuilder();
 		for (MultipartFile file : files) {
 			targetFile = new File(targetFile.getParent() + "/" + file.getOriginalFilename());
 			try {
 				file.transferTo(targetFile);
-				message += "成功上传文件至:" + targetFile.getPath() + "\n";
+				stringBuilder.append("成功上传文件至:");
 			} catch (IllegalStateException | IOException e) {
 				e.printStackTrace();
-				message += "上传文件失败: " + targetFile.getPath() + "\n";
+				stringBuilder.append("上传文件失败:");
 			}
+			stringBuilder.append(targetFile.getPath()).append("\n");
 		}
-		logger.info(message);
-		return message;
+		return stringBuilder.toString();
 	}
 
 	@Override

+ 48 - 1
src/main/webapp/resources/js/preview/app.js

@@ -11,7 +11,7 @@ var spinnerContainer = document.getElementById('viewerContainer');
 
 // 能打印的最大页数(页数超过,需要先下载pdf,再打印)
 var PRINT_MAX_PAGE_SIZE = 200;
-var ALERT_FILE_TOO_LARGE = "pdf超过" + PRINT_MAX_PAGE_SIZE
+var ALERT_FILE_TOO_LARGE = "PDF超过" + PRINT_MAX_PAGE_SIZE
 		+ "页,建议先下载到本地,再进行查看或打印";
 var pdfDoc;
 // 页码
@@ -33,6 +33,17 @@ var printType = getParameter("printType");
 // 首次加载页面()
 var firstRequest = true;
 
+// 记录刚加载该页面时的时间
+var startTime = new Date();
+// 记录查询完整pdf状态的次数
+var waitWholePdfGeneratedCount = 0;
+// 页面过期时间为10分钟,之后必须重新加载
+var MAX_TIME = 10 * 60 * 1000;
+// 查询总的pdf状态的次数最高为100次,超过后需要重新加载页面
+var MAX_WAIT_WHOLE_PDF_GENERATED = 3;
+var ALERT_TIMEOUT = "页面已过期,请刷新页面!";
+var ALERT_WAIT_WHOLE_PDF_GENERATED_TOO_LARGE = "PDF加载错误,请刷新页面!";
+
 getWindowWidth();
 loadData(1);
 
@@ -85,6 +96,9 @@ $("#pageIndex").keypress(function(event) {
 				return;
 			}
 			pageIndex = value;
+			if (timeout()) {
+				return;
+			}
 			loadData(pageIndex);
 		} else {
 			document.getElementById("pageIndex").value = pageIndex;
@@ -106,6 +120,9 @@ $("#downloadPdf").click(
 			if (!pdfDoc) {
 				return;
 			}
+			if (timeout()) {
+				return;
+			}
 			console.log(new Date().format()
 					+ " ---- subscribed wholePdfGeneratedSignal");
 			$.subscribe("wholePdfGeneratedSignal", downloadPdf);
@@ -189,6 +206,9 @@ function printPdf() {
 	if (!pdfDoc) {
 		return;
 	}
+	if (timeout()) {
+		return;
+	}
 	console.log(new Date().format()
 			+ " ---- subscribed wholePdfGeneratedSignal");
 	$.subscribe("wholePdfGeneratedSignal", print);
@@ -322,6 +342,12 @@ function loadWholePdf() {
  * 每隔一定时间查询文件状态,直到文件有效
  */
 function waitWholePdfGenerated() {
+	waitWholePdfGeneratedCount++;
+	if (waitWholePdfGeneratedCount >= MAX_WAIT_WHOLE_PDF_GENERATED) {
+		alert(ALERT_WAIT_WHOLE_PDF_GENERATED_TOO_LARGE);
+		window.location.reload();
+		return;
+	}
 	var valid = getGeneratedPdfOrXlsInformation("pdf").valid;
 	if (!valid) {
 		console.log(new Date().format() + " ---- 文件还未生成");
@@ -435,6 +461,9 @@ function prevPage() {
 	if (!pdfDoc || pageIndex <= 1) {
 		return;
 	}
+	if (timeout()) {
+		return;
+	}
 	// 获取前一页的pdf
 	pageIndex--;
 	loadData(pageIndex);
@@ -451,6 +480,9 @@ function nextPage() {
 		alert(ALERT_FILE_TOO_LARGE);
 		return;
 	}
+	if (timeout()) {
+		return;
+	}
 	pageIndex++;
 	loadData(pageIndex);
 }
@@ -480,3 +512,18 @@ function downloadUrl(exportFileType) {
 	downloadUrl += "&exportFileType=" + exportFileType;
 	return downloadUrl;
 }
+
+/**
+ * 检查页面是否已过期
+ * 
+ * @returns {Boolean} true,如果已过期
+ */
+function timeout() {
+	var now = new Date();
+	if (now - startTime >= MAX_TIME) {
+		alert(ALERT_TIMEOUT);
+		window.location.reload();
+		return true;
+	}
+	return false;
+}