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..6514877f6 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)))
{
@@ -914,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.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 3d843b49d..6eefb8d0d 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;
@@ -2069,6 +2071,114 @@ 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();
+ if (clinicalData != null)
+ {
+ 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()),
+
+
+ });
+ }
+
+
+
+
+
//系统临床数据配置
foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(ClinicalDataSystemSet)))
@@ -2264,15 +2374,148 @@ namespace IRaCIS.Core.Infra.EFCore.Common
var entity = item.Entity as ReadModule;
+ string extraIndentification = string.Empty;
+ 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();
+ 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(),
+ Status= status,
+
+ };
+ }
+
+
+
await InsertInspection(item.Entity as ReadModule, type, x => new InspectionConvertDTO()
{
ObjectRelationParentId = entity.SubjectVisitId,
ObjectRelationParentId2 = entity.TrialReadingCriterionId,
-
+ ExtraIndentification= extraIndentification,
//SubjectVisitId = x.SubjectVisitId,
IsDistinctionInterface = false,
- });
+ }, objData);
}