diff --git a/SimpleAdmin.Application/Services/Onboarding/ContractDocument/OnboardingContractDocumentService.cs b/SimpleAdmin.Application/Services/Onboarding/ContractDocument/OnboardingContractDocumentService.cs index 2a1b052..66fbf6c 100644 --- a/SimpleAdmin.Application/Services/Onboarding/ContractDocument/OnboardingContractDocumentService.cs +++ b/SimpleAdmin.Application/Services/Onboarding/ContractDocument/OnboardingContractDocumentService.cs @@ -376,8 +376,19 @@ public class OnboardingContractDocumentService : IOnboardingContractDocumentServ item => item.VariableValue ?? string.Empty, StringComparer.OrdinalIgnoreCase)); var generatedAt = DateTime.Now; - // 在文件名中加入生成批次,避免手机系统把同名的新合同误认为历史下载文件。 - var name = $"{task.TaskNo}_{contract.ContractName}_{generatedAt:yyyyMMddHHmmssfff}.docx"; + var employeeInfo = await _db.Queryable() + .FirstAsync(item => item.TaskId == task.Id); + var employeeName = string.IsNullOrWhiteSpace(employeeInfo?.EmployeeName) + ? "新员工" + : employeeInfo.EmployeeName.Trim(); + var docType = string.IsNullOrWhiteSpace(contract.ContractType) + ? (string.IsNullOrWhiteSpace(contract.ContractName) ? "签署材料" : contract.ContractName.Trim()) + : contract.ContractType.Trim(); + var invalidChars = global::System.IO.Path.GetInvalidFileNameChars(); + var safeEmployeeName = new string(employeeName.Select(character => invalidChars.Contains(character) ? '_' : character).ToArray()); + var safeDocType = new string(docType.Select(character => invalidChars.Contains(character) ? '_' : character).ToArray()); + // 按照规范:编号_员工姓名_文档类型.docx + var name = $"{task.TaskNo}_{safeEmployeeName}_{safeDocType}.docx"; var fileId = await _fileService.StoreGeneratedFile( SysDictConst.FILE_ENGINE_ALIYUN_OSS, name,