Files
OnboardXAdmin/SimpleAdmin.Application/Services/Onboarding/MaterialReview/OnboardingMaterialReviewService.cs
T
2026-09-18 20:44:57 +08:00

63 lines
2.1 KiB
C#

namespace SimpleAdmin.Application;
/// <summary>
/// 实现候选人上传材料审核业务能力。
/// </summary>
public class OnboardingMaterialReviewService : IOnboardingMaterialReviewService
{
private readonly SqlSugarScope _db;
private readonly IOnboardingDataPermissionService _dataPermission;
public OnboardingMaterialReviewService(
IOnboardingDataPermissionService dataPermission)
{
_db = DbContext.DB;
_dataPermission = dataPermission;
}
/// <summary>
/// 审核单份候选人上传材料并记录审核意见。
/// </summary>
public async Task Review(OnboardingMaterialReviewInput input)
{
await OnboardingConcurrency.RunMaterial(_db, input.TaskMaterialId, () => ReviewCore(input));
}
private async Task ReviewCore(OnboardingMaterialReviewInput input)
{
if (input.ReviewStatus != TaskMaterialReviewStatus.Passed
&& input.ReviewStatus != TaskMaterialReviewStatus.NeedSupplement)
{
throw Oops.Bah("资料审核状态不正确");
}
if (input.ReviewStatus == TaskMaterialReviewStatus.NeedSupplement
&& string.IsNullOrWhiteSpace(input.ReviewRemark))
{
throw Oops.Bah("请填写需补充原因");
}
var material = await _db.Queryable<ObTaskMaterial>().InSingleAsync(input.TaskMaterialId)
?? throw Oops.Bah("任务资料不存在");
var task = await _db.Queryable<ObOnboardingTask>().InSingleAsync(material.TaskId)
?? throw Oops.Bah("入职任务不存在");
if (task.TaskStatus != OnboardingTaskStatus.Reviewing)
{
throw Oops.Bah("当前任务不在审核中");
}
await EnsureReviewer(task);
material.ReviewStatus = input.ReviewStatus;
material.ReviewRemark = input.ReviewRemark;
await _db.Updateable(material).ExecuteCommandAsync();
}
private Task EnsureReviewer(ObOnboardingTask task)
{
return _dataPermission.EnsureCanManage(
task.CreateUserId,
OnboardingPermissionCodes.TaskManageAll,
"入职任务");
}
}