修改任务查询
parent
6baae40a38
commit
0e55c50d4c
|
@ -265,7 +265,7 @@ namespace IRaCIS.Core.Application.ViewModel
|
||||||
|
|
||||||
public bool ExistReadingApply { get; set; }
|
public bool ExistReadingApply { get; set; }
|
||||||
|
|
||||||
public DateTime? SuggesteFinishedTime => UnReadTaskList.Max(t => t.SuggesteFinishedTime);
|
public DateTime? SuggesteFinishedTime { get; set; }
|
||||||
|
|
||||||
public List<IRUnreadTaskView> UnReadCanReadTaskList => UnReadTaskList.Where(y => y.IsFrontTaskNeedSignButNotSign == false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true)).ToList();
|
public List<IRUnreadTaskView> UnReadCanReadTaskList => UnReadTaskList.Where(y => y.IsFrontTaskNeedSignButNotSign == false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true)).ToList();
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,11 @@ using IRaCIS.Core.Infra.EFCore.Common;
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
using IRaCIS.Application.Contracts;
|
using IRaCIS.Application.Contracts;
|
||||||
using IRaCIS.Core.Application.Filter;
|
using IRaCIS.Core.Application.Filter;
|
||||||
|
using DocumentFormat.OpenXml.Office2010.Word;
|
||||||
|
using System.Linq.Dynamic.Core;
|
||||||
|
using System.Linq;
|
||||||
|
using DocumentFormat.OpenXml.Bibliography;
|
||||||
|
using Org.BouncyCastle.Crypto;
|
||||||
|
|
||||||
namespace IRaCIS.Core.Application.Service.Allocation
|
namespace IRaCIS.Core.Application.Service.Allocation
|
||||||
{
|
{
|
||||||
|
@ -723,8 +728,8 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||||
.WhereIf(queryVisitTask.TrialReadingCriterionId != null, t => t.TrialReadingCriterionId == queryVisitTask.TrialReadingCriterionId)
|
.WhereIf(queryVisitTask.TrialReadingCriterionId != null, t => t.TrialReadingCriterionId == queryVisitTask.TrialReadingCriterionId)
|
||||||
.WhereIf(queryVisitTask.ReReadingApplyState != null, t => t.ReReadingApplyState == queryVisitTask.ReReadingApplyState)
|
.WhereIf(queryVisitTask.ReReadingApplyState != null, t => t.ReReadingApplyState == queryVisitTask.ReReadingApplyState)
|
||||||
|
|
||||||
.WhereIf(queryVisitTask.CompleteClinicalDataEnum == CompleteClinicalDataEnum.Complete , t => t.IsClinicalDataSign && t.IsNeedClinicalDataSign == true)
|
.WhereIf(queryVisitTask.CompleteClinicalDataEnum == CompleteClinicalDataEnum.Complete, t => t.IsClinicalDataSign && t.IsNeedClinicalDataSign == true)
|
||||||
.WhereIf(queryVisitTask.CompleteClinicalDataEnum == CompleteClinicalDataEnum.NotComplete, t => t.IsClinicalDataSign==false && t.IsNeedClinicalDataSign==true)
|
.WhereIf(queryVisitTask.CompleteClinicalDataEnum == CompleteClinicalDataEnum.NotComplete, t => t.IsClinicalDataSign == false && t.IsNeedClinicalDataSign == true)
|
||||||
.WhereIf(queryVisitTask.CompleteClinicalDataEnum == CompleteClinicalDataEnum.NA, t => t.IsNeedClinicalDataSign == false)
|
.WhereIf(queryVisitTask.CompleteClinicalDataEnum == CompleteClinicalDataEnum.NA, t => t.IsNeedClinicalDataSign == false)
|
||||||
.WhereIf(!string.IsNullOrEmpty(queryVisitTask.TrialSiteCode), t => (t.BlindTrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate) || (t.Subject.TrialSite.TrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate == false))
|
.WhereIf(!string.IsNullOrEmpty(queryVisitTask.TrialSiteCode), t => (t.BlindTrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate) || (t.Subject.TrialSite.TrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate == false))
|
||||||
.WhereIf(!string.IsNullOrEmpty(queryVisitTask.TaskName), t => t.TaskName.Contains(queryVisitTask.TaskName) || t.TaskBlindName.Contains(queryVisitTask.TaskName))
|
.WhereIf(!string.IsNullOrEmpty(queryVisitTask.TaskName), t => t.TaskName.Contains(queryVisitTask.TaskName) || t.TaskBlindName.Contains(queryVisitTask.TaskName))
|
||||||
|
@ -776,7 +781,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||||
|
|
||||||
.WhereIf(!string.IsNullOrEmpty(queryVisitTask.TrialSiteCode), t => (t.OriginalReReadingTask.BlindTrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.OriginalReReadingTask.IsAnalysisCreate) || (t.OriginalReReadingTask.Subject.TrialSite.TrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.OriginalReReadingTask.IsAnalysisCreate == false))
|
.WhereIf(!string.IsNullOrEmpty(queryVisitTask.TrialSiteCode), t => (t.OriginalReReadingTask.BlindTrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.OriginalReReadingTask.IsAnalysisCreate) || (t.OriginalReReadingTask.Subject.TrialSite.TrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.OriginalReReadingTask.IsAnalysisCreate == false))
|
||||||
.WhereIf(!string.IsNullOrEmpty(queryVisitTask.TaskName), t => t.OriginalReReadingTask.TaskName.Contains(queryVisitTask.TaskName) || t.OriginalReReadingTask.TaskBlindName.Contains(queryVisitTask.TaskName))
|
.WhereIf(!string.IsNullOrEmpty(queryVisitTask.TaskName), t => t.OriginalReReadingTask.TaskName.Contains(queryVisitTask.TaskName) || t.OriginalReReadingTask.TaskBlindName.Contains(queryVisitTask.TaskName))
|
||||||
.WhereIf(!string.IsNullOrEmpty(queryVisitTask.SubjectCode), t => (t.OriginalReReadingTask.Subject.Code.Contains(queryVisitTask.SubjectCode)&& t.OriginalReReadingTask.IsAnalysisCreate==false) || (t.OriginalReReadingTask.BlindSubjectCode.Contains(queryVisitTask.SubjectCode)&& t.OriginalReReadingTask.IsAnalysisCreate))
|
.WhereIf(!string.IsNullOrEmpty(queryVisitTask.SubjectCode), t => (t.OriginalReReadingTask.Subject.Code.Contains(queryVisitTask.SubjectCode) && t.OriginalReReadingTask.IsAnalysisCreate == false) || (t.OriginalReReadingTask.BlindSubjectCode.Contains(queryVisitTask.SubjectCode) && t.OriginalReReadingTask.IsAnalysisCreate))
|
||||||
.WhereIf(queryVisitTask.BeginAllocateDate != null, t => t.OriginalReReadingTask.AllocateTime > queryVisitTask.BeginAllocateDate)
|
.WhereIf(queryVisitTask.BeginAllocateDate != null, t => t.OriginalReReadingTask.AllocateTime > queryVisitTask.BeginAllocateDate)
|
||||||
.WhereIf(queryVisitTask.EndAllocateDate != null, t => t.OriginalReReadingTask.AllocateTime < queryVisitTask.EndAllocateDate!.Value.AddDays(1))
|
.WhereIf(queryVisitTask.EndAllocateDate != null, t => t.OriginalReReadingTask.AllocateTime < queryVisitTask.EndAllocateDate!.Value.AddDays(1))
|
||||||
.ProjectTo<ReReadingTaskView>(_mapper.ConfigurationProvider);
|
.ProjectTo<ReReadingTaskView>(_mapper.ConfigurationProvider);
|
||||||
|
@ -997,6 +1002,9 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||||
|
|
||||||
var visitGroupQuery = _visitTaskRepository.Where(x => x.TrialId == inDto.TrialId && x.DoctorUserId == _userInfo.Id
|
var visitGroupQuery = _visitTaskRepository.Where(x => x.TrialId == inDto.TrialId && x.DoctorUserId == _userInfo.Id
|
||||||
&& x.TaskState == TaskState.Effect /*&& x.TrialReadingCriterionId== inDto.TrialReadingCriterionId*/)
|
&& x.TaskState == TaskState.Effect /*&& x.TrialReadingCriterionId== inDto.TrialReadingCriterionId*/)
|
||||||
|
|
||||||
|
//.Where(t => t.VisitTaskNum < t.Subject.SubjectVisitList.Where(t => t.CheckState != CheckStateEnum.CVPassed).Min(t => t.VisitNum) )
|
||||||
|
.Where(t => t.Subject.SubjectVisitList.Any(t => t.CheckState != CheckStateEnum.CVPassed) ? t.VisitTaskNum < t.Subject.SubjectVisitList.Where(t => t.CheckState != CheckStateEnum.CVPassed).Min(t => t.VisitNum) : true)
|
||||||
//满足前序访视不存在 需要签署但是未签署 sql 相当复杂 同时想查询所有未读的统计数字 就无法统计 byzhouhang
|
//满足前序访视不存在 需要签署但是未签署 sql 相当复杂 同时想查询所有未读的统计数字 就无法统计 byzhouhang
|
||||||
//但是加字段 IsFrontTaskNeedSignButNotSign 那么签名临床数据的时候,要对该subject 该标准的有效的任务 这个字段需要在签名的时候维护 采取这种方式 统计数字灵活
|
//但是加字段 IsFrontTaskNeedSignButNotSign 那么签名临床数据的时候,要对该subject 该标准的有效的任务 这个字段需要在签名的时候维护 采取这种方式 统计数字灵活
|
||||||
//.Where(t => t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum))
|
//.Where(t => t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum))
|
||||||
|
@ -1008,8 +1016,10 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||||
SubjectId = x.Key.SubjectId,
|
SubjectId = x.Key.SubjectId,
|
||||||
SubjectCode = x.Key.BlindSubjectCode == string.Empty ? x.Key.Code : x.Key.BlindSubjectCode,
|
SubjectCode = x.Key.BlindSubjectCode == string.Empty ? x.Key.Code : x.Key.BlindSubjectCode,
|
||||||
|
|
||||||
|
SuggesteFinishedTime = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned).Min(x => x.SuggesteFinishedTime),
|
||||||
|
|
||||||
//未读任务量
|
//未读任务量
|
||||||
UnReadTaskCount = x.Where(y => y.TrialReadingCriterionId== trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned).Count(),
|
UnReadTaskCount = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned).Count(),
|
||||||
|
|
||||||
//未读 里可读任务量
|
//未读 里可读任务量
|
||||||
UnReadCanReadTaskCount = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned && y.IsFrontTaskNeedSignButNotSign == false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true)
|
UnReadCanReadTaskCount = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned && y.IsFrontTaskNeedSignButNotSign == false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true)
|
||||||
|
@ -1024,7 +1034,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||||
ExistReadingApply = x.Any(y => y.ReReadingApplyState == ReReadingApplyState.DocotorHaveApplyed || y.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed),
|
ExistReadingApply = x.Any(y => y.ReReadingApplyState == ReReadingApplyState.DocotorHaveApplyed || y.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed),
|
||||||
|
|
||||||
//查出所有未读的 未读的可读的 在这个列表基础上 过滤下 y.IsFrontTaskNeedSignButNotSign==false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true) 这样容易排错 确认这三个字段是否维护有误
|
//查出所有未读的 未读的可读的 在这个列表基础上 过滤下 y.IsFrontTaskNeedSignButNotSign==false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true) 这样容易排错 确认这三个字段是否维护有误
|
||||||
UnReadTaskList = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned ).OrderBy(x => x.VisitTaskNum)
|
UnReadTaskList = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned).OrderBy(x => x.VisitTaskNum)
|
||||||
.Select(u => new IRUnreadTaskView()
|
.Select(u => new IRUnreadTaskView()
|
||||||
{
|
{
|
||||||
Id = u.Id,
|
Id = u.Id,
|
||||||
|
@ -1035,30 +1045,31 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||||
SuggesteFinishedTime = u.SuggesteFinishedTime,
|
SuggesteFinishedTime = u.SuggesteFinishedTime,
|
||||||
ReadingCategory = u.ReadingCategory,
|
ReadingCategory = u.ReadingCategory,
|
||||||
IsAnalysisCreate = u.IsAnalysisCreate,
|
IsAnalysisCreate = u.IsAnalysisCreate,
|
||||||
ArmEnum= u.ArmEnum,
|
ArmEnum = u.ArmEnum,
|
||||||
TrialReadingCriterionId = u.TrialReadingCriterionId,
|
TrialReadingCriterionId = u.TrialReadingCriterionId,
|
||||||
IsNeedClinicalDataSign =u.IsNeedClinicalDataSign,
|
IsNeedClinicalDataSign = u.IsNeedClinicalDataSign,
|
||||||
IsClinicalDataSign=u.IsClinicalDataSign,
|
IsClinicalDataSign = u.IsClinicalDataSign,
|
||||||
IsFrontTaskNeedSignButNotSign=u.IsFrontTaskNeedSignButNotSign
|
IsFrontTaskNeedSignButNotSign = u.IsFrontTaskNeedSignButNotSign
|
||||||
})
|
})
|
||||||
.ToList(),
|
.ToList(),
|
||||||
}).Where(x => x.UnReadCanReadTaskCount > 0).OrderBy(x => x.UnReadCanReadTaskCount);
|
}).Where(x => x.UnReadCanReadTaskCount > 0)/*.OrderBy(x => x.UnReadCanReadTaskCount)*/;
|
||||||
// 有序阅片需要找到最小需要
|
// 有序阅片需要找到最小需要
|
||||||
|
|
||||||
|
|
||||||
var count = visitGroupQuery.Count();
|
var count = visitGroupQuery.Count();
|
||||||
|
|
||||||
var result = new List<IRUnReadSubjectView>();
|
var result = new List<IRUnReadSubjectView>();
|
||||||
|
|
||||||
|
|
||||||
|
var visitTaskOrderQuery = inDto.Page.Asc ? visitTaskQuery.OrderBy(inDto.Page.SortField) : visitTaskQuery.OrderBy(inDto.Page.SortField + " desc");
|
||||||
if (inDto.Page != null)
|
if (inDto.Page != null)
|
||||||
{
|
{
|
||||||
result = await visitTaskQuery
|
result = await visitTaskOrderQuery
|
||||||
.Skip((inDto.Page.PageIndex - 1) * inDto.Page.PageSize)
|
.Skip((inDto.Page.PageIndex - 1) * inDto.Page.PageSize)
|
||||||
.Take(inDto.Page.PageSize).ToListAsync();
|
.Take(inDto.Page.PageSize).ToListAsync();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
result = await visitTaskQuery.ToListAsync();
|
result = await visitTaskOrderQuery.ToListAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1091,7 +1102,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||||
.WhereIf(queryVisitTask.TaskState != null, t => t.TaskState == queryVisitTask.TaskState)
|
.WhereIf(queryVisitTask.TaskState != null, t => t.TaskState == queryVisitTask.TaskState)
|
||||||
.WhereIf(!string.IsNullOrEmpty(queryVisitTask.TrialSiteCode), t => (t.BlindTrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate) || (t.Subject.TrialSite.TrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate == false))
|
.WhereIf(!string.IsNullOrEmpty(queryVisitTask.TrialSiteCode), t => (t.BlindTrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate) || (t.Subject.TrialSite.TrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate == false))
|
||||||
.WhereIf(!string.IsNullOrEmpty(queryVisitTask.TaskName), t => t.TaskName.Contains(queryVisitTask.TaskName) || t.TaskBlindName.Contains(queryVisitTask.TaskName))
|
.WhereIf(!string.IsNullOrEmpty(queryVisitTask.TaskName), t => t.TaskName.Contains(queryVisitTask.TaskName) || t.TaskBlindName.Contains(queryVisitTask.TaskName))
|
||||||
.WhereIf(!string.IsNullOrEmpty(queryVisitTask.SubjectCode), t => (t.Subject.Code.Contains(queryVisitTask.SubjectCode) && t.IsAnalysisCreate==false) || (t.BlindSubjectCode.Contains(queryVisitTask.SubjectCode)&& t.IsAnalysisCreate))
|
.WhereIf(!string.IsNullOrEmpty(queryVisitTask.SubjectCode), t => (t.Subject.Code.Contains(queryVisitTask.SubjectCode) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(queryVisitTask.SubjectCode) && t.IsAnalysisCreate))
|
||||||
.WhereIf(queryVisitTask.BeginAllocateDate != null, t => t.AllocateTime > queryVisitTask.BeginAllocateDate)
|
.WhereIf(queryVisitTask.BeginAllocateDate != null, t => t.AllocateTime > queryVisitTask.BeginAllocateDate)
|
||||||
.WhereIf(queryVisitTask.EndAllocateDate != null, t => t.AllocateTime < queryVisitTask.EndAllocateDate!.Value.AddDays(1))
|
.WhereIf(queryVisitTask.EndAllocateDate != null, t => t.AllocateTime < queryVisitTask.EndAllocateDate!.Value.AddDays(1))
|
||||||
.ProjectTo<IRHaveReadView>(_mapper.ConfigurationProvider);
|
.ProjectTo<IRHaveReadView>(_mapper.ConfigurationProvider);
|
||||||
|
@ -1940,7 +1951,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||||
|
|
||||||
var criterionConfig = (await _trialReadingCriterionRepository.Where(x => x.Id == task.TrialReadingCriterionId).Select(x => new { x.ReadingTool, x.IsReadingTaskViewInOrder }).FirstOrDefaultAsync()).IfNullThrowException();
|
var criterionConfig = (await _trialReadingCriterionRepository.Where(x => x.Id == task.TrialReadingCriterionId).Select(x => new { x.ReadingTool, x.IsReadingTaskViewInOrder }).FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
|
|
||||||
if (task.TaskState != TaskState.Effect || task.ReadingCategory != ReadingCategory.Visit || task.ReadingTaskState == ReadingTaskState.HaveSigned )
|
if (task.TaskState != TaskState.Effect || task.ReadingCategory != ReadingCategory.Visit || task.ReadingTaskState == ReadingTaskState.HaveSigned)
|
||||||
{
|
{
|
||||||
return ResponseOutput.NotOk("仅仅允许针对生效、未完成的访视任务进行退回操作,请刷新页面数据");
|
return ResponseOutput.NotOk("仅仅允许针对生效、未完成的访视任务进行退回操作,请刷新页面数据");
|
||||||
}
|
}
|
||||||
|
@ -2266,13 +2277,18 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||||
|
|
||||||
if (sv.IsBaseLine)
|
if (sv.IsBaseLine)
|
||||||
{
|
{
|
||||||
await _readingClinicalDataReposiotry.UpdatePartialFromQueryAsync(t => t.ReadingId == sv.Id && (t.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.Subject || t.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit),c=>new ReadingClinicalData() { IsSign=false,ReadingClinicalDataState=ReadingClinicalDataStatus.HaveUploaded});
|
await _readingClinicalDataReposiotry.UpdatePartialFromQueryAsync(t => t.ReadingId == sv.Id && (t.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.Subject || t.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit), c => new ReadingClinicalData() { IsSign = false, ReadingClinicalDataState = ReadingClinicalDataStatus.HaveUploaded });
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
await _readingClinicalDataReposiotry.UpdatePartialFromQueryAsync(t => t.ReadingId == sv.Id && t.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit, c => new ReadingClinicalData() {
|
await _readingClinicalDataReposiotry.UpdatePartialFromQueryAsync(t => t.ReadingId == sv.Id && t.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit, c => new ReadingClinicalData()
|
||||||
IsSign = false, ReadingClinicalDataState =ReadingClinicalDataStatus.HaveUploaded,IsBlind=null,IsComplete=null });
|
{
|
||||||
|
IsSign = false,
|
||||||
|
ReadingClinicalDataState = ReadingClinicalDataStatus.HaveUploaded,
|
||||||
|
IsBlind = null,
|
||||||
|
IsComplete = null
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -59,7 +59,7 @@ namespace IRaCIS.Core.Application.MediatR.Handlers
|
||||||
{
|
{
|
||||||
SubjectVisitId = sv.Id,
|
SubjectVisitId = sv.Id,
|
||||||
SiteCode = trialSite.TrialSiteCode,
|
SiteCode = trialSite.TrialSiteCode,
|
||||||
StudyDate = study.StudyTime == null?string.Empty: ((DateTime)study.StudyTime).ToString("yyyy-MM-dd"),
|
StudyDate = study.StudyTime == null ? string.Empty : ((DateTime)study.StudyTime).ToString("yyyy-MM-dd"),
|
||||||
StudyId = study.Id,
|
StudyId = study.Id,
|
||||||
Modality = study.ModalityForEdit,
|
Modality = study.ModalityForEdit,
|
||||||
SubjectCode = subject.Code,
|
SubjectCode = subject.Code,
|
||||||
|
@ -81,71 +81,87 @@ namespace IRaCIS.Core.Application.MediatR.Handlers
|
||||||
VisitName = sv.VisitName,
|
VisitName = sv.VisitName,
|
||||||
};
|
};
|
||||||
|
|
||||||
var dbList = (await dicomQuery.ToListAsync()).Union(await noneDicomQuey.ToListAsync());
|
var dbList = (await dicomQuery.ToListAsync()).Union(await noneDicomQuey.ToListAsync()).ToList();
|
||||||
|
|
||||||
//处理数据库 大小写
|
//处理数据库 大小写
|
||||||
dbList.ForEach(t => { t.Modality = t.Modality.ToUpper().Trim(); t.SiteCode = t.SiteCode.ToUpper().Trim(); t.VisitName = t.VisitName.ToUpper().Trim(); t.SubjectCode = t.SubjectCode.ToUpper().Trim(); });
|
dbList.ForEach(t => { t.Modality = t.Modality.ToUpper().Trim(); t.SiteCode = t.SiteCode.ToUpper().Trim(); t.VisitName = t.VisitName.ToUpper().Trim(); t.SubjectCode = t.SubjectCode.ToUpper().Trim(); });
|
||||||
|
|
||||||
var dbCheckList = _mapper.Map<List<CheckViewModel>>(dbList);
|
var dbCheckList = _mapper.Map<List<CheckViewModel>>(dbList);
|
||||||
|
|
||||||
//按照数据库数据访视分组
|
////按照数据库数据访视分组 按照数据库的数据 一个个的访视对比
|
||||||
var svGroup = dbList.GroupBy(t => new { t.SubjectVisitId, t.SiteCode, t.SubjectCode, t.VisitName })
|
//var svGroup = dbList.GroupBy(t => new { t.SubjectVisitId, t.SiteCode, t.SubjectCode, t.VisitName })
|
||||||
.Select(g => new { g.Key.SubjectCode, g.Key.VisitName, g.Key.SiteCode, g.Key.SubjectVisitId, StudyList = g.ToList() }).ToList();
|
// .Select(g => new { g.Key.SubjectCode, g.Key.VisitName, g.Key.SiteCode, g.Key.SubjectVisitId, StudyList = g.ToList() }).ToList();
|
||||||
|
|
||||||
|
//按照Excel数据访视分组 按照数据库的数据 一个个的访视对比
|
||||||
|
var svExcelGroup = etcList.GroupBy(t => new { t.SiteCode, t.SubjectCode, t.VisitName })
|
||||||
|
.Select(g => new { g.Key.SubjectCode, g.Key.VisitName, g.Key.SiteCode, ExcelStudyList = g.ToList() }).ToList();
|
||||||
|
|
||||||
|
|
||||||
foreach (var sv in svGroup)
|
foreach (var sv in svExcelGroup)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
//Excel 的数据 在IRC 中可以找到该访视
|
||||||
|
if (dbCheckList.Any(t => t.SubjectCode == sv.SubjectCode && t.SiteCode == sv.SiteCode && t.VisitName == sv.VisitName))
|
||||||
|
{
|
||||||
|
|
||||||
|
var dbVisitStudyList = dbList.Where(t => t.SubjectCode == sv.SubjectCode && t.SiteCode == sv.SiteCode && t.VisitName == sv.VisitName).ToList();
|
||||||
|
|
||||||
//找到etc 当前visit site 和subject 一致的检查列表
|
//找到etc 当前visit site 和subject 一致的检查列表
|
||||||
var etcVisitStudyList = etcList.Where(t => t.SubjectCode == sv.SubjectCode && t.SiteCode == sv.SiteCode && t.VisitName == sv.VisitName).ToList();
|
var etcVisitStudyList = etcList.Where(t => t.SubjectCode == sv.SubjectCode && t.SiteCode == sv.SiteCode && t.VisitName == sv.VisitName).ToList();
|
||||||
var dbVisitStudyList = dbCheckList.Where(t => t.SubjectCode == sv.SubjectCode && t.SiteCode == sv.SiteCode && t.VisitName == sv.VisitName).ToList();
|
|
||||||
|
|
||||||
|
|
||||||
StringBuilder dialogMsg = new StringBuilder();
|
StringBuilder dialogMsg = new StringBuilder();
|
||||||
dialogMsg.Append("您好,根据本系统自动识别,该受试者当前访视在IRC系统中已提交的影像检查情况如下:");
|
dialogMsg.Append("您好,根据本系统自动识别,该受试者当前访视在IRC系统中已提交的影像检查情况如下:");
|
||||||
var num = 0;
|
var num = 0;
|
||||||
List<ParamInfoDto> paramInfoList = new List<ParamInfoDto>();
|
List<ParamInfoDto> paramInfoList = new List<ParamInfoDto>();
|
||||||
foreach (var item in sv.StudyList)
|
foreach (var item in dbVisitStudyList)
|
||||||
{
|
{
|
||||||
num++;
|
num++;
|
||||||
dialogMsg.AppendLine($"<br>{num}.{item.StudyDate}的{item.Modality}影像检查");
|
dialogMsg.AppendLine($"<br>{num}.{item.StudyDate}的{item.Modality}影像检查");
|
||||||
paramInfoList.Add(new ParamInfoDto()
|
paramInfoList.Add(new ParamInfoDto()
|
||||||
{
|
{
|
||||||
Modality= item.Modality,
|
Modality = item.Modality,
|
||||||
StudyDate= item.StudyDate,
|
StudyDate = item.StudyDate,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
var dbSV = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == sv.SubjectVisitId)).IfNullThrowException();
|
var subjectVisitId = dbVisitStudyList.FirstOrDefault().SubjectVisitId;
|
||||||
|
var dbSV = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId)).IfNullThrowException();
|
||||||
|
|
||||||
|
#region 更换核对的顺序 以Excel 数据为准 注释
|
||||||
|
//// 该访视 在EDC Excel中没有任何数据
|
||||||
|
//if (etcVisitStudyList.Count == 0)
|
||||||
|
//{
|
||||||
|
// dialogMsg.AppendLine($"<br/>");
|
||||||
|
// dialogMsg.AppendLine($"<br><span style='color: #f00'>存在问题如下:</span>");
|
||||||
|
// num = 0;
|
||||||
|
// foreach (var item in sv.StudyList)
|
||||||
|
// {
|
||||||
|
// num++;
|
||||||
|
// dialogMsg.AppendLine($"<br>{num}.{item.StudyDate}的{item.Modality}影像检查(EDC 缺少) ");
|
||||||
|
// }
|
||||||
|
|
||||||
// 该访视 在EDC Excel中没有任何数据
|
// dialogMsg.AppendLine($"<br/>");
|
||||||
if (etcVisitStudyList.Count == 0)
|
// dialogMsg.AppendLine(@$"<br>说明:为高效解决/处理以上全部质疑问题,麻烦您准确核实实际影像检查情况。请注意影像日期与实际检查的日期可能会不一致,部分检查(如PET -CT)可能同时存在多种模态影像。准确核实后,请回复该访视正确的影像检查情况。");
|
||||||
{
|
|
||||||
dialogMsg.AppendLine($"<br/>");
|
|
||||||
dialogMsg.AppendLine($"<br><span style='color: #f00'>存在问题如下:</span>");
|
|
||||||
num = 0;
|
|
||||||
foreach (var item in sv.StudyList)
|
|
||||||
{
|
|
||||||
num++;
|
|
||||||
dialogMsg.AppendLine($"<br>{num}.{item.StudyDate}的{item.Modality}影像检查(EDC 缺少) ");
|
|
||||||
}
|
|
||||||
|
|
||||||
dialogMsg.AppendLine($"<br/>");
|
// dbSV.CheckResult = "当前访视在EDC表中未找到数据,请核对 SubjectCode、 SiteCode 、VisitName 是否和EDC系统保持一致";
|
||||||
dialogMsg.AppendLine(@$"<br>说明:为高效解决/处理以上全部质疑问题,麻烦您准确核实实际影像检查情况。请注意影像日期与实际检查的日期可能会不一致,部分检查(如PET -CT)可能同时存在多种模态影像。准确核实后,请回复该访视正确的影像检查情况。");
|
// dbSV.CheckState = CheckStateEnum.CVIng;
|
||||||
|
// dbSV.ForwardState = ForwardStateEnum.ToForward;
|
||||||
|
// dbSV.CheckChallengeState = CheckChanllengeTypeEnum.PMWaitCRCReply;
|
||||||
|
// dbSV.CheckChallengeDialogList.Add(new CheckChallengeDialog()
|
||||||
|
// {
|
||||||
|
// SubjectVisitId = sv.SubjectVisitId,
|
||||||
|
// IsCRCNeedReply = true,
|
||||||
|
// TalkContent = dialogMsg.ToString(),
|
||||||
|
// ParamInfo = JsonConvert.SerializeObject(paramInfoList),
|
||||||
|
// UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt,
|
||||||
|
// CreateTime = DateTime.Now
|
||||||
|
// });
|
||||||
|
//}
|
||||||
|
//else
|
||||||
|
#endregion
|
||||||
|
|
||||||
dbSV.CheckResult = "当前访视在EDC表中未找到数据,请核对 SubjectCode、 SiteCode 、VisitName 是否和EDC系统保持一致";
|
|
||||||
dbSV.CheckState = CheckStateEnum.CVIng;
|
|
||||||
dbSV.ForwardState = ForwardStateEnum.ToForward;
|
|
||||||
dbSV.CheckChallengeState = CheckChanllengeTypeEnum.PMWaitCRCReply;
|
|
||||||
dbSV.CheckChallengeDialogList.Add(new CheckChallengeDialog() {
|
|
||||||
SubjectVisitId = sv.SubjectVisitId,
|
|
||||||
IsCRCNeedReply= true,
|
|
||||||
TalkContent = dialogMsg.ToString(),
|
|
||||||
ParamInfo= JsonConvert.SerializeObject(paramInfoList),
|
|
||||||
UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt,CreateTime=DateTime.Now });
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
//etc 和数据库 并集
|
//etc 和数据库 并集
|
||||||
var unionList = dbVisitStudyList.Union(etcVisitStudyList);
|
var unionList = dbVisitStudyList.Union(etcVisitStudyList);
|
||||||
|
@ -156,7 +172,7 @@ namespace IRaCIS.Core.Application.MediatR.Handlers
|
||||||
var excelExceptDB = etcVisitStudyList.Except(dbCheckList);
|
var excelExceptDB = etcVisitStudyList.Except(dbCheckList);
|
||||||
|
|
||||||
//ETC 和系统的完全一致 两者没有差别
|
//ETC 和系统的完全一致 两者没有差别
|
||||||
if (dbExceptExcel.Count() == 0 && excelExceptDB.Count()==0)
|
if (dbExceptExcel.Count() == 0 && excelExceptDB.Count() == 0)
|
||||||
{
|
{
|
||||||
dialogMsg.AppendLine($"<br/>");
|
dialogMsg.AppendLine($"<br/>");
|
||||||
dialogMsg.AppendLine($"核对EDC数据,完全一致, 审核通过");
|
dialogMsg.AppendLine($"核对EDC数据,完全一致, 审核通过");
|
||||||
|
@ -172,10 +188,15 @@ namespace IRaCIS.Core.Application.MediatR.Handlers
|
||||||
//维护状态
|
//维护状态
|
||||||
dbSV.ReadingStatus = ReadingStatusEnum.TaskAllocate;
|
dbSV.ReadingStatus = ReadingStatusEnum.TaskAllocate;
|
||||||
|
|
||||||
dbSV.RequestBackState = dbSV.RequestBackState== RequestBackStateEnum.CRC_RequestBack? RequestBackStateEnum.PM_NotAgree: RequestBackStateEnum.NotRequest;
|
dbSV.RequestBackState = dbSV.RequestBackState == RequestBackStateEnum.CRC_RequestBack ? RequestBackStateEnum.PM_NotAgree : RequestBackStateEnum.NotRequest;
|
||||||
dbSV.CheckChallengeDialogList.Add(new CheckChallengeDialog() { SubjectVisitId = sv.SubjectVisitId,
|
dbSV.CheckChallengeDialogList.Add(new CheckChallengeDialog()
|
||||||
|
{
|
||||||
|
SubjectVisitId = subjectVisitId,
|
||||||
ParamInfo = JsonConvert.SerializeObject(paramInfoList),
|
ParamInfo = JsonConvert.SerializeObject(paramInfoList),
|
||||||
TalkContent = dialogMsg.ToString(), UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt, CreateTime = DateTime.Now });
|
TalkContent = dialogMsg.ToString(),
|
||||||
|
UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt,
|
||||||
|
CreateTime = DateTime.Now
|
||||||
|
});
|
||||||
}
|
}
|
||||||
// ETC 和系统的有区别
|
// ETC 和系统的有区别
|
||||||
else
|
else
|
||||||
|
@ -208,13 +229,30 @@ namespace IRaCIS.Core.Application.MediatR.Handlers
|
||||||
dbSV.CheckChallengeState = CheckChanllengeTypeEnum.PMWaitCRCReply;
|
dbSV.CheckChallengeState = CheckChanllengeTypeEnum.PMWaitCRCReply;
|
||||||
|
|
||||||
//讲核查结果发送消息给CRC
|
//讲核查结果发送消息给CRC
|
||||||
dbSV.CheckChallengeDialogList.Add(new CheckChallengeDialog() { SubjectVisitId = sv.SubjectVisitId, IsCRCNeedReply = true, TalkContent = dialogMsg.ToString(),
|
dbSV.CheckChallengeDialogList.Add(new CheckChallengeDialog()
|
||||||
|
{
|
||||||
|
SubjectVisitId = subjectVisitId,
|
||||||
|
IsCRCNeedReply = true,
|
||||||
|
TalkContent = dialogMsg.ToString(),
|
||||||
ParamInfo = JsonConvert.SerializeObject(paramInfoList),
|
ParamInfo = JsonConvert.SerializeObject(paramInfoList),
|
||||||
UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt, CreateTime = DateTime.Now });
|
UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt,
|
||||||
|
CreateTime = DateTime.Now
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
dbSV.CheckTime = DateTime.Now;
|
dbSV.CheckTime = DateTime.Now;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -310,6 +310,8 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
|
|
||||||
public Trial Trial { get; set; }
|
public Trial Trial { get; set; }
|
||||||
|
|
Loading…
Reference in New Issue