This commit is contained in:
fuenmao
2026-08-26 15:30:31 +08:00
parent 9ae5e0bc54
commit db3d58bc99
16 changed files with 565 additions and 39 deletions
@@ -24,4 +24,9 @@ public class OnboardingMaterialUploadValidationInput
/// 待上传文件大小,单位为字节。
/// </summary>
public long FileLength { get; set; }
/// <summary>
/// 需要重新上传并替换的任务材料记录 Id;为空时按新增数量校验。
/// </summary>
public long? TaskMaterialId { get; set; }
}
@@ -53,6 +53,11 @@ public class OnboardingSaveMaterialInput
/// 系统文件 Id。
/// </summary>
public long FileId { get; set; }
/// <summary>
/// 需要重新上传并替换的任务材料记录 Id;为空时新增材料。
/// </summary>
public long? TaskMaterialId { get; set; }
}
/// <summary>
@@ -39,6 +39,20 @@ public class OnboardingPublicSubmissionService : IOnboardingPublicSubmissionServ
var existingMaterials = await _db.Queryable<ObTaskMaterial>()
.Where(item => item.TaskId == task.Id && item.MaterialTypeId == input.MaterialTypeId)
.ToListAsync();
if (input.TaskMaterialId.HasValue)
{
var replacement = existingMaterials.FirstOrDefault(
item => item.Id == input.TaskMaterialId.Value)
?? throw Oops.Bah("需要重新上传的材料不存在");
replacement.FileId = input.FileId;
replacement.SubmitRound = task.SubmitCount + 1;
replacement.UploadedAt = DateTime.Now;
replacement.ReviewStatus = TaskMaterialReviewStatus.Pending;
replacement.ReviewRemark = null;
await _db.Updateable(replacement).ExecuteCommandAsync();
return;
}
var supplementMaterial = existingMaterials.FirstOrDefault(
item => item.ReviewStatus == TaskMaterialReviewStatus.NeedSupplement);
if (supplementMaterial != null)
@@ -184,6 +198,16 @@ public class OnboardingPublicSubmissionService : IOnboardingPublicSubmissionServ
var materials = await _db.Queryable<ObTaskMaterial>()
.Where(item => item.TaskId == task.Id && item.MaterialTypeId == input.MaterialTypeId)
.ToListAsync();
if (input.TaskMaterialId.HasValue)
{
var replacementExists = materials.Any(
item => item.Id == input.TaskMaterialId.Value);
if (!replacementExists)
throw Oops.Bah("需要重新上传的材料不存在");
return;
}
var canReplaceSupplement = materials.Any(
item => item.ReviewStatus == TaskMaterialReviewStatus.NeedSupplement);
if (materials.Count >= requirement.MaxFileCount && !canReplaceSupplement)
@@ -246,4 +270,4 @@ public class OnboardingPublicSubmissionService : IOnboardingPublicSubmissionServ
return task;
}
}
}