namespace SimpleAdmin.Application; /// /// 实现候选人上传材料审核业务能力。 /// public class OnboardingMaterialReviewService : IOnboardingMaterialReviewService { private readonly SqlSugarScope _db; private readonly IConfigService _config; private readonly IOnboardingDataPermissionService _dataPermission; public OnboardingMaterialReviewService( IConfigService config, IOnboardingDataPermissionService dataPermission) { _db = DbContext.DB; _config = config; _dataPermission = dataPermission; } /// /// 审核单份候选人上传材料并记录审核意见。 /// 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().InSingleAsync(input.TaskMaterialId) ?? throw Oops.Bah("任务资料不存在"); var task = await _db.Queryable().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 async Task EnsureReviewer(ObOnboardingTask task) { await _dataPermission.EnsureCanManage( task.CreateUserId, OnboardingPermissionCodes.TaskManageAll, "入职任务"); if (await _dataPermission.CanManage(null, OnboardingPermissionCodes.TaskManageAll)) return; var config = await _config.GetByConfigKey(CateGoryConst.CONFIG_BIZ_DEFINE, "onboard.reviewer.userIds") ?? throw Oops.Bah("请配置入职审核人"); var reviewerIds = OnboardingReviewerConfigParser.Parse(config.ConfigValue, task.CompanyId); if (!reviewerIds.Contains(UserManager.UserId)) { throw Oops.Bah("您不是该入职任务的审核人"); } } }