未结算报表zip导出设置

This commit is contained in:
hongchao 2025-11-06 17:19:59 +08:00
parent 78322f8e31
commit 69b5f3853d
1 changed files with 25 additions and 3 deletions

View File

@ -1907,8 +1907,15 @@ public class SltAgreementInfoController extends BaseController {
String fileName = "";
String unitName = "";
String projectName = "";
unitName = agreementInfo.getUnitName();
projectName = agreementInfo.getProjectName();
// 清理非法字符Windows文件名不允许: \ / : * ? " < > |
unitName = cleanFileName(agreementInfo.getUnitName());
projectName = cleanFileName(agreementInfo.getProjectName());
String agreementCode = cleanFileName(agreementInfo.getAgreementCode());
// 构建安全的文件名限制总长度不超过150字符
String rawFileName = agreementCode + "-" + unitName + "-" + projectName + "_结算单.xls";
fileName = rawFileName.length() > 150 ?
rawFileName.substring(0, 150) + ".xls" : rawFileName;
//租赁费用明细
BigDecimal totalCostLease = BigDecimal.valueOf(0.00);
@ -2055,7 +2062,7 @@ public class SltAgreementInfoController extends BaseController {
List<String> headersScrap = receiveDetailsHeader(4,1);
List<String> headersReduction = receiveDetailsHeader(5,1);
fileName = agreementInfo.getAgreementCode() + "-" + unitName + "-" + projectName+ "_结算单.xls" ;
// fileName = agreementInfo.getAgreementCode() + "-" + unitName + "-" + projectName+ "_结算单.xls" ;
// 导出单个Excel文件
String filePath = tempDir + File.separator + fileName;
try (FileOutputStream fos = new FileOutputStream(filePath)) {
@ -2093,5 +2100,20 @@ public class SltAgreementInfoController extends BaseController {
}
}
// 添加文件名清理工具方法
private String cleanFileName(String name) {
if (name == null) {
return "未知"; // 空值默认处理
}
// 1. 替换所有非法字符含控制字符制表符回车换行
String cleaned = name.replaceAll("[\\\\/:*?\"<>|\\t\\r\\n]", "_")
.trim(); // 去除首尾空格
// 2. 截断过长字符串单个部分最长50字符
if (cleaned.length() > 50) {
cleaned = cleaned.substring(0, 50) + "_";
}
return cleaned;
}
}