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