This commit is contained in:
he
2023-01-31 13:46:03 +08:00
parent e18b890f96
commit 9296871b28
7 changed files with 239 additions and 42 deletions
@@ -169,14 +169,31 @@ namespace IRaCIS.Application.Services
result.JudgeTaskId = judgeInfo.Id;
result.JudgeTaskName = judgeInfo.TaskBlindName;
}
// 一致性分析按照doctorId 其他按照分组
result.TaskList = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Visit &&
x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId &&
x.SubjectId == taskInfo.SubjectId && x.IsAnalysisCreate == taskInfo.IsAnalysisCreate && x.TaskState == TaskState.Effect && x.VisitTaskNum < taskInfo.VisitTaskNum)
.Where(x => x.DoctorUserId == taskInfo.DoctorUserId)
var queruTask = _visitTaskRepository.Where(x =>
x.TrialId == taskInfo.TrialId &&
x.SubjectId == taskInfo.SubjectId &&
x.ReadingCategory == ReadingCategory.Visit &&
x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId &&
x.ReadingTaskState == ReadingTaskState.HaveSigned &&
x.IsAnalysisCreate == taskInfo.IsAnalysisCreate &&
x.ArmEnum == taskInfo.ArmEnum &&
x.IsSelfAnalysis == taskInfo.IsSelfAnalysis &&
x.DoctorUserId == taskInfo.DoctorUserId &&
x.TaskState == TaskState.Effect &&
x.VisitTaskNum < taskInfo.VisitTaskNum);
if (taskInfo.ReadingTaskState == ReadingTaskState.HaveSigned)
{
queruTask = _visitTaskRepository.Where(x => taskInfo.RelatedVisitTaskIdList.Contains(x.Id));
}
result.TaskList = await queruTask
.OrderBy(x => x.VisitTaskNum).Select(x => new GlobalVisitInfo()
{
VisitName = x.TaskName,
@@ -282,9 +282,9 @@ namespace IRaCIS.Application.Services
{
var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Include(x => x.TrialReadingCriterion).FirstNotNullAsync();
var baselineVisitId = await _subjectVisitRepository.Where(x => x.SubjectId == taskInfo.SubjectId && x.IsBaseLine && !x.IsLostVisit).Select(x => x.Id).FirstNotNullAsync();
var result = await _visitTaskRepository
.WhereIf(taskInfo.TaskState != TaskState.Effect, x => x.Id == inDto.VisitTaskId)
.Where(x =>
var taskQuery = _visitTaskRepository.Where(x =>
(x.TrialId == taskInfo.TrialId &&
x.SubjectId == taskInfo.SubjectId &&
x.ArmEnum == taskInfo.ArmEnum &&
@@ -294,7 +294,14 @@ namespace IRaCIS.Application.Services
x.TaskState == TaskState.Effect &&
x.VisitTaskNum <= taskInfo.VisitTaskNum &&
x.IsAnalysisCreate == taskInfo.IsAnalysisCreate &&
x.ReadingCategory == ReadingCategory.Visit) || x.Id == inDto.VisitTaskId)
x.ReadingCategory == ReadingCategory.Visit) || x.Id == inDto.VisitTaskId);
if (taskInfo.ReadingTaskState == ReadingTaskState.HaveSigned)
{
taskQuery = _visitTaskRepository.Where(x => taskInfo.RelatedVisitTaskIdList.Contains(x.Id));
}
var result = await taskQuery
.Select(x => new GetRelatedVisitTaskOutDto()
{
TaskBlindName = x.TaskBlindName,
@@ -327,20 +334,28 @@ namespace IRaCIS.Application.Services
public async Task<List<GetReadingPastResultListOutDto>> GetReadingPastResultList(GetReadingPastResultListInDto inDto)
{
var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync();
var readingPastResultList = await _visitTaskRepository.Where(x =>
x.TrialId == taskInfo.TrialId &&
x.SubjectId == taskInfo.SubjectId &&
x.VisitTaskNum <= taskInfo.VisitTaskNum &&
x.ArmEnum == taskInfo.ArmEnum &&
x.Id != inDto.VisitTaskId &&
x.DoctorUserId == taskInfo.DoctorUserId &&
x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId &&
x.ReadingTaskState == ReadingTaskState.HaveSigned &&
x.TaskState == TaskState.Effect &&
x.IsSelfAnalysis == taskInfo.IsSelfAnalysis&&
x.IsAnalysisCreate == taskInfo.IsAnalysisCreate)
.WhereIf(taskInfo.ReadingCategory != ReadingCategory.Visit, x => x.ReadingCategory == taskInfo.ReadingCategory)
var taskQuery = _visitTaskRepository.Where(x =>
x.TrialId == taskInfo.TrialId &&
x.SubjectId == taskInfo.SubjectId &&
x.VisitTaskNum <= taskInfo.VisitTaskNum &&
x.ArmEnum == taskInfo.ArmEnum &&
x.Id != inDto.VisitTaskId &&
x.DoctorUserId == taskInfo.DoctorUserId &&
x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId &&
x.ReadingTaskState == ReadingTaskState.HaveSigned &&
x.TaskState == TaskState.Effect &&
x.IsSelfAnalysis == taskInfo.IsSelfAnalysis &&
x.IsAnalysisCreate == taskInfo.IsAnalysisCreate &&
x.ReadingCategory == taskInfo.ReadingCategory
);
if (taskInfo.ReadingTaskState == ReadingTaskState.HaveSigned)
{
taskQuery = _visitTaskRepository.Where(x => taskInfo.RelatedVisitTaskIdList.Contains(x.Id));
}
var readingPastResultList = await taskQuery
.ProjectTo<GetReadingPastResultListOutDto>(_mapper.ConfigurationProvider).OrderBy(x => x.VisitTaskNum).ToListAsync();
return readingPastResultList;
}
@@ -1931,6 +1946,8 @@ namespace IRaCIS.Application.Services
// 完成阅片修改状态
//await this.FinishReadUpdateState(visitTaskId);
// 创建任务关联关系
await this.CreateTaskRelated(visitTaskId);
await _visitTaskRepository.SaveChangesAsync();
@@ -1938,6 +1955,84 @@ namespace IRaCIS.Application.Services
}
/// <summary>
/// 签名时创建任务关联
/// </summary>
/// <returns></returns>
private async Task CreateTaskRelated(Guid visitTaskId)
{
var taskInfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).FirstNotNullAsync();
// 判断是否有序阅片
var isReadingTaskViewInOrder = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == taskInfo.TrialReadingCriterionId).Select(x => x.IsReadingTaskViewInOrder).FirstNotNullAsync();
// 判断任务类型
// 关联Id
List<Guid> relatedVisitTaskIdList = new List<Guid>();
// 既往任务Id
List<Guid> pastResultTaskIdList = new List<Guid>();
if (isReadingTaskViewInOrder)
{
pastResultTaskIdList = await _visitTaskRepository.Where(x =>
x.TrialId == taskInfo.TrialId &&
x.SubjectId == taskInfo.SubjectId &&
x.VisitTaskNum < taskInfo.VisitTaskNum &&
x.ArmEnum == taskInfo.ArmEnum &&
x.DoctorUserId == taskInfo.DoctorUserId &&
x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId &&
x.ReadingTaskState == ReadingTaskState.HaveSigned &&
x.TaskState == TaskState.Effect &&
x.IsSelfAnalysis == taskInfo.IsSelfAnalysis &&
x.IsAnalysisCreate == taskInfo.IsAnalysisCreate &&
x.ReadingCategory == taskInfo.ReadingCategory &&
x.Id != taskInfo.Id
).Select(x => x.Id).ToListAsync();
switch (taskInfo.ReadingCategory)
{
case ReadingCategory.Visit:
case ReadingCategory.Global:
case ReadingCategory.Oncology:
relatedVisitTaskIdList = await _visitTaskRepository.Where(x =>
x.TrialId == taskInfo.TrialId &&
x.SubjectId == taskInfo.SubjectId &&
x.ReadingCategory == ReadingCategory.Visit &&
x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId &&
x.ReadingTaskState == ReadingTaskState.HaveSigned &&
x.IsAnalysisCreate == taskInfo.IsAnalysisCreate &&
x.ArmEnum == taskInfo.ArmEnum &&
x.IsSelfAnalysis == taskInfo.IsSelfAnalysis &&
x.DoctorUserId == taskInfo.DoctorUserId &&
x.TaskState == TaskState.Effect && x.VisitTaskNum <= taskInfo.VisitTaskNum).Select(x => x.Id).ToListAsync();
break;
}
}
else
{
if (taskInfo.ReadingCategory == ReadingCategory.Visit)
{
relatedVisitTaskIdList.Add(taskInfo.Id);
}
}
await _visitTaskRepository.UpdatePartialFromQueryAsync(taskInfo.Id, x => new VisitTask()
{
PastResultTaskIds = JsonConvert.SerializeObject(pastResultTaskIdList),
RelatedVisitTaskIds = JsonConvert.SerializeObject(relatedVisitTaskIdList),
});
await _visitTaskRepository.SaveChangesAsync();
}
/// <summary>
/// 阅片期 -全局和肿瘤学任务的生成
/// </summary>
@@ -123,13 +123,11 @@ namespace IRaCIS.Application.Services
// 判断是否是全局访视任务
if (await VerifyIsGlobalVisitTask(taskList[0].Id))
{
var globalVisitTaskIds = await _visitTaskRepository.Where(x=>x.Id== taskList[0].Id).Select(x=>x.RelatedVisitTaskIdList).FirstNotNullAsync();
// 找到所有的的任务
var globalVisitTasks = await _visitTaskRepository.Where(x => x.ReadingTaskState == ReadingTaskState.HaveSigned && x.ReadingCategory != ReadingCategory.Judge
&& x.TaskState == TaskState.Effect
&& x.TrialReadingCriterionId == taskList[0].TrialReadingCriterionId
&& x.IsAnalysisCreate == false
&& x.ReadingCategory == ReadingCategory.Visit && x.VisitTaskNum <= taskList[0].VisitTaskNum).Select(x => new {
var globalVisitTasks = await _visitTaskRepository.Where(x => globalVisitTaskIds.Contains(x.Id)).Select(x => new {
x.Id,
x.ArmEnum,
x.VisitTaskNum,
@@ -137,7 +135,7 @@ namespace IRaCIS.Application.Services
x.TaskBlindName,
} ).ToListAsync();
var globalVisitTaskIds = globalVisitTasks.Select(x => x.Id).ToList();
var taskNum = globalVisitTasks.Select(x => x.VisitTaskNum).Distinct().OrderBy(x=>x).ToList();
@@ -394,6 +392,10 @@ namespace IRaCIS.Application.Services
var result = await _visitTaskRepository.SaveChangesAsync();
// 创建任务关联关系
await this.CreateTaskRelated(inDto.VisitTaskId);
return ResponseOutput.Ok(result);
}
@@ -93,10 +93,18 @@ namespace IRaCIS.Application.Services
// 找到对应的访视
List<OncologyVisitTaskInfo> oncologyVisits = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Visit &&
x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId &&
x.SubjectId == visitTask.SubjectId && x.IsAnalysisCreate == visitTask.IsAnalysisCreate && x.TaskState == TaskState.Effect && x.VisitTaskNum < visitTask.VisitTaskNum)
.Where(x => x.DoctorUserId == visitTask.DoctorUserId)
List<OncologyVisitTaskInfo> oncologyVisits = await _visitTaskRepository.Where(x =>
x.TrialId == taskInfo.TrialId &&
x.SubjectId == taskInfo.SubjectId &&
x.ReadingCategory == ReadingCategory.Visit &&
x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId &&
x.ReadingTaskState == ReadingTaskState.HaveSigned &&
x.IsAnalysisCreate == taskInfo.IsAnalysisCreate &&
x.ArmEnum == taskInfo.ArmEnum &&
x.IsSelfAnalysis == taskInfo.IsSelfAnalysis &&
x.DoctorUserId == taskInfo.DoctorUserId &&
x.TaskState == TaskState.Effect &&
x.VisitTaskNum < taskInfo.VisitTaskNum)
.OrderBy(x => x.VisitTaskNum).Select(x => new OncologyVisitTaskInfo()
{
VisitName = x.SourceSubjectVisit.VisitName,
@@ -305,6 +313,9 @@ namespace IRaCIS.Application.Services
SignTime = DateTime.Now,
});
await _visitTaskRepository.SaveChangesAsync();
// 创建任务关联关系
await this.CreateTaskRelated(inDto.OncologyTaskId);
return ResponseOutput.Ok(true);
}
}