Uat_Study
he 2022-08-01 18:01:41 +08:00
parent 391a5f906f
commit bc69bb1b43
6 changed files with 110 additions and 34 deletions

View File

@ -111,12 +111,12 @@ namespace IRaCIS.Core.API.Controllers
/// </summary> /// </summary>
/// <param name="opt"></param> /// <param name="opt"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost, Route("Inspection/ReadingImageTask/SetOncologyReadingInfo")] [HttpPost, Route("Inspection/ReadingImageTask/SubmitOncologyReadingInfo")]
[UnitOfWork] [UnitOfWork]
public async Task<IResponseOutput> SetOncologyReadingInfo(DataInspectionDto<SetOncologyReadingInfoInDto> opt) public async Task<IResponseOutput> SetOncologyReadingInfo(DataInspectionDto<SubmitOncologyReadingInfoInDto> opt)
{ {
var singid = await _inspectionService.RecordSing(opt.SignInfo); 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); await _inspectionService.CompletedSign(singid, result);
return result; return result;
} }

View File

@ -24,6 +24,12 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public Guid VisitTaskId { get; set; } public Guid VisitTaskId { get; set; }
} }
public class SubmitOncologyReadingInfoInDto
{
public Guid OncologyTaskId { get; set; }
}
public class SubmitGlobalReadingInfoInDto public class SubmitGlobalReadingInfoInDto
{ {
public Guid GlobalTaskId { get; set; } public Guid GlobalTaskId { get; set; }
@ -118,6 +124,9 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
/// </summary> /// </summary>
public string TrialEvaluationReason { get; set; } = string.Empty; public string TrialEvaluationReason { get; set; } = string.Empty;
//任务阅片状态
public ReadingTaskState ReadingTaskState { get; set; }
public List<OncologyVisitTaskInfo> OncologyVisits { get; set; } = new List<OncologyVisitTaskInfo>(); public List<OncologyVisitTaskInfo> OncologyVisits { get; set; } = new List<OncologyVisitTaskInfo>();
} }

View File

@ -20,6 +20,6 @@ namespace IRaCIS.Core.Application.Contracts
Task<IResponseOutput> SubmitGlobalReadingInfo(SubmitGlobalReadingInfoInDto inDto); Task<IResponseOutput> SubmitGlobalReadingInfo(SubmitGlobalReadingInfoInDto inDto);
Task<IResponseOutput> SetOncologyReadingInfo(SetOncologyReadingInfoInDto inDto); Task<IResponseOutput> SubmitOncologyReadingInfo(SubmitOncologyReadingInfoInDto inDto);
} }
} }

View File

@ -359,8 +359,8 @@ namespace IRaCIS.Application.Services
switch (readModuleData.ModuleType) switch (readModuleData.ModuleType)
{ {
case ModuleTypeEnum.Global: case ModuleTypeEnum.Global:
var taskInfo = await _visitTaskRepository.FirstOrDefaultAsync(x => x.SourceSubjectVisitId == readModuleData.SubjectVisitId && x.ReadingTaskState == ReadingTaskState.HaveSigned); var taskListInfo = await _visitTaskRepository.Where(x => x.SourceSubjectVisitId == readModuleData.SubjectVisitId&&x.TaskState==TaskState.Effect && x.ReadingTaskState == ReadingTaskState.HaveSigned).ToListAsync();
if (taskInfo != null) foreach (var taskInfo in taskListInfo)
{ {
await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand() await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand()
{ {
@ -383,15 +383,30 @@ namespace IRaCIS.Application.Services
break; break;
case ModuleTypeEnum.Oncology: case ModuleTypeEnum.Oncology:
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(); var globalModule = await _readModuleRepository.Where(x => x.SubjectId == readModuleData.SubjectId && x.SubjectVisitId == readModuleData.SubjectVisitId&& x.ModuleType == ModuleTypeEnum.Global).FirstOrDefaultAsync();
if (globalModule != null) if (globalModule != null)
{ {
var globalTaskInfo = await _visitTaskRepository.FirstOrDefaultAsync(x => x.SouceReadModuleId == globalModule.Id && x.ReadingTaskState == ReadingTaskState.HaveSigned); var globalTaskInfoList = await _visitTaskRepository.Where(x => x.SouceReadModuleId == globalModule.Id && x.TaskState == TaskState.Effect && x.ReadingTaskState == ReadingTaskState.HaveSigned).ToListAsync();
if (globalTaskInfo != null)
if (globalTaskInfoList.Count() > 0 && globalTaskInfoList.Count == (int)trialInfo.ReadingType)
{
var isAdd = false;
if (globalTaskInfoList[0].JudgeVisitTaskId == null)
{
isAdd = true;
}
else
{
isAdd = await _visitTaskRepository.AnyAsync(x => x.Id == globalTaskInfoList[0].JudgeVisitTaskId && x.ReadingTaskState == ReadingTaskState.HaveSigned);
}
if (isAdd)
{ {
await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand() await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand()
{ {
OriginalVisitId = globalTaskInfo.Id, OriginalVisitId = globalTaskInfoList[0].Id,
ReadingCategory = GenerateTaskCategory.Oncology, ReadingCategory = GenerateTaskCategory.Oncology,
TrialId = dto.TrialId, TrialId = dto.TrialId,
ReadingGenerataTaskList = new List<ReadingGenerataTaskDTO>() { ReadingGenerataTaskList = new List<ReadingGenerataTaskDTO>() {
@ -408,6 +423,10 @@ namespace IRaCIS.Application.Services
}); });
} }
} }
}
break; break;
} }
var res = await _readModuleRepository.SaveChangesAsync(); var res = await _readModuleRepository.SaveChangesAsync();

View File

@ -116,8 +116,9 @@ namespace IRaCIS.Application.Services
GetOncologyReadingInfoOutDto result = new GetOncologyReadingInfoOutDto() { GetOncologyReadingInfoOutDto result = new GetOncologyReadingInfoOutDto() {
TrialEvaluationResult= trialCriterion.EvaluationResult, TrialEvaluationResult= trialCriterion.EvaluationResult,
TrialEvaluationReason = trialCriterion.EvaluationReason, TrialEvaluationReason = trialCriterion.EvaluationReason.IsNullOrEmpty()? "肿瘤学阅片评估原因请依据临床数据填写,在与影像学结果不一致时必填。": trialCriterion.EvaluationReason,
OncologyTaskId = inDto.VisitTaskId, OncologyTaskId = inDto.VisitTaskId,
ReadingTaskState= taskInfo.ReadingTaskState,
}; };
// 先找到是R1还是R2的阅片 先找到全局阅片 // 先找到是R1还是R2的阅片 先找到全局阅片
@ -1224,6 +1225,26 @@ namespace IRaCIS.Application.Services
} }
/// <summary>
/// 提交肿瘤阅片结果
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
[NonDynamicMethod]
public async Task<IResponseOutput> 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);
}
/// <summary> /// <summary>
/// 提交全局阅片结果 /// 提交全局阅片结果

