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] =?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);
}