diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingCriterionService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingCriterionService.cs index 243c212e0..8ae02ae17 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingCriterionService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingCriterionService.cs @@ -77,6 +77,7 @@ namespace IRaCIS.Core.Application.Service.RC /// /// [HttpPost] + [UnitOfWork] public async Task SetSystemGlobalInfo(SetSystemGlobalInfoInDto inDto) { @@ -147,6 +148,7 @@ namespace IRaCIS.Core.Application.Service.RC /// /// [HttpPost] + [UnitOfWork] public async Task SetSystemOncologyInfo(SetSystemOncologyInfoInDto inDto) { diff --git a/IRaCIS.Core.Domain/SQLFile/Test.sql b/IRaCIS.Core.Domain/SQLFile/Test.sql index c4afca3e0..9894554d3 100644 --- a/IRaCIS.Core.Domain/SQLFile/Test.sql +++ b/IRaCIS.Core.Domain/SQLFile/Test.sql @@ -176,7 +176,9 @@ update ReadingClinicalData set ReadingClinicalDataState=3 where IsSign=1 and R - +update DataInspection set Identification='ReadingMedicineQuestionAnswer/Add' , ObjectTypeId='E8250000-3E2C-0016-8166-08DA7E8DFF90',OptTypeId='02FCF476-4089-4B2C-B9BE-08DA0E391693',ModuleTypeId='A4460000-3E2C-0016-F305-08DA7E8C40BB' where EntityName='ReadingMedicineQuestionAnswer' +update DataInspection set ObjectTypeId='A4100000-3E2C-0016-A716-08DA7E8DA9BD',OptTypeId='02FCF476-4089-4B2C-B9BE-08DA0E391693',ModuleTypeId='A4460000-3E2C-0016-F305-08DA7E8C40BB' where Identification='ReadingMedicalReview/saveMedicalReviewInfo/TaskMedicalReview/Update' +update DataInspection set Identification='ReadingMedicalReviewDialog/Add' , ObjectTypeId='D8270000-3E2C-0016-2A14-08DA3EDB77FD',OptTypeId='02FCF476-4089-4B2C-B9BE-08DA0E391693',ModuleTypeId='A4460000-3E2C-0016-F305-08DA7E8C40BB' where EntityName='ReadingMedicalReviewDialog' diff --git a/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs b/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs index a4013f792..33cbda861 100644 --- a/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs +++ b/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs @@ -154,9 +154,22 @@ namespace IRaCIS.Core.Infra.EFCore.Common var entity = item.Entity as ReadingQuestionCriterionSystem; + var extraIdentification = string.Empty; + + if(_dbContext.Entry(entity).Property(t=>t.IsMustGlobalReading).IsModified == true) + { + extraIdentification = $"/IsGlobalReading"; + } + + if (_dbContext.Entry(entity).Property(t => t.IsOncologyReading).IsModified == true) + { + extraIdentification = $"/IsOncologyReading"; + } + await InsertInspection(entity, type, x => new InspectionConvertDTO() { - IsDistinctionInterface = false + IsDistinctionInterface = /*type == AuditOpt.Update ? true :*/ false, + ExtraIndentification= extraIdentification }); } @@ -330,9 +343,6 @@ namespace IRaCIS.Core.Infra.EFCore.Common } - - - //系统器官 foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(OrganInfo))) { @@ -415,8 +425,9 @@ namespace IRaCIS.Core.Infra.EFCore.Common { //系统标准设置 没有翻译的字段 - if (_userInfo.RequestUrl == "ReadingQuestion/setCriterionDictionary") - { + //if (_userInfo.RequestUrl == "ReadingQuestion/setCriterionDictionary") + //{ + var type = AuditOpt.Add; var list = entitys.Where(x => x.Entity.GetType() == typeof(ReadingCriterionDictionary)).Select(t => t.Entity as ReadingCriterionDictionary).ToList(); @@ -440,13 +451,16 @@ namespace IRaCIS.Core.Infra.EFCore.Common TrialReadingCriterionId = x.IsSystemCriterion == false ? x.CriterionId : null, + //不显示区分接口 通过是否是系统字典 以及字典Code 区分 + IsDistinctionInterface=false + }, new { SelectList = selectList.Join(list, t => t.Id, u => u.DictionaryId, (t, u) => new { - t.Value, + t.Value, t.ValueCN, t.Description, t.ShowOrder, @@ -454,9 +468,9 @@ namespace IRaCIS.Core.Infra.EFCore.Common u.IsFollowVisitUse } ).OrderBy(t => t.ShowOrder).ToList() - }); + }); - } + //} } @@ -560,6 +574,8 @@ namespace IRaCIS.Core.Infra.EFCore.Common //byzhouhang ObjectRelationParentId = x.TaskMedicalReviewId, + + IsDistinctionInterface=false, }, new { QuestionAnswerList = list.Join(questionNameList, t => t.ReadingMedicineQuestionId, u => u.ReadingMedicineQuestionId, (t, u) => new { t.Answer, u.QuestionName, u.ShowOrder }).OrderBy(t => t.ShowOrder).ToList(), @@ -577,6 +593,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common await InsertInspection(entity, type, x => new InspectionConvertDTO() { + IsDistinctionInterface=false, VisitTaskId = entity.VisitTaskId, ObjectRelationParentId = entity.TaskMedicalReviewId, @@ -585,470 +602,6 @@ namespace IRaCIS.Core.Infra.EFCore.Common } - //肿瘤学阅片结果 - - foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(ReadingOncologyTaskInfo))) - { - var type = AuditOpt.Add; - - var entity = item.Entity as ReadingOncologyTaskInfo; - - await InsertInspection(entity, type, x => new InspectionConvertDTO() - { - VisitTaskId = entity.VisitTaskId, - - ObjectRelationParentId = entity.VisitTaskId, - - }); - } - - - //任务 - 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() { }; - - //访视任务-- 非Dicom 阅片 - if (_userInfo.RequestUrl == "ReadingImageTask/SubmitVisitTaskQuestions" && entity.ReadingTaskState != ReadingTaskState.HaveSigned && type == AuditOpt.Update) - { - //提交访视任务的时候 会多次更新同一个记录 只记录最后一次 - return; - } - - - - //Dicom 阅片 签名 - if (_userInfo.RequestUrl == "ReadingImageTask/SubmitDicomVisitTask") - { - //跳转阅片结果需要该参数 - var subjectCode = _dbContext.Subject.Where(t => t.Id == entity.SubjectId).Select(t => t.Code).First(); - obj = new { SubjectCode = subjectCode }; - } - - #region 裁判、肿瘤学、全局 都是通用的 - - //裁判任务 结果的保存 和签名提交 - if (entity.JudgeResultTaskId != null && (_userInfo.RequestUrl == "ReadingImageTask/SaveJudgeVisitTaskResult" || _userInfo.RequestUrl == "ReadingImageTask/SubmitJudgeVisitTaskResult")) - { - 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" }; - } - - #region 通过链接跳转 2022 12-19 - - ////肿瘤学任务 - //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.OrderBy(t => t.ShowOrder).Select(u => new { u.QuestionName, u.Answer }).ToList(), - - // GlobalQuestionAnswerList = g.OrderBy(t => t.ShowOrder).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 }; - //} - - #endregion - - #endregion - - - 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, - - ObjectRelationParentId3 = entity.TrialReadingCriterionId, - - }, obj); - } - - - - #region 阅片结果 - - - #region 暂时不区分标准 - - //保存影像质量 多条记录,只记录一条稽查 - if (entitys.Any(x => x.Entity.GetType() == typeof(ReadingTaskQuestionAnswer))) - { - // 保存影像质量 、 修改整体肿瘤评估结果 、 非dicom 保存访视阅片结果 - if (_userInfo.RequestUrl == "ReadingImageTask/changeDicomReadingQuestionAnswer" - || _userInfo.RequestUrl == "ReadingImageTask/saveImageQuality" - || _userInfo.RequestUrl == "ReadingImageTask/saveVisitTaskQuestions") - { - var type = AuditOpt.Add; - - //具体的答案 - var taskQuestionAnswerList = entitys.Where(x => x.Entity.GetType() == typeof(ReadingTaskQuestionAnswer)).Select(t => t.Entity as ReadingTaskQuestionAnswer).ToList(); - - //获取问题名称 组合成数组 - var quesionList = await _dbContext.ReadingQuestionTrial.Where(t => taskQuestionAnswerList.Select(k => k.ReadingQuestionTrialId).Contains(t.Id)).Select(t => new - { - t.QuestionName, - QuestionId = t.Id, - t.DictionaryCode, - t.ShowOrder - }).OrderBy(t => t.ShowOrder).ToListAsync(); - - - var firstEntity = taskQuestionAnswerList.First(); - - var cloneEntity = firstEntity.Clone(); - - //保证Id 唯一 - cloneEntity.Id = IdentifierHelper.CreateGuid(firstEntity.ReadingQuestionCriterionTrialId.ToString(), firstEntity.ReadingQuestionTrialId.ToString(), firstEntity.VisitTaskId.ToString()); - - await InsertInspection(cloneEntity, type, x => new InspectionConvertDTO() - { - VisitTaskId = x.VisitTaskId, - - ObjectRelationParentId = x.VisitTaskId, - - TrialReadingCriterionId = x.ReadingQuestionCriterionTrialId, - - }, new { QuestionAnswerList = taskQuestionAnswerList.Join(quesionList, t => t.ReadingQuestionTrialId, u => u.QuestionId, (t, u) => new { t.Answer, u.DictionaryCode, u.QuestionName, u.ShowOrder }).OrderBy(t => t.ShowOrder).ToList() }); - - - } - - - } - - //病灶这里操作 ReadingTableAnswerRowInfo ReadingTableQuestionAnswer - - foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(ReadingTableAnswerRowInfo))) - { - - var type = GetEntityAuditOpt(item); - - var entity = item.Entity as ReadingTableAnswerRowInfo; - - var tableQuestionAnswerList = entitys.Where(x => x.Entity.GetType() == typeof(ReadingTableQuestionAnswer)).Select(t => t.Entity as ReadingTableQuestionAnswer).Where(t => t.RowId == entity.Id).ToList(); - - - //获取表格问题名称 组合成数组 - var tableQuesionList = await _dbContext.ReadingTableQuestionTrial.Where(t => tableQuestionAnswerList.Select(k => k.TableQuestionId).Contains(t.Id)).Select(t => - new - { - TrialReadingCriterionId = t.ReadingQuestionTrial.ReadingQuestionCriterionTrialId, //标准Id - Type = t.ReadingQuestionTrial.QuestionName, //病灶类型 - t.ReadingQuestionTrial.Unit, - t.ReadingQuestionTrial.CustomUnit, - t.DictionaryCode, - t.QuestionName, - QuestionId = t.Id, - t.ShowOrder - }) - .OrderBy(t => t.ShowOrder).ToListAsync(); - - var trialReadingCriterionId = tableQuesionList.FirstOrDefault()?.TrialReadingCriterionId; - - //获取表名称 类型名称(病灶类型) 不用查 从项目问题的稽查记录里面去取 - //var tableName = await _dbContext.ReadingQuestionTrial.Where(t => t.Id == entity.QuestionId).Select(t => t.QuestionName).FirstOrDefaultAsync(); - - //分裂病灶 需要原病灶的标识 - - //if (_userInfo.RequestUrl == " ReadingImageTask/splitLesion") - var originalRowMark = string.Empty; - if (entity.SplitRowId != null) - { - - originalRowMark = await _dbContext.ReadingTableAnswerRowInfo.Where(t => t.Id == entity.SplitRowId).Select(t => t.RowMark).FirstOrDefaultAsync(); - } - - //处理标识 因为触发器在稽查后才进行操作 - - entity.RowMark = entity.OrderMark + entity.RowIndex.GetLesionMark(); - - - - await InsertInspection(entity, type, x => new InspectionConvertDTO() - { - VisitTaskId = x.VisitTaskId, - - ObjectRelationParentId = x.VisitTaskId, - - TrialReadingCriterionId = trialReadingCriterionId, - - ObjectRelationParentId2 = x.QuestionId - - }, new - { - OriginalRowMark = originalRowMark, - //TableName = tableName, - QuestionAnswerList = - - //需要手动添加病灶类型 - tableQuestionAnswerList.Join(tableQuesionList, t => t.TableQuestionId, u => u.QuestionId, (t, u) => - new - { - t.Answer /*u.Unit==ValueUnit.Custom? t.Answer+u.CustomUnit:(u.Unit != ValueUnit.None|| u.Unit != null)*/, - u.QuestionName, - u.DictionaryCode, - u.ShowOrder - } - ).OrderBy(t => t.ShowOrder).ToList() - }); - - - ////添加/修改病灶接口 只会对单个病灶进行操作 - //if (_userInfo.RequestUrl == "ReadingImageTask/submitTableQuestion") - //{ - //} - - ////删除病灶接口 里面也有更新 - //if (_userInfo.RequestUrl == "ReadingImageTask/deleteReadingRowAnswer") - //{ - // //有删除 有修改 多条稽查记录 - - // var deleteList = entitys.Where(x => x.Entity.GetType() == typeof(ReadingTableQuestionAnswer) && GetEntityAuditOpt(x) == AuditOpt.Deleted).Select(t => t.Entity as ReadingTableQuestionAnswer).ToList(); - - // var updateList = entitys.Where(x => x.Entity.GetType() == typeof(ReadingTableQuestionAnswer) && GetEntityAuditOpt(x) == AuditOpt.Update).Select(t => t.Entity as ReadingTableQuestionAnswer).ToList(); - //} - - } - - - #endregion - - - - #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(ReadingTaskQuestionAnswer))) - //{ - // var type = AuditOpt.Add; - // var list = entitys.Where(x => x.Entity.GetType() == typeof(ReadingTaskQuestionAnswer)).Select(t => t.Entity as ReadingTaskQuestionAnswer); - - - // //获取问题名称 组合成数组 - // var quesionList = await _dbContext.ReadingQuestionTrial.Where(t => list.Select(k => k.ReadingQuestionTrialId).Contains(t.Id)).Select(t => new - // { - // t.QuestionName, - // QuestionId = t.Id, - // t.DictionaryCode, - // t.ShowOrder - // }).OrderBy(t => t.ShowOrder).ToListAsync(); - - - // var firstEntity = list.First(); - - // var cloneEntity = firstEntity.Clone(); - - // //保证Id 唯一 - // cloneEntity.Id = IdentifierHelper.CreateGuid(firstEntity.ReadingQuestionCriterionTrialId.ToString(), firstEntity.ReadingQuestionTrialId.ToString(), firstEntity.VisitTaskId.ToString()); - - // await InsertInspection(cloneEntity, type, x => new InspectionConvertDTO() - // { - // VisitTaskId = x.VisitTaskId, - - // ObjectRelationParentId = x.VisitTaskId, - - // TrialReadingCriterionId = x.ReadingQuestionCriterionTrialId, - - // }, new { QuestionAnswerList = list.Join(quesionList, t => t.ReadingQuestionTrialId, u => u.QuestionId, (t, u) => new { t.Answer, u.DictionaryCode, u.QuestionName, u.ShowOrder }).OrderBy(t => t.ShowOrder).ToList() }); - //} - - - - - - // 全局 阅片结果 - if (entitys.Any(x => x.Entity.GetType() == typeof(ReadingGlobalTaskInfo))) - { - var type = AuditOpt.Add; - - var list = entitys.Where(x => x.Entity.GetType() == typeof(ReadingGlobalTaskInfo)).Select(t => t.Entity as ReadingGlobalTaskInfo); - - - foreach (var group in list.GroupBy(t => t.TaskId)) - { - var questionAnswerList = group.Where(t => t.QuestionId != null).ToList(); - - - var questionIdList = questionAnswerList.Select(t => t.QuestionId).ToList(); - - var quesionList = await _dbContext.ReadingQuestionTrial.Where(t => questionIdList.Contains(t.Id)).Select(t => new - { - - t.QuestionName, - QuestionId = t.Id, - t.DictionaryCode, - t.ShowOrder - }).OrderBy(t => t.ShowOrder).ToListAsync(); - - - //获取访视的评估结果 也要记录稽查 - var visitAnswerList = await _dbContext.ReadingTaskQuestionAnswer.Where(t => t.VisitTaskId == group.Key && questionIdList.Contains(t.ReadingQuestionTrialId)).Select(u => new - { - QuestionId = u.ReadingQuestionTrialId, - u.Answer - }).ToListAsync(); - - - - var firstEntity = questionAnswerList.First(); - - var cloneEntity = firstEntity.Clone(); - - - //保证Id 唯一 - cloneEntity.Id = IdentifierHelper.CreateGuid(firstEntity.GlobalTaskId.ToString(), firstEntity.TaskId.ToString()); - - var trialReadingCriterionId = await _dbContext.VisitTask.Where(t => t.Id == cloneEntity.GlobalTaskId).Select(t => t.TrialReadingCriterionId).FirstOrDefaultAsync(); - - - await InsertInspection(cloneEntity, type, x => new InspectionConvertDTO() - { - VisitTaskId = x.TaskId, - - TrialReadingCriterionId = trialReadingCriterionId, - - ObjectRelationParentId = x.TaskId, - - }, new - { - VisitQuestionAnswerList = visitAnswerList.Join(quesionList, t => t.QuestionId, u => u.QuestionId, (t, u) => new { t.Answer, u.QuestionName, u.DictionaryCode, u.ShowOrder }).OrderBy(t => t.ShowOrder).ToList(), - Reason = group.Where(t => t.QuestionId == null && t.GlobalAnswerType == GlobalAnswerType.Reason).FirstOrDefault()?.Answer, - AgreeOrNot = group.Where(t => t.QuestionId == null && t.GlobalAnswerType == GlobalAnswerType.AgreeOrNot).FirstOrDefault()?.Answer, - UpdateType = group.Where(t => t.QuestionId == null && t.GlobalAnswerType == GlobalAnswerType.UpdateType).FirstOrDefault()?.Answer, - QuestionAnswerList = questionAnswerList.Join(quesionList, t => t.QuestionId, u => u.QuestionId, (t, u) => new { t.Answer, u.QuestionName, u.DictionaryCode, u.ShowOrder }).OrderBy(t => t.ShowOrder).ToList() - }); - } - - } - - #endregion - // Qc 问题答案 @@ -1736,32 +1289,6 @@ namespace IRaCIS.Core.Infra.EFCore.Common }); } - //if(entitys.Any(x => x.Entity.GetType() == typeof(NoneDicomStudyFile))) - //{ - // var list = entitys.Where(x => x.Entity.GetType() == typeof(NoneDicomStudyFile)).Select(t=>t.Entity); - - // var first = list.First() as NoneDicomStudyFile; - - // if(first.NoneDicomStudy == null) - // { - // first.NoneDicomStudy = _dbContext.NoneDicomStudy.Find(first.NoneDicomStudyId); - // } - - // await InsertInspection(first, type, x => new InspectionConvertDTO() - // { - // GeneralId=first.NoneDicomStudyId, - - // SubjectVisitId= first.NoneDicomStudy.SubjectVisitId, - - - // ObjectRelationParentId = x.NoneDicomStudyId, - - // }); - - //} - - - #region 阅片人入组 @@ -2064,6 +1591,437 @@ namespace IRaCIS.Core.Infra.EFCore.Common #endregion + + #region 阅片结果 + + + #region 暂时不区分标准 + + //保存影像质量 多条记录,只记录一条稽查 + if (entitys.Any(x => x.Entity.GetType() == typeof(ReadingTaskQuestionAnswer))) + { + // 保存影像质量 、 修改整体肿瘤评估结果 、 非dicom 保存访视阅片结果 + if (_userInfo.RequestUrl == "ReadingImageTask/changeDicomReadingQuestionAnswer" + || _userInfo.RequestUrl == "ReadingImageTask/saveImageQuality" + || _userInfo.RequestUrl == "ReadingImageTask/saveVisitTaskQuestions") + { + var type = AuditOpt.Add; + + //具体的答案 + var taskQuestionAnswerList = entitys.Where(x => x.Entity.GetType() == typeof(ReadingTaskQuestionAnswer)).Select(t => t.Entity as ReadingTaskQuestionAnswer).ToList(); + + //获取问题名称 组合成数组 + var quesionList = await _dbContext.ReadingQuestionTrial.Where(t => taskQuestionAnswerList.Select(k => k.ReadingQuestionTrialId).Contains(t.Id)).Select(t => new + { + t.QuestionName, + QuestionId = t.Id, + t.DictionaryCode, + t.ShowOrder + }).OrderBy(t => t.ShowOrder).ToListAsync(); + + + var firstEntity = taskQuestionAnswerList.First(); + + var cloneEntity = firstEntity.Clone(); + + //保证Id 唯一 + cloneEntity.Id = IdentifierHelper.CreateGuid(firstEntity.ReadingQuestionCriterionTrialId.ToString(), firstEntity.ReadingQuestionTrialId.ToString(), firstEntity.VisitTaskId.ToString()); + + await InsertInspection(cloneEntity, type, x => new InspectionConvertDTO() + { + VisitTaskId = x.VisitTaskId, + + ObjectRelationParentId = x.VisitTaskId, + + TrialReadingCriterionId = x.ReadingQuestionCriterionTrialId, + + }, new { QuestionAnswerList = taskQuestionAnswerList.Join(quesionList, t => t.ReadingQuestionTrialId, u => u.QuestionId, (t, u) => new { t.Answer, u.DictionaryCode, u.QuestionName, u.ShowOrder }).OrderBy(t => t.ShowOrder).ToList() }); + + + } + + + } + + //病灶这里操作 ReadingTableAnswerRowInfo ReadingTableQuestionAnswer + + foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(ReadingTableAnswerRowInfo))) + { + + var type = GetEntityAuditOpt(item); + + var entity = item.Entity as ReadingTableAnswerRowInfo; + + var tableQuestionAnswerList = entitys.Where(x => x.Entity.GetType() == typeof(ReadingTableQuestionAnswer)).Select(t => t.Entity as ReadingTableQuestionAnswer).Where(t => t.RowId == entity.Id).ToList(); + + + //获取表格问题名称 组合成数组 + var tableQuesionList = await _dbContext.ReadingTableQuestionTrial.Where(t => tableQuestionAnswerList.Select(k => k.TableQuestionId).Contains(t.Id)).Select(t => + new + { + TrialReadingCriterionId = t.ReadingQuestionTrial.ReadingQuestionCriterionTrialId, //标准Id + Type = t.ReadingQuestionTrial.QuestionName, //病灶类型 + t.ReadingQuestionTrial.Unit, + t.ReadingQuestionTrial.CustomUnit, + t.DictionaryCode, + t.QuestionName, + QuestionId = t.Id, + t.ShowOrder + }) + .OrderBy(t => t.ShowOrder).ToListAsync(); + + var trialReadingCriterionId = tableQuesionList.FirstOrDefault()?.TrialReadingCriterionId; + + //获取表名称 类型名称(病灶类型) 不用查 从项目问题的稽查记录里面去取 + //var tableName = await _dbContext.ReadingQuestionTrial.Where(t => t.Id == entity.QuestionId).Select(t => t.QuestionName).FirstOrDefaultAsync(); + + //分裂病灶 需要原病灶的标识 + + //if (_userInfo.RequestUrl == " ReadingImageTask/splitLesion") + var originalRowMark = string.Empty; + if (entity.SplitRowId != null) + { + + originalRowMark = await _dbContext.ReadingTableAnswerRowInfo.Where(t => t.Id == entity.SplitRowId).Select(t => t.RowMark).FirstOrDefaultAsync(); + } + + //处理标识 因为触发器在稽查后才进行操作 + + entity.RowMark = entity.OrderMark + entity.RowIndex.GetLesionMark(); + + + + await InsertInspection(entity, type, x => new InspectionConvertDTO() + { + VisitTaskId = x.VisitTaskId, + + ObjectRelationParentId = x.VisitTaskId, + + TrialReadingCriterionId = trialReadingCriterionId, + + ObjectRelationParentId2 = x.QuestionId + + }, new + { + OriginalRowMark = originalRowMark, + //TableName = tableName, + QuestionAnswerList = + + //需要手动添加病灶类型 + tableQuestionAnswerList.Join(tableQuesionList, t => t.TableQuestionId, u => u.QuestionId, (t, u) => + new + { + t.Answer /*u.Unit==ValueUnit.Custom? t.Answer+u.CustomUnit:(u.Unit != ValueUnit.None|| u.Unit != null)*/, + u.QuestionName, + u.DictionaryCode, + u.ShowOrder + } + ).OrderBy(t => t.ShowOrder).ToList() + }); + + + ////添加/修改病灶接口 只会对单个病灶进行操作 + //if (_userInfo.RequestUrl == "ReadingImageTask/submitTableQuestion") + //{ + //} + + ////删除病灶接口 里面也有更新 + //if (_userInfo.RequestUrl == "ReadingImageTask/deleteReadingRowAnswer") + //{ + // //有删除 有修改 多条稽查记录 + + // var deleteList = entitys.Where(x => x.Entity.GetType() == typeof(ReadingTableQuestionAnswer) && GetEntityAuditOpt(x) == AuditOpt.Deleted).Select(t => t.Entity as ReadingTableQuestionAnswer).ToList(); + + // var updateList = entitys.Where(x => x.Entity.GetType() == typeof(ReadingTableQuestionAnswer) && GetEntityAuditOpt(x) == AuditOpt.Update).Select(t => t.Entity as ReadingTableQuestionAnswer).ToList(); + //} + + } + + + #endregion + + + + #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))) + { + var type = AuditOpt.Add; + + var list = entitys.Where(x => x.Entity.GetType() == typeof(ReadingGlobalTaskInfo)).Select(t => t.Entity as ReadingGlobalTaskInfo); + + + foreach (var group in list.GroupBy(t => t.TaskId)) + { + var questionAnswerList = group.Where(t => t.QuestionId != null).ToList(); + + + var questionIdList = questionAnswerList.Select(t => t.QuestionId).ToList(); + + var quesionList = await _dbContext.ReadingQuestionTrial.Where(t => questionIdList.Contains(t.Id)).Select(t => new + { + + t.QuestionName, + QuestionId = t.Id, + t.DictionaryCode, + t.ShowOrder + }).OrderBy(t => t.ShowOrder).ToListAsync(); + + + //获取访视的评估结果 也要记录稽查 + var visitAnswerList = await _dbContext.ReadingTaskQuestionAnswer.Where(t => t.VisitTaskId == group.Key && questionIdList.Contains(t.ReadingQuestionTrialId)).Select(u => new + { + QuestionId = u.ReadingQuestionTrialId, + u.Answer + }).ToListAsync(); + + + + var firstEntity = questionAnswerList.First(); + + var cloneEntity = firstEntity.Clone(); + + + //保证Id 唯一 + cloneEntity.Id = IdentifierHelper.CreateGuid(firstEntity.GlobalTaskId.ToString(), firstEntity.TaskId.ToString()); + + var trialReadingCriterionId = await _dbContext.VisitTask.Where(t => t.Id == cloneEntity.GlobalTaskId).Select(t => t.TrialReadingCriterionId).FirstOrDefaultAsync(); + + + await InsertInspection(cloneEntity, type, x => new InspectionConvertDTO() + { + VisitTaskId = x.TaskId, + + TrialReadingCriterionId = trialReadingCriterionId, + + ObjectRelationParentId = x.TaskId, + + }, new + { + VisitQuestionAnswerList = visitAnswerList.Join(quesionList, t => t.QuestionId, u => u.QuestionId, (t, u) => new { t.Answer, u.QuestionName, u.DictionaryCode, u.ShowOrder }).OrderBy(t => t.ShowOrder).ToList(), + Reason = group.Where(t => t.QuestionId == null && t.GlobalAnswerType == GlobalAnswerType.Reason).FirstOrDefault()?.Answer, + AgreeOrNot = group.Where(t => t.QuestionId == null && t.GlobalAnswerType == GlobalAnswerType.AgreeOrNot).FirstOrDefault()?.Answer, + UpdateType = group.Where(t => t.QuestionId == null && t.GlobalAnswerType == GlobalAnswerType.UpdateType).FirstOrDefault()?.Answer, + QuestionAnswerList = questionAnswerList.Join(quesionList, t => t.QuestionId, u => u.QuestionId, (t, u) => new { t.Answer, u.QuestionName, u.DictionaryCode, u.ShowOrder }).OrderBy(t => t.ShowOrder).ToList() + }); + } + + } + + + //肿瘤学阅片结果 + + foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(ReadingOncologyTaskInfo))) + { + var type = AuditOpt.Add; + + var entity = item.Entity as ReadingOncologyTaskInfo; + + await InsertInspection(entity, type, x => new InspectionConvertDTO() + { + VisitTaskId = entity.VisitTaskId, + + ObjectRelationParentId = entity.VisitTaskId, + + }); + } + + + #endregion + + + //任务 + 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() { }; + + //访视任务-- 非Dicom 阅片 + if (_userInfo.RequestUrl == "ReadingImageTask/SubmitVisitTaskQuestions" && entity.ReadingTaskState != ReadingTaskState.HaveSigned && type == AuditOpt.Update) + { + //提交访视任务的时候 会多次更新同一个记录 只记录最后一次 + return; + } + + + + //Dicom 阅片 签名 + if (_userInfo.RequestUrl == "ReadingImageTask/SubmitDicomVisitTask") + { + //跳转阅片结果需要该参数 + var subjectCode = _dbContext.Subject.Where(t => t.Id == entity.SubjectId).Select(t => t.Code).First(); + obj = new { SubjectCode = subjectCode }; + } + + #region 裁判、肿瘤学、全局 都是通用的 + + //裁判任务 结果的保存 和签名提交 + if (entity.JudgeResultTaskId != null && (_userInfo.RequestUrl == "ReadingImageTask/SaveJudgeVisitTaskResult" || _userInfo.RequestUrl == "ReadingImageTask/SubmitJudgeVisitTaskResult")) + { + + var visitTaskNum = entity.VisitTaskNum - ReadingCommon.TaskNumDic[ReadingCategory.Judge]; + var list = await _dbContext.VisitTask.Where(t => t.TaskState == TaskState.Effect && t.SubjectId == entity.SubjectId && t.VisitTaskNum == 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" }; + } + + #region 通过链接跳转 2022 12-19 + + ////肿瘤学任务 + //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.OrderBy(t => t.ShowOrder).Select(u => new { u.QuestionName, u.Answer }).ToList(), + + // GlobalQuestionAnswerList = g.OrderBy(t => t.ShowOrder).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 }; + //} + + #endregion + + #endregion + + + 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, + + ObjectRelationParentId3 = entity.TrialReadingCriterionId, + + }, obj); + } + + + #endregion @@ -2098,7 +2056,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common var generalId = (inspection.GeneralId != null && inspection.GeneralId != Guid.Empty) ? inspection.GeneralId : entityObj.Id; inspection.GeneralId = generalId; - inspection.Identification = await GetInspectionRecordIdentificationAsync(inspection, entityObj, type, inspection.IsDistinctionInterface); + inspection.Identification = await GetInspectionRecordIdentificationAsync(inspection, entityObj, type, inspection.IsDistinctionInterface)+inspection.ExtraIndentification; //将实体对象属性 映射到稽查实体 MapEntityPropertyToAuditEntity(entityObj, inspection); @@ -2591,6 +2549,20 @@ namespace IRaCIS.Core.Infra.EFCore.Common } break; + + //系统 项目公用 + case nameof(ReadingCriterionDictionary): + + var readingCriterionDictionary = entityObj as ReadingCriterionDictionary; + + if (readingCriterionDictionary.IsSystemCriterion) + { + type = $"{type}/{readingCriterionDictionary.ParentCode}"; + } + + break; + + } #endregion diff --git a/IRaCIS.Core.Infra.EFCore/Common/Dto/SetDictionaryValueDto.cs b/IRaCIS.Core.Infra.EFCore/Common/Dto/SetDictionaryValueDto.cs index 11404e29b..9aad9d978 100644 --- a/IRaCIS.Core.Infra.EFCore/Common/Dto/SetDictionaryValueDto.cs +++ b/IRaCIS.Core.Infra.EFCore/Common/Dto/SetDictionaryValueDto.cs @@ -150,6 +150,8 @@ namespace IRaCIS.Core.Infra.EFCore.Common.Dto //标识操作 是否区分接口 public bool IsDistinctionInterface=true; + public string ExtraIndentification = string.Empty; + }