From 9e8ab8acca52c893c5ec4cfbfed29e3eec5349d5 Mon Sep 17 00:00:00 2001
From: he <109787524@qq.com>
Date: Mon, 15 Jul 2024 14:13:14 +0800
Subject: [PATCH] =?UTF-8?q?=E8=B7=B3=E8=BF=87=E9=98=85=E7=89=87=E4=BF=AE?=
=?UTF-8?q?=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Reading/Dto/ReadingImageTaskViewModel.cs | 5 ++
.../ReadingImageTaskService.cs | 78 ++++++++++++++++++-
2 files changed, 80 insertions(+), 3 deletions(-)
diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs
index d0288c364..153e78ebb 100644
--- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs
@@ -1705,6 +1705,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
{
public Guid VisitTaskId { get; set; }
}
+
+ public class SetSkipReadingCacheInDto
+ {
+ public Guid VisitTaskId { get; set; }
+ }
public class GetNextTaskInDto
{
diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs
index fe00f7d4e..d67e162c0 100644
--- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs
@@ -22,6 +22,7 @@ using AutoMapper.QueryableExtensions;
using IRaCIS.Application.Contracts;
using IRaCIS.Core.Domain.Models;
using Microsoft.Extensions.Options;
+using System.Linq;
namespace IRaCIS.Application.Services
{
@@ -2700,7 +2701,44 @@ namespace IRaCIS.Application.Services
return ResponseOutput.Ok(true);
}
+ ///
+ /// 清除跳过阅片的缓存
+ ///
+ ///
+ [HttpPost]
+ public async Task ClearSkipReadingCache()
+ {
+ var clearSkipReadingCacheKey = _userInfo.Id.ToString() + "SkipReadingCache";
+ _provider.Remove(clearSkipReadingCacheKey);
+ return true;
+ }
+ ///
+ /// 设置跳过阅片的缓存
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task SetSkipReadingCache(SetSkipReadingCacheInDto inDto )
+ {
+ var clearSkipReadingCacheKey = _userInfo.Id.ToString() + "SkipReadingCache";
+ var clearSkipReadingCache = _provider.Get(clearSkipReadingCacheKey).Value;
+ if (clearSkipReadingCache == null|| clearSkipReadingCache==string.Empty)
+ {
+ List cacheIds = new List();
+ cacheIds.Add(inDto.VisitTaskId);
+
+ _provider.Set(clearSkipReadingCacheKey, JsonConvert.SerializeObject(cacheIds), TimeSpan.FromHours(24));
+ }
+ else
+ {
+ List? cacheIds=JsonConvert.DeserializeObject>(clearSkipReadingCache);
+ cacheIds.Add(inDto.VisitTaskId);
+ _provider.Set(clearSkipReadingCacheKey, JsonConvert.SerializeObject(cacheIds), TimeSpan.FromHours(24));
+ }
+
+ return true;
+ }
///
@@ -2728,6 +2766,19 @@ namespace IRaCIS.Application.Services
var trialReadingCriterion = await _readingQuestionCriterionTrialRepository.FindAsync(trialReadingCriterionId ?? Guid.Empty);
+
+ #region 跳过阅片
+ var clearSkipReadingCacheKey = _userInfo.Id.ToString() + "SkipReadingCache";
+ var clearSkipReadingCache = _provider.Get(clearSkipReadingCacheKey).Value;
+ List cacheSkipIds = new List();
+ if (clearSkipReadingCache != null && clearSkipReadingCache != string.Empty)
+ {
+ cacheSkipIds = JsonConvert.DeserializeObject>(clearSkipReadingCache);
+ }
+ #endregion
+
+
+
if (inDto.VisitTaskId != null)
{
task = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Select(x => new GetReadingTaskDto()
@@ -2746,6 +2797,7 @@ namespace IRaCIS.Application.Services
trialReadingCriterionId = task.TrialReadingCriterionId;
}
+ // 有序
else if (inDto.SubjectId != null && trialReadingCriterion.IsReadingTaskViewInOrder == ReadingOrder.InOrder)
{
var subjectTaskList = (await _visitTaskService.GetSubjectReadingIQueryable(new GetReadingIQueryableInDto()
@@ -2766,14 +2818,22 @@ namespace IRaCIS.Application.Services
var subjectIndex = subjectTaskList.Where(x => x.SubjectId == inDto.SubjectId && x.SubjectCode == inDto.SubjectCode).Select(x => x.Index).FirstOrDefault();
- var currentSubject = subjectTaskList.Where(x => x.Index >= subjectIndex && !x.ExistReadingApply).OrderBy(x => x.Index).FirstOrDefault();
+
+ var currentSubject = subjectTaskList.Where(x => x.Index >= subjectIndex && !x.ExistReadingApply)
+ // 排除跳过的
+ .Where(x=> x.UnReadCanReadTaskList.Select(y => y.Id).Except(cacheSkipIds).Count()>0)
+ .OrderBy(x => x.Index).FirstOrDefault();
+
if (currentSubject == null)
{
throw new BusinessValidationFailedException(_localizer["ReadingImage_TaskFinish"], ApiResponseCodeEnum.CloseCurrentWindows);
}
- task = currentSubject.UnReadCanReadTaskList.Select(x => new GetReadingTaskDto()
+ task = currentSubject.UnReadCanReadTaskList
+ // 排除跳过的
+ .Where(x=> !cacheSkipIds.Contains(x.Id))
+ .Select(x => new GetReadingTaskDto()
{
ReadingCategory = x.ReadingCategory,
SubjectCode = currentSubject.SubjectCode,
@@ -2789,8 +2849,12 @@ namespace IRaCIS.Application.Services
}
+ // 受试者无序
else if (inDto.SubjectId != null && trialReadingCriterion.IsReadingTaskViewInOrder == ReadingOrder.SubjectRandom)
{
+
+
+
var subjectTaskList = (await _visitTaskService.GetSubjectReadingIQueryable(new GetReadingIQueryableInDto()
{
TrialId = inDto.TrialId,
@@ -2802,6 +2866,11 @@ namespace IRaCIS.Application.Services
})).CurrentPageData;
+
+ subjectTaskList = subjectTaskList
+ // 排除跳过的
+ .Where(x => x.UnReadCanReadTaskList.Select(y => y.Id).Except(cacheSkipIds).Count() > 0).ToList();
+
if (subjectTaskList.Count() == 0)
{
throw new BusinessValidationFailedException(_localizer["ReadingImage_TaskFinish"], ApiResponseCodeEnum.CloseCurrentWindows);
@@ -2829,11 +2898,14 @@ namespace IRaCIS.Application.Services
}).FirstOrDefaultAsync();
}
+ // 完全随机
else
{
var query = _visitTaskRepository.Where(x => x.TrialId == inDto.TrialId && x.TrialReadingCriterionId == trialReadingCriterionId && x.ReadingTaskState != ReadingTaskState.HaveSigned && x.DoctorUserId == _userInfo.Id
&& x.TrialReadingCriterionId == trialReadingCriterionId
- && x.TaskState == TaskState.Effect);
+ && x.TaskState == TaskState.Effect)
+ // 排除跳过的
+ .Where(x => !cacheSkipIds.Contains(x.Id));
var count = await query.CountAsync();
if (count == 0)
{