From 73cbf96a65c097cafb318400471a9dd65228d75c Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Tue, 28 Nov 2023 16:46:27 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E7=A8=BD=E6=9F=A52?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.API/IRaCIS.Core.API.csproj | 2 +- .../ClinicalData/ClinicalAnswerService.cs | 17 +- .../Service/Reading/Dto/ClinicalAnswerDto.cs | 2 + .../ClinicalQuestionAnswer/ClinicalForm.cs | 9 +- .../Common/AuditingData.cs | 235 +++++++++++++++++- 5 files changed, 252 insertions(+), 13 deletions(-) diff --git a/IRaCIS.Core.API/IRaCIS.Core.API.csproj b/IRaCIS.Core.API/IRaCIS.Core.API.csproj index 28ac6a452..ad4a9289f 100644 --- a/IRaCIS.Core.API/IRaCIS.Core.API.csproj +++ b/IRaCIS.Core.API/IRaCIS.Core.API.csproj @@ -14,7 +14,7 @@ .\IRaCIS.Core.API.xml - 1701;1702;1591; + 1701;1702;1591;CS1570; ..\bin\ diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs index d5055d242..f3a2cc883 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -352,14 +352,15 @@ namespace IRaCIS.Core.Application.Service ClinicalForm clinicalForm = new ClinicalForm() { }; - clinicalForm = new ClinicalForm() - { - ClinicalDataTrialSetId = inDto.ClinicalDataTrialSetId, - SubjectId = inDto.SubjectId, - TrialId= inDto.TrialId, - Id = inDto.ClinicalFormId ?? NewId.NextGuid(), - ReadingId = inDto.ReadingId, - }; + clinicalForm = new ClinicalForm() + { + ClinicalDataTrialSetId = inDto.ClinicalDataTrialSetId, + SubjectId = inDto.SubjectId, + PicturePath = inDto.PicturePath, + TrialId = inDto.TrialId, + Id = inDto.ClinicalFormId ?? NewId.NextGuid(), + ReadingId = inDto.ReadingId, + }; if (inDto.ClinicalFormId!=null&&(await _readModuleCriterionFromRepository.AnyAsync(x => x.ClinicalFormId == inDto.ClinicalFormId.Value))) { diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs index 00d9647e9..fb669cb58 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs @@ -349,6 +349,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public Guid? ClinicalFormId { get; set; } + public string PicturePath { get; set; } = string.Empty; + public Guid SubjectId { get; set; } public Guid TrialId { get; set; } diff --git a/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalForm.cs b/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalForm.cs index b59d1374d..6ccb8f9cf 100644 --- a/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalForm.cs +++ b/IRaCIS.Core.Domain/Reading/ClinicalQuestionAnswer/ClinicalForm.cs @@ -28,11 +28,16 @@ namespace IRaCIS.Core.Domain.Models /// 检查日期 /// public DateTime? CheckDate { get; set; } - + /// + /// 截图地址 + /// + public string PicturePath { get; set; } = string.Empty; + + /// /// 创建日期 /// - public DateTime CreateTime { get; set; } + public DateTime CreateTime { get; set; } /// /// 创建人 diff --git a/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs b/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs index fa20e384d..167620876 100644 --- a/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs +++ b/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs @@ -7,12 +7,14 @@ using MassTransit; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.ChangeTracking; using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; +using NetTopologySuite.Index.HPRtree; using Newtonsoft.Json; using SharpCompress.Common; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; +using System.Security.Cryptography.X509Certificates; using System.Threading.Tasks; @@ -2067,6 +2069,232 @@ namespace IRaCIS.Core.Infra.EFCore.Common + + //临床数据上传PDF + + foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(ReadingClinicalDataPDF))) + { + var type = GetEntityAuditOpt(item); + + var entity = item.Entity as ReadingClinicalDataPDF; + + var clinicalData = await _dbContext.ReadingClinicalData.Where(t => t.Id == entity.ReadingClinicalDataId).FirstOrDefaultAsync(); + var clinicalDataTrialSet = await _dbContext.ClinicalDataTrialSet.Where(t => t.Id == clinicalData.ClinicalDataTrialSetId).FirstOrDefaultAsync(); + + SubjectVisit? visit = await _dbContext.SubjectVisit.Where(x => x.Id == clinicalData.ReadingId).FirstOrDefaultAsync(); + Site? siteInfo = null; + Subject? subject = null; + + //阅片标准 + var trialReadingCriterionIdList = await _dbContext.TrialClinicalDataSetCriterion.Where(t => t.TrialClinicalDataSetId == clinicalDataTrialSet.Id).Select(t => t.TrialReadingCriterionId).ToListAsync(); + + + + //阅片标准 + var criterionNameList = await _dbContext.ReadingQuestionCriterionTrial.Where(t => trialReadingCriterionIdList.Contains(t.Id)).OrderBy(t => t.ShowOrder).Select(t => t.CriterionName).ToListAsync(); + + + + if (visit != null) + { + siteInfo = await _dbContext.Site.Where(x => x.Id == visit.SiteId).FirstOrDefaultAsync(); + subject= await _dbContext.Subject.Where(x => x.Id == clinicalData.SubjectId).FirstOrDefaultAsync(); + } + + Guid? subjectVisitId = visit==null?null: visit.Id; + await InsertInspection(entity, type, x => new InspectionConvertDTO() + { + TrialId= clinicalData.TrialId, + SubjectId=clinicalData.SubjectId, + SubjectVisitId= subjectVisitId, + },new { + SiteCode = siteInfo == null ? "" : siteInfo.SiteCode, + SubjectCode = subject == null ? "" : subject.Code, + VisitName= visit==null?"": visit.VisitName, + clinicalDataTrialSet.ClinicalDataSetName, + clinicalDataTrialSet.ClinicalDataLevel, + clinicalDataTrialSet.ClinicalUploadType, + CriterionNames = string.Join(",", criterionNameList.Distinct()), + FileCount= 1, + + }); + } + + + foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(ClinicalForm))) + { + var type = GetEntityAuditOpt(item); + + var entity = item.Entity as ClinicalForm; + + var clinicalDataTrialSet = await _dbContext.ClinicalDataTrialSet.Where(t => t.Id == entity.ClinicalDataTrialSetId).FirstOrDefaultAsync(); + + SubjectVisit? visit = await _dbContext.SubjectVisit.Where(x => x.Id == entity.ReadingId).FirstOrDefaultAsync(); + Site? siteInfo = null; + Subject? subject = null; + + //阅片标准 + var trialReadingCriterionIdList = await _dbContext.TrialClinicalDataSetCriterion.Where(t => t.TrialClinicalDataSetId == clinicalDataTrialSet.Id).Select(t => t.TrialReadingCriterionId).ToListAsync(); + + + + //阅片标准 + var criterionNameList = await _dbContext.ReadingQuestionCriterionTrial.Where(t => trialReadingCriterionIdList.Contains(t.Id)).OrderBy(t => t.ShowOrder).Select(t => t.CriterionName).ToListAsync(); + + + + if (visit != null) + { + siteInfo = await _dbContext.Site.Where(x => x.Id == visit.SiteId).FirstOrDefaultAsync(); + subject = await _dbContext.Subject.Where(x => x.Id == entity.SubjectId).FirstOrDefaultAsync(); + } + + Guid? subjectVisitId = visit == null ? null : visit.Id; + await InsertInspection(entity, type, x => new InspectionConvertDTO() + { + TrialId = entity.TrialId, + SubjectId = entity.SubjectId, + SubjectVisitId = subjectVisitId, + }, new + { + SiteCode = siteInfo == null ? "" : siteInfo.SiteCode, + SubjectCode = subject == null ? "" : subject.Code, + VisitName = visit == null ? "" : visit.VisitName, + clinicalDataTrialSet.ClinicalDataSetName, + clinicalDataTrialSet.ClinicalDataLevel, + clinicalDataTrialSet.ClinicalUploadType, + CriterionNames = string.Join(",", criterionNameList.Distinct()), + + + }); + } + + + //临床数据表单确认 + var readModuleCriterionFromList = entitys.Where(x => x.Entity.GetType() == typeof(ReadModuleCriterionFrom)).ToList(); + if (readModuleCriterionFromList.Count() > 0) + { + var item = readModuleCriterionFromList.FirstOrDefault(); + + var readModuleCriterionFrom = item.Entity as ReadModuleCriterionFrom; + var type = GetEntityAuditOpt(item); + + + var clinicalFormIds = new List(); + var criterionIds = new List(); + readModuleCriterionFromList.ForEach(x => { + var form = x.Entity as ReadModuleCriterionFrom; + clinicalFormIds.Add(form.ClinicalFormId); + }); + + var clinicalFormList = await _dbContext.ClinicalForm.Where(t =>clinicalFormIds.Contains(t.Id)).ToListAsync(); + + var clinicalDataTrialSetIds = clinicalFormList.Select(x => x.ClinicalDataTrialSetId).ToList().Distinct(); + + + var readModule= await _dbContext.ReadModule.Where(t => t.Id == readModuleCriterionFrom.ReadModuleId).Include(x => x.SubjectVisit).FirstOrDefaultAsync(); + var latestScanDate = readModule.SubjectVisit.LatestScanDate; + + var clinicalDataTrialSetList = await _dbContext.ClinicalDataTrialSet.Where(t => clinicalDataTrialSetIds.Contains(t.Id)).ToListAsync(); + + + var clinicalSetIds = clinicalDataTrialSetList.Select(x => x.Id).ToList(); + + // 项目临床数据和标准的关联 + var trialReadingCriterionIdList = await _dbContext.TrialClinicalDataSetCriterion.Where(x => clinicalSetIds.Contains(x.TrialClinicalDataSetId)).Select(x => x.TrialReadingCriterionId).Distinct().ToListAsync(); + + // 标准 + var criterionNameList = await _dbContext.ReadingQuestionCriterionTrial.Where(t => trialReadingCriterionIdList.Contains(t.Id)).OrderBy(t => t.ShowOrder).Select(t => t.CriterionName).ToListAsync(); + + + + Subject subject = await _dbContext.Subject.Where(x => x.Id == readModule.SubjectId).FirstOrDefaultAsync(); + Site siteInfo = await _dbContext.Site.Where(x => x.Id == subject.SiteId).FirstOrDefaultAsync(); + + var clinicalDataSetNameList = clinicalDataTrialSetList.Select(x => x.ClinicalDataSetName).ToList(); + await InsertInspection(readModuleCriterionFrom, type, x => new InspectionConvertDTO() + { + TrialId = subject.TrialId, + SubjectId = subject.Id, + }, new + { + SiteCode = siteInfo == null ? "" : siteInfo.SiteCode, + SubjectCode = subject == null ? "" : subject.Code, + LatestScanDate= latestScanDate, + ClinicalDataSetName = string.Join(",", clinicalDataSetNameList), + ClinicalDataLevel = clinicalDataTrialSetList.Select(x => x.ClinicalDataLevel).FirstOrDefault(), + ClinicalUploadType = clinicalDataTrialSetList.Select(x => x.ClinicalUploadType).FirstOrDefault(), + CriterionNames = string.Join(",", criterionNameList.Distinct()), + RecordNumber= readModuleCriterionFromList.Count(), + + }); + } + + var readModuleList = entitys.Where(x => x.Entity.GetType() == typeof(ReadModule)).ToList(); + if (readModuleList.Count > 0) + { + List urlList = new List() { + "ClinicalAnswer/cRCCancelConfirmClinical", + }; + if (urlList.Contains(_userInfo.RequestUrl)) + { + var item = readModuleList.FirstOrDefault(); + var type = GetEntityAuditOpt(item); + var entity = item.Entity as ReadModule; + string extraIndentification = "/"+ _userInfo.RequestUrl; + + var readModuleCriterionFrom = await _dbContext.ReadModuleCriterionFrom.Where(t => t.ReadModuleId== entity.Id).FirstOrDefaultAsync(); + var latestScanDate = await _dbContext.ReadModule.Where(t => t.Id == entity.Id).Select(x => x.SubjectVisit.LatestScanDate).FirstOrDefaultAsync(); + Site? siteInfo = null; + Subject? subject = null; + //阅片标准 + + + var clinicalFormIds = await _dbContext.ReadModuleCriterionFrom.Where(x => x.ReadModuleId == entity.Id).Select(x => x.ClinicalFormId).ToListAsync(); + var clinicalDataTrialSetIds = await _dbContext.ClinicalForm.Where(x => clinicalFormIds.Contains(x.Id)).Select(x => x.ClinicalDataTrialSetId).Distinct().ToListAsync(); + + // 临床数据 + var clinicalDataTrialSetList = await _dbContext.ClinicalDataTrialSet.Where(x => clinicalDataTrialSetIds.Contains(x.Id)).ToListAsync(); + + var clinicalSetIds = clinicalDataTrialSetList.Select(x => x.Id).ToList(); + + // 项目临床数据和标准的关联 + var trialReadingCriterionIdList = await _dbContext.TrialClinicalDataSetCriterion.Where(x => clinicalSetIds.Contains(x.TrialClinicalDataSetId)).Select(x => x.TrialReadingCriterionId).Distinct().ToListAsync(); + + // 标准 + var criterionNameList = await _dbContext.ReadingQuestionCriterionTrial.Where(t => trialReadingCriterionIdList.Contains(t.Id)).OrderBy(t => t.ShowOrder).Select(t => t.CriterionName).ToListAsync(); + + + + subject = await _dbContext.Subject.Where(x => x.Id == entity.SubjectId).FirstOrDefaultAsync(); + siteInfo = await _dbContext.Site.Where(x => x.Id == subject.SiteId).FirstOrDefaultAsync(); + + var clinicalDataSetNameList = clinicalDataTrialSetList.Select(x => x.ClinicalDataSetName).ToList().Distinct(); + + + + + + await InsertInspection(readModuleCriterionFrom, type, x => new InspectionConvertDTO() + { + TrialId = subject.TrialId, + SubjectId = subject.Id, + }, new + { + SiteCode = siteInfo == null ? "" : siteInfo.SiteCode, + SubjectCode = subject == null ? "" : subject.Code, + LatestScanDate = latestScanDate, + ClinicalDataSetName = string.Join(",", clinicalDataSetNameList), + ClinicalDataLevel = clinicalDataTrialSetList.Select(x => x.ClinicalDataLevel).FirstOrDefault(), + ClinicalUploadType = clinicalDataTrialSetList.Select(x => x.ClinicalUploadType).FirstOrDefault(), + CriterionNames = string.Join(",", criterionNameList.Distinct()), + RecordNumber = clinicalFormIds.Count(), + + }); + } + } + + //系统临床数据配置 foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(ClinicalDataSystemSet))) @@ -2262,15 +2490,18 @@ namespace IRaCIS.Core.Infra.EFCore.Common var entity = item.Entity as ReadModule; + string extraIndentification = string.Empty; + object objData = new { }; + await InsertInspection(item.Entity as ReadModule, type, x => new InspectionConvertDTO() { ObjectRelationParentId = entity.SubjectVisitId, ObjectRelationParentId2 = entity.TrialReadingCriterionId, - + ExtraIndentification= extraIndentification, //SubjectVisitId = x.SubjectVisitId, IsDistinctionInterface = false, - }); + }, objData); } From aacfbf7178e18ef4186e45e0413ab2fbc54b3f9b Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Tue, 28 Nov 2023 16:51:16 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E7=A8=BD=E6=9F=A53?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs b/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs index ee620541b..d77762729 100644 --- a/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs +++ b/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs @@ -2216,6 +2216,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common var clinicalDataSetNameList = clinicalDataTrialSetList.Select(x => x.ClinicalDataSetName).ToList(); await InsertInspection(readModuleCriterionFrom, type, x => new InspectionConvertDTO() { + GeneralId= readModuleCriterionFrom.ReadModuleId, TrialId = subject.TrialId, SubjectId = subject.Id, }, new @@ -2279,6 +2280,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common await InsertInspection(readModuleCriterionFrom, type, x => new InspectionConvertDTO() { + GeneralId= entity.Id, TrialId = subject.TrialId, SubjectId = subject.Id, }, new From 638fb12e16b6f2bc11663cc9f8ae172122d3be5e Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Tue, 28 Nov 2023 17:40:05 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E7=A8=BD=E6=9F=A54?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Common/AuditingData.cs | 128 +++++++++--------- 1 file changed, 61 insertions(+), 67 deletions(-) diff --git a/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs b/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs index d77762729..484db67a6 100644 --- a/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs +++ b/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs @@ -2216,7 +2216,8 @@ namespace IRaCIS.Core.Infra.EFCore.Common var clinicalDataSetNameList = clinicalDataTrialSetList.Select(x => x.ClinicalDataSetName).ToList(); await InsertInspection(readModuleCriterionFrom, type, x => new InspectionConvertDTO() { - GeneralId= readModuleCriterionFrom.ReadModuleId, + ObjectRelationParentId= readModuleCriterionFrom.ReadModuleId, + GeneralId = readModuleCriterionFrom.ReadModuleId, TrialId = subject.TrialId, SubjectId = subject.Id, }, new @@ -2232,71 +2233,6 @@ namespace IRaCIS.Core.Infra.EFCore.Common }); } - - var readModuleList = entitys.Where(x => x.Entity.GetType() == typeof(ReadModule)).ToList(); - if (readModuleList.Count > 0) - { - List urlList = new List() { - "ClinicalAnswer/cRCCancelConfirmClinical", - }; - if (urlList.Contains(_userInfo.RequestUrl)) - { - var item = readModuleList.FirstOrDefault(); - var type = GetEntityAuditOpt(item); - var entity = item.Entity as ReadModule; - string extraIndentification = "/"+ _userInfo.RequestUrl; - - var readModuleCriterionFrom = await _dbContext.ReadModuleCriterionFrom.Where(t => t.ReadModuleId== entity.Id).FirstOrDefaultAsync(); - var latestScanDate = await _dbContext.ReadModule.Where(t => t.Id == entity.Id).Select(x => x.SubjectVisit.LatestScanDate).FirstOrDefaultAsync(); - Site? siteInfo = null; - Subject? subject = null; - //阅片标准 - - - var clinicalFormIds = await _dbContext.ReadModuleCriterionFrom.Where(x => x.ReadModuleId == entity.Id).Select(x => x.ClinicalFormId).ToListAsync(); - var clinicalDataTrialSetIds = await _dbContext.ClinicalForm.Where(x => clinicalFormIds.Contains(x.Id)).Select(x => x.ClinicalDataTrialSetId).Distinct().ToListAsync(); - - // 临床数据 - var clinicalDataTrialSetList = await _dbContext.ClinicalDataTrialSet.Where(x => clinicalDataTrialSetIds.Contains(x.Id)).ToListAsync(); - - var clinicalSetIds = clinicalDataTrialSetList.Select(x => x.Id).ToList(); - - // 项目临床数据和标准的关联 - var trialReadingCriterionIdList = await _dbContext.TrialClinicalDataSetCriterion.Where(x => clinicalSetIds.Contains(x.TrialClinicalDataSetId)).Select(x => x.TrialReadingCriterionId).Distinct().ToListAsync(); - - // 标准 - var criterionNameList = await _dbContext.ReadingQuestionCriterionTrial.Where(t => trialReadingCriterionIdList.Contains(t.Id)).OrderBy(t => t.ShowOrder).Select(t => t.CriterionName).ToListAsync(); - - - - subject = await _dbContext.Subject.Where(x => x.Id == entity.SubjectId).FirstOrDefaultAsync(); - siteInfo = await _dbContext.Site.Where(x => x.Id == subject.SiteId).FirstOrDefaultAsync(); - - var clinicalDataSetNameList = clinicalDataTrialSetList.Select(x => x.ClinicalDataSetName).ToList().Distinct(); - - - - - - await InsertInspection(readModuleCriterionFrom, type, x => new InspectionConvertDTO() - { - GeneralId= entity.Id, - TrialId = subject.TrialId, - SubjectId = subject.Id, - }, new - { - SiteCode = siteInfo == null ? "" : siteInfo.SiteCode, - SubjectCode = subject == null ? "" : subject.Code, - LatestScanDate = latestScanDate, - ClinicalDataSetName = string.Join(",", clinicalDataSetNameList), - ClinicalDataLevel = clinicalDataTrialSetList.Select(x => x.ClinicalDataLevel).FirstOrDefault(), - ClinicalUploadType = clinicalDataTrialSetList.Select(x => x.ClinicalUploadType).FirstOrDefault(), - CriterionNames = string.Join(",", criterionNameList.Distinct()), - RecordNumber = clinicalFormIds.Count(), - - }); - } - } //系统临床数据配置 @@ -2496,7 +2432,65 @@ namespace IRaCIS.Core.Infra.EFCore.Common string extraIndentification = string.Empty; object objData = new { }; - + + + List urlList = new List() { + "ClinicalAnswer/cRCCancelConfirmClinical", + }; + + if (urlList.Contains(_userInfo.RequestUrl)) + { + + extraIndentification = "/" + _userInfo.RequestUrl; + + var readModuleCriterionFrom = await _dbContext.ReadModuleCriterionFrom.Where(t => t.ReadModuleId == entity.Id).FirstOrDefaultAsync(); + var latestScanDate = await _dbContext.ReadModule.Where(t => t.Id == entity.Id).Select(x => x.SubjectVisit.LatestScanDate).FirstOrDefaultAsync(); + Site? siteInfo = null; + Subject? subject = null; + //阅片标准 + + + var clinicalFormIds = await _dbContext.ReadModuleCriterionFrom.Where(x => x.ReadModuleId == entity.Id).Select(x => x.ClinicalFormId).ToListAsync(); + var clinicalDataTrialSetIds = await _dbContext.ClinicalForm.Where(x => clinicalFormIds.Contains(x.Id)).Select(x => x.ClinicalDataTrialSetId).Distinct().ToListAsync(); + + // 临床数据 + var clinicalDataTrialSetList = await _dbContext.ClinicalDataTrialSet.Where(x => clinicalDataTrialSetIds.Contains(x.Id)).ToListAsync(); + + var clinicalSetIds = clinicalDataTrialSetList.Select(x => x.Id).ToList(); + + // 项目临床数据和标准的关联 + var trialReadingCriterionIdList = await _dbContext.TrialClinicalDataSetCriterion.Where(x => clinicalSetIds.Contains(x.TrialClinicalDataSetId)).Select(x => x.TrialReadingCriterionId).Distinct().ToListAsync(); + + // 标准 + var criterionNameList = await _dbContext.ReadingQuestionCriterionTrial.Where(t => trialReadingCriterionIdList.Contains(t.Id)).OrderBy(t => t.ShowOrder).Select(t => t.CriterionName).ToListAsync(); + + + + subject = await _dbContext.Subject.Where(x => x.Id == entity.SubjectId).FirstOrDefaultAsync(); + siteInfo = await _dbContext.Site.Where(x => x.Id == subject.SiteId).FirstOrDefaultAsync(); + + var clinicalDataSetNameList = clinicalDataTrialSetList.Select(x => x.ClinicalDataSetName).ToList().Distinct(); + + + + + + objData=new + { + SiteCode = siteInfo == null ? "" : siteInfo.SiteCode, + SubjectCode = subject == null ? "" : subject.Code, + LatestScanDate = latestScanDate, + ClinicalDataSetName = string.Join(",", clinicalDataSetNameList), + ClinicalDataLevel = clinicalDataTrialSetList.Select(x => x.ClinicalDataLevel).FirstOrDefault(), + ClinicalUploadType = clinicalDataTrialSetList.Select(x => x.ClinicalUploadType).FirstOrDefault(), + CriterionNames = string.Join(",", criterionNameList.Distinct()), + RecordNumber = clinicalFormIds.Count(), + + }; + } + + + await InsertInspection(item.Entity as ReadModule, type, x => new InspectionConvertDTO() { ObjectRelationParentId = entity.SubjectVisitId, From 1274eaaec3477c1b82a465e81df707abbad13c30 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 29 Nov 2023 10:41:32 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E7=A8=BD=E6=9F=A55?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ClinicalData/ClinicalAnswerService.cs | 4 +- .../Common/AuditingData.cs | 212 ++++++++++-------- 2 files changed, 115 insertions(+), 101 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs index f3a2cc883..6514877f6 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -915,10 +915,8 @@ namespace IRaCIS.Core.Application.Service IsCRCConfirm = false, IsCRCApplicationRevoke=false, }); - await _readModuleCriterionFromRepository.BatchDeleteNoTrackingAsync(x=>x.ReadModuleId== inDto.ReadModuleId); - await _readModuleRepository.SaveChangesAsync(); - + await _readModuleCriterionFromRepository.BatchDeleteNoTrackingAsync(x => x.ReadModuleId == inDto.ReadModuleId); } diff --git a/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs b/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs index 484db67a6..6eefb8d0d 100644 --- a/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs +++ b/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs @@ -2081,45 +2081,49 @@ namespace IRaCIS.Core.Infra.EFCore.Common var entity = item.Entity as ReadingClinicalDataPDF; var clinicalData = await _dbContext.ReadingClinicalData.Where(t => t.Id == entity.ReadingClinicalDataId).FirstOrDefaultAsync(); - var clinicalDataTrialSet = await _dbContext.ClinicalDataTrialSet.Where(t => t.Id == clinicalData.ClinicalDataTrialSetId).FirstOrDefaultAsync(); - - SubjectVisit? visit = await _dbContext.SubjectVisit.Where(x => x.Id == clinicalData.ReadingId).FirstOrDefaultAsync(); - Site? siteInfo = null; - Subject? subject = null; - - //阅片标准 - var trialReadingCriterionIdList = await _dbContext.TrialClinicalDataSetCriterion.Where(t => t.TrialClinicalDataSetId == clinicalDataTrialSet.Id).Select(t => t.TrialReadingCriterionId).ToListAsync(); - - - - //阅片标准 - var criterionNameList = await _dbContext.ReadingQuestionCriterionTrial.Where(t => trialReadingCriterionIdList.Contains(t.Id)).OrderBy(t => t.ShowOrder).Select(t => t.CriterionName).ToListAsync(); - - - - if (visit != null) + if (clinicalData != null) { - siteInfo = await _dbContext.Site.Where(x => x.Id == visit.SiteId).FirstOrDefaultAsync(); - subject= await _dbContext.Subject.Where(x => x.Id == clinicalData.SubjectId).FirstOrDefaultAsync(); + var clinicalDataTrialSet = await _dbContext.ClinicalDataTrialSet.Where(t => t.Id == clinicalData.ClinicalDataTrialSetId).FirstOrDefaultAsync(); + + SubjectVisit? visit = await _dbContext.SubjectVisit.Where(x => x.Id == clinicalData.ReadingId).FirstOrDefaultAsync(); + Site? siteInfo = null; + Subject? subject = null; + + //阅片标准 + var trialReadingCriterionIdList = await _dbContext.TrialClinicalDataSetCriterion.Where(t => t.TrialClinicalDataSetId == clinicalDataTrialSet.Id).Select(t => t.TrialReadingCriterionId).ToListAsync(); + + + + //阅片标准 + var criterionNameList = await _dbContext.ReadingQuestionCriterionTrial.Where(t => trialReadingCriterionIdList.Contains(t.Id)).OrderBy(t => t.ShowOrder).Select(t => t.CriterionName).ToListAsync(); + + + + if (visit != null) + { + siteInfo = await _dbContext.Site.Where(x => x.Id == visit.SiteId).FirstOrDefaultAsync(); + subject = await _dbContext.Subject.Where(x => x.Id == clinicalData.SubjectId).FirstOrDefaultAsync(); + } + + Guid? subjectVisitId = visit == null ? null : visit.Id; + await InsertInspection(entity, type, x => new InspectionConvertDTO() + { + TrialId = clinicalData.TrialId, + SubjectId = clinicalData.SubjectId, + SubjectVisitId = subjectVisitId, + }, new + { + SiteCode = siteInfo == null ? "" : siteInfo.SiteCode, + SubjectCode = subject == null ? "" : subject.Code, + VisitName = visit == null ? "" : visit.VisitName, + clinicalDataTrialSet.ClinicalDataSetName, + clinicalDataTrialSet.ClinicalDataLevel, + clinicalDataTrialSet.ClinicalUploadType, + CriterionNames = string.Join(",", criterionNameList.Distinct()), + FileCount = 1, + + }); } - - Guid? subjectVisitId = visit==null?null: visit.Id; - await InsertInspection(entity, type, x => new InspectionConvertDTO() - { - TrialId= clinicalData.TrialId, - SubjectId=clinicalData.SubjectId, - SubjectVisitId= subjectVisitId, - },new { - SiteCode = siteInfo == null ? "" : siteInfo.SiteCode, - SubjectCode = subject == null ? "" : subject.Code, - VisitName= visit==null?"": visit.VisitName, - clinicalDataTrialSet.ClinicalDataSetName, - clinicalDataTrialSet.ClinicalDataLevel, - clinicalDataTrialSet.ClinicalUploadType, - CriterionNames = string.Join(",", criterionNameList.Distinct()), - FileCount= 1, - - }); } @@ -2172,67 +2176,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common } - //临床数据表单确认 - var readModuleCriterionFromList = entitys.Where(x => x.Entity.GetType() == typeof(ReadModuleCriterionFrom)).ToList(); - if (readModuleCriterionFromList.Count() > 0) - { - var item = readModuleCriterionFromList.FirstOrDefault(); - - var readModuleCriterionFrom = item.Entity as ReadModuleCriterionFrom; - var type = GetEntityAuditOpt(item); - - - var clinicalFormIds = new List(); - var criterionIds = new List(); - readModuleCriterionFromList.ForEach(x => { - var form = x.Entity as ReadModuleCriterionFrom; - clinicalFormIds.Add(form.ClinicalFormId); - }); - - var clinicalFormList = await _dbContext.ClinicalForm.Where(t =>clinicalFormIds.Contains(t.Id)).ToListAsync(); - - var clinicalDataTrialSetIds = clinicalFormList.Select(x => x.ClinicalDataTrialSetId).ToList().Distinct(); - - var readModule= await _dbContext.ReadModule.Where(t => t.Id == readModuleCriterionFrom.ReadModuleId).Include(x => x.SubjectVisit).FirstOrDefaultAsync(); - var latestScanDate = readModule.SubjectVisit.LatestScanDate; - - var clinicalDataTrialSetList = await _dbContext.ClinicalDataTrialSet.Where(t => clinicalDataTrialSetIds.Contains(t.Id)).ToListAsync(); - - - var clinicalSetIds = clinicalDataTrialSetList.Select(x => x.Id).ToList(); - - // 项目临床数据和标准的关联 - var trialReadingCriterionIdList = await _dbContext.TrialClinicalDataSetCriterion.Where(x => clinicalSetIds.Contains(x.TrialClinicalDataSetId)).Select(x => x.TrialReadingCriterionId).Distinct().ToListAsync(); - - // 标准 - var criterionNameList = await _dbContext.ReadingQuestionCriterionTrial.Where(t => trialReadingCriterionIdList.Contains(t.Id)).OrderBy(t => t.ShowOrder).Select(t => t.CriterionName).ToListAsync(); - - - - Subject subject = await _dbContext.Subject.Where(x => x.Id == readModule.SubjectId).FirstOrDefaultAsync(); - Site siteInfo = await _dbContext.Site.Where(x => x.Id == subject.SiteId).FirstOrDefaultAsync(); - - var clinicalDataSetNameList = clinicalDataTrialSetList.Select(x => x.ClinicalDataSetName).ToList(); - await InsertInspection(readModuleCriterionFrom, type, x => new InspectionConvertDTO() - { - ObjectRelationParentId= readModuleCriterionFrom.ReadModuleId, - GeneralId = readModuleCriterionFrom.ReadModuleId, - TrialId = subject.TrialId, - SubjectId = subject.Id, - }, new - { - SiteCode = siteInfo == null ? "" : siteInfo.SiteCode, - SubjectCode = subject == null ? "" : subject.Code, - LatestScanDate= latestScanDate, - ClinicalDataSetName = string.Join(",", clinicalDataSetNameList), - ClinicalDataLevel = clinicalDataTrialSetList.Select(x => x.ClinicalDataLevel).FirstOrDefault(), - ClinicalUploadType = clinicalDataTrialSetList.Select(x => x.ClinicalUploadType).FirstOrDefault(), - CriterionNames = string.Join(",", criterionNameList.Distinct()), - RecordNumber= readModuleCriterionFromList.Count(), - - }); - } //系统临床数据配置 @@ -2434,14 +2378,85 @@ namespace IRaCIS.Core.Infra.EFCore.Common object objData = new { }; + //临床数据表单确认 + if(_userInfo.RequestUrl== "ClinicalAnswer/cRCConfirmClinical") + { + extraIndentification = "/" + _userInfo.RequestUrl; + var readModuleCriterionFromList = entitys.Where(x => x.Entity.GetType() == typeof(ReadModuleCriterionFrom)).ToList(); + if (readModuleCriterionFromList.Count() > 0) + { + var readModuleCriterionFrom = readModuleCriterionFromList.FirstOrDefault().Entity as ReadModuleCriterionFrom; + + + var clinicalFormIds = new List(); + var criterionIds = new List(); + readModuleCriterionFromList.ForEach(x => { + var form = x.Entity as ReadModuleCriterionFrom; + clinicalFormIds.Add(form.ClinicalFormId); + }); + + var clinicalFormList = await _dbContext.ClinicalForm.Where(t => clinicalFormIds.Contains(t.Id)).ToListAsync(); + + var clinicalDataTrialSetIds = clinicalFormList.Select(x => x.ClinicalDataTrialSetId).ToList().Distinct(); + + + var readModule = await _dbContext.ReadModule.Where(t => t.Id == readModuleCriterionFrom.ReadModuleId).Include(x => x.SubjectVisit).FirstOrDefaultAsync(); + var latestScanDate = readModule.SubjectVisit.LatestScanDate; + + var clinicalDataTrialSetList = await _dbContext.ClinicalDataTrialSet.Where(t => clinicalDataTrialSetIds.Contains(t.Id)).ToListAsync(); + + + var clinicalSetIds = clinicalDataTrialSetList.Select(x => x.Id).ToList(); + + // 项目临床数据和标准的关联 + var trialReadingCriterionIdList = await _dbContext.TrialClinicalDataSetCriterion.Where(x => clinicalSetIds.Contains(x.TrialClinicalDataSetId)).Select(x => x.TrialReadingCriterionId).Distinct().ToListAsync(); + + // 标准 + var criterionNameList = await _dbContext.ReadingQuestionCriterionTrial.Where(t => trialReadingCriterionIdList.Contains(t.Id)).OrderBy(t => t.ShowOrder).Select(t => t.CriterionName).ToListAsync(); + + + + Subject subject = await _dbContext.Subject.Where(x => x.Id == readModule.SubjectId).FirstOrDefaultAsync(); + Site siteInfo = await _dbContext.Site.Where(x => x.Id == subject.SiteId).FirstOrDefaultAsync(); + + var clinicalDataSetNameList = clinicalDataTrialSetList.Select(x => x.ClinicalDataSetName).ToList(); + objData= new + { + SiteCode = siteInfo == null ? "" : siteInfo.SiteCode, + SubjectCode = subject == null ? "" : subject.Code, + LatestScanDate = latestScanDate, + ClinicalDataSetName = string.Join(",", clinicalDataSetNameList), + ClinicalDataLevel = clinicalDataTrialSetList.Select(x => x.ClinicalDataLevel).FirstOrDefault(), + ClinicalUploadType = clinicalDataTrialSetList.Select(x => x.ClinicalUploadType).FirstOrDefault(), + CriterionNames = string.Join(",", criterionNameList.Distinct()), + RecordNumber = readModuleCriterionFromList.Count(), + + }; + } + } + + List urlList = new List() { "ClinicalAnswer/cRCCancelConfirmClinical", + "ClinicalAnswer/PMConfirmClinical" }; + + if (urlList.Contains(_userInfo.RequestUrl)) { - extraIndentification = "/" + _userInfo.RequestUrl; + string status = string.Empty; + if (!entity.IsCRCConfirm && _userInfo.RequestUrl == "ClinicalAnswer/PMConfirmClinical") + { + status = "已撤回"; + extraIndentification += "/revocation"; + } else if (entity.IsPMConfirm && _userInfo.RequestUrl == "ClinicalAnswer/PMConfirmClinical") + { + status = "已核对"; + extraIndentification += "/Confirm"; + } + var readModuleCriterionFrom = await _dbContext.ReadModuleCriterionFrom.Where(t => t.ReadModuleId == entity.Id).FirstOrDefaultAsync(); var latestScanDate = await _dbContext.ReadModule.Where(t => t.Id == entity.Id).Select(x => x.SubjectVisit.LatestScanDate).FirstOrDefaultAsync(); @@ -2485,6 +2500,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common ClinicalUploadType = clinicalDataTrialSetList.Select(x => x.ClinicalUploadType).FirstOrDefault(), CriterionNames = string.Join(",", criterionNameList.Distinct()), RecordNumber = clinicalFormIds.Count(), + Status= status, }; }