[增加其他角色统计 1]

IRC_NewDev
hang 2024-02-29 09:49:59 +08:00
parent e5f2d1cde9
commit 39882e43ce
2 changed files with 138 additions and 27 deletions

View File

@ -299,18 +299,68 @@ namespace IRaCIS.Core.Application.Contracts
public int? PendingResponseCount { get; set; }
#endregion
#region SPM
public int? SPM_ReReadingApprovalCount { get; set; }
public int? SPM_ReviewerSelectApprovalCount { get; set; }
#endregion
public bool IsIQCHaveToBeDone { get; set; }
public bool IsCRCHaveToBeDone { get; set; }
#region MIM
public bool IsMIMHaveToBeDone { get; set; }
public int? MIM_UrgentCount { get; set; }
public int? MIM_PendingReviewCount { get; set; }
public int? MIM_PendingResponseCount { get; set; }
#endregion
#region CRC
public int? CRC_UrgentCount { get; set; }
public int? CRC_QCQuestionCount { get; set; }
public int? CRC_CheckQuestionCount { get; set; }
#endregion
#region IQC
public int? IQC_UrgentCount { get; set; }
public int? IQC_ToBeClaimedCount { get; set; }
public int? IQC_AuditToBeDealedCount { get; set; }
public int? IQC_QuestionToBeDealedCount { get; set; }
#endregion
#region IR
public List<string>? IR_ReadingCriterionList { get; set; }
public List<string>? IR_PMEmailList { get; set; }
public int? IR_TotalReadCount { get; set; }
#endregion
public bool IsIRHaveToBeDone { get; set; }
//public bool IsIQCHaveToBeDone { get; set; }
//public bool IsCRCHaveToBeDone { get; set; }
public bool IsSPMOrCPMHaveToBeDone { get; set; }
//public bool IsMIMHaveToBeDone { get; set; }
//public bool IsIRHaveToBeDone { get; set; }
//public bool IsSPMOrCPMHaveToBeDone { get; set; }
}
@ -345,6 +395,9 @@ namespace IRaCIS.Core.Application.Contracts
public int? CRC_ImageReUploadCount { get; set; }
public int? CRC_ClinicalDataTobeDoneCount { get; set; }
public int? CRC_ClinialDataTobeConfirmCount { get; set; }
public int? CRC_TrialWaitSignDocCount { get; set; }
public int? CRC_SysWaitSignDocCount { get; set; }

View File

