diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java index ccf7717..73a641c 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java @@ -93,9 +93,8 @@ @GetMapping("/test") @ResponseBody public void test(String id) throws Exception { -// //进行证书报告生成,并在远程注册服务器注册 + //进行证书报告生成,并在远程注册服务器注册 PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); - printFileRegister.registerPrintFile(StringUtils.isEmpty(id) ? null : Long.valueOf(id), "计量人员", "导出word", true); +// printFileRegister.registerPrintFile(StringUtils.isEmpty(id) ? null : Long.valueOf(id), "计量人员", "导出word", true); } - } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java index ccf7717..73a641c 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java @@ -93,9 +93,8 @@ @GetMapping("/test") @ResponseBody public void test(String id) throws Exception { -// //进行证书报告生成,并在远程注册服务器注册 + //进行证书报告生成,并在远程注册服务器注册 PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); - printFileRegister.registerPrintFile(StringUtils.isEmpty(id) ? null : Long.valueOf(id), "计量人员", "导出word", true); +// printFileRegister.registerPrintFile(StringUtils.isEmpty(id) ? null : Long.valueOf(id), "计量人员", "导出word", true); } - } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java index 58ef8c3..c05e81d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java @@ -1,6 +1,7 @@ package com.casic.missiles.service.listeners.register; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSON; import com.casic.missiles.dto.certificate.FilePrintRegister; import com.casic.missiles.service.listeners.register.data.GenericFilePrintProcessor; import com.casic.missiles.utils.MinioUtil; @@ -17,6 +18,7 @@ import org.springframework.util.ObjectUtils; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletResponse; import java.io.*; import java.util.List; import java.util.Map; @@ -50,53 +52,74 @@ * 4、将注册产生的打印证书信息上传到服务器 * 5、递归删除因为打印产生的文件信息 * 6、返还打印产生的证书文件 + * + * @param moduleName 模块名称(必填) + * @param moduleType 模块类型(字典值)(选填) + * @param moduleIdValue 模块id + * @param customParam 定制化填充参数 与模块id二选1 + * @param isPdf 是否是pdf + * @param response 返回流 */ - public String registerPrintFile(String moduleName, String moduleType, - Long moduleIdValue, Map customParam, - Boolean isPdf) { + public void registerPrintFile(String moduleName, String moduleType, + Long moduleIdValue, Map customParam, + Boolean isPdf, HttpServletResponse response) { String tempLocalFileDir = localFileDir; - Assert.isFalse(StringUtils.isEmpty(moduleName) || StringUtils.isEmpty(moduleType), () -> { - throw new RuntimeException("the certificateReport is null,please check your params..."); + Assert.isFalse(StringUtils.isEmpty(moduleName), () -> { + throw new RuntimeException("the moduleName is null,please check your params..."); }); - FilePrintRegister metaData = genericFilePrintProcessor.printFileRegister(moduleName, moduleType, customParam, moduleIdValue, tempLocalFileDir); + FilePrintRegister filePrintRegister = genericFilePrintProcessor.printFileRegister(moduleName, moduleType, customParam, moduleIdValue, tempLocalFileDir); //获取文件夹目录,没有则创建 - tempLocalFileDir = tempLocalFileDir + metaData.getFileNameId() + File.separator; + tempLocalFileDir = tempLocalFileDir + filePrintRegister.getFileNameId() + File.separator; createLocalFileDir(tempLocalFileDir); //证书产生准备工作,将相应的文件下载到本地的工作空间,获取相应的模板的读取权限 - for (String fileName : metaData.getBeDownloadedFileNames()) { + for (String fileName : filePrintRegister.getBeDownloadedFileNames()) { downTemplateFile(fileName, tempLocalFileDir); } + String printDocUrl = null; //合并注册 - String wordOldUrl = FilePrintRegisterUtils.filePrintGenerate(metaData); - if (isPdf) { - //默认转为docx,只需要进行docx的替换即可 - String pdfNewUrl = wordOldUrl.replaceAll("docx", "pdf"); - // 4、将新word转化为pdf文件 - FilePrintRegisterUtils.wordToPdf(wordOldUrl, pdfNewUrl); + try { + printDocUrl = FilePrintRegisterUtils.filePrintGenerate(filePrintRegister); + if (isPdf) { + //默认转为docx,只需要进行docx的替换即可 + String pdfNewUrl = printDocUrl.replaceAll("docx", "pdf"); + // 4、将新word转化为pdf文件 + FilePrintRegisterUtils.wordToPdf(printDocUrl, pdfNewUrl); + printDocUrl = pdfNewUrl; + } + } catch (RuntimeException rex) { + log.error("文件打印合同出现异常,打印参数信息为{},异常信息为{}", JSON.toJSON(filePrintRegister), rex); + } finally { + //删除无效的文件 + File invalidFile = new File(tempLocalFileDir); + //删除运行空间下的文件 + deleteFile(invalidFile); + //如果文件路径不为空,回传文件流 + if (StringUtils.isNotEmpty(printDocUrl)) { + createResponseFileInput(printDocUrl, response); + } } - //上传到服务器 - //String certificatePdfName = uploadCertificate(wordOldUrl); - //删除无效的文件 - File invalidFile = new File(tempLocalFileDir); - log.debug("invalid print file start delete, the file directory is {}", tempLocalFileDir); - //删除运行空间下的文件 -// deleteFile(invalidFile); -// return certificatePdfName; - return tempLocalFileDir; } - /** - * 创建文件目录,为mini下载文件准备目录 + * 获取 + * + * @param printDocUrl 文件流路径,pdf,word + * @param response */ - private void createLocalFileDir(String tempLocalFileDir) { - File file = new File(tempLocalFileDir); //以. - if (file.exists()) { - deleteFile(file); + private void createResponseFileInput(String printDocUrl, HttpServletResponse response) { + File file = new File(printDocUrl); + try { + FileInputStream fis = new FileInputStream(file); + response.setHeader("Content-Type", "application/pdf"); + response.setHeader("Content-Disposition", "attachment;filename=" + file.getName()); + IOUtils.copy(fis, response.getOutputStream()); + response.flushBuffer(); + } catch (IOException e) { + e.printStackTrace(); } - boolean dr = file.mkdirs(); //创建目录 } + /** * 从mini文件服务器下载文件,获取文件的读写权限,用户证书报告的生成 */ @@ -133,6 +156,7 @@ /** * 通过生成的证书报告,将证书报告上传到远程mini的文件服务器 */ + @Deprecated public String uploadCertificate(String certificatePrintUrl) { //上传证书 File file = new File(certificatePrintUrl); @@ -160,7 +184,18 @@ } /** - * 对打印报告产生的空间进行清除,还原空间 + * 创建文件目录,为mini下载文件准备临时工作空间 + */ + private void createLocalFileDir(String tempLocalFileDir) { + File file = new File(tempLocalFileDir); //以. + if (file.exists()) { + deleteFile(file); + } + file.mkdirs(); //创建目录 + } + + /** + * 对打印报告产生的工作空间进行删除,归还内存 */ private void deleteFile(File invalidFile) { //返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。 diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java index ccf7717..73a641c 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java @@ -93,9 +93,8 @@ @GetMapping("/test") @ResponseBody public void test(String id) throws Exception { -// //进行证书报告生成,并在远程注册服务器注册 + //进行证书报告生成,并在远程注册服务器注册 PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); - printFileRegister.registerPrintFile(StringUtils.isEmpty(id) ? null : Long.valueOf(id), "计量人员", "导出word", true); +// printFileRegister.registerPrintFile(StringUtils.isEmpty(id) ? null : Long.valueOf(id), "计量人员", "导出word", true); } - } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java index 58ef8c3..c05e81d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java @@ -1,6 +1,7 @@ package com.casic.missiles.service.listeners.register; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSON; import com.casic.missiles.dto.certificate.FilePrintRegister; import com.casic.missiles.service.listeners.register.data.GenericFilePrintProcessor; import com.casic.missiles.utils.MinioUtil; @@ -17,6 +18,7 @@ import org.springframework.util.ObjectUtils; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletResponse; import java.io.*; import java.util.List; import java.util.Map; @@ -50,53 +52,74 @@ * 4、将注册产生的打印证书信息上传到服务器 * 5、递归删除因为打印产生的文件信息 * 6、返还打印产生的证书文件 + * + * @param moduleName 模块名称(必填) + * @param moduleType 模块类型(字典值)(选填) + * @param moduleIdValue 模块id + * @param customParam 定制化填充参数 与模块id二选1 + * @param isPdf 是否是pdf + * @param response 返回流 */ - public String registerPrintFile(String moduleName, String moduleType, - Long moduleIdValue, Map customParam, - Boolean isPdf) { + public void registerPrintFile(String moduleName, String moduleType, + Long moduleIdValue, Map customParam, + Boolean isPdf, HttpServletResponse response) { String tempLocalFileDir = localFileDir; - Assert.isFalse(StringUtils.isEmpty(moduleName) || StringUtils.isEmpty(moduleType), () -> { - throw new RuntimeException("the certificateReport is null,please check your params..."); + Assert.isFalse(StringUtils.isEmpty(moduleName), () -> { + throw new RuntimeException("the moduleName is null,please check your params..."); }); - FilePrintRegister metaData = genericFilePrintProcessor.printFileRegister(moduleName, moduleType, customParam, moduleIdValue, tempLocalFileDir); + FilePrintRegister filePrintRegister = genericFilePrintProcessor.printFileRegister(moduleName, moduleType, customParam, moduleIdValue, tempLocalFileDir); //获取文件夹目录,没有则创建 - tempLocalFileDir = tempLocalFileDir + metaData.getFileNameId() + File.separator; + tempLocalFileDir = tempLocalFileDir + filePrintRegister.getFileNameId() + File.separator; createLocalFileDir(tempLocalFileDir); //证书产生准备工作,将相应的文件下载到本地的工作空间,获取相应的模板的读取权限 - for (String fileName : metaData.getBeDownloadedFileNames()) { + for (String fileName : filePrintRegister.getBeDownloadedFileNames()) { downTemplateFile(fileName, tempLocalFileDir); } + String printDocUrl = null; //合并注册 - String wordOldUrl = FilePrintRegisterUtils.filePrintGenerate(metaData); - if (isPdf) { - //默认转为docx,只需要进行docx的替换即可 - String pdfNewUrl = wordOldUrl.replaceAll("docx", "pdf"); - // 4、将新word转化为pdf文件 - FilePrintRegisterUtils.wordToPdf(wordOldUrl, pdfNewUrl); + try { + printDocUrl = FilePrintRegisterUtils.filePrintGenerate(filePrintRegister); + if (isPdf) { + //默认转为docx,只需要进行docx的替换即可 + String pdfNewUrl = printDocUrl.replaceAll("docx", "pdf"); + // 4、将新word转化为pdf文件 + FilePrintRegisterUtils.wordToPdf(printDocUrl, pdfNewUrl); + printDocUrl = pdfNewUrl; + } + } catch (RuntimeException rex) { + log.error("文件打印合同出现异常,打印参数信息为{},异常信息为{}", JSON.toJSON(filePrintRegister), rex); + } finally { + //删除无效的文件 + File invalidFile = new File(tempLocalFileDir); + //删除运行空间下的文件 + deleteFile(invalidFile); + //如果文件路径不为空,回传文件流 + if (StringUtils.isNotEmpty(printDocUrl)) { + createResponseFileInput(printDocUrl, response); + } } - //上传到服务器 - //String certificatePdfName = uploadCertificate(wordOldUrl); - //删除无效的文件 - File invalidFile = new File(tempLocalFileDir); - log.debug("invalid print file start delete, the file directory is {}", tempLocalFileDir); - //删除运行空间下的文件 -// deleteFile(invalidFile); -// return certificatePdfName; - return tempLocalFileDir; } - /** - * 创建文件目录,为mini下载文件准备目录 + * 获取 + * + * @param printDocUrl 文件流路径,pdf,word + * @param response */ - private void createLocalFileDir(String tempLocalFileDir) { - File file = new File(tempLocalFileDir); //以. - if (file.exists()) { - deleteFile(file); + private void createResponseFileInput(String printDocUrl, HttpServletResponse response) { + File file = new File(printDocUrl); + try { + FileInputStream fis = new FileInputStream(file); + response.setHeader("Content-Type", "application/pdf"); + response.setHeader("Content-Disposition", "attachment;filename=" + file.getName()); + IOUtils.copy(fis, response.getOutputStream()); + response.flushBuffer(); + } catch (IOException e) { + e.printStackTrace(); } - boolean dr = file.mkdirs(); //创建目录 } + /** * 从mini文件服务器下载文件,获取文件的读写权限,用户证书报告的生成 */ @@ -133,6 +156,7 @@ /** * 通过生成的证书报告,将证书报告上传到远程mini的文件服务器 */ + @Deprecated public String uploadCertificate(String certificatePrintUrl) { //上传证书 File file = new File(certificatePrintUrl); @@ -160,7 +184,18 @@ } /** - * 对打印报告产生的空间进行清除,还原空间 + * 创建文件目录,为mini下载文件准备临时工作空间 + */ + private void createLocalFileDir(String tempLocalFileDir) { + File file = new File(tempLocalFileDir); //以. + if (file.exists()) { + deleteFile(file); + } + file.mkdirs(); //创建目录 + } + + /** + * 对打印报告产生的工作空间进行删除,归还内存 */ private void deleteFile(File invalidFile) { //返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。 diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/FilePrintSupport.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/FilePrintSupport.java index 22f724f..be4a1b8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/FilePrintSupport.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/FilePrintSupport.java @@ -99,7 +99,7 @@ protected ModuleTemplatePrintConfig getModuleTemplatePrintConfig(String moduleName, String moduleType) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("module_name", moduleName); - queryWrapper.eq("module_type", moduleType); + queryWrapper.eq(StringUtils.isNotEmpty(moduleType),"module_type", moduleType); List moduleFieldConfigList = moduleTemplatePrintMapper.selectList(queryWrapper); Optional optionalModuleConfig = moduleFieldConfigList.stream().findFirst(); return optionalModuleConfig.isPresent() ? optionalModuleConfig.get() : null;