修改统计

Uat_Study
hang 2023-06-14 18:20:08 +08:00
parent c462dbb745
commit 851f785f50
2 changed files with 232 additions and 36 deletions

View File

@ -1,4 +1,5 @@
using System;
using System.ComponentModel.DataAnnotations;
using IRaCIS.Application.Contracts;
using IRaCIS.Core.Domain.Share;
@ -290,7 +291,55 @@ namespace IRaCIS.Core.Application.Contracts
}
public class TrialUserToBeDoneQuery : PageInput
{
[NotDefault]
public Guid TrialId { get; set; }
}
public class TrialUserToBeDoneDto
{
public string UserName { get; set; }
public string FullName { get; set; }
public UserTypeEnum UserType { get; set; }
public int? ReviewerSelect_SPM_ToBeApprovalCount { get; set; }
public int? ReviewerSelect_PM_ToBeConfirmCount { get; set; }
public int? ImageUpload_CRC_ToBeReUploadCount { get; set; }
public int? ImageUpload_CRC_ToBeSubmitCount { get; set; }
public int? QC_IQC_ToBeReviewedCount { get; set; }
public int? QC_IQC_ToBeClaimedCount { get; set; }
public int? QC_IQC_ToBeDealedCount { get; set; }
public int? QC_CRC_ToBeDealedCount { get; set; }
public int? Check_CRC_ToBeDealedCount { get; set; }
public int? Check_PM_ToBeDealedCount { get; set; }
public int? Check_PM_ToBeReplyedCount { get; set; }
public int? Reading_IR_UnReadCount { get; set; }
public int? Reading_SPM_ToBeApprovalCount { get; set; }
public int? Reading_PM_ToBeApprovalCount { get; set; }
public int? Medical_MIM_ToBeDealedCount { get; set; }
public int? Medical_IR_ToBeDealedCount { get; set; }
}
public class TrialBaseInfoDto
{

View File

@ -3,7 +3,9 @@ using IRaCIS.Core.Application.Contracts;
using IRaCIS.Core.Domain.Models;
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infrastructure.Extention;
using MathNet.Numerics;
using Microsoft.AspNetCore.Mvc;
using System.Linq.Dynamic.Core;
namespace IRaCIS.Core.Application
{
@ -398,10 +400,13 @@ namespace IRaCIS.Core.Application
ResearchProgramNo = t.ResearchProgramNo,
ExperimentName = t.ExperimentName,
TrialCode = t.TrialCode,
UrgentCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList)
UrgentCount = 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.SubjectVisit.IsUrgent).Count(),
ToBeDealedCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList)
ToBeDealedCount = 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).Count(),
@ -411,6 +416,7 @@ namespace IRaCIS.Core.Application
var toBeDealedCount = _subjectVisitRepository
.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.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).Count();
@ -438,8 +444,12 @@ namespace IRaCIS.Core.Application
ResearchProgramNo = t.ResearchProgramNo,
ExperimentName = t.ExperimentName,
TrialCode = t.TrialCode,
UrgentCount = t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.CVIng && u.CheckChallengeState == CheckChanllengeTypeEnum.PMWaitCRCReply && u.IsUrgent).Count(),
ToBeReplyedCount = t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.CVIng && u.CheckChallengeState == CheckChanllengeTypeEnum.PMWaitCRCReply).Count()
UrgentCount = t.SubjectVisitList.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.Id))
.Where(u => u.CheckState == CheckStateEnum.CVIng && u.CheckChallengeState == CheckChanllengeTypeEnum.PMWaitCRCReply && u.IsUrgent).Count(),
ToBeReplyedCount = t.SubjectVisitList.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.Id))
.Where(u => u.CheckState == CheckStateEnum.CVIng && u.CheckChallengeState == CheckChanllengeTypeEnum.PMWaitCRCReply).Count()
});
@ -450,6 +460,7 @@ namespace IRaCIS.Core.Application
var toBeDealedCount = _subjectVisitRepository
.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.Id))
.Where(u => u.CheckState == CheckStateEnum.CVIng && u.CheckChallengeState == CheckChanllengeTypeEnum.PMWaitCRCReply).Count();
return ResponseOutput.Ok(result, new { TotalToBeReplyedCount = toBeDealedCount });
@ -478,8 +489,13 @@ namespace IRaCIS.Core.Application
ResearchProgramNo = t.ResearchProgramNo,
ExperimentName = t.ExperimentName,
TrialCode = t.TrialCode,
UrgentCount = t.SubjectVisitList.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit && u.IsUrgent && u.IsPMBackOrReReading).Count(),
ToBeReUploadCount = t.SubjectVisitList.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit && u.IsPMBackOrReReading).Count(),
UrgentCount = t.SubjectVisitList
.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.Id))
.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit && u.IsUrgent && u.IsPMBackOrReReading).Count(),
ToBeReUploadCount = t.SubjectVisitList
.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.Id))
.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit && u.IsPMBackOrReReading).Count(),
});
@ -516,8 +532,14 @@ namespace IRaCIS.Core.Application
ResearchProgramNo = t.ResearchProgramNo,
ExperimentName = t.ExperimentName,
TrialCode = t.TrialCode,
UrgentCount = t.SubjectVisitList.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit && u.IsUrgent).Count(),
ToBeDealedCount = t.SubjectVisitList.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit).Count(),
UrgentCount = t.SubjectVisitList
.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.Id))
.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit && u.IsUrgent).Count(),
ToBeDealedCount = t.SubjectVisitList
.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.Id))
.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit).Count(),
});
@ -525,6 +547,7 @@ namespace IRaCIS.Core.Application
var toBeDealedCount = _subjectVisitRepository
.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.Id))
.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit).Count();
return ResponseOutput.Ok(result, new { TotalToBeReUploadCount = toBeDealedCount });
@ -611,9 +634,10 @@ namespace IRaCIS.Core.Application
ExperimentName = t.ExperimentName,
TrialCode = t.TrialCode,
UrgentCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList)
.Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && u.SubjectVisit.IsUrgent).Count(),
.Where(u => u.CreateUserId==_userInfo.Id && u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && u.SubjectVisit.IsUrgent).Count(),
ToBeDealedCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList)
.Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count(),
.Where(u => u.CreateUserId == _userInfo.Id && u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count(),
});
@ -622,7 +646,7 @@ namespace IRaCIS.Core.Application
var toBeDealedCount = _subjectVisitRepository
.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.SelectMany(c => c.QCChallengeList)
.Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count();
.Where(u => u.CreateUserId == _userInfo.Id && u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count();
return ResponseOutput.Ok(result, new { TotalToBeReUploadCount = toBeDealedCount });
@ -817,7 +841,7 @@ namespace IRaCIS.Core.Application
var toBeDealedCount = _taskMedicalReviewRepository
.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Where(t => t.IsClosedDialog == false)
.Where(t => t.IsClosedDialog == false && t.VisitTask.DoctorUserId==_userInfo.Id)
.Where(u => u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.MIM).Count();
return ResponseOutput.Ok(result, new { TotalToBeReUploadCount = toBeDealedCount });
@ -935,7 +959,7 @@ namespace IRaCIS.Core.Application
var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrWhiteSpace(inQuery.SortField) ? "CreateTime" : inQuery.SortField, inQuery.Asc);
return ResponseOutput.Ok(result, new { TotalToBeReUploadCount = 0 });
return ResponseOutput.Ok(result);
}
@ -943,14 +967,135 @@ namespace IRaCIS.Core.Application
#region 项目维度 统计每个人的待办
[HttpPost]
public async Task<IResponseOutput<List<TrialUserToBeDoneDto>>> GetTrialUserToBeDoneList(TrialUserToBeDoneQuery inQuery,
[FromServices] IRepository<TrialUser> _trialUserRepository)
{
#region 阅片人筛选
var query = _trialUserRepository.Where(t => t.TrialId == inQuery.TrialId)
.Select(t => new TrialUserToBeDoneDto()
{
UserName = t.User.UserName,
FullName = t.User.FullName,
UserType = t.User.UserTypeEnum,
//public GetTrialReviewerSelect_Stat(Guid trialId)
//SPM 阅片人筛选
ReviewerSelect_SPM_ToBeApprovalCount =
(t.User.UserTypeEnum == UserTypeEnum.SPM || t.User.UserTypeEnum == UserTypeEnum.CPM) ?
t.Trial.EnrollList.Where(u => u.EnrollStatus == EnrollStatus.HasCommittedToCRO).Count() : 0,
#endregion
//PM 阅片人确认
ReviewerSelect_PM_ToBeConfirmCount =
(t.User.UserTypeEnum == UserTypeEnum.APM || t.User.UserTypeEnum == UserTypeEnum.ProjectManager) ?
t.Trial.EnrollList.Where(u => u.EnrollStatus == EnrollStatus.InviteIntoGroup).Count() : 0,
//CRC 重传 --区分人
ImageUpload_CRC_ToBeReUploadCount =
(t.User.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator || t.User.UserTypeEnum == UserTypeEnum.CRA) ?
t.Trial.SubjectVisitList.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == t.UserId))
.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit && u.IsPMBackOrReReading).Count() : 0,
//CRC加急待提交 需确认?--区分人
ImageUpload_CRC_ToBeSubmitCount =
(t.User.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator || t.User.UserTypeEnum == UserTypeEnum.CRA) ?
t.Trial.SubjectVisitList.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == t.UserId))
.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit).Count() : 0,
// QC IQC 待领取
QC_IQC_ToBeClaimedCount =
(t.User.UserTypeEnum == UserTypeEnum.IQC) ?
t.Trial.SubjectVisitList.Where(u => u.CurrentActionUserId == null && (u.PreliminaryAuditUserId == null || (u.PreliminaryAuditUserId != _userInfo.Id && u.ReviewAuditUserId == null))).Count() : 0,
// CRC 质疑待回复 --区分人
QC_CRC_ToBeDealedCount =
(t.User.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator || t.User.UserTypeEnum == UserTypeEnum.CRA) ?
t.Trial.SubjectVisitList.Where(c=>c.TrialSite.CRCUserList.Any(u=>u.UserId==t.UserId))
.SelectMany(c => c.QCChallengeList).Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.IQC ).Count() : 0,
//IQC 质疑待处理 --区分人
QC_IQC_ToBeDealedCount =
(t.User.UserTypeEnum == UserTypeEnum.IQC) ?
t.Trial.SubjectVisitList.SelectMany(c => c.QCChallengeList)
.Where(u => u.CreateUserId==t.UserId && u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count() : 0,
// IQC 待审核
QC_IQC_ToBeReviewedCount =
(t.User.UserTypeEnum == UserTypeEnum.IQC) ?
t.Trial.SubjectVisitList.Where(u => u.CurrentActionUserId == t.UserId).Count() : 0,
//PM 核查待处理
Check_PM_ToBeDealedCount =
(t.User.UserTypeEnum == UserTypeEnum.APM || t.User.UserTypeEnum == UserTypeEnum.ProjectManager) ?
t.Trial.SubjectVisitList .Where(u => u.CheckState == CheckStateEnum.ToCheck).Count() : 0,
//PM 质疑待处理
Check_PM_ToBeReplyedCount =
(t.User.UserTypeEnum == UserTypeEnum.APM || t.User.UserTypeEnum == UserTypeEnum.ProjectManager) ?
t.Trial.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.CVIng &&
u.CheckChallengeDialogList.OrderByDescending(t => t.CreateTime).First().UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count() : 0,
// CRC 核查 质疑待处理 --区分人
Check_CRC_ToBeDealedCount =
(t.User.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator || t.User.UserTypeEnum == UserTypeEnum.CRA) ?
t.Trial.SubjectVisitList.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == t.UserId))
.Where(u => u.CheckState == CheckStateEnum.CVIng && u.CheckChallengeState == CheckChanllengeTypeEnum.PMWaitCRCReply ).Count() : 0,
//IR 未读 --区分人
Reading_IR_UnReadCount =
(t.User.UserTypeEnum == UserTypeEnum.IndependentReviewer) ?
t.Trial.VisitTaskList
.Where(c => c.DoctorUserId == t.UserId && c.ReadingTaskState != ReadingTaskState.HaveSigned && c.TaskState == TaskState.Effect)
// 前序 不存在 未一致性核查未通过的
.Where(t => !t.Subject.SubjectVisitList.Any(sv => sv.CheckState != CheckStateEnum.CVPassed && t.VisitTaskNum > sv.VisitNum))
//前序 不存在 未生成任务的访视
.Where(t => t.TrialReadingCriterion.IsAutoCreate == false ? !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)).Count() : 0,
//SPM PM重阅审批
Reading_SPM_ToBeApprovalCount =
(t.User.UserTypeEnum == UserTypeEnum.SPM || t.User.UserTypeEnum == UserTypeEnum.CPM) ?
t.Trial.VisitTaskReReadingList.Where(t => t.OriginalReReadingTask.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed).Count() : 0,
//PM IR重阅审批
Reading_PM_ToBeApprovalCount =
(t.User.UserTypeEnum == UserTypeEnum.APM || t.User.UserTypeEnum == UserTypeEnum.ProjectManager) ?
t.Trial.VisitTaskReReadingList.Where(t => t.OriginalReReadingTask.ReReadingApplyState == ReReadingApplyState.DocotorHaveApplyed).Count() : 0,
//IR 医学审核 --区分人
Medical_IR_ToBeDealedCount =
(t.User.UserTypeEnum == UserTypeEnum.IndependentReviewer) ?
t.Trial.TaskMedicalReviewList
.Where(c => c.IsClosedDialog == false && c.VisitTask.DoctorUserId==t.UserId)
.Where(u => u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.MIM).Count() : 0,
Medical_MIM_ToBeDealedCount =
(t.User.UserTypeEnum == UserTypeEnum.MIM) ?
t.Trial.TaskMedicalReviewList
.Where(t => t.IsClosedDialog == false)
.Where(u => u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.IndependentReviewer).Count() : 0,
});
var list = await query.ToListAsync();
return ResponseOutput.Ok(list);
}
#region 废弃
#region 上传影像
#endregion
@ -969,6 +1114,8 @@ namespace IRaCIS.Core.Application
#endregion
#endregion