View File

@ -27,6 +27,7 @@ namespace IRaCIS.Application.Services
private readonly IRepository<ReadingPeriodSet> _readingPeriodSetRepository; private readonly IRepository<ReadingPeriodSet> _readingPeriodSetRepository;
private readonly IRepository<ReadModule> _readModuleRepository; private readonly IRepository<ReadModule> _readModuleRepository;
private readonly IRepository<VisitStage> _visitStageRepository; private readonly IRepository<VisitStage> _visitStageRepository;
private readonly IRepository<Trial> _trialRepository;
private readonly IRepository<VisitTask> _visitTaskRepository; private readonly IRepository<VisitTask> _visitTaskRepository;
private readonly IVisitTaskHelpeService _visitTaskHelpeService; private readonly IVisitTaskHelpeService _visitTaskHelpeService;
private readonly IRepository<ReadingPeriodPlan> _readingPeriodPlanRepository; private readonly IRepository<ReadingPeriodPlan> _readingPeriodPlanRepository;
@ -38,6 +39,7 @@ namespace IRaCIS.Application.Services
IRepository<ReadingPeriodSet> ReadingPeriodSetRepository, IRepository<ReadingPeriodSet> ReadingPeriodSetRepository,
IRepository<ReadModule> readModuleRepository, IRepository<ReadModule> readModuleRepository,
IRepository<VisitStage> visitStageRepository, IRepository<VisitStage> visitStageRepository,
IRepository<Trial> trialRepository,
IRepository<VisitTask> visitTaskRepository, IRepository<VisitTask> visitTaskRepository,
IVisitTaskHelpeService visitTaskHelpeService, IVisitTaskHelpeService visitTaskHelpeService,
IRepository<ReadingPeriodPlan> readingPeriodPlanRepository, IRepository<ReadingPeriodPlan> readingPeriodPlanRepository,
@ -49,6 +51,7 @@ namespace IRaCIS.Application.Services
_readingPeriodSetRepository = ReadingPeriodSetRepository; _readingPeriodSetRepository = ReadingPeriodSetRepository;
this._readModuleRepository = readModuleRepository; this._readModuleRepository = readModuleRepository;
this._visitStageRepository = visitStageRepository; this._visitStageRepository = visitStageRepository;
this._trialRepository = trialRepository;
this._visitTaskRepository = visitTaskRepository; this._visitTaskRepository = visitTaskRepository;
this._visitTaskHelpeService = visitTaskHelpeService; this._visitTaskHelpeService = visitTaskHelpeService;
this._readingPeriodPlanRepository = readingPeriodPlanRepository; this._readingPeriodPlanRepository = readingPeriodPlanRepository;
@ -341,7 +344,7 @@ namespace IRaCIS.Application.Services
{ {
case ReadingSetType.ImageReading: 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) foreach (var item in taskInfoList)
{ {
@ -371,18 +374,36 @@ namespace IRaCIS.Application.Services
break; break;
case ReadingSetType.TumorReading: 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 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) foreach (var item in globalTaskInfo)
{ {
var readModule = readModules.Where(x => x.SubjectVisitId == item.SourceSubjectVisitId).FirstOrDefault();
if (item.Count == (int)trialInfo.ReadingType)
{
if (item.JudgeTaskId == null || item.JudgeTaskResultId != null)
{
var readModule = readModules.Where(x => x.Id == item.ReadModuleId).FirstOrDefault();
await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand() await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand()
{ {
OriginalVisitId = item.Id, OriginalVisitId = item.TaskId,
ReadingCategory = GenerateTaskCategory.Oncology, ReadingCategory = GenerateTaskCategory.Oncology,
TrialId = item.TrialId, TrialId = readingPeriodSet.TrialId,
ReadingGenerataTaskList = new List<ReadingGenerataTaskDTO>() { ReadingGenerataTaskList = new List<ReadingGenerataTaskDTO>() {
new ReadingGenerataTaskDTO() new ReadingGenerataTaskDTO()
{ {
@ -397,6 +418,12 @@ namespace IRaCIS.Application.Services
}); });
} }
}
}
break; break;
} }