diff --git a/IRaCIS.Core.Domain/Allocation/VisitTask.cs b/IRaCIS.Core.Domain/Allocation/VisitTask.cs index 56a63fc24..ba18698e0 100644 --- a/IRaCIS.Core.Domain/Allocation/VisitTask.cs +++ b/IRaCIS.Core.Domain/Allocation/VisitTask.cs @@ -217,6 +217,11 @@ namespace IRaCIS.Core.Domain.Models [JsonIgnore] public List TaskInfluenceList { get; set; } = new List(); + + [JsonIgnore] + //对于全局任务而言 才可以用的 关联的访视阅片结果 + public List GlobalVisitResultList { get; set; } = new List(); + } } diff --git a/IRaCIS.Core.Domain/Reading/ReadingGlobalTaskInfo.cs b/IRaCIS.Core.Domain/Reading/ReadingGlobalTaskInfo.cs index 924cd5419..a8885a942 100644 --- a/IRaCIS.Core.Domain/Reading/ReadingGlobalTaskInfo.cs +++ b/IRaCIS.Core.Domain/Reading/ReadingGlobalTaskInfo.cs @@ -22,16 +22,30 @@ namespace IRaCIS.Core.Domain.Models /// public Guid TaskId { get; set; } - + + [JsonIgnore] + [ForeignKey("TaskId")] + public VisitTask VisitTask { get; set; } + + [JsonIgnore] + [ForeignKey("GlobalTaskId")] + public VisitTask GlobalVisitTask { get; set; } + + /// - /// 问题ID - /// + /// 问题ID + /// public Guid? QuestionId { get; set; } - + + [JsonIgnore] + [ForeignKey("QuestionId")] + public ReadingQuestionTrial TrialReadingQuestion { get; set; } + + /// - /// 问题答案 - /// - + /// 问题答案 + /// + public string Answer { get; set; } /// diff --git a/IRaCIS.Core.Domain/Reading/ReadingOncologyTaskInfo.cs b/IRaCIS.Core.Domain/Reading/ReadingOncologyTaskInfo.cs index ac5fa0a63..1bd73fab7 100644 --- a/IRaCIS.Core.Domain/Reading/ReadingOncologyTaskInfo.cs +++ b/IRaCIS.Core.Domain/Reading/ReadingOncologyTaskInfo.cs @@ -55,8 +55,16 @@ namespace IRaCIS.Core.Domain.Models /// 受试者Id /// public Guid SubjectId { get; set; } - - } + + [JsonIgnore] + [ForeignKey("OncologyTaskId")] + public VisitTask OncologyVisitTask { get; set; } + + [JsonIgnore] + [ForeignKey("VisitTaskId")] + public VisitTask VisitTask { get; set; } + + } } diff --git a/IRaCIS.Core.Domain/Reading/ReadingTaskQuestionAnswer.cs b/IRaCIS.Core.Domain/Reading/ReadingTaskQuestionAnswer.cs index 922c31186..f5d6721c6 100644 --- a/IRaCIS.Core.Domain/Reading/ReadingTaskQuestionAnswer.cs +++ b/IRaCIS.Core.Domain/Reading/ReadingTaskQuestionAnswer.cs @@ -66,6 +66,8 @@ namespace IRaCIS.Core.Domain.Models [JsonIgnore] [ForeignKey("ReadingQuestionTrialId")] public ReadingQuestionTrial ReadingQuestionTrial { get; set; } + + } diff --git a/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs b/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs index b6e5813eb..5f88b67e5 100644 --- a/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs +++ b/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs @@ -280,7 +280,64 @@ namespace IRaCIS.Core.Infra.EFCore.Common }); } - + + #region 肿瘤学阅片结果 记录表格 + + //if (entitys.Any(x => x.Entity.GetType() == typeof(ReadingOncologyTaskInfo))) + //{ + // var type = AuditOpt.Add; + + // var oncologyAnswerList = entitys.Where(x => x.Entity.GetType() == typeof(ReadingOncologyTaskInfo)).Select(t => t.Entity as ReadingOncologyTaskInfo); + + // var visitTaskIdList = oncologyAnswerList.Select(t => t.VisitTaskId).ToList(); + + // var visitTaskList = await _dbContext.VisitTask.Where(t => visitTaskIdList.Contains(t.Id)).Select(t => new { VisitTaskId = t.Id, t.TaskName, t.TaskBlindName, t.VisitTaskNum, t.SubjectId }).ToListAsync(); + + + + // var modifyVisitList = await _dbContext.ReadingGlobalTaskInfo.Where(t => visitTaskIdList.Contains(t.TaskId) && t.VisitTask.TaskState == TaskState.Effect).GroupBy(t => t.TaskId).Select(g => new + // { + // VisitTaskId = g.Key, + // GlobalResult = g.Select(c => new { c.Answer, c.QuestionId }) + // }).ToListAsync(); + + + // //var oncologyAnswerVisitList = visitTaskList.Join(oncologyAnswerList, t => t.VisitTaskId, u => u.VisitTaskId, (t, u) => new { t.VisitTaskId, t.TaskBlindName, t.TaskName, u.EvaluationReason, u.EvaluationResult }).ToList(); + + // var query = from answer in oncologyAnswerList + // join visitTask in visitTaskList on answer.VisitTaskId equals visitTask.VisitTaskId + // join modifyVisit in modifyVisitList on answer.VisitTaskId equals modifyVisit.VisitTaskId into cc + // from modifyVisit in cc.DefaultIfEmpty() + // select new + // { + // visitTask.TaskBlindName, + // visitTask.TaskName, + // answer.EvaluationReason, + // answer.EvaluationResult, + // IsGlobalModify = modifyVisit != null, + // Reason = modifyVisit != null ? modifyVisit.GlobalResult.Where(t => t.QuestionId == null).FirstOrDefault()?.Answer : String.Empty + // }; + // var result = query.ToList(); + + + // var oncologyAnswer = oncologyAnswerList.First(); + + // var cloneEntity = oncologyAnswer.Clone(); + + // cloneEntity.Id = NewId.NextGuid(); + + // await InsertInspection(oncologyAnswer, type, x => new InspectionConvertDTO() + // { + // VisitTaskId = oncologyAnswer.VisitTaskId, + + // ObjectRelationParentId = oncologyAnswer.VisitTaskId, + + // }, new { OncologyAnswerList = result }); + //} + + #endregion + + // 全局 阅片结果 if (entitys.Any(x => x.Entity.GetType() == typeof(ReadingGlobalTaskInfo))) { @@ -327,7 +384,113 @@ namespace IRaCIS.Core.Infra.EFCore.Common + //任务 + foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(VisitTask))) + { + var type = GetEntityAuditOpt(item); + var entity = item.Entity as VisitTask; + + var obj = new object() { }; + + //裁判任务 + if (entity.JudgeResultTaskId != null && _userInfo.RequestUrl == "ReadingImageTask/saveJudgeVisitTaskResult") + { + var list = await _dbContext.VisitTask.Where(t => t.TaskState == TaskState.Effect && t.SubjectId == entity.SubjectId && t.VisitTaskNum == entity.VisitTaskNum).Select(t => new { t.Id, t.DoctorUser.FullName, t.ArmEnum }).OrderBy(t => t.ArmEnum).ToListAsync(); + + var r1 = list.First(); + var r2 = list.Last(); + + + obj = new { R1 = r1.FullName, R2 = r2.FullName, SelectResult = entity.ArmEnum == r1.ArmEnum ? "R1" : "R2" }; + } + + //肿瘤学任务 + + //if (_userInfo.RequestUrl == "ReadingImageTask/setOncologyReadingInfo") + + if (entity.ReadingTaskState == ReadingTaskState.HaveSigned && _userInfo.RequestUrl == "ReadingImageTask/SubmitOncologyReadingInfo") + + + { + + + var oncologyAnswerList = await _dbContext.ReadingOncologyTaskInfo.Where(t => t.OncologyTaskId == entity.Id).Select(t => new { t.VisitTask.TaskBlindName, t.VisitTask.TaskName, t.EvaluationReason, t.EvaluationResult, t.VisitTask.VisitTaskNum, VisitTaskId = t.VisitTask.Id }).ToListAsync(); + + var golbalTaskInfo = await _dbContext.VisitTask.Where(t => t.SubjectId == entity.SubjectId && t.ReadingCategory == ReadingCategory.Global && t.TaskState == TaskState.Effect && t.IsAnalysisCreate == entity.IsAnalysisCreate && t.VisitTaskNum == (entity.VisitTaskNum - ReadingCommon.TaskNumDic[ReadingCategory.Oncology] + ReadingCommon.TaskNumDic[ReadingCategory.Global])).Select(t => new { GlobalTaskId = t.Id }).FirstNotNullAsync(); + + + var globalResultList = await _dbContext.ReadingGlobalTaskInfo.Where(t => t.GlobalTaskId == golbalTaskInfo.GlobalTaskId).ToListAsync(); + + var modifyVisitList = globalResultList + .GroupBy(t => t.TaskId).Select(g => new + { + VisitTaskId = g.Key, + GlobalResult = g.Select(c => new { c.Answer, c.QuestionId }) + }).ToList(); + + var query = from answer in oncologyAnswerList + join modifyVisit in modifyVisitList on answer.VisitTaskId equals modifyVisit.VisitTaskId into cc + from modifyVisit in cc.DefaultIfEmpty() + select new + { + answer.TaskBlindName, + answer.TaskName, + answer.EvaluationReason, + answer.EvaluationResult, + IsGlobalModify = modifyVisit != null, + Reason = modifyVisit != null ? modifyVisit.GlobalResult.Where(t => t.QuestionId == null).FirstOrDefault()?.Answer : String.Empty + }; + + var result = query.ToList(); + + obj = new { OncologyAnswerList = result }; + } + + //全局任务 + if (entity.ReadingTaskState == ReadingTaskState.HaveSigned && _userInfo.RequestUrl == "ReadingImageTask/SubmitGlobalReadingInfo") + { + + var globalResultList = await _dbContext.ReadingGlobalTaskInfo.Where(t => t.GlobalTaskId == entity.Id).Select(t => new { VisitTaskId = t.TaskId, t.QuestionId, t.Answer, t.VisitTask.TaskBlindName, t.VisitTask.TaskName, t.TrialReadingQuestion.QuestionName }).ToListAsync(); + + var visitTaskIdList = globalResultList.Select(t => t.VisitTaskId).ToList(); + + var visitResultList = await _dbContext.ReadingTaskQuestionAnswer.Where(t => visitTaskIdList.Contains(t.VisitTaskId) && t.ReadingQuestionTrial.IsJudgeQuestion).Select(t => new { t.VisitTaskId, t.VisitTask.TaskBlindName, t.VisitTask.TaskName, t.VisitTask.VisitTaskNum, t.ReadingQuestionTrial.QuestionName, t.ReadingQuestionTrial.ShowOrder, t.Answer, t.ReadingQuestionTrialId }) + .OrderBy(t => t.VisitTaskNum).ToListAsync(); + + var query = visitResultList.GroupBy(t => new { t.VisitTaskId, t.VisitTaskNum, t.TaskName, t.TaskBlindName }).Select(g => new + { + VisitTaskId = g.Key.VisitTaskId, + VisitTaskNum = g.Key.VisitTaskNum, + TaskName = g.Key.TaskName, + TaskBlindName = g.Key.TaskBlindName, + + VisitQuestionAnswerList = g.Select(u => new { u.QuestionName, u.Answer }).ToList(), + + GlobalQuestionAnswerList = g.Select(u => new { u.QuestionName, Answer = globalResultList.Where(t => t.VisitTaskId == g.Key.VisitTaskId && t.QuestionId == u.ReadingQuestionTrialId).FirstOrDefault()?.Answer ?? String.Empty }).ToList(), + + Reason = globalResultList.Where(t => t.VisitTaskId == g.Key.VisitTaskId && t.QuestionId == null).FirstOrDefault()?.Answer ?? String.Empty + }); + + + var result = query.ToList(); + + obj = new { GlobalAnswerList = result }; + } + + + await InsertInspection(entity, type, x => new InspectionConvertDTO() + { + VisitTaskId = x.Id, + + IsDistinctionInterface = type == AuditOpt.Update ? true : false, + + ObjectRelationParentId = entity.SourceSubjectVisitId != null ? entity.SourceSubjectVisitId : entity.SouceReadModuleId, + + ObjectRelationParentId2 = entity.DoctorUserId + + }, obj); + } @@ -1274,38 +1437,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common }, new { ArmToTask = entity.ArmEnum }); } - //任务 - foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(VisitTask))) - { - var type = GetEntityAuditOpt(item); - var entity = item.Entity as VisitTask; - - var obj = new object() { }; - - if (entity.JudgeResultTaskId != null && _userInfo.RequestUrl == "ReadingImageTask/saveJudgeVisitTaskResult") - { - var list = await _dbContext.VisitTask.Where(t => t.TaskState == TaskState.Effect && t.SubjectId == entity.SubjectId && t.VisitTaskNum == entity.VisitTaskNum).Select(t => new { t.Id, t.DoctorUser.FullName, t.ArmEnum }).OrderBy(t => t.ArmEnum).ToListAsync(); - - var r1 = list.First(); - var r2 = list.Last(); - - - obj = new { R1 = r1.FullName, R2 = r2.FullName, SelectResult = entity.ArmEnum == r1.ArmEnum ? "R1" : "R2" }; - } - - await InsertInspection(entity, type, x => new InspectionConvertDTO() - { - VisitTaskId = x.Id, - - IsDistinctionInterface = type == AuditOpt.Update ? true : false, - - ObjectRelationParentId = entity.SourceSubjectVisitId != null ? entity.SourceSubjectVisitId : entity.SouceReadModuleId, - - ObjectRelationParentId2 = entity.DoctorUserId - - }, obj); - } //申请重阅记录表 foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(VisitTaskReReading))) @@ -1399,7 +1531,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common var from = await _dbContext.FrontAuditConfig.FirstOrDefaultAsync(x => x.Identification == inspection.Identification); inspection.ObjectTypeId = from?.ObjectTypeId; inspection.OptTypeId = from?.OptTypeId; - inspection.ChildrenTypeId = from?.ChildrenTypeId; + //inspection.ChildrenTypeId = from?.ChildrenTypeId; inspection.ModuleTypeId = from?.ModuleTypeId; #endregion diff --git a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs index 72838201b..5430c6aaa 100644 --- a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs +++ b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs @@ -113,6 +113,9 @@ namespace IRaCIS.Core.Infra.EFCore modelBuilder.Entity().HasMany(t => t.TaskInfluenceList).WithOne(s => s.OriginalTask).HasForeignKey(t => t.OriginalTaskId); + modelBuilder.Entity().HasMany(t => t.GlobalVisitResultList).WithOne(s => s.GlobalVisitTask).HasForeignKey(t => t.GlobalTaskId); + + //modelBuilder.Entity().HasOne(t=>t.TrialReadingQuestionAnswer).WithOne(t=>t.ReadingQuestionTrialId) modelBuilder.Entity().HasMany(t => t.ChildList).WithOne(t => t.Parent);