Ver código fonte

电脑、手机打印数据的限制分别设为100000、10000

sunyj 8 anos atrás
pai
commit
b75ea6291c

+ 4 - 3
src/main/java/com/uas/report/controller/PrintController.java

@@ -24,6 +24,7 @@ import com.uas.report.service.FileService;
 import com.uas.report.service.PrintService;
 import com.uas.report.util.ArrayUtils;
 import com.uas.report.util.FileUtils;
+import com.uas.report.util.Platform;
 import com.uas.report.util.ReportConstants;
 import com.uas.report.util.ReportUtils;
 import com.uas.report.util.StringUtils;
@@ -137,7 +138,7 @@ public class PrintController {
 			HttpServletResponse response) {
 		userName = userName == null ? null : userName.toUpperCase();
 		ReportUtils.checkParameters(userName, reportName);
-		if (printService.overload(userName, profile, reportName, whereCondition, otherParameters)) {
+		if (printService.overload(userName, profile, reportName, whereCondition, otherParameters, Platform.PC)) {
 			throw new ReportException("数据量过大,无法提供服务");
 		}
 		String masterOfJrxml = printService.getMasterOfJrxml(userName, reportName);
@@ -233,7 +234,7 @@ public class PrintController {
 			HttpServletRequest request, HttpServletResponse response) {
 		userName = userName == null ? null : userName.toUpperCase();
 		ReportUtils.checkParameters(userName, reportName);
-		if (printService.overload(userName, profile, reportName, whereCondition, otherParameters)) {
+		if (printService.overload(userName, profile, reportName, whereCondition, otherParameters, Platform.PC)) {
 			throw new ReportException("数据量过大,无法提供服务");
 		}
 		String masterOfJrxml = printService.getMasterOfJrxml(userName, reportName);
@@ -314,7 +315,7 @@ public class PrintController {
 		ReportUtils.checkParameters(userName, reportName);
 		Map<String, Object> result = new HashMap<>();
 		// 判断是否过载
-		if (printService.overload(userName, profile, reportName, whereCondition, otherParameters)) {
+		if (printService.overload(userName, profile, reportName, whereCondition, otherParameters, Platform.PHONE)) {
 			result.put("data", "");
 			result.put("pageSize", 0);
 			result.put("overload", true);

+ 5 - 1
src/main/java/com/uas/report/service/PrintService.java

@@ -2,6 +2,8 @@ package com.uas.report.service;
 
 import java.util.Map;
 
+import com.uas.report.util.Platform;
+
 /**
  * 报表打印
  * 
@@ -103,9 +105,11 @@ public interface PrintService {
 	 * @param otherParameters
 	 *            若模板已指定需要的参数,则不可为null;其他参数,区别于whereCondition,报表某些字段的值取决于这些参数;
 	 *            JSON格式,数据为键值对
+	 * @param platform
+	 *            请求来自的平台
 	 * @return 结果数目超出限制,返回true
 	 */
 	public boolean overload(String userName, String profile, String reportName, String whereCondition,
-			String otherParameters);
+			String otherParameters, Platform platform);
 
 }

+ 17 - 7
src/main/java/com/uas/report/service/impl/PrintServiceImpl.java

@@ -51,6 +51,7 @@ import com.uas.report.util.ArrayUtils;
 import com.uas.report.util.CollectionUtils;
 import com.uas.report.util.FileUtils;
 import com.uas.report.util.MasterManager;
+import com.uas.report.util.Platform;
 import com.uas.report.util.ReportConstants;
 import com.uas.report.util.ReportUtils;
 import com.uas.report.util.StringUtils;
@@ -82,11 +83,6 @@ import net.sf.jasperreports.export.WriterExporterOutput;
 @Service
 public class PrintServiceImpl implements PrintService {
 
-	/**
-	 * 报表支持的最大数据库记录数目
-	 */
-	private static final Integer MAX_RECODR_SIZE = 100000;
-
 	@Autowired
 	private FileService fileService;
 
@@ -643,11 +639,25 @@ public class PrintServiceImpl implements PrintService {
 
 	@Override
 	public boolean overload(String userName, String profile, String reportName, String whereCondition,
-			String otherParameters) {
+			String otherParameters, Platform platform) {
 		DataSource dataSource = MasterManager.getDataSource(userName, profile);
 		if (dataSource == null) {
 			throw new ReportException("获取数据源失败");
 		}
+		if (platform == null) {
+			platform = Platform.PC;
+		}
+
+		// 报表支持的最大数据库记录数目
+		int maxRecordSize = 0;
+		switch (platform) {
+		case PC:
+			maxRecordSize = 100000;
+			break;
+		case PHONE:
+			maxRecordSize = 10000;
+			break;
+		}
 
 		String masterOfJrxml = getMasterOfJrxml(userName, reportName);
 		String jrxmlFilePath = fileService.getJrxmlFilePath(masterOfJrxml, reportName);
@@ -667,7 +677,7 @@ public class PrintServiceImpl implements PrintService {
 			// 因为子报表数据量较小,而且其参数来自主报表,无法简单地进行判断,所以不判断子报表是否过载
 			int count = getCount(jrxmlFilePath, whereCondition, otherParameters, connection);
 			logger.info("count... " + count);
-			return count >= MAX_RECODR_SIZE;
+			return count >= maxRecordSize;
 		} catch (Throwable e) {
 			throw new ReportException(e).setDetailedMessage(e);
 		} finally {

+ 11 - 0
src/main/java/com/uas/report/util/Platform.java

@@ -0,0 +1,11 @@
+package com.uas.report.util;
+
+/**
+ * 请求来自的平台
+ * 
+ * @author sunyj
+ * @since 2017年8月7日 下午3:27:31
+ */
+public enum Platform {
+	PC, PHONE;
+}