namespace SimpleAdmin.Application; public class OnboardingMaterialReviewService : IOnboardingMaterialReviewService { private readonly ISqlSugarClient _db; private readonly IConfigService _config; public OnboardingMaterialReviewService(ISqlSugarClient db, IConfigService config) { _db = db; _config = config; } public async Task Review(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) { var config = await _config.GetByConfigKey(CateGoryConst.CONFIG_BIZ_DEFINE, "onboard.reviewer.userIds") ?? throw Oops.Bah("请配置入职审核人"); using var configJson = global::System.Text.Json.JsonDocument.Parse(config.ConfigValue); var reviewerIds = new List(); if (configJson.RootElement.TryGetProperty("all", out var allReviewers)) { reviewerIds.AddRange(allReviewers.EnumerateArray().Select(item => item.GetInt64())); } if (configJson.RootElement.TryGetProperty("company", out var companyReviewers) && companyReviewers.TryGetProperty(task.CompanyId.ToString(), out var reviewers)) { reviewerIds.AddRange(reviewers.EnumerateArray().Select(item => item.GetInt64())); } if (!reviewerIds.Contains(UserManager.UserId)) { throw Oops.Bah("您不是该入职任务的审核人"); } } }