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();