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