using IRaCIS.Core.Infra.EFCore; using Microsoft.Extensions.Logging; namespace IRaCIS.Core.Application.BackGroundJob { public interface IObtainTaskAutoCancelJob { Task CancelQCObtaion(Guid subjectVisitId,DateTime startTime); } public class ObtainTaskAutoCancelJob : IObtainTaskAutoCancelJob { private readonly IRepository<SubjectVisit> _subjectVisitRepository; private readonly ILogger<ObtainTaskAutoCancelJob> _logger; public ObtainTaskAutoCancelJob(IRepository<SubjectVisit> subjectVisitRepository, ILogger<ObtainTaskAutoCancelJob> logger) { _subjectVisitRepository = subjectVisitRepository; _logger = logger; } public async Task CancelQCObtaion(Guid subjectVisitId, DateTime startTime) { try { var dbSubjectVisit = await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId).IfNullThrowException(); dbSubjectVisit.IsTake = false; dbSubjectVisit.CurrentActionUserId = null; dbSubjectVisit.CurrentActionUserExpireTime = null; var success = await _subjectVisitRepository.SaveChangesAsync(); _logger.LogWarning($"任务建立时间:{startTime} 取消时间:{DateTime.Now} 取消 受试者访视:{ subjectVisitId }success:{success}"); } catch (Exception e) { _logger.LogError("hangfire 定时任务执行失败" + e.Message); } } } }