irc-netcore-api/IRaCIS.Core.Application/Triggers/VisitTaskIbeforeTrigger.cs

72 lines
3.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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<VisitTask>, IAfterSaveTrigger<VisitTask>
{
private readonly IRepository<VisitTask> _visitTaskRepository;
private readonly IRepository<ReadingJudgeInfo> _readingJudgeInfoRepository;
public VisitTaskIbeforeTrigger(
IRepository<VisitTask> visitTaskRepository, IRepository<ReadingJudgeInfo> readingJudgeInfoRepository)
{
_visitTaskRepository = visitTaskRepository;
_readingJudgeInfoRepository = readingJudgeInfoRepository;
}
/// <summary>
/// 因为维护状态先后顺序导致 裁判任务关联的 任务上的JudgeVisitTaskId==nulll 在这里需要重新设置下
/// </summary>
/// <param name="context"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public async Task AfterSave(ITriggerContext<VisitTask> 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<VisitTask> 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 });
}
}
}
}
}
}