using EntityFrameworkCore.Triggered; using IRaCIS.Core.Domain.Share; namespace IRaCIS.Core.Application.Triggers { //访视 质疑状态 触发修改 public class ChallengeStateTrigger : IAfterSaveTrigger { private readonly IRepository _repository; public ChallengeStateTrigger(IRepository repository) { _repository = repository; } public async Task AfterSave(ITriggerContext context, CancellationToken cancellationToken) { var subjectVisitId = context.Entity.SubjectVisitId; ChallengeStateEnum subjectVisitChallengeState = default; var closedStateList = await _repository.Where(t => t.SubjectVisitId == subjectVisitId).Select(t => t.IsClosed).ToListAsync(); if (closedStateList.Count == 0) { subjectVisitChallengeState = ChallengeStateEnum.No; } else if (closedStateList.All(t => t is true)) { subjectVisitChallengeState = ChallengeStateEnum.HaveAndAllClosed; } else { subjectVisitChallengeState = ChallengeStateEnum.HaveAndHaveNotClosed; } await _repository.BatchUpdateAsync(t => t.Id == subjectVisitId, u => new SubjectVisit() { ChallengeState = subjectVisitChallengeState }); } } }