|
|
@@ -1706,7 +1706,6 @@ namespace OASystem.API.Controllers
|
|
|
return Ok(JsonView(true, "操作成功", view));
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/// <summary>
|
|
|
/// 已收账单上传文件
|
|
|
/// </summary>
|
|
|
@@ -1733,7 +1732,8 @@ namespace OASystem.API.Controllers
|
|
|
}
|
|
|
|
|
|
// 3. 检查团组信息
|
|
|
- var groupInfo = await _sqlSugar.Queryable<Grp_DelegationInfo>().FirstAsync(x => x.IsDel == 0 && x.Id == groupId);
|
|
|
+ var groupInfo = await _sqlSugar.Queryable<Grp_DelegationInfo>()
|
|
|
+ .FirstAsync(x => x.IsDel == 0 && x.Id == groupId);
|
|
|
if (groupInfo == null)
|
|
|
{
|
|
|
return Ok(JsonView(false, $"团组信息不存在!"));
|
|
|
@@ -1741,11 +1741,14 @@ namespace OASystem.API.Controllers
|
|
|
|
|
|
// 4. 创建文件存储目录
|
|
|
var groupDir = @$"{groupInfo.TeamName}_{groupInfo.Id}";
|
|
|
- var fileServerPath = AppSettingsHelper.Get("ReceivablesUploadFileBasePath") + @"/" + groupDir;
|
|
|
+ var fileServerPath = Path.Combine(AppSettingsHelper.Get("ReceivablesUploadFileBasePath"), groupDir);
|
|
|
if (!Directory.Exists(fileServerPath)) Directory.CreateDirectory(fileServerPath);
|
|
|
|
|
|
- // 5. 为文件生成安全文件名
|
|
|
- var uploadResults = new List<string>();
|
|
|
+ // 5. 获取已存在的文件路径列表(FrFilePaths 直接就是 List<string>)
|
|
|
+ var existingFilePaths = groupInfo.FrFilePaths ?? new List<string>();
|
|
|
+
|
|
|
+ // 6. 为文件生成安全文件名并上传
|
|
|
+ var newUploadResults = new List<string>();
|
|
|
foreach (var file in fileValidationResult.ValidFiles)
|
|
|
{
|
|
|
var safeFileName = GenerateSafeFileName(file.FileName, groupInfo);
|
|
|
@@ -1758,41 +1761,50 @@ namespace OASystem.API.Controllers
|
|
|
// 确保资源释放
|
|
|
using (var fileStream = new FileStream(finalSavePath, FileMode.Create, FileAccess.Write, FileShare.None, bufferSize: 4096, useAsync: true))
|
|
|
{
|
|
|
-
|
|
|
await file.CopyToAsync(fileStream);
|
|
|
-
|
|
|
- // 刷新缓冲区
|
|
|
await fileStream.FlushAsync();
|
|
|
}
|
|
|
|
|
|
- uploadResults.Add($"{groupDir}/{uniqueFileName}");
|
|
|
-
|
|
|
+ // 保存相对路径
|
|
|
+ var relativePath = $"{groupDir}/{uniqueFileName}";
|
|
|
+ newUploadResults.Add(relativePath);
|
|
|
}
|
|
|
|
|
|
- if (!uploadResults.Any())
|
|
|
+ if (!newUploadResults.Any())
|
|
|
{
|
|
|
return Ok(JsonView(false, "文件存储失败!"));
|
|
|
}
|
|
|
|
|
|
- // 5. 数据库存储路径
|
|
|
+ // 7. 合并新旧文件路径(累计上传)
|
|
|
+ var allFilePaths = new List<string>();
|
|
|
+ allFilePaths.AddRange(existingFilePaths); // 已存在的文件
|
|
|
+ allFilePaths.AddRange(newUploadResults); // 新上传的文件
|
|
|
+
|
|
|
+ // 去重(防止重复添加)
|
|
|
+ allFilePaths = allFilePaths.Distinct().ToList();
|
|
|
+
|
|
|
+ // 8. 数据库存储路径(更新为合并后的路径)
|
|
|
var upd = await _sqlSugar.Updateable<Grp_DelegationInfo>()
|
|
|
- .SetColumns(x => x.FrFilePaths == uploadResults)
|
|
|
+ .SetColumns(x => x.FrFilePaths == allFilePaths)
|
|
|
.Where(x => x.Id == groupId)
|
|
|
.ExecuteCommandAsync();
|
|
|
+
|
|
|
if (upd < 1)
|
|
|
{
|
|
|
return Ok(JsonView(false, "文件路径存储失败!"));
|
|
|
}
|
|
|
|
|
|
- // 返回上传结果
|
|
|
+ // 9. 返回上传结果(只返回本次上传的文件)
|
|
|
var url = AppSettingsHelper.Get("OfficeBaseUrl");
|
|
|
var pathPrefix = AppSettingsHelper.Get("ReceivablesUploadFileFtpPath");
|
|
|
- for (int i = 0; i < uploadResults.Count; i++)
|
|
|
+ var returnResults = new List<string>();
|
|
|
+
|
|
|
+ foreach (var relativePath in newUploadResults)
|
|
|
{
|
|
|
- uploadResults[i] = @$"{url}/{pathPrefix}/{uploadResults[i]}";
|
|
|
+ returnResults.Add($"{url}/{pathPrefix}/{relativePath}");
|
|
|
}
|
|
|
|
|
|
- return Ok(JsonView(true, "操作成功!", uploadResults));
|
|
|
+ return Ok(JsonView(true, $"操作成功!累计文件数: {allFilePaths.Count}"));
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|