diff --git a/IRaCIS.Core.API/Controllers/InspectionController.cs b/IRaCIS.Core.API/Controllers/InspectionController.cs
index 01e40ebcd..e5b986529 100644
--- a/IRaCIS.Core.API/Controllers/InspectionController.cs
+++ b/IRaCIS.Core.API/Controllers/InspectionController.cs
@@ -111,12 +111,12 @@ namespace IRaCIS.Core.API.Controllers
///
///
///
- [HttpPost, Route("Inspection/ReadingImageTask/SetOncologyReadingInfo")]
+ [HttpPost, Route("Inspection/ReadingImageTask/SubmitOncologyReadingInfo")]
[UnitOfWork]
- public async Task SetOncologyReadingInfo(DataInspectionDto opt)
+ public async Task SetOncologyReadingInfo(DataInspectionDto opt)
{
var singid = await _inspectionService.RecordSing(opt.SignInfo);
- var result = await _iReadingImageTaskService.SetOncologyReadingInfo(opt.Data);
+ var result = await _iReadingImageTaskService.SubmitOncologyReadingInfo(opt.Data);
await _inspectionService.CompletedSign(singid, result);
return result;
}
diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs
index 55ae58d02..d1a204b0d 100644
--- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs
@@ -24,6 +24,12 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public Guid VisitTaskId { get; set; }
}
+
+ public class SubmitOncologyReadingInfoInDto
+ {
+ public Guid OncologyTaskId { get; set; }
+ }
+
public class SubmitGlobalReadingInfoInDto
{
public Guid GlobalTaskId { get; set; }
@@ -118,6 +124,9 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
///
public string TrialEvaluationReason { get; set; } = string.Empty;
+ //任务阅片状态
+ public ReadingTaskState ReadingTaskState { get; set; }
+
public List OncologyVisits { get; set; } = new List();
}
diff --git a/IRaCIS.Core.Application/Service/Reading/Interface/IReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/Interface/IReadingImageTaskService.cs
index 2571865bf..01a1436e8 100644
--- a/IRaCIS.Core.Application/Service/Reading/Interface/IReadingImageTaskService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Interface/IReadingImageTaskService.cs
@@ -20,6 +20,6 @@ namespace IRaCIS.Core.Application.Contracts
Task SubmitGlobalReadingInfo(SubmitGlobalReadingInfoInDto inDto);
- Task SetOncologyReadingInfo(SetOncologyReadingInfoInDto inDto);
+ Task SubmitOncologyReadingInfo(SubmitOncologyReadingInfoInDto inDto);
}
}
\ No newline at end of file
diff --git a/IRaCIS.Core.Application/Service/Reading/ReadModuleService.cs b/IRaCIS.Core.Application/Service/Reading/ReadModuleService.cs
index b3d6bbd91..38f5a6a17 100644
--- a/IRaCIS.Core.Application/Service/Reading/ReadModuleService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ReadModuleService.cs
@@ -359,8 +359,8 @@ namespace IRaCIS.Application.Services
switch (readModuleData.ModuleType)
{
case ModuleTypeEnum.Global:
- var taskInfo = await _visitTaskRepository.FirstOrDefaultAsync(x => x.SourceSubjectVisitId == readModuleData.SubjectVisitId && x.ReadingTaskState == ReadingTaskState.HaveSigned);
- if (taskInfo != null)
+ var taskListInfo = await _visitTaskRepository.Where(x => x.SourceSubjectVisitId == readModuleData.SubjectVisitId&&x.TaskState==TaskState.Effect && x.ReadingTaskState == ReadingTaskState.HaveSigned).ToListAsync();
+ foreach (var taskInfo in taskListInfo)
{
await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand()
{
@@ -383,18 +383,33 @@ namespace IRaCIS.Application.Services
break;
case ModuleTypeEnum.Oncology:
- var globalModule = await _readModuleRepository.Where(x => x.SubjectId == readModuleData.SubjectId && x.SubjectVisitId == readModuleData.SubjectVisitId && x.ModuleType == ModuleTypeEnum.Global).FirstOrDefaultAsync();
+
+ var trialInfo = await _trialRepository.Where(x => x.Id == visit.TrialId).FirstNotNullAsync();
+
+ var globalModule = await _readModuleRepository.Where(x => x.SubjectId == readModuleData.SubjectId && x.SubjectVisitId == readModuleData.SubjectVisitId&& x.ModuleType == ModuleTypeEnum.Global).FirstOrDefaultAsync();
if (globalModule != null)
{
- var globalTaskInfo = await _visitTaskRepository.FirstOrDefaultAsync(x => x.SouceReadModuleId == globalModule.Id && x.ReadingTaskState == ReadingTaskState.HaveSigned);
- if (globalTaskInfo != null)
+ var globalTaskInfoList = await _visitTaskRepository.Where(x => x.SouceReadModuleId == globalModule.Id && x.TaskState == TaskState.Effect && x.ReadingTaskState == ReadingTaskState.HaveSigned).ToListAsync();
+
+ if (globalTaskInfoList.Count() > 0 && globalTaskInfoList.Count == (int)trialInfo.ReadingType)
{
- await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand()
+ var isAdd = false;
+ if (globalTaskInfoList[0].JudgeVisitTaskId == null)
{
- OriginalVisitId = globalTaskInfo.Id,
- ReadingCategory = GenerateTaskCategory.Oncology,
- TrialId = dto.TrialId,
- ReadingGenerataTaskList = new List() {
+ isAdd = true;
+ }
+ else
+ {
+ isAdd = await _visitTaskRepository.AnyAsync(x => x.Id == globalTaskInfoList[0].JudgeVisitTaskId && x.ReadingTaskState == ReadingTaskState.HaveSigned);
+ }
+ if (isAdd)
+ {
+ await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand()
+ {
+ OriginalVisitId = globalTaskInfoList[0].Id,
+ ReadingCategory = GenerateTaskCategory.Oncology,
+ TrialId = dto.TrialId,
+ ReadingGenerataTaskList = new List() {
new ReadingGenerataTaskDTO()
{
IsUrgent = readModuleData.IsUrgent ?? false,
@@ -405,8 +420,12 @@ namespace IRaCIS.Application.Services
ReadingCategory = ReadingCategory.Oncology,
}
}
- });
+ });
+ }
}
+
+
+
}
break;
}
diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs
index 0fe56dc4c..6186b51da 100644
--- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs
@@ -116,8 +116,9 @@ namespace IRaCIS.Application.Services
GetOncologyReadingInfoOutDto result = new GetOncologyReadingInfoOutDto() {
TrialEvaluationResult= trialCriterion.EvaluationResult,
- TrialEvaluationReason = trialCriterion.EvaluationReason,
+ TrialEvaluationReason = trialCriterion.EvaluationReason.IsNullOrEmpty()? "肿瘤学阅片评估原因请依据临床数据填写,在与影像学结果不一致时必填。": trialCriterion.EvaluationReason,
OncologyTaskId = inDto.VisitTaskId,
+ ReadingTaskState= taskInfo.ReadingTaskState,
};
// 先找到是R1还是R2的阅片 先找到全局阅片
@@ -1224,6 +1225,26 @@ namespace IRaCIS.Application.Services
}
+ ///
+ /// 提交肿瘤阅片结果
+ ///
+ ///
+ ///
+ [NonDynamicMethod]
+ public async Task SubmitOncologyReadingInfo(SubmitOncologyReadingInfoInDto inDto)
+ {
+ //var result = await this.SaveGlobalReadingInfo(inDto);
+
+ await FinishReadUpdateState(inDto.OncologyTaskId);
+ await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => x.Id == inDto.OncologyTaskId, x => new VisitTask()
+ {
+ ReadingTaskState = ReadingTaskState.HaveSigned,
+ SignTime = DateTime.Now,
+ });
+ await _visitTaskRepository.SaveChangesAsync();
+ return ResponseOutput.Ok(true);
+ }
+
///
/// 提交全局阅片结果
diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingPeriodSetService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingPeriodSetService.cs
index 3057529e3..6b40bf4a1 100644
--- a/IRaCIS.Core.Application/Service/Reading/ReadingPeriodSetService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ReadingPeriodSetService.cs
@@ -27,6 +27,7 @@ namespace IRaCIS.Application.Services
private readonly IRepository _readingPeriodSetRepository;
private readonly IRepository _readModuleRepository;
private readonly IRepository _visitStageRepository;
+ private readonly IRepository _trialRepository;
private readonly IRepository _visitTaskRepository;
private readonly IVisitTaskHelpeService _visitTaskHelpeService;
private readonly IRepository _readingPeriodPlanRepository;
@@ -38,6 +39,7 @@ namespace IRaCIS.Application.Services
IRepository ReadingPeriodSetRepository,
IRepository readModuleRepository,
IRepository visitStageRepository,
+ IRepository trialRepository,
IRepository visitTaskRepository,
IVisitTaskHelpeService visitTaskHelpeService,
IRepository readingPeriodPlanRepository,
@@ -49,6 +51,7 @@ namespace IRaCIS.Application.Services
_readingPeriodSetRepository = ReadingPeriodSetRepository;
this._readModuleRepository = readModuleRepository;
this._visitStageRepository = visitStageRepository;
+ this._trialRepository = trialRepository;
this._visitTaskRepository = visitTaskRepository;
this._visitTaskHelpeService = visitTaskHelpeService;
this._readingPeriodPlanRepository = readingPeriodPlanRepository;
@@ -341,7 +344,7 @@ namespace IRaCIS.Application.Services
{
case ReadingSetType.ImageReading:
- var taskInfoList = await _visitTaskRepository.Where(x => subjectVisitIds.Contains(x.SourceSubjectVisitId ?? default(Guid)) && x.ReadingTaskState == ReadingTaskState.HaveSigned).ToListAsync();
+ var taskInfoList = await _visitTaskRepository.Where(x => subjectVisitIds.Contains(x.SourceSubjectVisitId ?? default(Guid))&&x.TaskState==TaskState.Effect && x.ReadingTaskState == ReadingTaskState.HaveSigned).ToListAsync();
foreach (var item in taskInfoList)
{
@@ -371,30 +374,54 @@ namespace IRaCIS.Application.Services
break;
case ReadingSetType.TumorReading:
+
+
+ var trialInfo = await _trialRepository.Where(x => x.Id == readingPeriodSet.TrialId).FirstNotNullAsync();
+
var globalModuleIds = await _readModuleRepository.Where(x => subjectVisitIds.Contains(x.SubjectVisitId) && x.ModuleType == ModuleTypeEnum.Global).Select(x => x.Id).ToListAsync();
- var globalTaskInfo = await _visitTaskRepository.Where(x => globalModuleIds.Contains(x.SouceReadModuleId ?? default(Guid)) && x.ReadingTaskState == ReadingTaskState.HaveSigned).ToListAsync();
+ var globalTaskInfo = await _visitTaskRepository.Where(x => globalModuleIds.Contains(x.SouceReadModuleId ?? default(Guid)) && x.TaskState == TaskState.Effect && x.ReadingTaskState == ReadingTaskState.HaveSigned).GroupBy(x=> new { x.SouceReadModuleId }).Select(x =>
+ new {
+ SouceReadModuleId=x.Key.SouceReadModuleId,
+ Count=x.ToList().Count,
+ TaskId = x.Select(x=>x.Id).FirstOrDefault(),
+ ReadModuleId = x.Select(x => x.SouceReadModuleId).FirstOrDefault(),
+ JudgeTaskId = x.Select(x => x.JudgeVisitTaskId).FirstOrDefault(),
+ JudgeTaskResultId = x.Select(x => x.JudgeVisitTask.JudgeResultTaskId).FirstOrDefault(),
+ }).ToListAsync();
foreach (var item in globalTaskInfo)
{
- var readModule = readModules.Where(x => x.SubjectVisitId == item.SourceSubjectVisitId).FirstOrDefault();
- await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand()
+
+
+ if (item.Count == (int)trialInfo.ReadingType)
{
- OriginalVisitId = item.Id,
- ReadingCategory = GenerateTaskCategory.Oncology,
- TrialId = item.TrialId,
- ReadingGenerataTaskList = new List() {
- new ReadingGenerataTaskDTO()
- {
- IsUrgent = readModule.IsUrgent ?? false,
- SubjectId = readModule.SubjectId,
- VisitNum=readModule.VisitNum,
- ReadingName = readModule.ModuleName,
- ReadModuleId =readModule.Id,
- ReadingCategory = ReadingCategory.Oncology,
- }
+ if (item.JudgeTaskId == null || item.JudgeTaskResultId != null)
+ {
+ var readModule = readModules.Where(x => x.Id == item.ReadModuleId).FirstOrDefault();
+ await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand()
+ {
+ OriginalVisitId = item.TaskId,
+ ReadingCategory = GenerateTaskCategory.Oncology,
+ TrialId = readingPeriodSet.TrialId,
+ ReadingGenerataTaskList = new List() {
+ new ReadingGenerataTaskDTO()
+ {
+ IsUrgent = readModule.IsUrgent ?? false,
+ SubjectId = readModule.SubjectId,
+ VisitNum=readModule.VisitNum,
+ ReadingName = readModule.ModuleName,
+ ReadModuleId =readModule.Id,
+ ReadingCategory = ReadingCategory.Oncology,
+ }
}
- });
+ });
+ }
+
+ }
+
+
+
}
break;