diff --git a/IRaCIS.Core.Application/Helper/CacheHelper.cs b/IRaCIS.Core.Application/Helper/CacheHelper.cs index 804ab7820..5d70a0928 100644 --- a/IRaCIS.Core.Application/Helper/CacheHelper.cs +++ b/IRaCIS.Core.Application/Helper/CacheHelper.cs @@ -71,6 +71,7 @@ public static class CacheKeys public static string TrialDataStoreType(Guid trialId) => $"TrialDataStoreType:{trialId}"; + public static string UserQCSkipTask(Guid userId) => $"UserSKipQCTask:{userId}"; } public static class CacheHelper diff --git a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs index 435464ab9..880a025dc 100644 --- a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs +++ b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs @@ -8,6 +8,7 @@ using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Infrastructure; using Medallion.Threading; using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using Org.BouncyCastle.Asn1.Cmp; @@ -1297,6 +1298,21 @@ namespace IRaCIS.Core.Application.Image.QA var isDistinguishType = trialConfig.IsIQCAutoNextTask && trialConfig.IsIQCAutoTaskDistinguishType; + if (inDto.IsSkipCurrentVisit) + { + string cacheKey = CacheKeys.UserQCSkipTask(_userInfo.UserRoleId); + + // 获取当前缓存中的访视Id集合(如果没有则创建空集合) + var skippedVisits = await _fusionCache.GetOrDefaultAsync>(cacheKey, new List()); + + // 如果当前访视Id不在集合中,则添加 + if (!skippedVisits.Contains(inDto.SubjectVisitId)) + { + skippedVisits.Add(inDto.SubjectVisitId); + await _fusionCache.SetAsync(cacheKey, skippedVisits, TimeSpan.FromMinutes(60)); + } + } + if (isDistinguishType == false) { //不区分任务类型,也要按照当前任务类型给,没找到,按照默认规则给任务 无质疑 普通质控任务 @@ -1351,10 +1367,13 @@ namespace IRaCIS.Core.Application.Image.QA .Select(t => new { t.IsUrgent, SubjectCode = t.Subject.Code, t.SubjectId, SubjectVisitId = t.Id, t.VisitNum, IshaveQCChallenge = t.QCChallengeList.Any(), t.SecondReviewState }) .OrderBy(t => t.IshaveQCChallenge).ThenBy(t => t.SecondReviewState).ThenBy(x => x.IsUrgent).ThenBy(x => x.SubjectCode).ThenBy(x => x.VisitNum).ToListAsync(); + + // 获取当前缓存中的访视Id集合(如果没有则创建空集合) + var skippedVisits = await _fusionCache.GetOrDefaultAsync>(CacheKeys.UserQCSkipTask(_userInfo.UserRoleId), new List() { inDto.SubjectVisitId }); //跳过当前访视 if (inDto.IsSkipCurrentVisit) - { - currentActionList = currentActionList.Where(t => t.SubjectVisitId != inDto.SubjectVisitId).ToList(); + { + currentActionList = currentActionList.Where(t => !skippedVisits.Contains(t.SubjectVisitId)).ToList(); } if (currentActionList.Count() > 0) @@ -1404,8 +1423,8 @@ namespace IRaCIS.Core.Application.Image.QA //跳过当前访视 if (inDto.IsSkipCurrentVisit) - { - visitList = visitList.Where(t => t.SubjectVisitId != inDto.SubjectVisitId).ToList(); + { + visitList = visitList.Where(t => !skippedVisits.Contains(t.SubjectVisitId)).ToList(); } var subjectVisit = visitList.FirstOrDefault(); @@ -1448,7 +1467,7 @@ namespace IRaCIS.Core.Application.Image.QA //跳过当前访视 if (inDto.IsSkipCurrentVisit) { - visitList = visitList.Where(t => t.SubjectVisitId != inDto.SubjectVisitId).ToList(); + visitList = visitList.Where(t => !skippedVisits.Contains(t.SubjectVisitId)).ToList(); } subjectVisit = visitList.FirstOrDefault();