|
|
|
@ -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<ReadingClinicalDataPDF>(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<ClinicalForm>(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<Guid>();
|
|
|
|
|
var criterionIds = new List<Guid>();
|
|
|
|
|
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>(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<string> urlList = new List<string>() {
|
|
|
|
|
"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>(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<ReadModule>(item.Entity as ReadModule, type, x => new InspectionConvertDTO()
|
|
|
|
|
{
|
|
|
|
|
ObjectRelationParentId = entity.SubjectVisitId,
|
|
|
|
|
|
|
|
|
|
ObjectRelationParentId2 = entity.TrialReadingCriterionId,
|
|
|
|
|
|
|
|
|
|
ExtraIndentification= extraIndentification,
|
|
|
|
|
//SubjectVisitId = x.SubjectVisitId,
|
|
|
|
|
IsDistinctionInterface = false,
|
|
|
|
|
});
|
|
|
|
|
}, objData);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|