From 7448567d90c9d5f5c121fd35e96a41aa9f2081ac Mon Sep 17 00:00:00 2001 From: buaixuexideshitongxue <2936013465@qq.com> Date: Thu, 5 Mar 2026 18:17:59 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A0=94=E5=88=A4=E5=88=86=E6=9E=90=E6=8A=A5?= =?UTF-8?q?=E5=91=8A--=E6=8E=A5=E5=8F=A3=E6=8B=86=E5=88=86=EF=BC=8C?= =?UTF-8?q?=E6=8E=92=E6=9F=A5=E5=BE=AA=E7=8E=AF=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/work/NegativeController.java | 5 -- .../work/NegativeReportController.java | 28 +++++++++ .../supervision/service/NegativeService.java | 62 +------------------ .../negativeReport/NegativeReportService.java | 5 ++ .../NegativeReportServiceImpl.java | 58 +++++++++++++++++ 5 files changed, 93 insertions(+), 65 deletions(-) create mode 100644 src/main/java/com/biutag/supervision/controller/work/NegativeReportController.java diff --git a/src/main/java/com/biutag/supervision/controller/work/NegativeController.java b/src/main/java/com/biutag/supervision/controller/work/NegativeController.java index 98f0362..ea59b28 100644 --- a/src/main/java/com/biutag/supervision/controller/work/NegativeController.java +++ b/src/main/java/com/biutag/supervision/controller/work/NegativeController.java @@ -302,10 +302,5 @@ public class NegativeController { return Result.success(); } - @Operation(summary = "生成研判分析报告") - @PostMapping("/generateReport") - public void generateReport(@RequestBody ReportGenerationRequest request, HttpServletResponse response) throws UnsupportedEncodingException { - negativeService.generateReport(request, response); - } } diff --git a/src/main/java/com/biutag/supervision/controller/work/NegativeReportController.java b/src/main/java/com/biutag/supervision/controller/work/NegativeReportController.java new file mode 100644 index 0000000..c268a6d --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/work/NegativeReportController.java @@ -0,0 +1,28 @@ +package com.biutag.supervision.controller.work; + +import com.biutag.supervision.pojo.param.NegativeQueryParam; +import com.biutag.supervision.service.negativeReport.NegativeReportService; +import io.swagger.v3.oas.annotations.Operation; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.io.UnsupportedEncodingException; + +@RequiredArgsConstructor +@RequestMapping("negative") +@RestController +public class NegativeReportController { + + private final NegativeReportService negativeReportService; + + @Operation(summary = "生成研判分析报告") + @PostMapping("/generateReport") + public void generateReport(@RequestBody NegativeQueryParam request, HttpServletResponse response) throws UnsupportedEncodingException { + negativeReportService.generateReport(request, response); + } + +} diff --git a/src/main/java/com/biutag/supervision/service/NegativeService.java b/src/main/java/com/biutag/supervision/service/NegativeService.java index 6340b1f..729d70a 100644 --- a/src/main/java/com/biutag/supervision/service/NegativeService.java +++ b/src/main/java/com/biutag/supervision/service/NegativeService.java @@ -27,37 +27,24 @@ import com.biutag.supervision.pojo.dto.NegativeDto; import com.biutag.supervision.pojo.dto.flow.FirstDistributeData; import com.biutag.supervision.pojo.dto.flow.VerifyData; import com.biutag.supervision.pojo.dto.jwdc.NegativeApiDto; -import com.biutag.supervision.pojo.dto.report.ReportViewModel; import com.biutag.supervision.pojo.entity.*; import com.biutag.supervision.pojo.model.UserAuth; -import com.biutag.supervision.pojo.request.negative.ReportGenerationRequest; import com.biutag.supervision.pojo.vo.NegativeFileVo; -import com.biutag.supervision.service.report.ReportDataService; -import com.biutag.supervision.util.ChartRenderUtil; import com.biutag.supervision.util.SpringUtil; import com.biutag.supervision.util.TimeUtil; -import com.deepoove.poi.XWPFTemplate; -import com.deepoove.poi.data.Pictures; -import jakarta.servlet.ServletOutputStream; -import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; -import org.springframework.core.io.ClassPathResource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.StreamUtils; -import java.io.IOException; -import java.io.InputStream; -import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; import java.time.LocalDateTime; import java.util.*; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; -import static com.biutag.supervision.constants.AppConstants.*; +import static com.biutag.supervision.constants.AppConstants.JWPY_DEPARTID; +import static com.biutag.supervision.constants.AppConstants.JWPY_DEPART_NAME; @Slf4j @RequiredArgsConstructor @@ -94,7 +81,6 @@ public class NegativeService extends ServiceImpl { private final NegativeCountersignApplyService countersignApplyService; - private final ReportDataService reportDataService; public NegativeDetail get(String id, Integer workId) { Negative negative = getById(id); @@ -494,48 +480,4 @@ public class NegativeService extends ServiceImpl { - - public void generateReport(ReportGenerationRequest request, HttpServletResponse response) { - // 你要返回的模板路径 - String templatePath = "static/templates/督审一体化平台研判分析报告.docx"; - ClassPathResource resource = new ClassPathResource(templatePath); - if (!resource.exists()) { - // 资源不存在,返回 404 - response.setStatus(HttpServletResponse.SC_NOT_FOUND); - response.setContentType("application/json;charset=UTF-8"); - try { - response.getWriter().write("{\"message\":\"模板文件不存在: " + templatePath + "\"}"); - } catch (IOException ignored) {} - return; - } - // 1) 准备模板变量(含图表) - ReportViewModel vm = reportDataService.buildViewModel(request); - // 2) 响应头(docx 正确类型) - String downloadName = "督审一体化平台研判分析报告.docx"; - String encoded = URLEncoder.encode(downloadName, StandardCharsets.UTF_8).replaceAll("\\+", "%20"); - String contentDisposition = "attachment; filename=\"" + encoded + "\"; filename*=UTF-8''" + encoded; - - response.reset(); - response.setCharacterEncoding("UTF-8"); - response.setHeader("Content-Disposition", contentDisposition); - response.setHeader("Access-Control-Expose-Headers", "Content-Disposition"); - response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document"); - response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); - response.setHeader("Pragma", "no-cache"); - response.setDateHeader("Expires", 0); - - // 3) 关键:compile + render + write(不要 StreamUtils.copy) - try (InputStream in = resource.getInputStream(); - XWPFTemplate template = XWPFTemplate.compile(in).render(vm); - ServletOutputStream out = response.getOutputStream()) { - - template.write(out); - out.flush(); - - } catch (Exception e) { - log.error("生成/下载报告失败", e); - // 如果你们有统一异常处理,可以直接抛出去 - // throw new RuntimeException("生成报告失败", e); - } - } } diff --git a/src/main/java/com/biutag/supervision/service/negativeReport/NegativeReportService.java b/src/main/java/com/biutag/supervision/service/negativeReport/NegativeReportService.java index d4a9876..dc83acc 100644 --- a/src/main/java/com/biutag/supervision/service/negativeReport/NegativeReportService.java +++ b/src/main/java/com/biutag/supervision/service/negativeReport/NegativeReportService.java @@ -1,4 +1,9 @@ package com.biutag.supervision.service.negativeReport; +import com.biutag.supervision.pojo.param.NegativeQueryParam; +import jakarta.servlet.http.HttpServletResponse; + public interface NegativeReportService { + + void generateReport(NegativeQueryParam request, HttpServletResponse response); } diff --git a/src/main/java/com/biutag/supervision/service/negativeReport/NegativeReportServiceImpl.java b/src/main/java/com/biutag/supervision/service/negativeReport/NegativeReportServiceImpl.java index 7f8fc7d..e8581f2 100644 --- a/src/main/java/com/biutag/supervision/service/negativeReport/NegativeReportServiceImpl.java +++ b/src/main/java/com/biutag/supervision/service/negativeReport/NegativeReportServiceImpl.java @@ -1,10 +1,22 @@ package com.biutag.supervision.service.negativeReport; +import com.biutag.supervision.pojo.dto.report.ReportViewModel; +import com.biutag.supervision.pojo.param.NegativeQueryParam; +import com.biutag.supervision.service.report.ReportDataService; +import com.deepoove.poi.XWPFTemplate; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.core.io.ClassPathResource; import org.springframework.stereotype.Service; +import java.io.IOException; +import java.io.InputStream; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; + /** * @ClassName NegativeReportServiceImpl * @Description TODO @@ -17,4 +29,50 @@ import org.springframework.stereotype.Service; @Schema(description = "研判分析报告") public class NegativeReportServiceImpl implements NegativeReportService { + + private final ReportDataService reportDataService; + + public void generateReport(NegativeQueryParam request, HttpServletResponse response) { + // 你要返回的模板路径 + String templatePath = "static/templates/督审一体化平台研判分析报告.docx"; + ClassPathResource resource = new ClassPathResource(templatePath); + if (!resource.exists()) { + // 资源不存在,返回 404 + response.setStatus(HttpServletResponse.SC_NOT_FOUND); + response.setContentType("application/json;charset=UTF-8"); + try { + response.getWriter().write("{\"message\":\"模板文件不存在: " + templatePath + "\"}"); + } catch (IOException ignored) {} + return; + } + // 1) 准备模板变量(含图表) + ReportViewModel vm = reportDataService.buildViewModel(request); + // 2) 响应头(docx 正确类型) + String downloadName = "督审一体化平台研判分析报告.docx"; + String encoded = URLEncoder.encode(downloadName, StandardCharsets.UTF_8).replaceAll("\\+", "%20"); + String contentDisposition = "attachment; filename=\"" + encoded + "\"; filename*=UTF-8''" + encoded; + + response.reset(); + response.setCharacterEncoding("UTF-8"); + response.setHeader("Content-Disposition", contentDisposition); + response.setHeader("Access-Control-Expose-Headers", "Content-Disposition"); + response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document"); + response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); + response.setHeader("Pragma", "no-cache"); + response.setDateHeader("Expires", 0); + + // 3) 关键:compile + render + write(不要 StreamUtils.copy) + try (InputStream in = resource.getInputStream(); + XWPFTemplate template = XWPFTemplate.compile(in).render(vm); + ServletOutputStream out = response.getOutputStream()) { + + template.write(out); + out.flush(); + + } catch (Exception e) { + log.error("生成/下载报告失败", e); + // 如果你们有统一异常处理,可以直接抛出去 + // throw new RuntimeException("生成报告失败", e); + } + } }