From 56fe897d3e06bfa1e1105980d0044e6e67b2a484 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期五, 23 十月 2026 17:44:20 +0800
Subject: [PATCH] feat(report): 实现浏览器内报告DOCX编辑功能
---
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsReportServiceImpl.java | 42 ++++++++++++++++++++++++++++++++----------
1 files changed, 32 insertions(+), 10 deletions(-)
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsReportServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsReportServiceImpl.java
index f8e1376..8401156 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsReportServiceImpl.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsReportServiceImpl.java
@@ -231,8 +231,6 @@
info.setViewStatus(false);
info.setJumpPath(MenuJumpPathConstants.REPORT_PREPARATION);
informationNotificationService.addInformationNotification(info);
- String primaryReportUrl = getPrimaryReportUrl(insReport);
-
// 鍒ゆ柇鏄惁鏄師鏉愭枡 闇�瑕佹浛鎹�****鎴愪緵搴斿晢
IfsInventoryQuantity one = ifsInventoryQuantityMapper.selectOne(new LambdaQueryWrapper<IfsInventoryQuantity>()
.eq(IfsInventoryQuantity::getId, order.getIfsInventoryId()));
@@ -253,9 +251,7 @@
}};
writeMarksToReportFiles(insReport, writeMarks);
- // 淇敼涓存椂pdf
- String tempUrlPdf = wordToPdfTemp(primaryReportUrl.replace("/word", wordUrl));
- insReport.setTempUrlPdf("/word/" + tempUrlPdf);
+ refreshTemporaryPreviews(insReport);
insReportMapper.updateById(insReport);
@@ -383,16 +379,13 @@
info.setViewStatus(false);
info.setJumpPath(MenuJumpPathConstants.REPORT_PREPARATION);
informationNotificationService.addInformationNotification(info);
- String primaryReportUrl = getPrimaryReportUrl(insReport);
Map<String, Object> examineMarks = new HashMap<String, Object>() {{
put("examineUrl", ReportSignaturePictureUtils.create(imgUrl, signatureUrl));
put("examineDateUrl", Pictures.ofStream(DateImageUtil.createDateImage(null)).create());
}};
writeMarksToReportFiles(insReport, examineMarks);
- // 淇敼涓存椂pdf
- String tempUrlPdf = wordToPdfTemp(primaryReportUrl.replace("/word", wordUrl));
- insReport.setTempUrlPdf("/word/" + tempUrlPdf);
+ refreshTemporaryPreviews(insReport);
// 鍙戦�佷紒涓氬井淇¢�氱煡(閫氱煡鎵瑰噯浜哄鎵�)
threadPoolTaskExecutor.execute(() -> {
@@ -728,6 +721,30 @@
.collect(Collectors.toList());
}
+ private void refreshTemporaryPreviews(InsReport report) {
+ String primaryPdf = wordToPdfTemp(getPrimaryReportUrl(report).replace("/word", wordUrl));
+ if (StringUtils.isBlank(primaryPdf)) {
+ throw new ErrorException("妫�娴嬫姤鍛婇瑙堢敓鎴愬け璐�");
+ }
+ report.setTempUrlPdf("/word/" + primaryPdf);
+ if (StringUtils.isNotBlank(report.getInspectionUrl())) {
+ String inspectionPdf = wordToPdfTemp(report.getInspectionUrl().replace("/word", wordUrl));
+ if (StringUtils.isBlank(inspectionPdf)) {
+ throw new ErrorException("妫�楠屾姤鍛婇瑙堢敓鎴愬け璐�");
+ }
+ report.setInspectionTempUrlPdf("/word/" + inspectionPdf);
+ }
+ }
+
+ @Override
+ public String prepareEditedReportPreview(String absoluteDocxPath) {
+ String pdfName = wordToPdfTemp(absoluteDocxPath);
+ if (StringUtils.isBlank(pdfName)) {
+ throw new ErrorException("鎶ュ憡棰勮鐢熸垚澶辫触");
+ }
+ return "/word/" + pdfName;
+ }
+
private void writeMarksToReportFiles(InsReport report, Map<String, Object> marks) {
for (String reportUrl : getApprovalReportUrls(report)) {
wordInsertUrl(marks, reportUrl.replace("/word", wordUrl));
@@ -804,7 +821,12 @@
throw new ErrorException("鎶ュ憡鏂囦欢涓嶅瓨鍦紝璇疯仈绯荤鐞嗗憳");
}
try {
- String filename = file.getFileName().toString();
+ // 鐗╃悊鏂囦欢鍙兘鏄� reviewed/edited UUID锛涘鐢ㄦ埛濮嬬粓浣跨敤涓氬姟鎶ュ憡缂栧彿銆�
+ String reportNumber = StringUtils.isBlank(report.getCode()) ? "鎶ュ憡" : report.getCode();
+ reportNumber = reportNumber.replaceAll("[\\\\/:*?\"<>|\\p{Cntrl}]", "-").trim();
+ String suffix = StringUtils.isNotBlank(report.getInspectionUrl())
+ ? (Objects.equals(reportType, INSPECTION_REPORT) ? "-妫�楠屾姤鍛�" : "-妫�娴嬫姤鍛�") : "";
+ String filename = reportNumber + suffix + ".docx";
String encodedName = URLEncoder.encode(filename, "UTF-8").replace("+", "%20");
response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + encodedName);
--
Gitblit v1.9.3