diff --git a/IRaCIS.Core.API/IRaCIS.Core.API.xml b/IRaCIS.Core.API/IRaCIS.Core.API.xml index 2566f292e..89b498ac5 100644 --- a/IRaCIS.Core.API/IRaCIS.Core.API.xml +++ b/IRaCIS.Core.API/IRaCIS.Core.API.xml @@ -213,6 +213,13 @@ + + + 提交阅片裁判表单 + + + + 配置 基础逻辑信息并确认 diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index a50597f06..4750e0ec5 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -10532,6 +10532,21 @@ 默认SegmentName + + + 仲裁模式 + + + + + 裁判规则 + + + + + 仲裁对象 + + 返回对象 @@ -11977,6 +11992,31 @@ 阅片期名称 + + + 类型 + + + + + 问题类型 + + + + + 字典code + + + + + 单位 + + + + + 答案组合 + + 标准ID @@ -12338,6 +12378,21 @@ 仲裁规则 + + + 仲裁模式 + + + + + 裁判规则 + + + + + 裁判任务生成 + + 需要 @@ -14368,6 +14423,11 @@ + + + 编辑裁判规则配置 + + 新增修改项目问题标准(项目) @@ -14469,11 +14529,22 @@ 阅片问题.标准 - + 阅片问题.标准 + + + 获取项目阅片标准各访视的裁判规则配置。 + 未配置规则的访视问题也会返回,供前端直接进行配置。 + + + + + 编辑项目阅片标准各访视的裁判规则配置。 + + 设置项目问题导出 @@ -14843,7 +14914,7 @@ - + IR影像阅片 @@ -15273,6 +15344,30 @@ + + + 获取单访视裁判答案 + + + + + + + 获取裁判表单 + + + + + 编辑裁判表单 + + + + + 提交裁判表单 + + + + 获取裁判阅片任务信息 @@ -15306,6 +15401,16 @@ + + + 应用访视裁判规则 以及剔除排除的问题 + + + + + 应用访视裁判规则 以及剔除排除的问题 + + 发送微信通知 diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs index 6f645b0d2..f8decefde 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs @@ -1093,6 +1093,8 @@ namespace IRaCIS.Core.Application.Contracts public bool? IsUrgent { get; set; } + public int? State { get; set; } + } @@ -1122,6 +1124,10 @@ namespace IRaCIS.Core.Application.Contracts public int? NoneDicomStudyCount { get; set; } public int? MarkNoneDicomStudyCount { get; set; } + + public DateTime? LatestDownloadTime { get; set; } + + public DateTime? LatestUploadTime { get; set; } } public class SubjectVisitMarkStudyDto diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index ac0217c6a..07f37c331 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -121,9 +121,9 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc var subjectId = inQuery.SubjectId; bool? isIRImageDownloaded = null; - if(inQuery.VisitTaskId != null) + if (inQuery.VisitTaskId != null) { - isIRImageDownloaded= _visitTaskRepository.Where(t => t.Id == inQuery.VisitTaskId).Select(t => t.IsIRImageDownloaded).FirstOrDefault(); + isIRImageDownloaded = _visitTaskRepository.Where(t => t.Id == inQuery.VisitTaskId).Select(t => t.IsIRImageDownloaded).FirstOrDefault(); } if (criterionInfo.IsReadingTaskViewInOrder == ReadingOrder.Random) @@ -331,7 +331,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc } - return ResponseOutput.Ok(list, new { TrialModality = criterionInfo.Modalitys, IsReadingTaskViewInOrder = criterionInfo.IsReadingTaskViewInOrder, IsIRImageDownloaded= isIRImageDownloaded }); + return ResponseOutput.Ok(list, new { TrialModality = criterionInfo.Modalitys, IsReadingTaskViewInOrder = criterionInfo.IsReadingTaskViewInOrder, IsIRImageDownloaded = isIRImageDownloaded }); } @@ -936,7 +936,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc var info = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId) .Select(t => new { t.IsImageFilter, t.CriterionType, t.TrialId, t.CriterionModalitys, t.IsReadingTaskViewInOrder }).FirstNotNullAsync(); - var config = await _subjectRepository.Where(t => t.Id == subjectId).Select(t => new { t.Trial.ImageFormatList, t.Trial.StudyNameList, t.Trial.IsShowStudyName, IsIRImageDownloaded= isIRImageDownloaded }).FirstOrDefaultAsync(); + var config = await _subjectRepository.Where(t => t.Id == subjectId).Select(t => new { t.Trial.ImageFormatList, t.Trial.StudyNameList, t.Trial.IsShowStudyName, IsIRImageDownloaded = isIRImageDownloaded }).FirstOrDefaultAsync(); //靶段标注上传,查看访视级别,上传绑定访视级别 @@ -1666,7 +1666,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc #endregion var query = from sv in _subjectRepository.Where(t => t.Id == inQuery.SubjectId).SelectMany(t => t.SubjectVisitList.Where(t => subjectVisitIdList.Contains(t.Id) && t.CheckState == CheckStateEnum.CVPassed)) - //一致性分析,导致查询出来两条数据 + //一致性分析,导致查询出来两条数据 join visitTask in _visitTaskRepository.Where(t => taskIdList.Contains(t.Id)) on sv.Id equals visitTask.SourceSubjectVisitId into cc from leftVisitTask in cc.DefaultIfEmpty() select new ImageDownloadDto() @@ -2456,6 +2456,23 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc SubjectCode = t.Code, IsUrgent = t.IsUrgent, + LatestDownloadTime = t.TrialImageDownloadList.Where(t => t.CreateUserRole.UserTypeEnum == UserTypeEnum.IndependentReviewer) + .OrderByDescending(t => t.CreateTime).Select(t => t.CreateTime).FirstOrDefault(), + + LatestUploadTime = t.SubjectVisitList + .Where(v => v.SubmitState == SubmitStateEnum.Submitted && v.CheckState == CheckStateEnum.CVPassed) + .SelectMany(v => v.TaskStudyList) + .Select(s => s.CreateTime) // 假设字段名为 CreateTime,根据实际情况调整 + .Union( + t.SubjectVisitList + .Where(v => v.SubmitState == SubmitStateEnum.Submitted && v.CheckState == CheckStateEnum.CVPassed) + .SelectMany(v => v.NoneDicomStudyList) + .Where(n => n.ImageLabelNoneDicomFileList.Any()) + .Select(s => s.CreateTime) // 假设字段名为 CreateTime,根据实际情况调整 + ) + .OrderByDescending(time => time) + .FirstOrDefault(), + VisitCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted && t.CheckState == CheckStateEnum.CVPassed).Count(), MarkIVUSVisitCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted && t.CheckState == CheckStateEnum.CVPassed).Count(t => t.NoneDicomStudyList.Where(t => t.Modality == "IVUS").SelectMany(c => c.ImageLabelNoneDicomFileList).Any()), @@ -2463,11 +2480,17 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc MarkOCTVisitCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted && t.CheckState == CheckStateEnum.CVPassed).Count(t => t.NoneDicomStudyList.Where(t => t.Modality == "OCT").SelectMany(c => c.ImageLabelNoneDicomFileList).Any()), DicomStudyCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted && t.CheckState == CheckStateEnum.CVPassed).SelectMany(t => t.StudyList).Count(), - //MarkDicomStudyCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).SelectMany(t => t.TaskStudyList).Count(), + + MarkDicomStudyCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted && t.CheckState == CheckStateEnum.CVPassed).SelectMany(t => t.TaskStudyList).Count(), NoneDicomStudyCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted && t.CheckState == CheckStateEnum.CVPassed).SelectMany(t => t.NoneDicomStudyList).Count(), - //MarkNoneDicomStudyCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).SelectMany(t => t.NoneDicomStudyList).Where(t => t.ImageLabelNoneDicomFileList.Any()).Count(), - }).ToPagedListAsync(inQuery); + + MarkNoneDicomStudyCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted && t.CheckState == CheckStateEnum.CVPassed).SelectMany(t => t.NoneDicomStudyList).Where(t => t.ImageLabelNoneDicomFileList.Any()).Count(), + }) + .WhereIf(inQuery.State == 0, t => t.LatestDownloadTime == null)//待处理 + .WhereIf(inQuery.State == 1, t => t.LatestDownloadTime != null && (t.DicomStudyCount + t.NoneDicomStudyCount) != (t.MarkDicomStudyCount + t.MarkNoneDicomStudyCount))//处理中 + .WhereIf(inQuery.State == 2, t => t.LatestDownloadTime != null && (t.DicomStudyCount + t.NoneDicomStudyCount) == (t.MarkDicomStudyCount + t.MarkNoneDicomStudyCount))//已完成 + .ToPagedListAsync(inQuery); return ResponseOutput.Ok(list); } diff --git a/IRaCIS.Core.Domain/Visit/Subject.cs b/IRaCIS.Core.Domain/Visit/Subject.cs index 5e6fbfc4d..ed8700578 100644 --- a/IRaCIS.Core.Domain/Visit/Subject.cs +++ b/IRaCIS.Core.Domain/Visit/Subject.cs @@ -7,6 +7,9 @@ namespace IRaCIS.Core.Domain.Models; public class Subject : BaseFullDeleteAuditEntity { #region 导航属性 + [JsonIgnore] + public List TrialImageDownloadList { get; set; } = new List(); + [JsonIgnore] public List TaskStudyList { get; set; } = new List();