using AutoMapper; using EasyCaching.Core; using EntityFrameworkCore.Triggered; using IRaCIS.Core.Application.Service; using IRaCIS.Core.Application.ViewModel; using IRaCIS.Core.Domain.Models; using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Infrastructure; using System.Linq.Expressions; namespace IRaCIS.Core.Application.Triggers { public class VisitTaskIbeforeTrigger : IBeforeSaveTrigger, IAfterSaveTrigger { private readonly IRepository _visitTaskRepository; private readonly IRepository _readingJudgeInfoRepository; public VisitTaskIbeforeTrigger( IRepository visitTaskRepository, IRepository readingJudgeInfoRepository) { _visitTaskRepository = visitTaskRepository; _readingJudgeInfoRepository = readingJudgeInfoRepository; } /// /// 因为维护状态先后顺序导致 裁判任务关联的 任务上的JudgeVisitTaskId==nulll 在这里需要重新设置下 /// /// /// /// public async Task AfterSave(ITriggerContext context, CancellationToken cancellationToken) { var visitTask = context.Entity; //裁判任务维护,当裁判任务受到影响的时候,需要清理任务上关联的裁判任务id if (context.ChangeType == ChangeType.Added && visitTask.ReadingCategory == ReadingCategory.Judge && visitTask.TaskState == TaskState.Effect) { var find = _readingJudgeInfoRepository.Where(t => t.JudgeTaskId == visitTask.Id).FirstOrDefault(); if (find != null) { var ids = new Guid[] { find.TaskIdOne, find.TaskIdTwo }; await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => ids.Contains(t.Id), u => new VisitTask() { JudgeVisitTaskId = visitTask.Id }); } } } public async Task BeforeSave(ITriggerContext context, CancellationToken cancellationToken) { var visitTask = context.Entity; //裁判任务维护,当裁判任务受到影响的时候,需要清理任务上关联的裁判任务id if (context.ChangeType == ChangeType.Modified) { if (visitTask.ReadingCategory == ReadingCategory.Judge && (visitTask.TaskState == TaskState.Adbandon || visitTask.TaskState == TaskState.HaveReturned)) { var find = _readingJudgeInfoRepository.Where(t => t.JudgeTaskId == visitTask.Id).FirstOrDefault(); if (find != null) { var ids = new Guid[] { find.TaskIdOne, find.TaskIdTwo }; await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => ids.Contains(t.Id), u => new VisitTask() { JudgeVisitTaskId = null }); } } } } } }