Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
commit
e5d9cfc50e
|
@ -117,7 +117,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
var pageList = await visitTaskQueryable.ToPagedListAsync(queryVisitTask.PageIndex, queryVisitTask.PageSize, queryVisitTask.SortField, queryVisitTask.Asc, string.IsNullOrWhiteSpace(queryVisitTask.SortField), defalutSortArray);
|
var pageList = await visitTaskQueryable.ToPagedListAsync(queryVisitTask.PageIndex, queryVisitTask.PageSize, queryVisitTask.SortField, queryVisitTask.Asc, string.IsNullOrWhiteSpace(queryVisitTask.SortField), defalutSortArray);
|
||||||
|
|
||||||
var trialTaskConfig = _repository.Where<Trial>(t => t.Id == queryVisitTask.TrialId).Select(t => new { IsHaveDoubleReadCriterion=t.ReadingQuestionCriterionTrialList.Any(t=>t.IsSigned && t.IsConfirm && t.ReadingType==ReadingMethod.Double), t.VitrualSiteCode }).FirstOrDefault();
|
var trialTaskConfig = _repository.Where<Trial>(t => t.Id == queryVisitTask.TrialId).Select(t => new { IsHaveDoubleReadCriterion=t.TrialReadingCriterionList.Any(t=>t.IsSigned && t.IsConfirm && t.ReadingType==ReadingMethod.Double), t.VitrualSiteCode }).FirstOrDefault();
|
||||||
|
|
||||||
return ResponseOutput.Ok(pageList, trialTaskConfig);
|
return ResponseOutput.Ok(pageList, trialTaskConfig);
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,8 @@ using DocumentFormat.OpenXml.Bibliography;
|
||||||
using Org.BouncyCastle.Crypto;
|
using Org.BouncyCastle.Crypto;
|
||||||
using IRaCIS.Core.Domain.Share.Reading;
|
using IRaCIS.Core.Domain.Share.Reading;
|
||||||
using MassTransit;
|
using MassTransit;
|
||||||
|
using System.Reactive.Subjects;
|
||||||
|
using Subject = IRaCIS.Core.Domain.Models.Subject;
|
||||||
|
|
||||||
namespace IRaCIS.Core.Application.Service.Allocation
|
namespace IRaCIS.Core.Application.Service.Allocation
|
||||||
{
|
{
|
||||||
|
@ -1026,6 +1028,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||||
var trialReadingCriterionId = inQuery.TrialReadingCriterionId;
|
var trialReadingCriterionId = inQuery.TrialReadingCriterionId;
|
||||||
var subjectCode = inQuery.SubjectCode;
|
var subjectCode = inQuery.SubjectCode;
|
||||||
var trialId = inQuery.TrialId;
|
var trialId = inQuery.TrialId;
|
||||||
|
var subjectId = inQuery.SubjectId;
|
||||||
|
|
||||||
var critrion = await _trialReadingCriterionRepository.FindAsync(trialReadingCriterionId);
|
var critrion = await _trialReadingCriterionRepository.FindAsync(trialReadingCriterionId);
|
||||||
|
|
||||||
|
@ -1146,10 +1149,44 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||||
CurrentPageData = result,
|
CurrentPageData = result,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
||||||
|
if (subjectId != null)
|
||||||
|
{
|
||||||
|
//找到 非一致性分析,未签名,状态正常的 并且任务名称是TimePoint的 任务
|
||||||
|
var needDealTaskList = await _visitTaskRepository.Where(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == false && t.DoctorUserId == _userInfo.Id
|
||||||
|
&& t.ReadingTaskState != ReadingTaskState.HaveSigned && t.TaskBlindName == "Timepoint" && t.ReadingCategory == ReadingCategory.Visit
|
||||||
|
&& (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze), true).ToListAsync();
|
||||||
|
|
||||||
|
if (needDealTaskList.Count > 0)
|
||||||
|
{
|
||||||
|
//已完成的访视任务数量(包含重阅的)
|
||||||
|
var haveFinishedTaskCount = await _visitTaskRepository.CountAsync(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == false && t.DoctorUserId == _userInfo.Id
|
||||||
|
&& t.ReadingTaskState == ReadingTaskState.HaveSigned && t.ReadingCategory == ReadingCategory.Visit);
|
||||||
|
|
||||||
|
//已经处理过的任务名称的数量
|
||||||
|
|
||||||
|
var haveDealedTaskCount = await _visitTaskRepository.CountAsync(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == false && t.DoctorUserId == _userInfo.Id
|
||||||
|
&& t.ReadingTaskState != ReadingTaskState.HaveSigned && t.ReadingCategory == ReadingCategory.Visit && t.TaskBlindName != "Timepoint");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//随机赋值编号 比如要处理5个任务,实例化一个包含1-5的数组,每次随机取出一个
|
||||||
|
List<int> availableNumbers = Enumerable.Range(haveDealedTaskCount + haveFinishedTaskCount + 1, needDealTaskList.Count).ToList();
|
||||||
|
Random rng = new Random();
|
||||||
|
foreach (var visitTask in needDealTaskList)
|
||||||
|
{
|
||||||
|
int randomIndex = rng.Next(availableNumbers.Count);
|
||||||
|
|
||||||
|
visitTask.TaskBlindName = $"Timepoint Ran {availableNumbers[randomIndex]}";
|
||||||
|
|
||||||
|
availableNumbers.RemoveAt(randomIndex);
|
||||||
|
}
|
||||||
|
await _visitTaskRepository.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var visitQuery = _visitTaskRepository.Where(x => x.TrialId == trialId && x.DoctorUserId == _userInfo.Id && x.TaskState == TaskState.Effect)
|
var visitQuery = _visitTaskRepository.Where(x => x.TrialId == trialId && x.DoctorUserId == _userInfo.Id && x.TaskState == TaskState.Effect)
|
||||||
.WhereIf(inQuery.SubjectId != null, x => x.SubjectId == inQuery.SubjectId)
|
.WhereIf(inQuery.SubjectId != null, x => x.SubjectId == inQuery.SubjectId)
|
||||||
.WhereIf(!string.IsNullOrEmpty(subjectCode), t => (t.Subject.Code.Contains(subjectCode!) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(subjectCode!) && t.IsAnalysisCreate));
|
.WhereIf(!string.IsNullOrEmpty(subjectCode), t => (t.Subject.Code.Contains(subjectCode!) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(subjectCode!) && t.IsAnalysisCreate));
|
||||||
|
|
|
@ -74,7 +74,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
CreateMap<TaskAllocationRule, TaskAllocationRuleDTO>()
|
CreateMap<TaskAllocationRule, TaskAllocationRuleDTO>()
|
||||||
.ForMember(o => o.DoctorUser, t => t.MapFrom(u => u.Enroll.DoctorUser))
|
.ForMember(o => o.DoctorUser, t => t.MapFrom(u => u.Enroll.DoctorUser))
|
||||||
.ForMember(o => o.CriterionReadingCategoryList, t => t.MapFrom(u => u.Enroll.EnrollReadingCategoryList.Select(t => new TrialCriterionReadingCategory() { EnrollId = t.EnrollId, ReadingCategory = t.ReadingCategory, TrialReadingCriterionId = t.TrialReadingCriterionId })))
|
.ForMember(o => o.CriterionReadingCategoryList, t => t.MapFrom(u => u.Enroll.EnrollReadingCategoryList.Select(t => new TrialCriterionReadingCategory() { EnrollId = t.EnrollId, ReadingCategory = t.ReadingCategory, TrialReadingCriterionId = t.TrialReadingCriterionId })))
|
||||||
.ForMember(o => o.TrialReadingCriterionList, t => t.MapFrom(u => u.Trial.ReadingQuestionCriterionTrialList.Where(t => t.IsConfirm)))
|
.ForMember(o => o.TrialReadingCriterionList, t => t.MapFrom(u => u.Trial.TrialReadingCriterionList.Where(t => t.IsConfirm)))
|
||||||
.ForMember(o => o.ReadingCategoryList, t => t.MapFrom(u => u.Enroll.EnrollReadingCategoryList.Where(t=>t.TrialReadingCriterionId== trialReadingCriterionId).OrderBy(t => t.ReadingCategory).Select(t => t.ReadingCategory).ToList()))
|
.ForMember(o => o.ReadingCategoryList, t => t.MapFrom(u => u.Enroll.EnrollReadingCategoryList.Where(t=>t.TrialReadingCriterionId== trialReadingCriterionId).OrderBy(t => t.ReadingCategory).Select(t => t.ReadingCategory).ToList()))
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
|
@ -46,8 +46,8 @@ namespace IRaCIS.Core.Application.Contracts.Dicom.DTO
|
||||||
|
|
||||||
|
|
||||||
//存放在instance 上面
|
//存放在instance 上面
|
||||||
public string WindowCenter { get; set; } = string.Empty;
|
public string? WindowCenter => InstanceInfoList.FirstOrDefault()?.WindowCenter;
|
||||||
public string WindowWidth { get; set; } = string.Empty;
|
public string? WindowWidth => InstanceInfoList.FirstOrDefault()?.WindowWidth;
|
||||||
|
|
||||||
public string ImageResizePath { get; set; }
|
public string ImageResizePath { get; set; }
|
||||||
}
|
}
|
||||||
|
@ -68,6 +68,10 @@ namespace IRaCIS.Core.Application.Contracts.Dicom.DTO
|
||||||
public int ShowOrder { get; set; }
|
public int ShowOrder { get; set; }
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public decimal RowIndex { get; set; }
|
public decimal RowIndex { get; set; }
|
||||||
|
[JsonIgnore]
|
||||||
|
public string WindowCenter { get; set; }
|
||||||
|
[JsonIgnore]
|
||||||
|
public string WindowWidth { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class DicomSeriesWithLabelDTO : DicomSeriesDTO
|
public class DicomSeriesWithLabelDTO : DicomSeriesDTO
|
||||||
|
|
|
@ -6,6 +6,7 @@ using IRaCIS.Core.Application.Helper;
|
||||||
using IRaCIS.Core.Application.Service.ImageAndDoc.DTO;
|
using IRaCIS.Core.Application.Service.ImageAndDoc.DTO;
|
||||||
using IRaCIS.Core.Domain.Share;
|
using IRaCIS.Core.Domain.Share;
|
||||||
using IRaCIS.Core.Infrastructure;
|
using IRaCIS.Core.Infrastructure;
|
||||||
|
using IRaCIS.Core.Infrastructure.Extention;
|
||||||
using MassTransit;
|
using MassTransit;
|
||||||
using MathNet.Numerics;
|
using MathNet.Numerics;
|
||||||
using Medallion.Threading;
|
using Medallion.Threading;
|
||||||
|
@ -62,19 +63,25 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
if (_visitTaskRepository.Any(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCriterionId && t.TrialReadingCriterion.IsReadingTaskViewInOrder == ReadingOrder.SubjectRandom))
|
if (_visitTaskRepository.Any(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCriterionId && t.TrialReadingCriterion.IsReadingTaskViewInOrder == ReadingOrder.SubjectRandom))
|
||||||
{
|
{
|
||||||
//找到 非一致性分析,未签名,状态正常的 并且任务名称是TimePoint的 任务
|
//找到 非一致性分析,未签名,状态正常的 并且任务名称是TimePoint的 任务
|
||||||
var needDealTaskList = await _visitTaskRepository.Where(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == false && t.DoctorUserId==_userInfo.Id
|
var needDealTaskList = await _visitTaskRepository.Where(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == false && t.DoctorUserId == _userInfo.Id
|
||||||
&& t.ReadingTaskState != ReadingTaskState.HaveSigned && t.TaskBlindName == "Timepoint" && t.ReadingCategory == ReadingCategory.Visit
|
&& t.ReadingTaskState != ReadingTaskState.HaveSigned && t.TaskBlindName == "Timepoint" && t.ReadingCategory == ReadingCategory.Visit
|
||||||
&& (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze), true).ToListAsync();
|
&& (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze), true).ToListAsync();
|
||||||
|
|
||||||
if (needDealTaskList.Count>0)
|
if (needDealTaskList.Count > 0)
|
||||||
{
|
{
|
||||||
//已完成的访视任务数量(包含重阅的)
|
//已完成的访视任务数量(包含重阅的)
|
||||||
var haveFinishedTaskCount = await _visitTaskRepository.CountAsync(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == false
|
var haveFinishedTaskCount = await _visitTaskRepository.CountAsync(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == false && t.DoctorUserId == _userInfo.Id
|
||||||
&& t.ReadingTaskState == ReadingTaskState.HaveSigned && t.ReadingCategory == ReadingCategory.Visit);
|
&& t.ReadingTaskState == ReadingTaskState.HaveSigned && t.ReadingCategory == ReadingCategory.Visit);
|
||||||
|
|
||||||
//随机赋值编号 比如要处理5个任务,实例化一个包含1-5的数组,每次随机取出一个
|
//已经处理过的任务名称的数量
|
||||||
|
|
||||||
List<int> availableNumbers = Enumerable.Range(haveFinishedTaskCount + 1, needDealTaskList.Count).ToList();
|
var haveDealedTaskCount = await _visitTaskRepository.CountAsync(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == false && t.DoctorUserId == _userInfo.Id
|
||||||
|
&& t.ReadingTaskState != ReadingTaskState.HaveSigned && t.ReadingCategory == ReadingCategory.Visit && t.TaskBlindName != "Timepoint");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//随机赋值编号 比如要处理5个任务,实例化一个包含1-5的数组,每次随机取出一个
|
||||||
|
List<int> availableNumbers = Enumerable.Range(haveDealedTaskCount + haveFinishedTaskCount + 1, needDealTaskList.Count).ToList();
|
||||||
Random rng = new Random();
|
Random rng = new Random();
|
||||||
foreach (var visitTask in needDealTaskList)
|
foreach (var visitTask in needDealTaskList)
|
||||||
{
|
{
|
||||||
|
@ -96,11 +103,11 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
/// <param name="subjectId"></param>
|
/// <param name="subjectId"></param>
|
||||||
/// <param name="trialReadingCriterionId"></param>
|
/// <param name="trialReadingCriterionId"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<IResponseOutput<List<SubjectImageUploadDTO>>> GetSubjectImageUploadList(Guid subjectId,Guid trialReadingCriterionId)
|
public async Task<IResponseOutput<List<SubjectImageUploadDTO>>> GetSubjectImageUploadList(Guid subjectId, Guid trialReadingCriterionId)
|
||||||
{
|
{
|
||||||
await SubejctRandomReadingTaskNameDeal(subjectId, trialReadingCriterionId);
|
await SubejctRandomReadingTaskNameDeal(subjectId, trialReadingCriterionId);
|
||||||
|
|
||||||
var query = _repository.Where<VisitTask>(t => t.SubjectId == subjectId &&t.TrialReadingCriterionId== trialReadingCriterionId && t.SourceSubjectVisitId != null && t.DoctorUserId == _userInfo.Id)
|
var query = _repository.Where<VisitTask>(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCriterionId && t.SourceSubjectVisitId != null && t.DoctorUserId == _userInfo.Id)
|
||||||
.Select(u => new SubjectImageUploadDTO()
|
.Select(u => new SubjectImageUploadDTO()
|
||||||
{
|
{
|
||||||
VisitTaskId = u.Id,
|
VisitTaskId = u.Id,
|
||||||
|
@ -122,7 +129,9 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
SourceSubjectVisitId = u.SourceSubjectVisitId,
|
SourceSubjectVisitId = u.SourceSubjectVisitId,
|
||||||
PackState = u.SourceSubjectVisit.PackState,
|
PackState = u.SourceSubjectVisit.PackState,
|
||||||
|
|
||||||
OrginalStudyList = u.SourceSubjectVisit.StudyList.Select(t => new StudyBasicInfo()
|
OrginalStudyList = u.SourceSubjectVisit.StudyList
|
||||||
|
.Where(t => u.TrialReadingCriterion.IsImageFilter ? u.TrialReadingCriterion.CriterionModalitys.Contains(t.ModalityForEdit) : true)
|
||||||
|
.Select(t => new StudyBasicInfo()
|
||||||
{
|
{
|
||||||
Id = t.Id,
|
Id = t.Id,
|
||||||
StudyInstanceUid = t.StudyInstanceUid,
|
StudyInstanceUid = t.StudyInstanceUid,
|
||||||
|
|
|
@ -932,23 +932,24 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
break;
|
break;
|
||||||
case TrialQCProcess.SingleAudit:
|
case TrialQCProcess.SingleAudit:
|
||||||
visitList = await _subjectVisitRepository.Where(x => x.SubmitState == SubmitStateEnum.Submitted
|
visitList = await _subjectVisitRepository.Where(x => x.SubmitState == SubmitStateEnum.Submitted
|
||||||
&& x.TrialId == inDto.TrialId && x.PreliminaryAuditUserId!= _userInfo.Id&&(x.CurrentActionUserId == _userInfo.Id || (x.AuditState != AuditStateEnum.PrimaryQCPassed && !x.IsTake)))
|
&& x.TrialId == inDto.TrialId && x.PreliminaryAuditUserId != _userInfo.Id && (x.CurrentActionUserId == _userInfo.Id || (x.AuditState != AuditStateEnum.PrimaryQCPassed && !x.IsTake)))
|
||||||
.Where(x => x.QCChallengeList.Count() == 0 || x.QCChallengeList.Where(y=>!y.IsClosed).OrderByDescending(x => x.CreateTime).FirstOrDefault().CreateUserId != _userInfo.Id)
|
.Where(x => x.QCChallengeList.Count() == 0 || x.QCChallengeList.Where(y => !y.IsClosed).OrderByDescending(x => x.CreateTime).FirstOrDefault().CreateUserId != _userInfo.Id)
|
||||||
.Include(x => x.Subject).ToListAsync();
|
.Include(x => x.Subject).ToListAsync();
|
||||||
|
|
||||||
subjectVisit = visitList.Where(x => x.SubjectId == inDto.SubjectId)
|
subjectVisit = visitList.Where(x => x.SubjectId == inDto.SubjectId)
|
||||||
|
|
||||||
|
|
||||||
.OrderBy(x=>x.VisitNum).FirstOrDefault();
|
.OrderBy(x => x.VisitNum).FirstOrDefault();
|
||||||
if(subjectVisit!=null)
|
if (subjectVisit != null)
|
||||||
{
|
{
|
||||||
return new GetNextIQCQualityOutDto() {
|
return new GetNextIQCQualityOutDto()
|
||||||
SubjectId= subjectVisit.SubjectId,
|
{
|
||||||
VisitId= subjectVisit.Id
|
SubjectId = subjectVisit.SubjectId,
|
||||||
|
VisitId = subjectVisit.Id
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
subjectVisit= visitList.OrderBy(x => x.Subject.Code).ThenBy(x=>x.VisitNum).FirstOrDefault();
|
subjectVisit = visitList.OrderBy(x => x.Subject.Code).ThenBy(x => x.VisitNum).FirstOrDefault();
|
||||||
if (subjectVisit != null)
|
if (subjectVisit != null)
|
||||||
{
|
{
|
||||||
return new GetNextIQCQualityOutDto()
|
return new GetNextIQCQualityOutDto()
|
||||||
|
@ -965,9 +966,9 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
case TrialQCProcess.DoubleAudit:
|
case TrialQCProcess.DoubleAudit:
|
||||||
|
|
||||||
visitList = await _subjectVisitRepository.Where(x => x.SubmitState == SubmitStateEnum.Submitted && x.TrialId == inDto.TrialId &&
|
visitList = await _subjectVisitRepository.Where(x => x.SubmitState == SubmitStateEnum.Submitted && x.TrialId == inDto.TrialId &&
|
||||||
((x.CurrentActionUserId == _userInfo.Id)||(!x.IsTake&& x.AuditState != AuditStateEnum.QCPassed&& (x.PreliminaryAuditUserId != _userInfo.Id)))
|
((x.CurrentActionUserId == _userInfo.Id) || (!x.IsTake && x.AuditState != AuditStateEnum.QCPassed && (x.PreliminaryAuditUserId != _userInfo.Id)))
|
||||||
)
|
)
|
||||||
.Where(x => x.QCChallengeList.Count() == 0 || x.QCChallengeList.Where(y => !y.IsClosed).OrderByDescending(x => x.CreateTime).FirstOrDefault().CreateUserId !=_userInfo.Id)
|
.Where(x => x.QCChallengeList.Count() == 0 || x.QCChallengeList.Where(y => !y.IsClosed).OrderByDescending(x => x.CreateTime).FirstOrDefault().CreateUserId != _userInfo.Id)
|
||||||
.Include(x => x.Subject).ToListAsync();
|
.Include(x => x.Subject).ToListAsync();
|
||||||
if (subjectVisit != null)
|
if (subjectVisit != null)
|
||||||
{
|
{
|
||||||
|
@ -1214,7 +1215,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
}
|
}
|
||||||
|
|
||||||
//同时要根据项目有没有配置Subject 级别临床数据
|
//同时要根据项目有没有配置Subject 级别临床数据
|
||||||
if (dbSubjectVisitList.Any(t => t.IsBaseLine && !t.IsHaveClinicalData)&&trialinfo.ClinicalInformationTransmissionEnum!=0)
|
if (dbSubjectVisitList.Any(t => t.IsBaseLine && !t.IsHaveClinicalData) && trialinfo.ClinicalInformationTransmissionEnum != 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
//---基线没有临床数据,确认提交?
|
//---基线没有临床数据,确认提交?
|
||||||
|
@ -1315,38 +1316,13 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
return ResponseOutput.NotOk(_localizer["QCOperation_MissingBaselineDate"]);
|
return ResponseOutput.NotOk(_localizer["QCOperation_MissingBaselineDate"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
//基线 且配置了临床数据
|
if (_subjectVisitRepository.Where(t => t.Id == dbSubjectVisit.Id).Any(t => (t.StudyList.Count(t => t.ModalityForEdit == "") > 0 ||t.NoneDicomStudyList.Count(t => t.Modality == "")>0) && t.Trial.TrialReadingCriterionList.Count(t => t.IsImageFilter == true) > 0))
|
||||||
//if (trialConfig.ClinicalInformationTransmissionEnum != 0 /*&& dbSubjectVisit.IsBaseLine*//*&&dbSubjectVisit.ClinicalDataSignUserId==null*/)
|
{
|
||||||
//{
|
//有标准配置了影像筛选,该受试者有检查未设置检查类型,不允许提交
|
||||||
|
return ResponseOutput.NotOk(_localizer["QCOperation_MissingModality"]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
////找到需要确认的PDF 临床数据 如果没有CRC 没有上传 那么就添加一条没有文件的记录
|
|
||||||
|
|
||||||
//var crcNeedConfirmClinicalDataSetList = clinicalDataConfirmList.Where(t => t.UploadRole == UploadRole.CRC && t.ClinicalUploadType == ClinicalUploadType.PDF).ToList();
|
|
||||||
|
|
||||||
//// 找到CRC 已经自己添加的临床PDF数据文件
|
|
||||||
|
|
||||||
//var crcAddClinicalDataIdList = _readingClinicalDataRepository.Where(t => t.ReadingId == dbSubjectVisit.Id && t.ClinicalDataTrialSet.UploadRole == UploadRole.CRC && t.ClinicalDataTrialSet.ClinicalUploadType == ClinicalUploadType.PDF)
|
|
||||||
// .Select(t => new { t.ClinicalDataTrialSetId }).ToList();
|
|
||||||
|
|
||||||
//foreach (var crcNeedConfirmClinicalDataSet in crcNeedConfirmClinicalDataSetList)
|
|
||||||
//{
|
|
||||||
// if (!crcAddClinicalDataIdList.Any(t => t.ClinicalDataTrialSetId == crcNeedConfirmClinicalDataSet.Id))
|
|
||||||
// {
|
|
||||||
// await _repository.AddAsync(new ReadingClinicalData()
|
|
||||||
// {
|
|
||||||
// TrialId = dbSubjectVisit.TrialId,
|
|
||||||
// SubjectId = dbSubjectVisit.SubjectId,
|
|
||||||
// ReadingId = dbSubjectVisit.Id,
|
|
||||||
// ClinicalDataTrialSetId = crcNeedConfirmClinicalDataSet.Id,
|
|
||||||
// IsVisit = true,
|
|
||||||
// IsSign = true,
|
|
||||||
// ReadingClinicalDataState = ReadingClinicalDataStatus.HaveSigned
|
|
||||||
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
//已确认临床数据完整性
|
//已确认临床数据完整性
|
||||||
dbSubjectVisit.IsConfirmedClinicalData = true;
|
dbSubjectVisit.IsConfirmedClinicalData = true;
|
||||||
|
|
||||||
|
@ -1360,35 +1336,14 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
};
|
};
|
||||||
|
|
||||||
await _readingClinicalDataRepository.UpdatePartialFromQueryAsync(x =>
|
await _readingClinicalDataRepository.UpdatePartialFromQueryAsync(x =>
|
||||||
clinicalneedSign.Contains(x.ClinicalDataTrialSet.ClinicalDataLevel)&&
|
clinicalneedSign.Contains(x.ClinicalDataTrialSet.ClinicalDataLevel) &&
|
||||||
x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC && x.ReadingId == dbSubjectVisit.Id && x.IsSign==false, x => new ReadingClinicalData()
|
x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC && x.ReadingId == dbSubjectVisit.Id && x.IsSign == false, x => new ReadingClinicalData()
|
||||||
{
|
{
|
||||||
IsSign = true,
|
IsSign = true,
|
||||||
ReadingClinicalDataState = ReadingClinicalDataStatus.HaveSigned
|
ReadingClinicalDataState = ReadingClinicalDataStatus.HaveSigned
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//var signSuccess = await _repository.UpdateFromQueryAsync<TrialSign>(t => t.Id == cRCRequestToQCCommand.SignId, u => new TrialSign() { IsCompleted = true });
|
|
||||||
|
|
||||||
|
|
||||||
////现在修改为 提交时 设置签名信息
|
|
||||||
//dbSubjectVisit.ClinicalDataSignUserId = _userInfo.Id;
|
|
||||||
//dbSubjectVisit.ClinicalDataSignTime = DateTime.Now;
|
|
||||||
|
|
||||||
//那么没有录入 不允许提交
|
|
||||||
//if (!await _repository.AnyAsync<SubjectVisit>(t => t.PreviousHistoryList.Any() || t.PreviousOtherList.Any() || t.PreviousSurgeryList.Any()))
|
|
||||||
//{
|
|
||||||
// return ResponseOutput.NotOk("没有临床数据,不允许提交");
|
|
||||||
//}
|
|
||||||
|
|
||||||
//return ResponseOutput.NotOk("没有签名临床数据,不允许提交");
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var maxVisit = await _subjectVisitRepository.Where(t => t.SubjectId == dbSubjectVisit.SubjectId && t.SubmitState == SubmitStateEnum.Submitted)
|
var maxVisit = await _subjectVisitRepository.Where(t => t.SubjectId == dbSubjectVisit.SubjectId && t.SubmitState == SubmitStateEnum.Submitted)
|
||||||
.OrderByDescending(t => t.VisitNum).Select(t => new { t.Id, t.VisitNum }).FirstOrDefaultAsync();
|
.OrderByDescending(t => t.VisitNum).Select(t => new { t.Id, t.VisitNum }).FirstOrDefaultAsync();
|
||||||
|
|
||||||
|
@ -1411,14 +1366,14 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => trialInOrderCriterionIdList.Contains(x.TrialReadingCriterionId)&& x.SubjectId == dbSubjectVisit.SubjectId&&
|
await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => trialInOrderCriterionIdList.Contains(x.TrialReadingCriterionId) && x.SubjectId == dbSubjectVisit.SubjectId &&
|
||||||
dbSubjectVisit.VisitNum<= x.VisitTaskNum && x.VisitTaskNum < Math.Ceiling(dbSubjectVisit.VisitNum+0.01m) // 当前的访视 全局 裁判 及之前 全都加急
|
dbSubjectVisit.VisitNum <= x.VisitTaskNum && x.VisitTaskNum < Math.Ceiling(dbSubjectVisit.VisitNum + 0.01m) // 当前的访视 全局 裁判 及之前 全都加急
|
||||||
&& x.ReadingTaskState != ReadingTaskState.HaveSigned && x.TaskState == TaskState.Effect, x => new VisitTask()
|
&& x.ReadingTaskState != ReadingTaskState.HaveSigned && x.TaskState == TaskState.Effect, x => new VisitTask()
|
||||||
{
|
{
|
||||||
|
|
||||||
IsUrgent = true,
|
IsUrgent = true,
|
||||||
TaskUrgentType = TaskUrgentType.PDProgress,
|
TaskUrgentType = TaskUrgentType.PDProgress,
|
||||||
IsCanEditUrgentState=false,
|
IsCanEditUrgentState = false,
|
||||||
});
|
});
|
||||||
|
|
||||||
await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => trialInOrderCriterionIdList.Contains(x.TrialReadingCriterionId) && x.SubjectId == dbSubjectVisit.SubjectId
|
await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => trialInOrderCriterionIdList.Contains(x.TrialReadingCriterionId) && x.SubjectId == dbSubjectVisit.SubjectId
|
||||||
|
@ -1428,7 +1383,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
IsUrgent = true,
|
IsUrgent = true,
|
||||||
TaskUrgentType = TaskUrgentType.Other,
|
TaskUrgentType = TaskUrgentType.Other,
|
||||||
TaskUrgentRemake= "后续访视设为pd",
|
TaskUrgentRemake = "后续访视设为pd",
|
||||||
IsCanEditUrgentState = false,
|
IsCanEditUrgentState = false,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -1440,7 +1395,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
});
|
});
|
||||||
|
|
||||||
await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => trialInOrderCriterionIdList.Contains(x.TrialReadingCriterionId) &&
|
await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => trialInOrderCriterionIdList.Contains(x.TrialReadingCriterionId) &&
|
||||||
x.VisitTaskNum>= dbSubjectVisit.VisitNum && x.VisitTaskNum < Math.Ceiling(dbSubjectVisit.VisitNum + 0.01m) // 当前的访视 全局 裁判 全都加急
|
x.VisitTaskNum >= dbSubjectVisit.VisitNum && x.VisitTaskNum < Math.Ceiling(dbSubjectVisit.VisitNum + 0.01m) // 当前的访视 全局 裁判 全都加急
|
||||||
&& x.ReadingTaskState != ReadingTaskState.HaveSigned && x.TaskState == TaskState.Effect, x => new VisitTask()
|
&& x.ReadingTaskState != ReadingTaskState.HaveSigned && x.TaskState == TaskState.Effect, x => new VisitTask()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -1464,14 +1419,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
dbSubjectVisit.IsUrgent = true;
|
dbSubjectVisit.IsUrgent = true;
|
||||||
|
|
||||||
|
|
||||||
////PD确认的紧急会把前面所有未QC完成的访视均标记为紧急
|
|
||||||
|
|
||||||
//var previosSVlist = await _subjectVisitRepository.Where(t => t.SubjectId == dbSubjectVisit.SubjectId && t.VisitNum < dbSubjectVisit.VisitNum && t.IsUrgent == false && t.SubmitState == SubmitStateEnum.Submitted, true).ToListAsync();
|
|
||||||
|
|
||||||
//previosSVlist.ForEach(t =>
|
|
||||||
//{
|
|
||||||
// t.IsUrgent = true;
|
|
||||||
//});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1522,7 +1470,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
}
|
}
|
||||||
|
|
||||||
//非基线设置为PD的话 或者设置为末次访视 根据配置自动生成阅片期
|
//非基线设置为PD的话 或者设置为末次访视 根据配置自动生成阅片期
|
||||||
if (!dbSubjectVisit.IsBaseLine && (dbSubjectVisit.PDState == PDStateEnum.PDProgress || dbSubjectVisit.IsFinalVisit) )
|
if (!dbSubjectVisit.IsBaseLine && (dbSubjectVisit.PDState == PDStateEnum.PDProgress || dbSubjectVisit.IsFinalVisit))
|
||||||
{
|
{
|
||||||
|
|
||||||
//该标准需要添加阅片期
|
//该标准需要添加阅片期
|
||||||
|
@ -1778,7 +1726,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
await _qcChallengeRepository.UpdatePartialFromQueryAsync(t => t.IsClosed == false&& t.SubjectVisitId==dbSubjectVisit.Id, u => new QCChallenge() { IsClosed = true, ClosedTime=DateTime.Now, CloseResonEnum = QCChallengeCloseEnum.Unresolvable });
|
await _qcChallengeRepository.UpdatePartialFromQueryAsync(t => t.IsClosed == false && t.SubjectVisitId == dbSubjectVisit.Id, u => new QCChallenge() { IsClosed = true, ClosedTime = DateTime.Now, CloseResonEnum = QCChallengeCloseEnum.Unresolvable });
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -504,7 +504,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
public string CriterionModalitys { get; set; }
|
public string CriterionModalitys { get; set; }
|
||||||
|
|
||||||
public ReadingImageDownload? ImageDownloadEnum { get; set; }
|
public ReadingImageDownload ImageDownloadEnum { get; set; }
|
||||||
|
|
||||||
public ReadingImageUpload? ImageUploadEnum { get; set; }
|
public ReadingImageUpload? ImageUploadEnum { get; set; }
|
||||||
|
|
||||||
|
@ -870,9 +870,9 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
public bool IsImageFilter { get; set; }
|
public bool IsImageFilter { get; set; }
|
||||||
public string CriterionModalitys { get; set; }
|
public string CriterionModalitys { get; set; }
|
||||||
|
|
||||||
public ReadingImageDownload? ImageDownloadEnum { get; set; }
|
public ReadingImageDownload ImageDownloadEnum { get; set; }
|
||||||
|
|
||||||
public ReadingImageUpload? ImageUploadEnum { get; set; }
|
public ReadingImageUpload ImageUploadEnum { get; set; }
|
||||||
|
|
||||||
|
|
||||||
//是否附加评估
|
//是否附加评估
|
||||||
|
|
|
@ -1465,7 +1465,7 @@ namespace IRaCIS.Core.Application
|
||||||
.WhereIf(!string.IsNullOrEmpty(inQuery.ResearchProgramNo), o => o.ResearchProgramNo.Contains(inQuery.ResearchProgramNo))
|
.WhereIf(!string.IsNullOrEmpty(inQuery.ResearchProgramNo), o => o.ResearchProgramNo.Contains(inQuery.ResearchProgramNo))
|
||||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.ExperimentName), o => o.ExperimentName.Contains(inQuery.ExperimentName))
|
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.ExperimentName), o => o.ExperimentName.Contains(inQuery.ExperimentName))
|
||||||
.WhereIf(_userInfo.UserTypeEnumInt != (int)UserTypeEnum.SuperAdmin && _userInfo.UserTypeEnumInt != (int)UserTypeEnum.Admin && _userInfo.UserTypeEnumInt != (int)UserTypeEnum.OP, t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id && t.IsDeleted == false) && t.IsDeleted == false)
|
.WhereIf(_userInfo.UserTypeEnumInt != (int)UserTypeEnum.SuperAdmin && _userInfo.UserTypeEnumInt != (int)UserTypeEnum.Admin && _userInfo.UserTypeEnumInt != (int)UserTypeEnum.OP, t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id && t.IsDeleted == false) && t.IsDeleted == false)
|
||||||
.WhereIf(inQuery.CriterionType != null, o => o.ReadingQuestionCriterionTrialList.Any(t=>t.CriterionType==inQuery.CriterionType && t.IsSigned && t.IsConfirm))
|
.WhereIf(inQuery.CriterionType != null, o => o.TrialReadingCriterionList.Any(t=>t.CriterionType==inQuery.CriterionType && t.IsSigned && t.IsConfirm))
|
||||||
.WhereIf(!string.IsNullOrEmpty(inQuery.PM_EMail), o => o.TrialUserList.Any(t => t.User.EMail.Contains(inQuery.PM_EMail) && (t.User.UserTypeEnum == UserTypeEnum.ProjectManager || t.User.UserTypeEnum == UserTypeEnum.APM)))
|
.WhereIf(!string.IsNullOrEmpty(inQuery.PM_EMail), o => o.TrialUserList.Any(t => t.User.EMail.Contains(inQuery.PM_EMail) && (t.User.UserTypeEnum == UserTypeEnum.ProjectManager || t.User.UserTypeEnum == UserTypeEnum.APM)))
|
||||||
.Select(t => new TrialToBeDoneDto()
|
.Select(t => new TrialToBeDoneDto()
|
||||||
{
|
{
|
||||||
|
@ -1525,7 +1525,7 @@ namespace IRaCIS.Core.Application
|
||||||
.Where(u => u.CurrentActionUserId == null && (u.PreliminaryAuditUserId == null || (u.PreliminaryAuditUserId != _userInfo.Id && u.ReviewAuditUserId == null))).Count() : 0,
|
.Where(u => u.CurrentActionUserId == null && (u.PreliminaryAuditUserId == null || (u.PreliminaryAuditUserId != _userInfo.Id && u.ReviewAuditUserId == null))).Count() : 0,
|
||||||
|
|
||||||
|
|
||||||
IR_ReadingCriterionList =isIR ? t.ReadingQuestionCriterionTrialList.Where(t=>t.IsConfirm && t.IsSigned).OrderBy(t => t.CriterionName).Select(t=>t.CriterionName).ToList():null,
|
IR_ReadingCriterionList =isIR ? t.TrialReadingCriterionList.Where(t=>t.IsConfirm && t.IsSigned).OrderBy(t => t.CriterionName).Select(t=>t.CriterionName).ToList():null,
|
||||||
|
|
||||||
IR_PMEmailList= isIR ? t.TrialUserList.Where(t=>t.User.UserTypeEnum==UserTypeEnum.ProjectManager || t.User.UserTypeEnum == UserTypeEnum.APM).OrderBy(t => t.User.EMail).Select(t => t.User.EMail).ToList() : null,
|
IR_PMEmailList= isIR ? t.TrialUserList.Where(t=>t.User.UserTypeEnum==UserTypeEnum.ProjectManager || t.User.UserTypeEnum == UserTypeEnum.APM).OrderBy(t => t.User.EMail).Select(t => t.User.EMail).ToList() : null,
|
||||||
|
|
||||||
|
|
|
@ -115,7 +115,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
{
|
{
|
||||||
var list= _siteRepository
|
var list= _siteRepository
|
||||||
.WhereIf(!string.IsNullOrWhiteSpace(siteName), t => t.SiteName.Contains(siteName) || t.SiteNameCN.Contains(siteName) || t.AliasName.Contains(siteName))
|
.WhereIf(!string.IsNullOrWhiteSpace(siteName), t => t.SiteName.Contains(siteName) || t.SiteNameCN.Contains(siteName) || t.AliasName.Contains(siteName))
|
||||||
.Select(t => new TrialSiteSelect() { SiteId = t.Id, SiteName = t.SiteName, AliasName = t.AliasName }).ToList();
|
.Select(t => new TrialSiteSelect() { SiteId = t.Id, SiteName = _userInfo.IsEn_Us? t.SiteName:t.SiteNameCN, AliasName = t.AliasName }).ToList();
|
||||||
|
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,7 +66,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
var userTypeEnumInt = 0;
|
var userTypeEnumInt = 0;
|
||||||
var isEn_Us = false;
|
var isEn_Us = false;
|
||||||
CreateMap<Trial, TrialDetailDTO>()
|
CreateMap<Trial, TrialDetailDTO>()
|
||||||
.ForMember(x=>x.CriterionList,y=>y.MapFrom(z=>z.ReadingQuestionCriterionTrialList.Where(n=>n.IsConfirm).Select(m=>m.CriterionName)))
|
.ForMember(x=>x.CriterionList,y=>y.MapFrom(z=>z.TrialReadingCriterionList.Where(n=>n.IsConfirm).Select(m=>m.CriterionName)))
|
||||||
.ForMember(d => d.DictionaryList, u => u.MapFrom(s => s.TrialDicList.Select(t => t.Dictionary).OrderBy(t => t.ShowOrder)))
|
.ForMember(d => d.DictionaryList, u => u.MapFrom(s => s.TrialDicList.Select(t => t.Dictionary).OrderBy(t => t.ShowOrder)))
|
||||||
//.ForMember(d => d.Code, u => u.MapFrom(s => s.TrialCode))
|
//.ForMember(d => d.Code, u => u.MapFrom(s => s.TrialCode))
|
||||||
.ForMember(d => d.Sponsor, u => u.MapFrom(s => s.Sponsor.SponsorName))
|
.ForMember(d => d.Sponsor, u => u.MapFrom(s => s.Sponsor.SponsorName))
|
||||||
|
@ -170,8 +170,8 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
|
|
||||||
CreateMap<Domain.Models.Trial, TrialConfigDTO>().ForMember(t => t.TrialId, u => u.MapFrom(c => c.Id))
|
CreateMap<Domain.Models.Trial, TrialConfigDTO>().ForMember(t => t.TrialId, u => u.MapFrom(c => c.Id))
|
||||||
.ForMember(t => t.TrialCriterionIds, u => u.MapFrom(c => c.ReadingQuestionCriterionTrialList.Where(v =>v.IsConfirm).OrderBy(x=>x.ShowOrder).Select(r => r.Id)))
|
.ForMember(t => t.TrialCriterionIds, u => u.MapFrom(c => c.TrialReadingCriterionList.Where(v =>v.IsConfirm).OrderBy(x=>x.ShowOrder).Select(r => r.Id)))
|
||||||
.ForMember(t => t.TrialCriterionNames, u => u.MapFrom(c => c.ReadingQuestionCriterionTrialList.Where(v => v.IsConfirm).OrderBy(x => x.ShowOrder).Select(r => r.CriterionName)))
|
.ForMember(t => t.TrialCriterionNames, u => u.MapFrom(c => c.TrialReadingCriterionList.Where(v => v.IsConfirm).OrderBy(x => x.ShowOrder).Select(r => r.CriterionName)))
|
||||||
.ForMember(t => t.ClinicalDataTrialSetIds, u => u.MapFrom(c => c.clinicalDataTrialSets.Where(v => v.IsConfirm).Select(r => r.Id)))
|
.ForMember(t => t.ClinicalDataTrialSetIds, u => u.MapFrom(c => c.clinicalDataTrialSets.Where(v => v.IsConfirm).Select(r => r.Id)))
|
||||||
.ForMember(t => t.ClinicalDataSetNames, u => u.MapFrom(c => c.clinicalDataTrialSets.Where(v => v.IsConfirm).Select(r => isEn_Us ? r.ClinicalDataSetEnName:r.ClinicalDataSetName)))
|
.ForMember(t => t.ClinicalDataSetNames, u => u.MapFrom(c => c.clinicalDataTrialSets.Where(v => v.IsConfirm).Select(r => isEn_Us ? r.ClinicalDataSetEnName:r.ClinicalDataSetName)))
|
||||||
//.ForMember(t => t.CriterionIds, u => u.MapFrom(c => c.TrialDicList.Where(v => v.KeyName == StaticData.Criterion).Select(r => r.DictionaryId)))
|
//.ForMember(t => t.CriterionIds, u => u.MapFrom(c => c.TrialDicList.Where(v => v.KeyName == StaticData.Criterion).Select(r => r.DictionaryId)))
|
||||||
|
|
|
@ -188,7 +188,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
{
|
{
|
||||||
public Guid TrialId { get; set; }
|
public Guid TrialId { get; set; }
|
||||||
public Guid SujectVisitId { get; set; }
|
public Guid SujectVisitId { get; set; }
|
||||||
public Guid? VisitTaskId { get; set; }
|
public Guid VisitTaskId { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -264,7 +264,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
public bool IsCriticalSequence { get; set; } = false;
|
public bool IsCriticalSequence { get; set; } = false;
|
||||||
|
|
||||||
public int SeriesCount { get; set; }
|
public int SeriesCount =>SeriesList.Count;
|
||||||
public int InstanceCount { get; set; }
|
public int InstanceCount { get; set; }
|
||||||
|
|
||||||
public bool IsDicom { get; set; } = true;
|
public bool IsDicom { get; set; } = true;
|
||||||
|
@ -382,7 +382,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
public string ErrorMesseage { get; set; } = String.Empty;
|
public string ErrorMesseage { get; set; } = String.Empty;
|
||||||
|
|
||||||
public List<UploadedSeries> UploadedSeriesList { get; set;} = new List<UploadedSeries>();
|
public List<UploadedSeries> UploadedSeriesList { get; set; } = new List<UploadedSeries>();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -535,7 +535,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
public Guid TrialId { get; set; }
|
public Guid TrialId { get; set; }
|
||||||
public string SubjectInfo { get; set; } = String.Empty;
|
public string SubjectInfo { get; set; } = String.Empty;
|
||||||
|
|
||||||
public string VisitPlanInfo { get; set; }=String.Empty;
|
public string VisitPlanInfo { get; set; } = String.Empty;
|
||||||
|
|
||||||
public Guid? SubjectVisitId { get; set; }
|
public Guid? SubjectVisitId { get; set; }
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@ using IRaCIS.Application.Services;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using DocumentFormat.OpenXml.Drawing.Charts;
|
using DocumentFormat.OpenXml.Drawing.Charts;
|
||||||
using IRaCIS.Core.Domain.Models;
|
using IRaCIS.Core.Domain.Models;
|
||||||
|
using NPOI.SS.Formula.Functions;
|
||||||
|
|
||||||
namespace IRaCIS.Core.Application.Services
|
namespace IRaCIS.Core.Application.Services
|
||||||
{
|
{
|
||||||
|
@ -263,7 +264,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
{
|
{
|
||||||
InstanceCount = k.InstanceCount,
|
InstanceCount = k.InstanceCount,
|
||||||
Modalities = k.Modalities,
|
Modalities = k.Modalities,
|
||||||
SeriesCount = k.SeriesCount,
|
//SeriesCount = k.SeriesCount,
|
||||||
StudyCode = k.StudyCode,
|
StudyCode = k.StudyCode,
|
||||||
StudyId = k.Id
|
StudyId = k.Id
|
||||||
}).ToListAsync();
|
}).ToListAsync();
|
||||||
|
@ -297,7 +298,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
);
|
);
|
||||||
|
|
||||||
//设置为阅片与否 不更改数据库检查 的instance数量 和 SeriesCount 所以这里要实时统计
|
//设置为阅片与否 不更改数据库检查 的instance数量 和 SeriesCount 所以这里要实时统计
|
||||||
t.SeriesCount = t.SeriesList.Count;
|
//t.SeriesCount = t.SeriesList.Count;
|
||||||
t.InstanceCount = t.SeriesList.SelectMany(t => t.InstanceInfoList).Count();
|
t.InstanceCount = t.SeriesList.SelectMany(t => t.InstanceInfoList).Count();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -338,8 +339,8 @@ namespace IRaCIS.Core.Application.Services
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
series.WindowWidth = instanceList.FirstOrDefault()!.WindowWidth;
|
//series.WindowWidth = instanceList.FirstOrDefault()!.WindowWidth;
|
||||||
series.WindowCenter = instanceList.FirstOrDefault()!.WindowCenter;
|
//series.WindowCenter = instanceList.FirstOrDefault()!.WindowCenter;
|
||||||
|
|
||||||
return series;
|
return series;
|
||||||
}
|
}
|
||||||
|
@ -445,8 +446,8 @@ namespace IRaCIS.Core.Application.Services
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
series.WindowWidth = instanceList.FirstOrDefault()!.WindowWidth;
|
//series.WindowWidth = instanceList.FirstOrDefault()!.WindowWidth;
|
||||||
series.WindowCenter = instanceList.FirstOrDefault()!.WindowCenter;
|
//series.WindowCenter = instanceList.FirstOrDefault()!.WindowCenter;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -480,8 +481,99 @@ namespace IRaCIS.Core.Application.Services
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<List<VisitStudyDTO>> GetReadingVisitStudyList(GetReadingVisitStudyListIndto indto)
|
public async Task<List<VisitStudyDTO>> GetReadingVisitStudyList(GetReadingVisitStudyListIndto indto)
|
||||||
{
|
{
|
||||||
var result = new List<VisitStudyDTO>();
|
|
||||||
|
|
||||||
|
var studyList = new List<VisitStudyDTO>();
|
||||||
|
|
||||||
|
var taskInfo = await _visitTaskRepository.Where(x => x.Id == indto.VisitTaskId).Select(t => new {t.TrialReadingCriterionId,t.TrialReadingCriterion.IsImageFilter,t.TrialReadingCriterion.CriterionModalitys, t.ReadingTaskState ,TaskStudyCount=t.TaskStudyList.Count }).FirstNotNullAsync();
|
||||||
|
|
||||||
|
//影像后处理 上传了新的影像
|
||||||
|
if (taskInfo.TaskStudyCount > 0)
|
||||||
|
{
|
||||||
|
|
||||||
|
var taskStudyList= await _repository.Where<TaskStudy>(t => t.TrialId == indto.TrialId && t.VisitTaskId == indto.VisitTaskId).ProjectTo<VisitStudyDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
||||||
|
|
||||||
|
foreach (var study in taskStudyList)
|
||||||
|
{
|
||||||
|
study.SeriesList = study.SeriesList.OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime).ToList();
|
||||||
|
|
||||||
|
//foreach (var series in study.SeriesList)
|
||||||
|
//{
|
||||||
|
// series.WindowCenter = series.InstanceInfoList.FirstOrDefault()!.WindowCenter;
|
||||||
|
// series.WindowWidth = series.InstanceInfoList.FirstOrDefault()!.WindowWidth;
|
||||||
|
//}
|
||||||
|
//study.SeriesCount = study.SeriesList.Count;
|
||||||
|
|
||||||
|
study.InstanceCount = study.SeriesList.SelectMany(t => t.InstanceInfoList).Count();
|
||||||
|
}
|
||||||
|
|
||||||
|
studyList.AddRange(taskStudyList);
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
#region dicom 检查查询
|
||||||
|
|
||||||
|
//如果是手动生成的标准,需要过滤检查和序列数据
|
||||||
|
|
||||||
|
var isManualGenerate = await _trialReadingCriterionRepository.AnyAsync(t => t.Id == taskInfo.TrialReadingCriterionId && t.IsAutoCreate == false);
|
||||||
|
|
||||||
|
var dicomStudyList = await _repository.Where<DicomStudy>(t => t.TrialId == indto.TrialId && t.SubjectVisitId == indto.SujectVisitId)
|
||||||
|
.WhereIf(taskInfo.IsImageFilter==true, t=> taskInfo.CriterionModalitys.Contains(t.ModalityForEdit))
|
||||||
|
.WhereIf(isManualGenerate, t => t.SubjectCriteriaEvaluationVisitStudyFilterList.Any(t => t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.IsConfirmed && t.IsReading))
|
||||||
|
.Select(k => new VisitStudyDTO()
|
||||||
|
{
|
||||||
|
InstanceCount = k.InstanceCount,
|
||||||
|
Modalities = k.Modalities,
|
||||||
|
//SeriesCount = k.SeriesCount,
|
||||||
|
StudyCode = k.StudyCode,
|
||||||
|
StudyId = k.Id,
|
||||||
|
|
||||||
|
}).ToListAsync();
|
||||||
|
var studyIds = dicomStudyList.Select(t => t.StudyId).ToList();
|
||||||
|
|
||||||
|
var instanceList = await _repository.Where<DicomInstance>(t => studyIds.Contains(t.StudyId))
|
||||||
|
.Select(t => new { t.SeriesId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.WindowCenter, t.WindowWidth, t.HtmlPath }).ToListAsync();
|
||||||
|
|
||||||
|
List<DicomSeriesDTO> seriesLists = await _repository.Where<DicomSeries>(s => studyIds.Contains(s.StudyId))
|
||||||
|
.WhereIf(isManualGenerate == false, t => t.IsReading)
|
||||||
|
.WhereIf(isManualGenerate, t => t.SubjectCriteriaEvaluationVisitStudyFilterList.Any(t => t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.IsConfirmed && t.IsReading))
|
||||||
|
.OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime).ProjectTo<DicomSeriesDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
||||||
|
|
||||||
|
foreach (var t in dicomStudyList)
|
||||||
|
{
|
||||||
|
t.SeriesList = seriesLists.Where(s => s.StudyId == t.StudyId).OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime).ToList();
|
||||||
|
|
||||||
|
t.SeriesList.ForEach(series =>
|
||||||
|
{
|
||||||
|
series.InstanceInfoList = instanceList.Where(t => t.SeriesId == series.Id).OrderBy(t => t.InstanceNumber).Select(k =>
|
||||||
|
new InstanceBasicInfo()
|
||||||
|
{
|
||||||
|
Id = k.Id,
|
||||||
|
NumberOfFrames = k.NumberOfFrames,
|
||||||
|
HtmlPath = k.HtmlPath,
|
||||||
|
Path = k.Path,
|
||||||
|
InstanceNumber = k.InstanceNumber,
|
||||||
|
|
||||||
|
}).ToList();
|
||||||
|
|
||||||
|
//series.WindowWidth = instanceList.FirstOrDefault()!.WindowWidth;
|
||||||
|
//series.WindowCenter = instanceList.FirstOrDefault()!.WindowCenter;
|
||||||
|
});
|
||||||
|
|
||||||
|
//设置为阅片与否 不更改数据库检查 的instance数量 和 SeriesCount 所以这里要实时统计
|
||||||
|
//t.SeriesCount = t.SeriesList.Count;
|
||||||
|
t.InstanceCount = t.SeriesList.SelectMany(t => t.InstanceInfoList).Count();
|
||||||
|
}
|
||||||
|
|
||||||
|
studyList.AddRange(dicomStudyList);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region dicom 关键序列处理
|
||||||
|
|
||||||
|
//已经签名的任务,加关键序列
|
||||||
|
if (taskInfo.ReadingTaskState == ReadingTaskState.HaveSigned)
|
||||||
|
{
|
||||||
var rowInfoList = await _readingTableAnswerRowInfoRepository.Where(x => x.VisitTaskId == indto.VisitTaskId && x.StudyId != null).OrderBy(x => x.ReadingQuestionTrial.ShowOrder).ThenBy(x => x.RowIndex).Select(x => new
|
var rowInfoList = await _readingTableAnswerRowInfoRepository.Where(x => x.VisitTaskId == indto.VisitTaskId && x.StudyId != null).OrderBy(x => x.ReadingQuestionTrial.ShowOrder).ThenBy(x => x.RowIndex).Select(x => new
|
||||||
{
|
{
|
||||||
x.ReadingQuestionTrial.ShowOrder,
|
x.ReadingQuestionTrial.ShowOrder,
|
||||||
|
@ -491,12 +583,6 @@ namespace IRaCIS.Core.Application.Services
|
||||||
x.InstanceId,
|
x.InstanceId,
|
||||||
}).ToListAsync();
|
}).ToListAsync();
|
||||||
|
|
||||||
|
|
||||||
var taskInfo = await _visitTaskRepository.Where(x => x.Id == indto.VisitTaskId).FirstNotNullAsync();
|
|
||||||
|
|
||||||
if (taskInfo.ReadingTaskState == ReadingTaskState.HaveSigned)
|
|
||||||
{
|
|
||||||
|
|
||||||
var thisStudyIds = rowInfoList.OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).Select(x => x.StudyId).Distinct().ToList();
|
var thisStudyIds = rowInfoList.OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).Select(x => x.StudyId).Distinct().ToList();
|
||||||
var thisSeriesIdIds = rowInfoList.Where(x => x.SeriesId != null).OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).Select(x => x.SeriesId).Distinct().ToList();
|
var thisSeriesIdIds = rowInfoList.Where(x => x.SeriesId != null).OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).Select(x => x.SeriesId).Distinct().ToList();
|
||||||
if (rowInfoList.Count > 0)
|
if (rowInfoList.Count > 0)
|
||||||
|
@ -505,7 +591,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
{
|
{
|
||||||
InstanceCount = k.InstanceCount,
|
InstanceCount = k.InstanceCount,
|
||||||
|
|
||||||
SeriesCount = k.SeriesCount,
|
//SeriesCount = k.SeriesCount,
|
||||||
|
|
||||||
StudyId = k.Id,
|
StudyId = k.Id,
|
||||||
IsCriticalSequence = true,
|
IsCriticalSequence = true,
|
||||||
|
@ -558,79 +644,38 @@ namespace IRaCIS.Core.Application.Services
|
||||||
var modalityList = await _repository.Where<DicomSeries>(s => thisSeriesIdIds.Contains(s.Id)).OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime).Select(x => x.Modality).Distinct().ToListAsync(); ;
|
var modalityList = await _repository.Where<DicomSeries>(s => thisSeriesIdIds.Contains(s.Id)).OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime).Select(x => x.Modality).Distinct().ToListAsync(); ;
|
||||||
item.Modality = string.Join(",", modalityList);
|
item.Modality = string.Join(",", modalityList);
|
||||||
thisVisitTaskStudy.SeriesList.Add(item);
|
thisVisitTaskStudy.SeriesList.Add(item);
|
||||||
thisVisitTaskStudy.SeriesCount = thisVisitTaskStudy.SeriesList.Count;
|
//thisVisitTaskStudy.SeriesCount = thisVisitTaskStudy.SeriesList.Count;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
studyList.Add(thisVisitTaskStudy);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
result.Add(thisVisitTaskStudy);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
studyList.ForEach(x =>
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//如果是手动生成的标准,需要过滤检查和序列数据
|
|
||||||
|
|
||||||
var isManualGenerate = await _trialReadingCriterionRepository.AnyAsync(t => t.Id == taskInfo.TrialReadingCriterionId && t.IsAutoCreate == false);
|
|
||||||
|
|
||||||
var studyList = await _repository.Where<DicomStudy>(t => t.TrialId == indto.TrialId && t.SubjectVisitId == indto.SujectVisitId)
|
|
||||||
.WhereIf(isManualGenerate, t => t.SubjectCriteriaEvaluationVisitStudyFilterList.Any(t => t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.IsConfirmed && t.IsReading))
|
|
||||||
.Select(k => new VisitStudyDTO()
|
|
||||||
{
|
{
|
||||||
InstanceCount = k.InstanceCount,
|
x.SeriesList.ForEach(y =>
|
||||||
Modalities = k.Modalities,
|
|
||||||
SeriesCount = k.SeriesCount,
|
|
||||||
StudyCode = k.StudyCode,
|
|
||||||
StudyId = k.Id,
|
|
||||||
|
|
||||||
}).ToListAsync();
|
|
||||||
var studyIds = studyList.Select(t => t.StudyId).ToList();
|
|
||||||
|
|
||||||
var instanceList = await _repository.Where<DicomInstance>(t => studyIds.Contains(t.StudyId))
|
|
||||||
.Select(t => new { t.SeriesId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.WindowCenter, t.WindowWidth, t.HtmlPath }).ToListAsync();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
List<DicomSeriesDTO> seriesLists = await _repository.Where<DicomSeries>(s => studyIds.Contains(s.StudyId) /*&& s.IsReading*/)
|
|
||||||
.WhereIf(isManualGenerate == false, t => t.IsReading)
|
|
||||||
.WhereIf(isManualGenerate, t => t.SubjectCriteriaEvaluationVisitStudyFilterList.Any(t => t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.IsConfirmed && t.IsReading))
|
|
||||||
.OrderBy(s => s.SeriesNumber). ThenBy(s => s.SeriesTime).ProjectTo<DicomSeriesDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
|
||||||
|
|
||||||
foreach (var t in studyList)
|
|
||||||
{
|
{
|
||||||
t.SeriesList = seriesLists.Where(s => s.StudyId == t.StudyId).OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime).ToList();
|
y.IsBeMark = rowInfoList.Any(z => z.SeriesId == y.Id);
|
||||||
|
|
||||||
t.SeriesList.ForEach(series =>
|
|
||||||
{
|
|
||||||
series.InstanceInfoList = instanceList.Where(t => t.SeriesId == series.Id).OrderBy(t => t.InstanceNumber).Select(k =>
|
|
||||||
new InstanceBasicInfo()
|
|
||||||
{
|
|
||||||
Id = k.Id,
|
|
||||||
NumberOfFrames = k.NumberOfFrames,
|
|
||||||
HtmlPath = k.HtmlPath,
|
|
||||||
Path = k.Path,
|
|
||||||
InstanceNumber = k.InstanceNumber,
|
|
||||||
|
|
||||||
}).ToList();
|
|
||||||
|
|
||||||
series.WindowWidth = instanceList.FirstOrDefault()!.WindowWidth;
|
|
||||||
series.WindowCenter = instanceList.FirstOrDefault()!.WindowCenter;
|
|
||||||
});
|
});
|
||||||
|
|
||||||
//设置为阅片与否 不更改数据库检查 的instance数量 和 SeriesCount 所以这里要实时统计
|
});
|
||||||
t.SeriesCount = t.SeriesList.Count;
|
|
||||||
t.InstanceCount = t.SeriesList.SelectMany(t => t.InstanceInfoList).Count();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 非Dicom
|
#endregion
|
||||||
|
}
|
||||||
|
|
||||||
var noDicomList = await _noneDicomStudyRepository.Where(x => x.TrialId == indto.TrialId && x.SubjectVisitId == indto.SujectVisitId).ToListAsync();
|
|
||||||
|
#region 非Dicom 检查查询
|
||||||
|
|
||||||
|
var noDicomList = await _noneDicomStudyRepository.Where(x => x.TrialId == indto.TrialId && x.SubjectVisitId == indto.SujectVisitId)
|
||||||
|
.WhereIf(taskInfo.IsImageFilter == true, t => taskInfo.CriterionModalitys.Contains(t.Modality)).ToListAsync();
|
||||||
|
|
||||||
|
|
||||||
List<VisitStudyDTO> noDicomStudyList = noDicomList.Select(x => new VisitStudyDTO()
|
List<VisitStudyDTO> noDicomStudyList = noDicomList.Select(x => new VisitStudyDTO()
|
||||||
|
@ -638,7 +683,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
InstanceCount = x.FileCount,
|
InstanceCount = x.FileCount,
|
||||||
StudyId = x.Id,
|
StudyId = x.Id,
|
||||||
Modalities = x.Modality,
|
Modalities = x.Modality,
|
||||||
SeriesCount = 1,
|
//SeriesCount = 1,
|
||||||
StudyCode = x.StudyCode,
|
StudyCode = x.StudyCode,
|
||||||
IsDicom = false,
|
IsDicom = false,
|
||||||
|
|
||||||
|
@ -653,7 +698,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
if (instanceCount == 0)
|
if (instanceCount == 0)
|
||||||
{
|
{
|
||||||
item.SeriesList = new List<DicomSeriesDTO>();
|
item.SeriesList = new List<DicomSeriesDTO>();
|
||||||
item.SeriesCount = 0;
|
//item.SeriesCount = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -677,24 +722,14 @@ namespace IRaCIS.Core.Application.Services
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (studyList == null || studyList.Count == 0)
|
|
||||||
{
|
|
||||||
studyList = new List<VisitStudyDTO>();
|
|
||||||
}
|
|
||||||
|
|
||||||
studyList.AddRange(noDicomStudyList);
|
studyList.AddRange(noDicomStudyList);
|
||||||
|
|
||||||
studyList.ForEach(x =>
|
#endregion
|
||||||
{
|
|
||||||
x.SeriesList.ForEach(y =>
|
|
||||||
{
|
|
||||||
y.IsBeMark = rowInfoList.Any(z => z.SeriesId == y.Id);
|
var result = studyList.Where(x => x.SeriesCount > 0).ToList();
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
result.AddRange(studyList);
|
|
||||||
result = result.Where(x => x.SeriesCount > 0).ToList();
|
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using IRaCIS.Application.Contracts;
|
using IRaCIS.Application.Contracts;
|
||||||
using IRaCIS.Core.Application.Contracts;
|
using IRaCIS.Core.Application.Contracts;
|
||||||
|
using IRaCIS.Core.Application.Contracts.Dicom.DTO;
|
||||||
using IRaCIS.Core.Application.MediatR.CommandAndQueries;
|
using IRaCIS.Core.Application.MediatR.CommandAndQueries;
|
||||||
using IRaCIS.Core.Domain.Share;
|
using IRaCIS.Core.Domain.Share;
|
||||||
|
|
||||||
|
@ -101,6 +102,16 @@ namespace IRaCIS.Core.Application.Service
|
||||||
.ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.SubjectVisit.Subject.Code))
|
.ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.SubjectVisit.Subject.Code))
|
||||||
.ForMember(d => d.VisitName, u => u.MapFrom(s => s.SubjectVisit.VisitName))
|
.ForMember(d => d.VisitName, u => u.MapFrom(s => s.SubjectVisit.VisitName))
|
||||||
.ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.SubjectVisit.TrialSite.TrialSiteCode));
|
.ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.SubjectVisit.TrialSite.TrialSiteCode));
|
||||||
|
|
||||||
|
|
||||||
|
CreateMap<TaskStudy, VisitStudyDTO>()
|
||||||
|
.ForMember(d => d.StudyId, u => u.MapFrom(s => s.Id))
|
||||||
|
.ForMember(d => d.SeriesList, u => u.MapFrom(s => s.SeriesList));
|
||||||
|
|
||||||
|
CreateMap<TaskSeries, DicomSeriesDTO>()
|
||||||
|
.ForMember(d => d.InstanceInfoList, u => u.MapFrom(s => s.InstanceList));
|
||||||
|
|
||||||
|
CreateMap<TaskInstance, InstanceBasicInfo>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -377,9 +377,9 @@ namespace IRaCIS.Application.Contracts
|
||||||
|
|
||||||
public bool IsReadingPeriod { get; set; }
|
public bool IsReadingPeriod { get; set; }
|
||||||
|
|
||||||
public ReadingImageDownload? ImageDownloadEnum { get; set; }
|
public ReadingImageDownload ImageDownloadEnum { get; set; }
|
||||||
|
|
||||||
public ReadingImageUpload? ImageUploadEnum { get; set; }
|
public ReadingImageUpload ImageUploadEnum { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class TrialCriterionReadingCategory
|
public class TrialCriterionReadingCategory
|
||||||
|
|
|
@ -252,7 +252,7 @@ namespace IRaCIS.Application.Services
|
||||||
EnrollId = intoGroup.Id,
|
EnrollId = intoGroup.Id,
|
||||||
IsEnable = allocateRule.IsEnable,
|
IsEnable = allocateRule.IsEnable,
|
||||||
|
|
||||||
TrialReadingCriterionList = intoGroup.Trial.ReadingQuestionCriterionTrialList.Where(t => t.IsConfirm).Select(t => new TrialReadingCriterionDto() { TrialReadingCriterionId = t.Id, TrialReadingCriterionName = t.CriterionName, CriterionType = t.CriterionType, IsOncologyReading = t.IsOncologyReading, IsArbitrationReading = t.IsArbitrationReading, IsGlobalReading = t.IsGlobalReading, ReadingInfoSignTime = t.ReadingInfoSignTime, ReadingType = t.ReadingType }).ToList(),
|
TrialReadingCriterionList = intoGroup.Trial.TrialReadingCriterionList.Where(t => t.IsConfirm).Select(t => new TrialReadingCriterionDto() { TrialReadingCriterionId = t.Id, TrialReadingCriterionName = t.CriterionName, CriterionType = t.CriterionType, IsOncologyReading = t.IsOncologyReading, IsArbitrationReading = t.IsArbitrationReading, IsGlobalReading = t.IsGlobalReading, ReadingInfoSignTime = t.ReadingInfoSignTime, ReadingType = t.ReadingType }).ToList(),
|
||||||
|
|
||||||
DoctorCriterionStatusList= intoGroup.EnrollReadingCriteriaList.Select(t=>new DoctorCriterionStatus()
|
DoctorCriterionStatusList= intoGroup.EnrollReadingCriteriaList.Select(t=>new DoctorCriterionStatus()
|
||||||
{
|
{
|
||||||
|
|
|
@ -276,9 +276,9 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
public List<VisitTask> VisitTaskList { get; set; }
|
public List<VisitTask> VisitTaskList { get; set; }
|
||||||
|
|
||||||
|
|
||||||
public ReadingImageDownload? ImageDownloadEnum { get; set; }
|
public ReadingImageDownload ImageDownloadEnum { get; set; }
|
||||||
|
|
||||||
public ReadingImageUpload? ImageUploadEnum { get; set; }
|
public ReadingImageUpload ImageUploadEnum { get; set; }
|
||||||
|
|
||||||
public bool IsImageFilter { get; set; }
|
public bool IsImageFilter { get; set; }
|
||||||
}
|
}
|
||||||
|
@ -294,7 +294,9 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
{
|
{
|
||||||
None = 0,
|
None = 0,
|
||||||
|
|
||||||
IRReadingEnable = 1
|
IRReadingSubejctEnable = 1,
|
||||||
|
|
||||||
|
IRReadingVisitEnable = 2,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -46,7 +46,7 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public List<TrialUser> TrialUserList { get; set; } = new List<TrialUser>();
|
public List<TrialUser> TrialUserList { get; set; } = new List<TrialUser>();
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public List<ReadingQuestionCriterionTrial> ReadingQuestionCriterionTrialList { get; set; } = new List<ReadingQuestionCriterionTrial>();
|
public List<ReadingQuestionCriterionTrial> TrialReadingCriterionList { get; set; } = new List<ReadingQuestionCriterionTrial>();
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public List<Subject> SubjectList { get; set; } = new List<Subject>();
|
public List<Subject> SubjectList { get; set; } = new List<Subject>();
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
|
|
Loading…
Reference in New Issue