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 73a641c..3505750 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 @@ -23,6 +23,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import javax.servlet.http.HttpServletResponse; import java.security.NoSuchAlgorithmException; import java.util.Map; @@ -92,9 +93,9 @@ */ @GetMapping("/test") @ResponseBody - public void test(String id) throws Exception { + public void test(String id, HttpServletResponse response) throws Exception { //进行证书报告生成,并在远程注册服务器注册 PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// printFileRegister.registerPrintFile(StringUtils.isEmpty(id) ? null : Long.valueOf(id), "计量人员", "导出word", true); + printFileRegister.registerPrintFile("计量人员", "导出word", StringUtils.isEmpty(id) ? null : Long.valueOf(id), null, false, response); } } 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 73a641c..3505750 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 @@ -23,6 +23,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import javax.servlet.http.HttpServletResponse; import java.security.NoSuchAlgorithmException; import java.util.Map; @@ -92,9 +93,9 @@ */ @GetMapping("/test") @ResponseBody - public void test(String id) throws Exception { + public void test(String id, HttpServletResponse response) throws Exception { //进行证书报告生成,并在远程注册服务器注册 PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// printFileRegister.registerPrintFile(StringUtils.isEmpty(id) ? null : Long.valueOf(id), "计量人员", "导出word", true); + printFileRegister.registerPrintFile("计量人员", "导出word", StringUtils.isEmpty(id) ? null : Long.valueOf(id), null, false, response); } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/file/ModuleTemplatePrintConfig.java b/casic-metering-model/src/main/java/com/casic/missiles/model/file/ModuleTemplatePrintConfig.java index 14245cd..7515b3b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/file/ModuleTemplatePrintConfig.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/file/ModuleTemplatePrintConfig.java @@ -36,8 +36,8 @@ private String signs; @ApiModelProperty("模板名称") - @TableField("template_file") - private Long templateFile; + @TableField("template_file_id") + private Long templateFileId; @ApiModelProperty("模板字段id") @TableField("module_field_id") 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 73a641c..3505750 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 @@ -23,6 +23,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import javax.servlet.http.HttpServletResponse; import java.security.NoSuchAlgorithmException; import java.util.Map; @@ -92,9 +93,9 @@ */ @GetMapping("/test") @ResponseBody - public void test(String id) throws Exception { + public void test(String id, HttpServletResponse response) throws Exception { //进行证书报告生成,并在远程注册服务器注册 PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// printFileRegister.registerPrintFile(StringUtils.isEmpty(id) ? null : Long.valueOf(id), "计量人员", "导出word", true); + printFileRegister.registerPrintFile("计量人员", "导出word", StringUtils.isEmpty(id) ? null : Long.valueOf(id), null, false, response); } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/file/ModuleTemplatePrintConfig.java b/casic-metering-model/src/main/java/com/casic/missiles/model/file/ModuleTemplatePrintConfig.java index 14245cd..7515b3b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/file/ModuleTemplatePrintConfig.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/file/ModuleTemplatePrintConfig.java @@ -36,8 +36,8 @@ private String signs; @ApiModelProperty("模板名称") - @TableField("template_file") - private Long templateFile; + @TableField("template_file_id") + private Long templateFileId; @ApiModelProperty("模板字段id") @TableField("module_field_id") 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 c05e81d..bed33ba 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 @@ -58,7 +58,7 @@ * @param moduleIdValue 模块id * @param customParam 定制化填充参数 与模块id二选1 * @param isPdf 是否是pdf - * @param response 返回流 + * @param response 返回流 */ public void registerPrintFile(String moduleName, String moduleType, Long moduleIdValue, Map customParam, @@ -87,35 +87,67 @@ printDocUrl = pdfNewUrl; } } catch (RuntimeException rex) { - log.error("文件打印合同出现异常,打印参数信息为{},异常信息为{}", JSON.toJSON(filePrintRegister), rex); + log.error("文件打印出现异常,打印参数信息为{},异常信息为{}", JSON.toJSON(filePrintRegister), rex); } finally { - //删除无效的文件 - File invalidFile = new File(tempLocalFileDir); - //删除运行空间下的文件 - deleteFile(invalidFile); //如果文件路径不为空,回传文件流 if (StringUtils.isNotEmpty(printDocUrl)) { createResponseFileInput(printDocUrl, response); } + //删除无效的文件 + File invalidFile = new File(tempLocalFileDir); + //删除运行空间下的文件 + deleteFile(invalidFile); } } /** - * 获取 + * 返回文件流 * * @param printDocUrl 文件流路径,pdf,word * @param response */ private void createResponseFileInput(String printDocUrl, HttpServletResponse response) { File file = new File(printDocUrl); + InputStream in = null; + ByteArrayOutputStream out = null; try { FileInputStream fis = new FileInputStream(file); - response.setHeader("Content-Type", "application/pdf"); - response.setHeader("Content-Disposition", "attachment;filename=" + file.getName()); + out = new ByteArrayOutputStream(); + IOUtils.copy(fis, out); + //封装返回值 + byte[] data = out.toByteArray(); + response.reset(); + response.setHeader("Content-Disposition", "attachment; filename=\"" + printDocUrl + "\""); + response.addHeader("Content-Length", "" + data.length); + response.setHeader("Access-Control-Allow-Origin", "*"); + response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); + response.setHeader("Access-Control-Max-Age", "3600"); + response.setHeader("Access-Control-Allow-Credentials", "true"); + response.setHeader("Access-Control-Allow-Headers", "*"); + response.setContentType("application/octet-stream;charset=UTF-8"); IOUtils.copy(fis, response.getOutputStream()); + OutputStream outputStream = new BufferedOutputStream(response.getOutputStream()); + outputStream.write(data); + outputStream.flush(); + outputStream.close(); response.flushBuffer(); - } catch (IOException e) { + } catch (Exception e) { e.printStackTrace(); + } finally { + try { + if (in != null) { + try { + in.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (out != null) { + out.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } } } 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 73a641c..3505750 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 @@ -23,6 +23,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import javax.servlet.http.HttpServletResponse; import java.security.NoSuchAlgorithmException; import java.util.Map; @@ -92,9 +93,9 @@ */ @GetMapping("/test") @ResponseBody - public void test(String id) throws Exception { + public void test(String id, HttpServletResponse response) throws Exception { //进行证书报告生成,并在远程注册服务器注册 PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// printFileRegister.registerPrintFile(StringUtils.isEmpty(id) ? null : Long.valueOf(id), "计量人员", "导出word", true); + printFileRegister.registerPrintFile("计量人员", "导出word", StringUtils.isEmpty(id) ? null : Long.valueOf(id), null, false, response); } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/file/ModuleTemplatePrintConfig.java b/casic-metering-model/src/main/java/com/casic/missiles/model/file/ModuleTemplatePrintConfig.java index 14245cd..7515b3b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/file/ModuleTemplatePrintConfig.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/file/ModuleTemplatePrintConfig.java @@ -36,8 +36,8 @@ private String signs; @ApiModelProperty("模板名称") - @TableField("template_file") - private Long templateFile; + @TableField("template_file_id") + private Long templateFileId; @ApiModelProperty("模板字段id") @TableField("module_field_id") 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 c05e81d..bed33ba 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 @@ -58,7 +58,7 @@ * @param moduleIdValue 模块id * @param customParam 定制化填充参数 与模块id二选1 * @param isPdf 是否是pdf - * @param response 返回流 + * @param response 返回流 */ public void registerPrintFile(String moduleName, String moduleType, Long moduleIdValue, Map customParam, @@ -87,35 +87,67 @@ printDocUrl = pdfNewUrl; } } catch (RuntimeException rex) { - log.error("文件打印合同出现异常,打印参数信息为{},异常信息为{}", JSON.toJSON(filePrintRegister), rex); + log.error("文件打印出现异常,打印参数信息为{},异常信息为{}", JSON.toJSON(filePrintRegister), rex); } finally { - //删除无效的文件 - File invalidFile = new File(tempLocalFileDir); - //删除运行空间下的文件 - deleteFile(invalidFile); //如果文件路径不为空,回传文件流 if (StringUtils.isNotEmpty(printDocUrl)) { createResponseFileInput(printDocUrl, response); } + //删除无效的文件 + File invalidFile = new File(tempLocalFileDir); + //删除运行空间下的文件 + deleteFile(invalidFile); } } /** - * 获取 + * 返回文件流 * * @param printDocUrl 文件流路径,pdf,word * @param response */ private void createResponseFileInput(String printDocUrl, HttpServletResponse response) { File file = new File(printDocUrl); + InputStream in = null; + ByteArrayOutputStream out = null; try { FileInputStream fis = new FileInputStream(file); - response.setHeader("Content-Type", "application/pdf"); - response.setHeader("Content-Disposition", "attachment;filename=" + file.getName()); + out = new ByteArrayOutputStream(); + IOUtils.copy(fis, out); + //封装返回值 + byte[] data = out.toByteArray(); + response.reset(); + response.setHeader("Content-Disposition", "attachment; filename=\"" + printDocUrl + "\""); + response.addHeader("Content-Length", "" + data.length); + response.setHeader("Access-Control-Allow-Origin", "*"); + response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); + response.setHeader("Access-Control-Max-Age", "3600"); + response.setHeader("Access-Control-Allow-Credentials", "true"); + response.setHeader("Access-Control-Allow-Headers", "*"); + response.setContentType("application/octet-stream;charset=UTF-8"); IOUtils.copy(fis, response.getOutputStream()); + OutputStream outputStream = new BufferedOutputStream(response.getOutputStream()); + outputStream.write(data); + outputStream.flush(); + outputStream.close(); response.flushBuffer(); - } catch (IOException e) { + } catch (Exception e) { e.printStackTrace(); + } finally { + try { + if (in != null) { + try { + in.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (out != null) { + out.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } } } 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 be4a1b8..6b30584 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 @@ -55,7 +55,7 @@ * */ PrintFileRegisterMapper fileRegisterMapper = SpringContextUtil.getBean(PrintFileRegisterMapper.class); - String templateName = fileRegisterMapper.getTemplateFileById(moduleTemplatePrintConfig.getTemplateFile()); + String templateName = fileRegisterMapper.getTemplateFileById(moduleTemplatePrintConfig.getTemplateFileId()); filePrintRegister.setFileName(templateName); filePrintRegister.setTemDir(templateFileDir); filePrintRegister.setTemplatePath(templateFileDir + templateName); 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 73a641c..3505750 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 @@ -23,6 +23,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import javax.servlet.http.HttpServletResponse; import java.security.NoSuchAlgorithmException; import java.util.Map; @@ -92,9 +93,9 @@ */ @GetMapping("/test") @ResponseBody - public void test(String id) throws Exception { + public void test(String id, HttpServletResponse response) throws Exception { //进行证书报告生成,并在远程注册服务器注册 PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// printFileRegister.registerPrintFile(StringUtils.isEmpty(id) ? null : Long.valueOf(id), "计量人员", "导出word", true); + printFileRegister.registerPrintFile("计量人员", "导出word", StringUtils.isEmpty(id) ? null : Long.valueOf(id), null, false, response); } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/file/ModuleTemplatePrintConfig.java b/casic-metering-model/src/main/java/com/casic/missiles/model/file/ModuleTemplatePrintConfig.java index 14245cd..7515b3b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/file/ModuleTemplatePrintConfig.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/file/ModuleTemplatePrintConfig.java @@ -36,8 +36,8 @@ private String signs; @ApiModelProperty("模板名称") - @TableField("template_file") - private Long templateFile; + @TableField("template_file_id") + private Long templateFileId; @ApiModelProperty("模板字段id") @TableField("module_field_id") 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 c05e81d..bed33ba 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 @@ -58,7 +58,7 @@ * @param moduleIdValue 模块id * @param customParam 定制化填充参数 与模块id二选1 * @param isPdf 是否是pdf - * @param response 返回流 + * @param response 返回流 */ public void registerPrintFile(String moduleName, String moduleType, Long moduleIdValue, Map customParam, @@ -87,35 +87,67 @@ printDocUrl = pdfNewUrl; } } catch (RuntimeException rex) { - log.error("文件打印合同出现异常,打印参数信息为{},异常信息为{}", JSON.toJSON(filePrintRegister), rex); + log.error("文件打印出现异常,打印参数信息为{},异常信息为{}", JSON.toJSON(filePrintRegister), rex); } finally { - //删除无效的文件 - File invalidFile = new File(tempLocalFileDir); - //删除运行空间下的文件 - deleteFile(invalidFile); //如果文件路径不为空,回传文件流 if (StringUtils.isNotEmpty(printDocUrl)) { createResponseFileInput(printDocUrl, response); } + //删除无效的文件 + File invalidFile = new File(tempLocalFileDir); + //删除运行空间下的文件 + deleteFile(invalidFile); } } /** - * 获取 + * 返回文件流 * * @param printDocUrl 文件流路径,pdf,word * @param response */ private void createResponseFileInput(String printDocUrl, HttpServletResponse response) { File file = new File(printDocUrl); + InputStream in = null; + ByteArrayOutputStream out = null; try { FileInputStream fis = new FileInputStream(file); - response.setHeader("Content-Type", "application/pdf"); - response.setHeader("Content-Disposition", "attachment;filename=" + file.getName()); + out = new ByteArrayOutputStream(); + IOUtils.copy(fis, out); + //封装返回值 + byte[] data = out.toByteArray(); + response.reset(); + response.setHeader("Content-Disposition", "attachment; filename=\"" + printDocUrl + "\""); + response.addHeader("Content-Length", "" + data.length); + response.setHeader("Access-Control-Allow-Origin", "*"); + response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); + response.setHeader("Access-Control-Max-Age", "3600"); + response.setHeader("Access-Control-Allow-Credentials", "true"); + response.setHeader("Access-Control-Allow-Headers", "*"); + response.setContentType("application/octet-stream;charset=UTF-8"); IOUtils.copy(fis, response.getOutputStream()); + OutputStream outputStream = new BufferedOutputStream(response.getOutputStream()); + outputStream.write(data); + outputStream.flush(); + outputStream.close(); response.flushBuffer(); - } catch (IOException e) { + } catch (Exception e) { e.printStackTrace(); + } finally { + try { + if (in != null) { + try { + in.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (out != null) { + out.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } } } 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 be4a1b8..6b30584 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 @@ -55,7 +55,7 @@ * */ PrintFileRegisterMapper fileRegisterMapper = SpringContextUtil.getBean(PrintFileRegisterMapper.class); - String templateName = fileRegisterMapper.getTemplateFileById(moduleTemplatePrintConfig.getTemplateFile()); + String templateName = fileRegisterMapper.getTemplateFileById(moduleTemplatePrintConfig.getTemplateFileId()); filePrintRegister.setFileName(templateName); filePrintRegister.setTemDir(templateFileDir); filePrintRegister.setTemplatePath(templateFileDir + templateName); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/GenericFilePrintProcessor.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/GenericFilePrintProcessor.java index 4921aad..581b704 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/GenericFilePrintProcessor.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/GenericFilePrintProcessor.java @@ -33,7 +33,7 @@ //获取当前模板配置信息 ModuleTemplatePrintConfig moduleTemplatePrintConfig = getModuleTemplatePrintConfig(moduleName, moduleType); //判断是否有模板,没有直接抛出异常,健壮性校验 - Assert.isFalse(ObjectUtils.isEmpty(moduleTemplatePrintConfig.getTemplateFile()), () -> { + Assert.isFalse(ObjectUtils.isEmpty(moduleTemplatePrintConfig.getTemplateFileId()), () -> { throw new BusinessException(BusinessExceptionEnum.TEMPLATE_FILE_NULL); }); //根据打印模板配置,初始化文件打印注册信息