From 89b90fce22d94a1d29ee5050591aff9950b6957b Mon Sep 17 00:00:00 2001 From: xueqingkun Date: Tue, 30 Jul 2024 09:43:12 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E6=B7=BB=E5=8A=A0=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E6=A1=88=E4=BB=B6=E5=BE=97=E5=88=86=E8=AF=A6=E6=83=85=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../police/controller/ModelController.java | 9 ++++ .../police/service/ModelService.java | 8 ++++ .../police/service/impl/ModelServiceImpl.java | 39 ++++++++++++++++++ src/main/resources/template/case_detail.docx | Bin 0 -> 12122 bytes 4 files changed, 56 insertions(+) create mode 100644 src/main/resources/template/case_detail.docx diff --git a/src/main/java/com/supervision/police/controller/ModelController.java b/src/main/java/com/supervision/police/controller/ModelController.java index 9c6faa1..c4720c4 100644 --- a/src/main/java/com/supervision/police/controller/ModelController.java +++ b/src/main/java/com/supervision/police/controller/ModelController.java @@ -7,6 +7,7 @@ import com.supervision.police.dto.caseScore.CaseScoreDetailDTO; import com.supervision.police.service.ModelService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; +import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; @@ -42,6 +43,14 @@ public class ModelController { return R.ok(detail); } + @GetMapping("/exportCaseScoreDetail") + @Operation(summary = "导出案件得分详情功能") + public void exportCaseScoreDetail( @RequestParam @Parameter(name = "caseId",description = "案件id") String caseId, + HttpServletResponse response) { + + modelService.exportCaseScoreDetail(caseId,response); + } + @GetMapping("/getCaseDateStatus") @Operation(summary = "获取案件数据状态") public R getCaseDateStatus(@RequestParam @Parameter(name = "caseId",description = "案件id") String caseId) { diff --git a/src/main/java/com/supervision/police/service/ModelService.java b/src/main/java/com/supervision/police/service/ModelService.java index 90ba829..2acddcc 100644 --- a/src/main/java/com/supervision/police/service/ModelService.java +++ b/src/main/java/com/supervision/police/service/ModelService.java @@ -4,6 +4,7 @@ import com.supervision.common.domain.R; import com.supervision.police.dto.AnalyseCaseDTO; import com.supervision.police.dto.CaseStatus; import com.supervision.police.dto.caseScore.CaseScoreDetailDTO; +import jakarta.servlet.http.HttpServletResponse; public interface ModelService { @@ -22,4 +23,11 @@ public interface ModelService { * @return */ CaseStatus getCaseDateStatus(String caseId); + + /** + * 导出案件得分详情功能 + * @param caseId 案件id + * @param response + */ + void exportCaseScoreDetail(String caseId, HttpServletResponse response); } diff --git a/src/main/java/com/supervision/police/service/impl/ModelServiceImpl.java b/src/main/java/com/supervision/police/service/impl/ModelServiceImpl.java index dfeff6c..f7d27ac 100644 --- a/src/main/java/com/supervision/police/service/impl/ModelServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/ModelServiceImpl.java @@ -1,6 +1,7 @@ package com.supervision.police.service.impl; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.io.IoUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; @@ -9,6 +10,7 @@ import cn.hutool.json.JSONUtil; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.deepoove.poi.XWPFTemplate; import com.supervision.common.domain.R; import com.supervision.common.utils.StringUtils; import com.supervision.neo4j.dto.ResultDTO; @@ -26,13 +28,21 @@ import com.supervision.police.service.CaseStatusManageService; import com.supervision.police.service.ModelIndexService; import com.supervision.police.service.ModelService; import com.supervision.utils.SqlParserUtil; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.neo4j.driver.Driver; import org.neo4j.driver.Result; import org.neo4j.driver.Session; +import org.springframework.core.io.Resource; +import org.springframework.core.io.ResourceLoader; import org.springframework.stereotype.Service; +import java.io.IOException; +import java.io.InputStream; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.util.*; @Slf4j @@ -40,6 +50,8 @@ import java.util.*; @RequiredArgsConstructor public class ModelServiceImpl implements ModelService { + private final ResourceLoader resourceLoader; + private final Driver driver; private final ModelCaseMapper modelCaseMapper; @@ -172,6 +184,33 @@ public class ModelServiceImpl implements ModelService { } + @Override + public void exportCaseScoreDetail(String caseId, HttpServletResponse response) { + CaseScoreDetailDTO caseScoreDetailDTO = caseScoreDetail(caseId); + caseScoreDetailDTO.buildDesc(); + + // 加载模板 + Resource resource = resourceLoader.getResource("classpath:template/case_detail.docx"); + InputStream inputStream = null; + try { + response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document"); + response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(caseScoreDetailDTO.getCaseName()+".docx", StandardCharsets.UTF_8)); + inputStream = resource.getInputStream(); + XWPFTemplate template = XWPFTemplate.compile(inputStream).render(caseScoreDetailDTO); + template.writeAndClose(response.getOutputStream()); + } catch (IOException e) { + throw new RuntimeException(e); + }finally { + if (inputStream != null){ + try { + inputStream.close(); + } catch (IOException e) { + log.error("exportCaseScoreDetail: inputStream.close() error", e); + } + } + } + } + /** * 最终计算得分 */ diff --git a/src/main/resources/template/case_detail.docx b/src/main/resources/template/case_detail.docx new file mode 100644 index 0000000000000000000000000000000000000000..dd259a6aed26f96f8d012ddc48b76735a9ef7f81 GIT binary patch literal 12122 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 Srw;L*3_tmPKRHnR0{tHf%!S1O literal 0 HcmV?d00001