修改一版

Uat_Study
he 2022-06-22 10:48:23 +08:00
parent 3333744391
commit fa0f04c808
4 changed files with 103 additions and 26 deletions

View File

@ -5,10 +5,14 @@
//--------------------------------------------------------------------
using IRaCIS.Core.Application.ViewModel;
namespace IRaCIS.Core.Application.Service
{
public interface IVisitTaskHelpeService
{
Task GenerateVisitTaskAsync(Guid trialId, List<Guid> subjectVisitIdList, bool isAssignSubjectToDoctor = false);
Task AddTaskAsync(GenerateTaskCommand generateTaskCommand);
}
}

View File

@ -294,7 +294,7 @@ namespace IRaCIS.Core.Application.Service
SubjectId = firstTask.SubjectId,
ReadingTaskState = ReadingTaskState.WaitReading,
TaskName = firstTask.TaskName + "AD",
TaskName = firstTask.TaskName,
ReadingCategory = ReadingCategory.Judge,
TrialId = firstTask.TrialId,

View File

@ -80,7 +80,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public string TypeValue { get; set; }
public List<string> AnswerGroup { get; set; }
public List<AnswerGroupDto> AnswerGroup { get; set; }
}
@ -153,6 +153,13 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
}
public class AnswerGroupDto
{
public List<string> AnswerGroupA { get; set; }
public List<string> AnswerGroupB { get; set; }
}
public class TaskAnswerDto
{
public Guid VisitTaskId { get; set; }

View File

@ -15,6 +15,8 @@ using AutoMapper;
using IRaCIS.Core.Application.Contracts;
using IRaCIS.Core.Infrastructure;
using Newtonsoft.Json;
using IRaCIS.Core.Application.Service;
using IRaCIS.Core.Application.ViewModel;
namespace IRaCIS.Application.Services
{
@ -27,15 +29,18 @@ namespace IRaCIS.Application.Services
private readonly IMapper mapper;
private readonly IRepository<NoneDicomStudy> _noneDicomStudyRepository;
private readonly IRepository<VisitTask> _visitTaskRepository;
private readonly IVisitTaskHelpeService _visitTaskHelpeService;
private readonly IRepository<SubjectVisit> _subjectVisitRepository;
private readonly IRepository<ReadingTaskQuestionAnswer> _readingTaskQuestionAnswerRepository;
private readonly IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository;
private readonly IRepository<ReadingQuestionTrial> _readingQuestionTrialRepository;
public ReadingImageTaskService(
IMapper mapper,
IRepository<NoneDicomStudy> noneDicomStudyRepository,
IRepository<VisitTask> visitTaskRepository,
IVisitTaskHelpeService visitTaskHelpeService,
IRepository<SubjectVisit> subjectVisitRepository,
IRepository<ReadingTaskQuestionAnswer> readingTaskQuestionAnswerRepository,
IRepository<ReadingQuestionCriterionTrial> readingQuestionCriterionTrialRepository,
@ -45,6 +50,7 @@ namespace IRaCIS.Application.Services
this.mapper = mapper;
this._noneDicomStudyRepository = noneDicomStudyRepository;
this._visitTaskRepository = visitTaskRepository;
this._visitTaskHelpeService = visitTaskHelpeService;
this._subjectVisitRepository = subjectVisitRepository;
this._readingTaskQuestionAnswerRepository = readingTaskQuestionAnswerRepository;
this._readingQuestionCriterionTrialRepository = readingQuestionCriterionTrialRepository;
@ -170,7 +176,7 @@ namespace IRaCIS.Application.Services
var result = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == inDto.ReadingQuestionCriterionTrialId && x.IsJudgeQuestion)
.Select(x => new GetTrialCriterionJudgeQuestionListOutDto()
{
AnswerGroup = JsonConvert.DeserializeObject<List<string>>(x.AnswerGroup.IsNullOrEmpty()?"[]": x.AnswerGroup),
AnswerGroup = JsonConvert.DeserializeObject<List<AnswerGroupDto>>(x.AnswerGroup.IsNullOrEmpty()?"[]": x.AnswerGroup),
QuestionName = x.QuestionName,
TypeValue =x.TypeValue,
ReadingQuestionTrialId = x.Id
@ -301,17 +307,92 @@ namespace IRaCIS.Application.Services
ReadingTaskState = ReadingTaskState.HaveSigned
});
var result = await _visitTaskRepository.SaveChangesAsync();
await this.TriggerJudgeQuestion(inDto.VisitTaskId);
await this.TriggerJudgeQuestionNew(inDto.VisitTaskId);
return ResponseOutput.Ok(result);
}
/// <summary>
/// 触发裁判任务
/// 添加阅片期任务
/// </summary>
/// <returns></returns>
private async Task AddReadingTask(Guid VisitTaskId)
{
}
/// <summary>
/// 触发裁判任务(新)
/// </summary>
/// <param name="VisitTaskId"></param>
/// <returns></returns>
private async Task TriggerJudgeQuestion(Guid VisitTaskId)
private async Task TriggerJudgeQuestionNew(Guid VisitTaskId)
{
var visitTask = await _visitTaskRepository.Where(x => x.Id == VisitTaskId).FirstOrDefaultAsync();
var visitTaskids = await _visitTaskRepository.Where(x => x.ReadingTaskState == ReadingTaskState.HaveSigned && x.SourceSubjectVisitId == visitTask.SourceSubjectVisitId && x.SouceReadModuleId == visitTask.SouceReadModuleId).Select(x => x.Id).ToListAsync();
if (visitTaskids.Count == 2)
{
var query = from questionAnswet in _readingTaskQuestionAnswerRepository.Where(x => visitTaskids.Contains(x.VisitTaskId))
join question in _readingQuestionTrialRepository.Where(x => x.IsJudgeQuestion) on new { ReadingQuestionTrialId = questionAnswet.ReadingQuestionTrialId } equals new { ReadingQuestionTrialId = question.Id }
select new TaskAnswerDto()
{
Answer = questionAnswet.Answer,
AnswerGroup = question.AnswerGroup,
QuestionId = question.Id,
VisitTaskId = questionAnswet.VisitTaskId,
};
var questionAnswerlist = await query.ToListAsync();
List<GroupTaskAnswerDto> groupTasks = questionAnswerlist.GroupBy(x => new { x.QuestionId, x.AnswerGroup }).Select(x => new GroupTaskAnswerDto
{
QuestionId = x.Key.QuestionId,
AnswerGroup = x.Key.AnswerGroup,
TaskAnswerList = x.ToList(),
}).ToList();
var verificationResults = false;
foreach (var item in groupTasks)
{
if (item.TaskAnswerList.Count() != 2)
{
verificationResults = true;
break;
}
else
{
var taskAnswer1 = item.TaskAnswerList[0];
var taskAnswer2 = item.TaskAnswerList[1];
if (taskAnswer1.Answer != taskAnswer2.Answer)
{
var answerGroup = JsonConvert.DeserializeObject<List<AnswerGroupDto>>(item.AnswerGroup==string.Empty?"[]": item.AnswerGroup).ToList();
answerGroup.ForEach(x =>
{
if (x.AnswerGroupA.Contains(taskAnswer1.Answer) && x.AnswerGroupB.Contains(taskAnswer2.Answer))
{
verificationResults = true;
}
if (x.AnswerGroupB.Contains(taskAnswer1.Answer) && x.AnswerGroupA.Contains(taskAnswer2.Answer))
{
verificationResults = true;
}
});
}
}
}
if (verificationResults)
{
await this.SaveJudgeTask(new SaveJudgeTaskDto()
{
VisitTaskIds = visitTaskids,
});
}
}
}
/// <summary>
/// 触发裁判任务(老)
/// </summary>
/// <param name="VisitTaskId"></param>
/// <returns></returns>
private async Task TriggerJudgeQuestionOld(Guid VisitTaskId)
{
var visitTask = await _visitTaskRepository.Where(x => x.Id == VisitTaskId).FirstOrDefaultAsync();
var visitTaskids = await _visitTaskRepository.Where(x => x.ReadingTaskState == ReadingTaskState.HaveSigned && x.SourceSubjectVisitId == visitTask.SourceSubjectVisitId && x.SouceReadModuleId == visitTask.SouceReadModuleId).Select(x => x.Id).ToListAsync();
@ -379,29 +460,14 @@ namespace IRaCIS.Application.Services
/// <returns></returns>
private async Task SaveJudgeTask(SaveJudgeTaskDto inDto)
{
var firstTask = await _visitTaskRepository.Where(x => inDto.VisitTaskIds.Contains(x.Id)).FirstOrDefaultAsync();
var trialId = await _visitTaskRepository.Where(x => inDto.VisitTaskIds.Contains(x.Id)).Select(x => x.TrialId).FirstOrDefaultAsync();
VisitTask visitTask = new VisitTask()
await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand()
{
Id = NewId.NextGuid(),
ArmEnum = Arm.JudgeArm,
SouceReadModuleId = firstTask.SouceReadModuleId,
SourceSubjectVisitId = firstTask.SourceSubjectVisitId,
SubjectId = firstTask.SubjectId,
ReadingTaskState = ReadingTaskState.WaitReading,
TaskName = firstTask.TaskName + " AD",
ReadingCategory = ReadingCategory.Judge,
TrialId = firstTask.TrialId,
};
await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => inDto.VisitTaskIds.Contains(x.Id), x => new VisitTask()
{
JudgeVisitTaskId = visitTask.Id
JudgeVisitTaskIdList= inDto.VisitTaskIds,
ReadingCategory= ReadingCategory.Judge,
TrialId= trialId
});
await _visitTaskRepository.AddAsync(visitTask);
await _visitTaskRepository.SaveChangesAsync();
}
}