zhouy 3 gadi atpakaļ
vecāks
revīzija
7bd6f73932

+ 2 - 1
report/src/main/java/com/uas/report/controller/PrintController.java

@@ -253,7 +253,8 @@ public class PrintController {
 			if (printService.overload(userName, profile, reportName, whereCondition, otherParameters, Platform.PC)) {
 			if (printService.overload(userName, profile, reportName, whereCondition, otherParameters, Platform.PC)) {
 				throw new IllegalStateException("数据量过大,无法提供服务");
 				throw new IllegalStateException("数据量过大,无法提供服务");
 			}
 			}
-			printService.export(userName, profile, reportName, whereCondition, otherParameters, ExportType.PDF, file, null, true);
+
+			printService.exportMulti(userName, profile, reportName, whereCondition, otherParameters, ExportType.PDF, file, null, true);
 		}
 		}
 		return "pdf/preview?p=" + pdfPath;
 		return "pdf/preview?p=" + pdfPath;
 	}
 	}

+ 3 - 0
report/src/main/java/com/uas/report/service/PrintService.java

@@ -39,6 +39,9 @@ public interface PrintService {
 	int export(String userName, String profile, String reportName, String whereCondition,
 	int export(String userName, String profile, String reportName, String whereCondition,
 			   String otherParameters, ExportType exportType, File exportFile, Integer pageIndex, boolean useFileVirtualizer)
 			   String otherParameters, ExportType exportType, File exportFile, Integer pageIndex, boolean useFileVirtualizer)
 			throws JRException, IOException, DocumentException, SQLException;
 			throws JRException, IOException, DocumentException, SQLException;
+	int exportMulti(String userName, String profile, String reportName, String whereCondition,
+					String otherParameters, ExportType exportType, File exportFile, Integer pageIndex, boolean useFileVirtualizer)
+			throws JRException, IOException, DocumentException, SQLException;
 
 
 	/**
 	/**
 	 * 获取模板对应的账套
 	 * 获取模板对应的账套

+ 120 - 0
report/src/main/java/com/uas/report/service/impl/PrintServiceImpl.java

@@ -161,6 +161,126 @@ public class PrintServiceImpl implements PrintService {
 		}
 		}
 	}
 	}
 
 
+	@Override
+	public int exportMulti(String userName, String profile, String reportName, String whereCondition,
+						   String otherParameters, ExportType exportType, File exportFile, Integer pageIndex, boolean useFileVirtualizer)
+			throws JRException, IOException, DocumentException, SQLException {
+		DruidDataSource dataSource = MasterManager.getDataSource(userName, profile);
+		if (dataSource == null) {
+			throw new SQLException("获取数据源失败");
+		}
+
+		if(exportFile.getParentFile() != null && !exportFile.getParentFile().exists()){
+			exportFile.getParentFile().mkdirs();
+		}
+
+
+
+
+        List<String> paths =new ArrayList<>();
+		paths.add("炬神外箱标签");
+		paths.add("同为盘.盒标签");
+		Connection connection = null;
+		List<JasperPrint> printList = new ArrayList<JasperPrint>();
+
+		try {
+			connection = dataSource.getConnection();
+			for(int i =0 ;i <paths.size(); i++){
+				String masterOfJrxml = getMasterOfJrxml(userName, paths.get(i));
+				String jrxmlFilePath = fileService.getJrxmlFilePath(masterOfJrxml, paths.get(i));
+
+				// 向报表模板传递参数:报表路径、where条件、其他参数
+				Map<String, Object> parameters = new HashMap<>();
+				if (useFileVirtualizer) {
+					File virtualizerDir = new File(ReportUtils.getVirtualizerDir());
+					if (!virtualizerDir.exists()) {
+						virtualizerDir.mkdirs();
+					}
+					parameters.put(JRParameter.REPORT_VIRTUALIZER, new JRFileVirtualizer(2, virtualizerDir.getAbsolutePath()));
+				}
+				parameters.put(ReportConstants.PARAMETER_REPORT_DIR, fileService.getMasterPath(masterOfJrxml));
+				if (!StringUtils.isEmpty(whereCondition)) {
+					parameters.put(ReportConstants.PARAMETER_WHERE_CONDITION, whereCondition);
+				}
+				// 不为空,并且去除空格后的长度大于2(不为{})
+				if (!StringUtils.isEmpty(otherParameters) && otherParameters.replace(" ", "").length() > 2) {
+					parameters.putAll(JSONObject.parseObject(otherParameters));
+				}
+				String jasperFilePath = maybeCompileJrxmlFile(jrxmlFilePath, false, otherParameters, connection, dataSource.getDbType());
+				if(StringUtils.isEmpty(jasperFilePath)){
+					throw new IllegalStateException("编译报表模板失败");
+				}
+
+				logger.info("export fillReport...");
+				// 从数据库获取数据填充报表
+				JasperPrint jasperPrint;
+				boolean customCellStyle = false;
+				// 只导出数据
+				if (exportType == ExportType.XLS_DATA || exportType == ExportType.XLSX_DATA) {
+					// 需自定义单元格格式
+					customCellStyle = true;
+					JasperDesign jasperDesign = JRXmlLoader.load(jrxmlFilePath);
+					// 移除模板中多余元素
+					removeUnusedElements(jasperDesign);
+					JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
+					jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, connection);
+				} else if (exportType == ExportType.DOC) {
+					// 导出word时需要对行距等进行调整
+					InputStream inputStream = new ByteArrayInputStream(
+							modifyLineSpacing(jrxmlFilePath).getBytes("UTF-8"));
+					JasperReport jasperReport = JasperCompileManager.compileReport(inputStream);
+					jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, connection);
+					inputStream.close();
+				} else if ((exportType == ExportType.XLS || exportType == ExportType.XLSX) &&
+						ignorepage(reportName, connection, dataSource.getDbType())) {
+					JasperDesign jasperDesign = JRXmlLoader.load(jrxmlFilePath);
+					//移除分页之间的间隔
+					jasperDesign.setIgnorePagination(true);
+					JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
+					jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, connection);
+				} else {
+					jasperPrint = JasperFillManager.fillReport(jasperFilePath, parameters, connection);
+				}
+
+				if (exportType == ExportType.XLS || exportType == ExportType.XLS_DATA) {
+					exportReportToXls(jasperPrint, exportFile, customCellStyle, pageIndex);
+				} else if (exportType == ExportType.XLSX || exportType == ExportType.XLSX_DATA) {
+					exportReportToXlsx(jasperPrint, exportFile, customCellStyle, pageIndex);
+				} else if (exportType == ExportType.DOC) {
+					exportReportToDoc(jasperPrint, exportFile, pageIndex);
+				} else if (exportType == ExportType.TXT) {
+					exportReportToText(jasperPrint, exportFile, pageIndex);
+				} else {
+					//exportReportToPdf(jasperPrint, exportFile, pageIndex);
+					printList.add(jasperPrint);
+				}
+				logger.info("export fillReport done...");
+			}
+			JRPdfExporter exporter = new JRPdfExporter();
+			setPageConfiguration(exporter, printList.get(0), pageIndex);
+			logger.info("print done...");
+			ExporterInput exporterInput = new SimpleExporterInput(printList.get(0));
+			exporterInput.getItems().add(new SimpleExporterInputItem(printList.get(1)));
+			exporter.setExporterInput(exporterInput);
+			OutputStreamExporterOutput exporterOutput = new SimpleOutputStreamExporterOutput(exportFile);
+			exporter.setExporterOutput(exporterOutput);
+			exporter.exportReport();
+			return 0;
+		} catch (JRRuntimeException e) {
+			// 如果因为某个类未实现 Serializable 而无法反序列化,则不使用 REPORT_VIRTUALIZER
+			if (e.getCause() instanceof NotSerializableException) {
+				logger.error(e.getMessage() + " 取消 REPORT_VIRTUALIZER ,重新打印");
+				return export(userName, profile, reportName, whereCondition, otherParameters, exportType, exportFile, pageIndex, false);
+			}
+			throw e;
+		} finally {
+			if (connection != null) {
+				connection.close();
+			}
+		}
+
+	}
+
 	/**
 	/**
 	 * 可能需要编译报表模板文件
 	 * 可能需要编译报表模板文件
 	 *
 	 *