using System; using System.Linq; using System.Threading.Tasks; using EasyCaching.Core; using IRaCIS.Core.Domain; using IRaCIS.Core.Infra.EFCore; using IRaCIS.Core.Domain.Models; using Microsoft.Extensions.Logging; using Quartz; using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Application.ViewModel; namespace IRaCIS.Application.Services.BackGroundJob { public class CancelTaskQuartZJob : IJob { private readonly IRepository _subjectRepository; private readonly ILogger _logger; private readonly IRepository _visitTaskRepository; public CancelTaskQuartZJob(IRepository subjectRepository, IEasyCachingProvider provider, ILogger logger, IRepository visitTaskRepository) { _subjectRepository = subjectRepository; _logger = logger; _visitTaskRepository = visitTaskRepository; } public async Task Execute(IJobExecutionContext context) { _logger.LogInformation($"开始执行QuartZ定时取消任务作业"); try { JobDataMap dataMap = context.JobDetail.JobDataMap; bool isInOrder = (bool)dataMap.Get("IsInOrder"); if (isInOrder) { Guid id = (Guid)dataMap.Get("SubjectId"); await _subjectRepository.UpdatePartialFromQueryAsync(t => t.Id ==id, u => new Subject() { ClaimUserId = null }, true); } else { Guid id = (Guid)dataMap.Get("VisitTaskId"); await _visitTaskRepository.UpdatePartialFromQueryAsync(t => t.Id == id, u => new VisitTask() { ClaimUserId = null }, true); } } catch (Exception e) { _logger.LogError($"QuartZ定时取消任务异常" + e.Message); } _logger.LogInformation("QuartZ定时取消任务作业结束"); } } }