|
|
|
@@ -958,42 +958,22 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|
|
|
|
var isReadingTaskViewInOrder = criterionConfig.IsReadingTaskViewInOrder;
|
|
|
|
|
|
|
|
|
|
#region 按照Subject 维度
|
|
|
|
|
if (isReadingTaskViewInOrder == ReadingOrder.InOrder)
|
|
|
|
|
if (isReadingTaskViewInOrder == ReadingOrder.InOrder || isReadingTaskViewInOrder == ReadingOrder.SubjectRandom)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var visitTaskListInfo = await GetOrderReadingIQueryable(new GetOrderReadingIQueryableInDto()
|
|
|
|
|
var result = await GetSubjectReadingIQueryable(new GetReadingIQueryableInDto()
|
|
|
|
|
{
|
|
|
|
|
TrialId = trialId,
|
|
|
|
|
TrialReadingCriterionId = trialReadingCriterionId,
|
|
|
|
|
SubjectCode = inQuery.SubjectCode,
|
|
|
|
|
Page = new PageInput()
|
|
|
|
|
{
|
|
|
|
|
PageIndex = inQuery.PageIndex,
|
|
|
|
|
PageSize = inQuery.PageSize,
|
|
|
|
|
Asc = inQuery.Asc,
|
|
|
|
|
SortField = inQuery.SortField,
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
PageIndex = inQuery.PageIndex,
|
|
|
|
|
PageSize = inQuery.PageSize,
|
|
|
|
|
Asc = inQuery.Asc,
|
|
|
|
|
SortField = inQuery.SortField,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var totalCount = visitTaskListInfo.Item1;
|
|
|
|
|
var currentPageData = visitTaskListInfo.Item2;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var result = new PageOutput<IRUnReadSubjectView>()
|
|
|
|
|
{
|
|
|
|
|
PageSize = inQuery.PageSize,
|
|
|
|
|
PageIndex = inQuery.PageIndex,
|
|
|
|
|
TotalCount = totalCount,
|
|
|
|
|
CurrentPageData = currentPageData,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 封装的方法有问题
|
|
|
|
|
//var result = await visitQuery.ToPagedListAsync(iRUnReadSubjectQuery.PageIndex, iRUnReadSubjectQuery.PageSize, String.IsNullOrEmpty(iRUnReadSubjectQuery.SortField) ? nameof(IRUnReadSubjectView.SubjectId) : iRUnReadSubjectQuery.SortField, iRUnReadSubjectQuery.Asc);
|
|
|
|
|
return ResponseOutput.Ok(result, new
|
|
|
|
|
{
|
|
|
|
|
RandomReadInfo = new IRUnReadOutDto(),
|
|
|
|
@@ -1006,69 +986,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|
|
|
|
CriterionType = criterionConfig.CriterionType,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
else if(isReadingTaskViewInOrder == ReadingOrder.SubjectRandom)
|
|
|
|
|
{
|
|
|
|
|
var critrion = await _trialReadingCriterionRepository.FindAsync(trialReadingCriterionId);
|
|
|
|
|
|
|
|
|
|
var visitQuery = _visitTaskRepository.Where(x => x.TrialId == trialId && x.DoctorUserId == _userInfo.Id && x.TaskState == TaskState.Effect)
|
|
|
|
|
|
|
|
|
|
.WhereIf(!string.IsNullOrEmpty(subjectCode), t => (t.Subject.Code.Contains(subjectCode!) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(subjectCode!) && t.IsAnalysisCreate));
|
|
|
|
|
|
|
|
|
|
var visitGroupQuery = visitQuery.GroupBy(x => new { x.SubjectId, x.Subject.Code, x.BlindSubjectCode });
|
|
|
|
|
|
|
|
|
|
var visitTaskQuery = visitGroupQuery.Select(x => new IRUnReadSubjectView()
|
|
|
|
|
{
|
|
|
|
|
SubjectId = x.Key.SubjectId,
|
|
|
|
|
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),
|
|
|
|
|
|
|
|
|
|
//未读任务量
|
|
|
|
|
UnReadCanReadTaskCount = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned).Count(),
|
|
|
|
|
|
|
|
|
|
UrgentCount = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned).Where(x => x.IsUrgent).Count(),
|
|
|
|
|
|
|
|
|
|
//已读任务量
|
|
|
|
|
HaveReadTaskCount = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState == ReadingTaskState.HaveSigned).Count(),
|
|
|
|
|
|
|
|
|
|
ExistReadingApply = x.Any(y => (y.ReReadingApplyState == ReReadingApplyState.DocotorHaveApplyed && y.TrialReadingCriterionId == trialReadingCriterionId) || y.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed),
|
|
|
|
|
|
|
|
|
|
UnReadCanReadTaskList = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned)
|
|
|
|
|
.OrderBy(x => x.VisitTaskNum)
|
|
|
|
|
.Select(u => new IRUnreadTaskView()
|
|
|
|
|
{
|
|
|
|
|
Id = u.Id,
|
|
|
|
|
IsUrgent = u.IsUrgent,
|
|
|
|
|
VisitNum = u.VisitTaskNum,
|
|
|
|
|
TaskBlindName = u.TaskBlindName,
|
|
|
|
|
VisistId = u.SourceSubjectVisitId,
|
|
|
|
|
SuggesteFinishedTime = u.SuggesteFinishedTime,
|
|
|
|
|
ReadingCategory = u.ReadingCategory,
|
|
|
|
|
IsAnalysisCreate = u.IsAnalysisCreate,
|
|
|
|
|
ArmEnum = u.ArmEnum,
|
|
|
|
|
TrialReadingCriterionId = u.TrialReadingCriterionId,
|
|
|
|
|
IsNeedClinicalDataSign = u.IsNeedClinicalDataSign,
|
|
|
|
|
IsClinicalDataSign = u.IsClinicalDataSign,
|
|
|
|
|
IsFrontTaskNeedSignButNotSign = u.IsFrontTaskNeedSignButNotSign
|
|
|
|
|
})
|
|
|
|
|
.ToList()
|
|
|
|
|
}).Where(x => x.UnReadCanReadTaskCount > 0);
|
|
|
|
|
|
|
|
|
|
var pageList = await visitTaskQuery.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrWhiteSpace(inQuery.SortField)? nameof(IRUnReadSubjectView.UnReadCanReadTaskCount) : inQuery.SortField, inQuery.Asc );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return ResponseOutput.Ok(pageList, new
|
|
|
|
|
{
|
|
|
|
|
RandomReadInfo = new IRUnReadOutDto(),
|
|
|
|
|
IsReadingTaskViewInOrder = isReadingTaskViewInOrder,
|
|
|
|
|
ReadingTool = readingTool,
|
|
|
|
|
IseCRFShowInDicomReading = criterionConfig.IseCRFShowInDicomReading,
|
|
|
|
|
IsReadingShowSubjectInfo = criterionConfig.IsReadingShowSubjectInfo,
|
|
|
|
|
IsReadingShowPreviousResults = criterionConfig.IsReadingShowPreviousResults,
|
|
|
|
|
DigitPlaces = criterionConfig.DigitPlaces,
|
|
|
|
|
CriterionType = criterionConfig.CriterionType,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
var taskQuery = _visitTaskRepository.Where(x => x.TrialId == inQuery.TrialId && x.DoctorUserId == _userInfo.Id && x.TaskState == TaskState.Effect && x.TrialReadingCriterionId == trialReadingCriterionId)
|
|
|
|
@@ -1114,130 +1032,188 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 获取有序阅片IQuery对象
|
|
|
|
|
/// 获取subject有序 或者无序阅片IQuery对象
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="inDto"></param>
|
|
|
|
|
/// <param name="inQuery"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public async Task<(int, List<IRUnReadSubjectView>)> GetOrderReadingIQueryable(GetOrderReadingIQueryableInDto inDto)
|
|
|
|
|
public async Task<PageOutput<IRUnReadSubjectView>> GetSubjectReadingIQueryable(GetReadingIQueryableInDto inQuery)
|
|
|
|
|
{
|
|
|
|
|
var trialReadingCriterionId = inDto.TrialReadingCriterionId;
|
|
|
|
|
|
|
|
|
|
var trialReadingCriterionId = inQuery.TrialReadingCriterionId;
|
|
|
|
|
var subjectCode = inQuery.SubjectCode;
|
|
|
|
|
var trialId = inQuery.TrialId;
|
|
|
|
|
|
|
|
|
|
var critrion = await _trialReadingCriterionRepository.FindAsync(trialReadingCriterionId);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var visitQuery = _visitTaskRepository.Where(x => x.TrialId == inDto.TrialId && x.DoctorUserId == _userInfo.Id && x.TaskState == TaskState.Effect)
|
|
|
|
|
|
|
|
|
|
.WhereIf(inDto.SubjectId!=null,x=>x.SubjectId==inDto.SubjectId)
|
|
|
|
|
//前序 不存在 未生成任务的访视
|
|
|
|
|
.WhereIf(critrion.IsAutoCreate == false, t => !t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId).Any(f => f.IsGeneratedTask == false && t.VisitTaskNum > f.SubjectVisit.VisitNum))
|
|
|
|
|
|
|
|
|
|
// 前序 不存在 未一致性核查未通过的
|
|
|
|
|
.Where(t => !t.Subject.SubjectVisitList.Any(sv => sv.CheckState != CheckStateEnum.CVPassed && t.VisitTaskNum >= sv.VisitNum))
|
|
|
|
|
//.WhereIf(critrion.IsAutoCreate == false, t => t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId).Any(t => t.IsGeneratedTask == false) ?
|
|
|
|
|
//t.VisitTaskNum <= t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.IsGeneratedTask == false).Min(t => t.SubjectVisit.VisitNum) : true)
|
|
|
|
|
//.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
|
|
|
|
|
//但是加字段 IsFrontTaskNeedSignButNotSign 那么签名临床数据的时候,要对该subject 该标准的有效的任务 这个字段需要在签名的时候维护 采取这种方式 统计数字灵活
|
|
|
|
|
//.Where(t => t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum))
|
|
|
|
|
.WhereIf(!string.IsNullOrEmpty(inDto.SubjectCode), t => (t.Subject.Code.Contains(inDto.SubjectCode!) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(inDto.SubjectCode!) && t.IsAnalysisCreate));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var visitGroupQuery = visitQuery.GroupBy(x => new { x.SubjectId, x.Subject.Code, x.BlindSubjectCode });
|
|
|
|
|
|
|
|
|
|
var visitTaskQuery = visitGroupQuery.Select(x => new IRUnReadSubjectView()
|
|
|
|
|
if (critrion.IsReadingTaskViewInOrder == ReadingOrder.InOrder)
|
|
|
|
|
{
|
|
|
|
|
SubjectId = x.Key.SubjectId,
|
|
|
|
|
SubjectCode = x.Key.BlindSubjectCode == string.Empty ? x.Key.Code : x.Key.BlindSubjectCode,
|
|
|
|
|
var visitQuery = _visitTaskRepository.Where(x => x.TrialId == inQuery.TrialId && x.DoctorUserId == _userInfo.Id && x.TaskState == TaskState.Effect)
|
|
|
|
|
|
|
|
|
|
SuggesteFinishedTime = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned).Min(x => x.SuggesteFinishedTime),
|
|
|
|
|
.WhereIf(inQuery.SubjectId != null, x => x.SubjectId == inQuery.SubjectId)
|
|
|
|
|
//前序 不存在 未生成任务的访视
|
|
|
|
|
.WhereIf(critrion.IsAutoCreate == false, t => !t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId).Any(f => f.IsGeneratedTask == false && t.VisitTaskNum > f.SubjectVisit.VisitNum))
|
|
|
|
|
|
|
|
|
|
//未读任务量
|
|
|
|
|
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)
|
|
|
|
|
//不能对包含聚合或子查询的表达式执行聚合函数
|
|
|
|
|
//&& !x.Any(t => t.ReadingTaskState != ReadingTaskState.HaveSigned && t.IsNeedClinicalDataSign == true && t.IsClinicalDataSign == false && t.VisitTaskNum<y.VisitTaskNum )
|
|
|
|
|
).Count(),
|
|
|
|
|
// 前序 不存在 未一致性核查未通过的
|
|
|
|
|
.Where(t => !t.Subject.SubjectVisitList.Any(sv => sv.CheckState != CheckStateEnum.CVPassed && t.VisitTaskNum >= sv.VisitNum))
|
|
|
|
|
//.WhereIf(critrion.IsAutoCreate == false, t => t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId).Any(t => t.IsGeneratedTask == false) ?
|
|
|
|
|
//t.VisitTaskNum <= t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.IsGeneratedTask == false).Min(t => t.SubjectVisit.VisitNum) : true)
|
|
|
|
|
//.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
|
|
|
|
|
//但是加字段 IsFrontTaskNeedSignButNotSign 那么签名临床数据的时候,要对该subject 该标准的有效的任务 这个字段需要在签名的时候维护 采取这种方式 统计数字灵活
|
|
|
|
|
//.Where(t => t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum))
|
|
|
|
|
.WhereIf(!string.IsNullOrEmpty(inQuery.SubjectCode), t => (t.Subject.Code.Contains(inQuery.SubjectCode!) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(inQuery.SubjectCode!) && t.IsAnalysisCreate));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
UnReadCanReadTaskList = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned)
|
|
|
|
|
.Where(y => y.IsFrontTaskNeedSignButNotSign == false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true))
|
|
|
|
|
.OrderBy(x => x.VisitTaskNum)
|
|
|
|
|
.Select(u => new IRUnreadTaskView()
|
|
|
|
|
var visitGroupQuery = visitQuery.GroupBy(x => new { x.SubjectId, x.Subject.Code, x.BlindSubjectCode });
|
|
|
|
|
|
|
|
|
|
var visitTaskQuery = visitGroupQuery.Select(x => new IRUnReadSubjectView()
|
|
|
|
|
{
|
|
|
|
|
Id = u.Id,
|
|
|
|
|
IsUrgent = u.IsUrgent,
|
|
|
|
|
VisitNum = u.VisitTaskNum,
|
|
|
|
|
TaskBlindName = u.TaskBlindName,
|
|
|
|
|
VisistId = u.SourceSubjectVisitId,
|
|
|
|
|
SuggesteFinishedTime = u.SuggesteFinishedTime,
|
|
|
|
|
ReadingCategory = u.ReadingCategory,
|
|
|
|
|
IsAnalysisCreate = u.IsAnalysisCreate,
|
|
|
|
|
ArmEnum = u.ArmEnum,
|
|
|
|
|
TrialReadingCriterionId = u.TrialReadingCriterionId,
|
|
|
|
|
IsNeedClinicalDataSign = u.IsNeedClinicalDataSign,
|
|
|
|
|
IsClinicalDataSign = u.IsClinicalDataSign,
|
|
|
|
|
IsFrontTaskNeedSignButNotSign = u.IsFrontTaskNeedSignButNotSign
|
|
|
|
|
})
|
|
|
|
|
.ToList(),
|
|
|
|
|
SubjectId = x.Key.SubjectId,
|
|
|
|
|
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(),
|
|
|
|
|
|
|
|
|
|
//未读 里可读任务量
|
|
|
|
|
UnReadCanReadTaskCount = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned && y.IsFrontTaskNeedSignButNotSign == false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true)
|
|
|
|
|
//不能对包含聚合或子查询的表达式执行聚合函数
|
|
|
|
|
//&& !x.Any(t => t.ReadingTaskState != ReadingTaskState.HaveSigned && t.IsNeedClinicalDataSign == true && t.IsClinicalDataSign == false && t.VisitTaskNum<y.VisitTaskNum )
|
|
|
|
|
).Count(),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
UrgentCount = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned)
|
|
|
|
|
.Where(y => y.IsFrontTaskNeedSignButNotSign == false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true))
|
|
|
|
|
.Where(x => x.IsUrgent).Count(),
|
|
|
|
|
|
|
|
|
|
//已读任务量
|
|
|
|
|
HaveReadTaskCount = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState == ReadingTaskState.HaveSigned).Count(),
|
|
|
|
|
|
|
|
|
|
ExistReadingApply = x.Any(y => (y.ReReadingApplyState == ReReadingApplyState.DocotorHaveApplyed && y.TrialReadingCriterionId == trialReadingCriterionId) || y.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed),
|
|
|
|
|
|
|
|
|
|
//查出所有未读的 未读的可读的 在这个列表基础上 过滤下 y.IsFrontTaskNeedSignButNotSign==false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true) 这样容易排错 确认这三个字段是否维护有误
|
|
|
|
|
UnReadTaskList = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned).OrderBy(x => x.VisitTaskNum)
|
|
|
|
|
.Select(u => new IRUnreadTaskView()
|
|
|
|
|
{
|
|
|
|
|
Id = u.Id,
|
|
|
|
|
IsUrgent = u.IsUrgent,
|
|
|
|
|
VisitNum = u.VisitTaskNum,
|
|
|
|
|
TaskBlindName = u.TaskBlindName,
|
|
|
|
|
VisistId = u.SourceSubjectVisitId,
|
|
|
|
|
SuggesteFinishedTime = u.SuggesteFinishedTime,
|
|
|
|
|
ReadingCategory = u.ReadingCategory,
|
|
|
|
|
IsAnalysisCreate = u.IsAnalysisCreate,
|
|
|
|
|
ArmEnum = u.ArmEnum,
|
|
|
|
|
TrialReadingCriterionId = u.TrialReadingCriterionId,
|
|
|
|
|
IsNeedClinicalDataSign = u.IsNeedClinicalDataSign,
|
|
|
|
|
IsClinicalDataSign = u.IsClinicalDataSign,
|
|
|
|
|
IsFrontTaskNeedSignButNotSign = u.IsFrontTaskNeedSignButNotSign
|
|
|
|
|
})
|
|
|
|
|
.ToList(),
|
|
|
|
|
}).Where(x => x.UnReadCanReadTaskCount > 0)/*.OrderBy(x => x.UnReadCanReadTaskCount)*/;
|
|
|
|
|
// 有序阅片需要找到最小需要
|
|
|
|
|
UnReadCanReadTaskList = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned)
|
|
|
|
|
.Where(y => y.IsFrontTaskNeedSignButNotSign == false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true))
|
|
|
|
|
.OrderBy(x => x.VisitTaskNum)
|
|
|
|
|
.Select(u => new IRUnreadTaskView()
|
|
|
|
|
{
|
|
|
|
|
Id = u.Id,
|
|
|
|
|
IsUrgent = u.IsUrgent,
|
|
|
|
|
VisitNum = u.VisitTaskNum,
|
|
|
|
|
TaskBlindName = u.TaskBlindName,
|
|
|
|
|
VisistId = u.SourceSubjectVisitId,
|
|
|
|
|
SuggesteFinishedTime = u.SuggesteFinishedTime,
|
|
|
|
|
ReadingCategory = u.ReadingCategory,
|
|
|
|
|
IsAnalysisCreate = u.IsAnalysisCreate,
|
|
|
|
|
ArmEnum = u.ArmEnum,
|
|
|
|
|
TrialReadingCriterionId = u.TrialReadingCriterionId,
|
|
|
|
|
IsNeedClinicalDataSign = u.IsNeedClinicalDataSign,
|
|
|
|
|
IsClinicalDataSign = u.IsClinicalDataSign,
|
|
|
|
|
IsFrontTaskNeedSignButNotSign = u.IsFrontTaskNeedSignButNotSign
|
|
|
|
|
})
|
|
|
|
|
.ToList(),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 不这样写会有问题
|
|
|
|
|
var count = visitQuery.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned && y.IsFrontTaskNeedSignButNotSign == false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true))
|
|
|
|
|
.GroupBy(x => new { x.SubjectId, x.Subject.Code, x.BlindSubjectCode }).Count();
|
|
|
|
|
UrgentCount = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned)
|
|
|
|
|
.Where(y => y.IsFrontTaskNeedSignButNotSign == false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true))
|
|
|
|
|
.Where(x => x.IsUrgent).Count(),
|
|
|
|
|
|
|
|
|
|
//已读任务量
|
|
|
|
|
HaveReadTaskCount = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState == ReadingTaskState.HaveSigned).Count(),
|
|
|
|
|
|
|
|
|
|
ExistReadingApply = x.Any(y => (y.ReReadingApplyState == ReReadingApplyState.DocotorHaveApplyed && y.TrialReadingCriterionId == trialReadingCriterionId) || y.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed),
|
|
|
|
|
|
|
|
|
|
//查出所有未读的 未读的可读的 在这个列表基础上 过滤下 y.IsFrontTaskNeedSignButNotSign==false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true) 这样容易排错 确认这三个字段是否维护有误
|
|
|
|
|
UnReadTaskList = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned).OrderBy(x => x.VisitTaskNum)
|
|
|
|
|
.Select(u => new IRUnreadTaskView()
|
|
|
|
|
{
|
|
|
|
|
Id = u.Id,
|
|
|
|
|
IsUrgent = u.IsUrgent,
|
|
|
|
|
VisitNum = u.VisitTaskNum,
|
|
|
|
|
TaskBlindName = u.TaskBlindName,
|
|
|
|
|
VisistId = u.SourceSubjectVisitId,
|
|
|
|
|
SuggesteFinishedTime = u.SuggesteFinishedTime,
|
|
|
|
|
ReadingCategory = u.ReadingCategory,
|
|
|
|
|
IsAnalysisCreate = u.IsAnalysisCreate,
|
|
|
|
|
ArmEnum = u.ArmEnum,
|
|
|
|
|
TrialReadingCriterionId = u.TrialReadingCriterionId,
|
|
|
|
|
IsNeedClinicalDataSign = u.IsNeedClinicalDataSign,
|
|
|
|
|
IsClinicalDataSign = u.IsClinicalDataSign,
|
|
|
|
|
IsFrontTaskNeedSignButNotSign = u.IsFrontTaskNeedSignButNotSign
|
|
|
|
|
})
|
|
|
|
|
.ToList(),
|
|
|
|
|
}).Where(x => x.UnReadCanReadTaskCount > 0)/*.OrderBy(x => x.UnReadCanReadTaskCount)*/;
|
|
|
|
|
// 有序阅片需要找到最小需要
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 不这样写会有问题
|
|
|
|
|
var count = visitQuery.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned && y.IsFrontTaskNeedSignButNotSign == false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true))
|
|
|
|
|
.GroupBy(x => new { x.SubjectId, x.Subject.Code, x.BlindSubjectCode }).Count();
|
|
|
|
|
|
|
|
|
|
var result = new List<IRUnReadSubjectView>();
|
|
|
|
|
|
|
|
|
|
var propName = string.IsNullOrWhiteSpace(inQuery!.SortField) ? nameof(IRUnReadSubjectView.UnReadCanReadTaskCount) : inQuery.SortField;
|
|
|
|
|
|
|
|
|
|
var visitTaskOrderQuery = inQuery.Asc ? visitTaskQuery.OrderBy(propName) : visitTaskQuery.OrderBy(propName + " desc");
|
|
|
|
|
|
|
|
|
|
var result = new List<IRUnReadSubjectView>();
|
|
|
|
|
|
|
|
|
|
var propName = string.IsNullOrWhiteSpace(inDto.Page!.SortField) ? nameof(IRUnReadSubjectView.UnReadCanReadTaskCount) : inDto.Page.SortField;
|
|
|
|
|
|
|
|
|
|
var visitTaskOrderQuery = inDto.Page.Asc ? visitTaskQuery.OrderBy(propName) : visitTaskQuery.OrderBy(propName + " desc");
|
|
|
|
|
if (inDto.Page != null)
|
|
|
|
|
{
|
|
|
|
|
result = await visitTaskOrderQuery
|
|
|
|
|
.Skip((inDto.Page.PageIndex - 1) * inDto.Page.PageSize)
|
|
|
|
|
.Take(inDto.Page.PageSize).ToListAsync();
|
|
|
|
|
.Skip((inQuery.PageIndex - 1) * inQuery.PageSize)
|
|
|
|
|
.Take(inQuery.PageSize).ToListAsync();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return new PageOutput<IRUnReadSubjectView>()
|
|
|
|
|
{
|
|
|
|
|
PageSize = inQuery.PageSize,
|
|
|
|
|
PageIndex = inQuery.PageIndex,
|
|
|
|
|
TotalCount = count,
|
|
|
|
|
CurrentPageData = result,
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
result = await visitTaskOrderQuery.ToListAsync();
|
|
|
|
|
|
|
|
|
|
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(!string.IsNullOrEmpty(subjectCode), t => (t.Subject.Code.Contains(subjectCode!) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(subjectCode!) && t.IsAnalysisCreate));
|
|
|
|
|
|
|
|
|
|
var visitGroupQuery = visitQuery.GroupBy(x => new { x.SubjectId, x.Subject.Code, x.BlindSubjectCode });
|
|
|
|
|
|
|
|
|
|
var visitTaskQuery = visitGroupQuery.Select(x => new IRUnReadSubjectView()
|
|
|
|
|
{
|
|
|
|
|
SubjectId = x.Key.SubjectId,
|
|
|
|
|
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),
|
|
|
|
|
|
|
|
|
|
//未读任务量
|
|
|
|
|
UnReadCanReadTaskCount = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned).Count(),
|
|
|
|
|
|
|
|
|
|
UrgentCount = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned).Where(x => x.IsUrgent).Count(),
|
|
|
|
|
|
|
|
|
|
//已读任务量
|
|
|
|
|
HaveReadTaskCount = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState == ReadingTaskState.HaveSigned).Count(),
|
|
|
|
|
|
|
|
|
|
ExistReadingApply = x.Any(y => (y.ReReadingApplyState == ReReadingApplyState.DocotorHaveApplyed && y.TrialReadingCriterionId == trialReadingCriterionId) || y.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed),
|
|
|
|
|
|
|
|
|
|
UnReadCanReadTaskList = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned)
|
|
|
|
|
.OrderBy(x => x.VisitTaskNum)
|
|
|
|
|
.Select(u => new IRUnreadTaskView()
|
|
|
|
|
{
|
|
|
|
|
Id = u.Id,
|
|
|
|
|
IsUrgent = u.IsUrgent,
|
|
|
|
|
VisitNum = u.VisitTaskNum,
|
|
|
|
|
TaskBlindName = u.TaskBlindName,
|
|
|
|
|
VisistId = u.SourceSubjectVisitId,
|
|
|
|
|
SuggesteFinishedTime = u.SuggesteFinishedTime,
|
|
|
|
|
ReadingCategory = u.ReadingCategory,
|
|
|
|
|
IsAnalysisCreate = u.IsAnalysisCreate,
|
|
|
|
|
ArmEnum = u.ArmEnum,
|
|
|
|
|
TrialReadingCriterionId = u.TrialReadingCriterionId,
|
|
|
|
|
IsNeedClinicalDataSign = u.IsNeedClinicalDataSign,
|
|
|
|
|
IsClinicalDataSign = u.IsClinicalDataSign,
|
|
|
|
|
IsFrontTaskNeedSignButNotSign = u.IsFrontTaskNeedSignButNotSign
|
|
|
|
|
})
|
|
|
|
|
.ToList()
|
|
|
|
|
}).Where(x => x.UnReadCanReadTaskCount > 0);
|
|
|
|
|
|
|
|
|
|
var pageList = await visitTaskQuery.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrWhiteSpace(inQuery.SortField) ? nameof(IRUnReadSubjectView.UnReadCanReadTaskCount) : inQuery.SortField, inQuery.Asc);
|
|
|
|
|
|
|
|
|
|
return pageList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return (count, result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|