@ -210,7 +210,7 @@ namespace IRaCIS.Core.Application
ToBeRepliedCount = t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.CVIng &&
u.CheckChallengeDialogList.OrderByDescending(t => t.CreateTime).First().UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count(),
}).Where(x => x.ToBeRepliedCount+x.ToBeCheckedCount > 0);
}).Where(x => x.ToBeRepliedCount + x.ToBeCheckedCount > 0);
var defalutSortArray = new string[] { nameof(CheckToBeDoneDto.UrgentCount) + " desc", nameof(CheckToBeDoneDto.ToBeCheckedCount) + " desc" };
@ -468,7 +468,7 @@ namespace IRaCIS.Core.Application
ToBeVisitCount = t.ReadingClinicalDataList.Where(x => !x.IsSign && x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC && x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit).Count(),
ToAllCount = t.ReadingClinicalDataList.Where(x => !x.IsSign && x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC).Count(),
ReadModuleCount = t.ReadModuleList.Where(x => !x.IsPMConfirm).Count(),
}).Where(x => x.ToBeDealedCount > 0);
}).Where(x => x.ToAllCount > 0);
var defalutSortArray = new string[] { nameof(ImageClinicalDataToBeDoneDto.UrgentCount) + " desc", nameof(ImageClinicalDataToBeDoneDto.ReadModuleCount) + " desc" };
@ -522,7 +522,7 @@ namespace IRaCIS.Core.Application
item.ReadModuleCount = (await _clinicalAnswerService.GetCRCConfirmList(new Service.Reading.Dto.GetCRCConfirmListInDto()
{
TrialId = item.TrialId,
IsPMConfirm=false,
IsPMConfirm = false,
PageIndex = 1,
PageSize = 9999,
@ -769,7 +769,7 @@ namespace IRaCIS.Core.Application
//待领取量
ToBeClaimedCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted && t.AuditState!=AuditStateEnum.QCPassed)
ToBeClaimedCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted && t.AuditState != AuditStateEnum.QCPassed)
.Where(u => u.CurrentActionUserId == null && (u.PreliminaryAuditUserId == null || (u.PreliminaryAuditUserId != _userInfo.Id && u.ReviewAuditUserId == null))).Count(),
//待审核通过统计从已领取到QC提交之间的 已领取 待审核 审核中 (审核完成 领取人就会清理 所以只用查询当前领取人是自己的就好了)
@ -785,7 +785,7 @@ namespace IRaCIS.Core.Application
var toBeClaimedCount = _subjectVisitRepository
.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id)&& t.SubmitState == SubmitStateEnum.Submitted && t.AuditState != AuditStateEnum.QCPassed)
.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id) && t.SubmitState == SubmitStateEnum.Submitted && t.AuditState != AuditStateEnum.QCPassed)
.Where(u => u.CurrentActionUserId == null && (u.PreliminaryAuditUserId == null || (u.PreliminaryAuditUserId != _userInfo.Id && u.ReviewAuditUserId == null))).Count();
@ -1082,7 +1082,7 @@ namespace IRaCIS.Core.Application
#region 废弃不能对包含聚合或子查询的表达式执行聚合函数
var query = _taskMedicalReviewRepository
.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Where(t => t.IsClosedDialog == false && t.VisitTask.TaskState==TaskState.Effect && t.IsInvalid==false && t.MedicalManagerUserId == _userInfo.Id)
.Where(t => t.IsClosedDialog == false && t.VisitTask.TaskState == TaskState.Effect && t.IsInvalid == false && t.MedicalManagerUserId == _userInfo.Id)
.GroupBy(t => new
{
t.TrialId,
@ -1099,13 +1099,13 @@ namespace IRaCIS.Core.Application
ExperimentName = g.Key.ExperimentName,
TrialCode = g.Key.TrialCode,
CriterionName = g.Key.CriterionName,
TrialReadingCriterionId=g.Key.TrialReadingCriterionId,
TrialReadingCriterionId = g.Key.TrialReadingCriterionId,
UrgentCount = g.Where(u => u.VisitTask.IsUrgent).Select(u => u.LatestReplyUser.UserTypeEnum == UserTypeEnum.IndependentReviewer).Count(),
UrgentCount = g.Where(u => u.VisitTask.IsUrgent).Select(u => u.LatestReplyUser.UserTypeEnum == UserTypeEnum.IndependentReviewer).Count(),
ToBeReplyedCount = g.Where(u => u.LatestReplyUser.UserTypeEnum == UserTypeEnum.IndependentReviewer && u.AuditState == MedicalReviewAuditState.Auditing ).Count(),
ToBeReplyedCount = g.Where(u => u.LatestReplyUser.UserTypeEnum == UserTypeEnum.IndependentReviewer && u.AuditState == MedicalReviewAuditState.Auditing).Count(),
ToBeReviewedCount = g.Where(u => u.AuditState != MedicalReviewAuditState.HaveSigned && u.LatestReplyUser.UserTypeEnum != UserTypeEnum.IndependentReviewer).Count()
ToBeReviewedCount = g.Where(u => u.AuditState != MedicalReviewAuditState.HaveSigned && u.LatestReplyUser.UserTypeEnum != UserTypeEnum.IndependentReviewer).Count()
}).Where(t => t.ToBeReviewedCount > 0);
@ -1129,7 +1129,7 @@ namespace IRaCIS.Core.Application
var tobeReviewedCount = _taskMedicalReviewRepository
.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Where(t => t.IsClosedDialog == false && t.VisitTask.TaskState == TaskState.Effect && t.IsInvalid == false && t.MedicalManagerUserId == _userInfo.Id)
.Where(u => u.AuditState != MedicalReviewAuditState.HaveSigned && u.LatestReplyUser.UserTypeEnum != UserTypeEnum.IndependentReviewer).Count();
.Where(u => u.AuditState != MedicalReviewAuditState.HaveSigned && u.LatestReplyUser.UserTypeEnum != UserTypeEnum.IndependentReviewer).Count();
return ResponseOutput.Ok(result, new { TotalToBeReplyedCount = toBeReplyedCount, TotalTobeReviewedCount = tobeReviewedCount });
@ -1186,7 +1186,7 @@ namespace IRaCIS.Core.Application
.Select(t => t.Id).ToListAsync();
return list;
}
return new List<Guid>();
}
@ -1194,7 +1194,7 @@ namespace IRaCIS.Core.Application
public async Task<UserToBeDoneRecord> GetUserTobeDoneRecord([FromServices] IRepository<SubjectVisit> _subjectVisitRepository,
[FromServices] IRepository<VisitTaskReReading> _visitTaskReReadingRepository,
[FromServices] IRepository<TaskMedicalReview> _taskMedicalReviewRepository,
[FromServices]IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository)
[FromServices] IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository)
{
var isPM = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.APM;
var isCRC = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator;
@ -1204,7 +1204,7 @@ namespace IRaCIS.Core.Application
var isIR = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.IndependentReviewer;
var needSignTrialCount = await _trialRepository.Where(t => t.TrialStatusStr != StaticData.TrialState.TrialStopped)
.Where(c => c.TrialDocumentList.Where(t => t.IsDeleted == false && t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId)
.Where(c => c.TrialDocumentList.Where(t => t.IsDeleted == false && t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId)
&& !t.TrialDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.Id && t.ConfirmTime != null)).Count() > 0).CountAsync();
var needSignSysDocCont = await _systemDocumentRepository
@ -1234,10 +1234,10 @@ namespace IRaCIS.Core.Application
// ResearchProgramNo=t.ResearchProgramNo,
// IsHaveTrialDocNeedSign=true
// }).ToListAsync();
//}
var record = new UserToBeDoneRecord()
{
@ -1322,6 +1322,15 @@ namespace IRaCIS.Core.Application
.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.Id))
.Where(u => (u.SubmitState == SubmitStateEnum.ToSubmit && u.IsPMBackOrReReading) || (u.IsQCConfirmedReupload)).Count() > 0).CountAsync() : 0,
CRC_ClinicalDataTobeDoneCount = isCRC ? await _trialRepository
.Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Where(t => t.ReadingClinicalDataList.Where(x => !x.IsSign && x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC).Count() > 0).CountAsync() : 0,
CRC_ClinialDataTobeConfirmCount = isCRC ? await _trialRepository
.Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Where(t => t.ReadModuleList.Where(x => !x.IsCRCConfirm).Count() > 0).CountAsync() : 0,
#endregion
@ -1382,7 +1391,7 @@ namespace IRaCIS.Core.Application
.Where(c => c.VisitTaskList.Where(t => t.DoctorUserId == _userInfo.Id && t.ReadingTaskState != ReadingTaskState.HaveSigned && t.TaskState == TaskState.Effect)
// 前序 不存在 未一致性核查未通过的
.Where(t => !t.Subject.SubjectVisitList.Any(sv => sv.CheckState != CheckStateEnum.CVPassed && t.VisitTaskNum > sv.VisitNum))
.Where(t => c.IsAutoCreate ? !t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(d => d.TrialReadingCriterionId == t.TrialReadingCriterionId).Any(f => f.IsGeneratedTask == false && t.VisitTaskNum > f.SubjectVisit.VisitNum) : true)
.Where(y => y.IsFrontTaskNeedSignButNotSign == false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true))
@ -1392,12 +1401,12 @@ namespace IRaCIS.Core.Application
IR_MedicalReviewCount = isIR ? await _taskMedicalReviewRepository.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Where(t => t.IsClosedDialog == false && t.VisitTask.TaskState == TaskState.Effect && t.IsInvalid == false && t.MedicalManagerUserId == _userInfo.Id)
.GroupBy(t => t.TrialId)
.Select(g => new
.Select(g => new
{
TrialId = g.Key,
ToBeReplyedCount = g.Where(u => u.LatestReplyUser.UserTypeEnum == UserTypeEnum.MIM && u.AuditState == MedicalReviewAuditState.Auditing).Count(),
}).Where(t => t.ToBeReplyedCount > 0).CountAsync() : 0,
}).Where(t => t.ToBeReplyedCount > 0).CountAsync() : 0,
#endregion
@ -1407,7 +1416,7 @@ namespace IRaCIS.Core.Application
.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Where(t => t.IsClosedDialog == false && t.VisitTask.TaskState == TaskState.Effect && t.IsInvalid == false && t.MedicalManagerUserId == _userInfo.Id)
.GroupBy(t => t.TrialId)
.Select(g => new
.Select(g => new
{
TrialId = g.Key,
@ -1435,6 +1444,7 @@ namespace IRaCIS.Core.Application
var isIQC = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.IQC;
var isMIM = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.MIM;
var isSPMOrCPM = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SPM || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CPM;
var isIR = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.IndependentReviewer;
var query = _trialRepository.AsQueryable().IgnoreQueryFilters()
@ -1461,11 +1471,59 @@ namespace IRaCIS.Core.Application
PendingReconciliationCount = isPM ? t.SubjectVisitList.Where(t => t.CheckState == CheckStateEnum.ToCheck).Count() : 0,
PendingResponseCount = isPM ? t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.CVIng &&
u.CheckChallengeDialogList.OrderByDescending(t => t.CreateTime).First().UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count() : 0
u.CheckChallengeDialogList.OrderByDescending(t => t.CreateTime).First().UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count() : 0,
SPM_ReReadingApprovalCount = isSPMOrCPM ? t.VisitTaskReReadingList.Where(t => t.OriginalReReadingTask.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed).Count() : 0,
});
SPM_ReviewerSelectApprovalCount = isSPMOrCPM ? t.EnrollList.Where(u => u.EnrollStatus == EnrollStatus.HasCommittedToCRO).Count() : 0,
MIM_UrgentCount = isMIM ? t.TaskMedicalReviewList.Where(t => t.IsClosedDialog == false && t.VisitTask.TaskState == TaskState.Effect && t.IsInvalid == false && t.MedicalManagerUserId == _userInfo.Id)
.Where(u=>u.VisitTask.IsUrgent &&(
u.LatestReplyUser.UserTypeEnum == UserTypeEnum.IndependentReviewer && u.AuditState == MedicalReviewAuditState.Auditing
|| u.AuditState != MedicalReviewAuditState.HaveSigned && u.LatestReplyUser.UserTypeEnum != UserTypeEnum.IndependentReviewer)).Count() : 0,
MIM_PendingResponseCount = isMIM ? t.TaskMedicalReviewList.Where(t => t.IsClosedDialog == false && t.VisitTask.TaskState == TaskState.Effect && t.IsInvalid == false && t.MedicalManagerUserId == _userInfo.Id)
.Where(u => u.AuditState != MedicalReviewAuditState.HaveSigned && u.LatestReplyUser.UserTypeEnum != UserTypeEnum.IndependentReviewer).Count() : 0,
MIM_PendingReviewCount = isMIM ? t.TaskMedicalReviewList.Where(t => t.IsClosedDialog == false && t.VisitTask.TaskState == TaskState.Effect && t.IsInvalid == false && t.MedicalManagerUserId == _userInfo.Id)
.Where(u=>u.LatestReplyUser.UserTypeEnum == UserTypeEnum.IndependentReviewer && u.AuditState == MedicalReviewAuditState.Auditing).Count() : 0,
CRC_UrgentCount = isCRC? t.SubjectVisitList.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.Id) &&t.IsUrgent).Count() : 0,
CRC_CheckQuestionCount=isCRC? t.SubjectVisitList.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.Id))
.Where(u => u.CheckState == CheckStateEnum.CVIng && u.CheckChallengeState == CheckChanllengeTypeEnum.PMWaitCRCReply).Count() : 0,
CRC_QCQuestionCount=isCRC? t.SubjectVisitList.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.Id)).SelectMany(c => c.QCChallengeList)
.Where(u => u.IsClosed == false && (u.LatestReplyUser.UserTypeEnum == UserTypeEnum.IQC || u.LatestReplyUserId == null)).Count() : 0,
//待审核 审核中 加急的数量
IQC_UrgentCount = isIQC ? t.SubjectVisitList.Where(u => u.CurrentActionUserId == _userInfo.Id && t.QCProcessEnum != TrialQCProcess.NotAudit && t.IsUrgent ).Count() : 0,
//审核未完成
IQC_AuditToBeDealedCount= isIQC ? t.SubjectVisitList.Where(u => u.CurrentActionUserId == _userInfo.Id && t.QCProcessEnum != TrialQCProcess.NotAudit).Count() : 0,
//质疑待处理
IQC_QuestionToBeDealedCount= isIQC ? t.SubjectVisitList.SelectMany(c => c.QCChallengeList)
.Where(u => u.CreateUserId == _userInfo.Id && u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count() : 0,
//待领取
IQC_ToBeClaimedCount= isIQC ? t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted && t.AuditState != AuditStateEnum.QCPassed)
.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).Select(t=>t.CriterionName).ToList():null,
IR_PMEmailList= isIR ? t.TrialUserList.Select(t => t.User.EMail).ToList() : null,
IR_TotalReadCount= isIR ? t.VisitTaskList.Where(t=>t.DoctorUserId==_userInfo.Id && t.TaskState==TaskState.Effect && t.ReadingTaskState==ReadingTaskState.HaveSigned).Count():0,
}) ;