From 661d3c6bd42733aeb0ca83aee72f6b83bef4de36 Mon Sep 17 00:00:00 2001
From: buhuazhen <hua100783@gmail.com>
Date: 星期三, 18 三月 2026 16:30:56 +0800
Subject: [PATCH] fix(sales): 修复导出合同文件名编码及空指针问题

---
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java |   25 +++++++++++++++++++------
 1 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
index eca1a1e..0e9f52f 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -3,7 +3,6 @@
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.date.LocalDateTimeUtil;
-import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.lang.Assert;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -25,7 +24,10 @@
 import com.ruoyi.common.enums.FileNameType;
 import com.ruoyi.common.enums.SaleEnum;
 import com.ruoyi.common.exception.base.BaseException;
-import com.ruoyi.common.utils.*;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.EnumUtil;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.security.LoginUser;
 import com.ruoyi.framework.web.domain.AjaxResult;
@@ -65,6 +67,8 @@
 import java.lang.reflect.Field;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -493,7 +497,13 @@
 
         // 濉啓涔欐柟淇℃伅
         ExportProcessContractVo.Customer partyB = new ExportProcessContractVo.Customer();
-        exportProcessContract.setPartyBClientName("");//todo@ 涔欐柟鍏徃鍚嶇О
+        exportProcessContract.setPartyBClientName("澶╂触闃冲厜褰╁嵃鑲′唤鏈夐檺鍏徃");
+        partyB.setBankName("鍐滆澶╂触姝︽竻寮�鍙戝尯鏀");
+        partyB.setBankCode("02061601040014681");
+        partyB.setTaxpayerIdentificationNumber("91120000562687393p");
+        partyB.setAddress("澶╂触姝︽竻鍖哄紑鍙戝尯娉夊窞鍖楄矾29鍙�");
+        partyB.setFax("022-82126666");
+        partyB.setPostCode("301700");
         exportProcessContract.setPartyB(partyB);
 
         // 濉啓鍟嗗搧淇℃伅
@@ -525,7 +535,7 @@
     }
 
     @SneakyThrows
-    private void exportProcessContractToWord(@NotNull ExportProcessContractVo exportProcessContract){
+    private void exportProcessContractToWord(@NotNull ExportProcessContractVo exportProcessContract) {
         // 纭繚 saleProducts 涓嶄负 null
         if (exportProcessContract.getSaleProducts() == null) {
             exportProcessContract.setSaleProducts(new ArrayList<>());
@@ -552,9 +562,12 @@
         HttpServletResponse response =
                 ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes()))
                         .getResponse();
+        String rawFileName = StrUtil.format("{}-{}鍚堝悓.docx",
+                exportProcessContract.getPartyAClientName(),
+                exportProcessContract.getCreateTime());
+        String encodedFileName = URLEncoder.encode(rawFileName, StandardCharsets.UTF_8.toString());
+        response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + encodedFileName);
         response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
-        response.setHeader("Content-Disposition", "attachment;filename="+ StrUtil.format("{}-{}",exportProcessContract.getPartyAClientName(),exportProcessContract.getCreateTime()) +"鍚堝悓.docx");
-
         template.write(response.getOutputStream());
         template.close();
         response.flushBuffer();

--
Gitblit v1.9.3