diff --git a/IRaCIS.Core.Application/Service/Visit/DTO/ClinicalStudySubjects.cs b/IRaCIS.Core.Application/Service/Visit/DTO/ClinicalStudySubjects.cs index c1c3a6153..be61e63a5 100644 --- a/IRaCIS.Core.Application/Service/Visit/DTO/ClinicalStudySubjects.cs +++ b/IRaCIS.Core.Application/Service/Visit/DTO/ClinicalStudySubjects.cs @@ -90,6 +90,7 @@ namespace IRaCIS.Application.Contracts public class SubjectQueryView : SubjectCommand { + public bool IsHaveTaskFinished { get; set; } public DateTime? OutEnrollmentTime { get; set; } public DateTime? VisitOverTime { get; set; } diff --git a/IRaCIS.Core.Application/Service/Visit/_MapConfig.cs b/IRaCIS.Core.Application/Service/Visit/_MapConfig.cs index 68307f231..70ba7081a 100644 --- a/IRaCIS.Core.Application/Service/Visit/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/Visit/_MapConfig.cs @@ -39,6 +39,7 @@ namespace IRaCIS.Core.Application.Service .ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.TrialSite.TrialSiteCode)) .ForMember(d => d.LatestBlindName, u => u.MapFrom(s => s.LatestSubjectVisit.BlindName)) .ForMember(d => d.LatestVisitName, u => u.MapFrom(s => s.LatestSubjectVisit.VisitName)) + .ForMember(d => d.IsHaveTaskFinished, u => u.MapFrom(s => s.SubjectVisitTaskList.Any(t => t.TaskState == TaskState.Effect && t.ReadingTaskState == ReadingTaskState.HaveSigned))) //.ForMember(d => d.FinalSubjectVisitId, u => u.MapFrom(s => s.SubjectVisitList.Where(t => t.IsFinalVisit).Select(c => (Guid?)c.Id).FirstOrDefault())) diff --git a/IRaCIS.Core.Application/Service/WorkLoad/DTO/DoctorWorkLoadViewModel.cs b/IRaCIS.Core.Application/Service/WorkLoad/DTO/DoctorWorkLoadViewModel.cs index 48ea5892f..710cd6362 100644 --- a/IRaCIS.Core.Application/Service/WorkLoad/DTO/DoctorWorkLoadViewModel.cs +++ b/IRaCIS.Core.Application/Service/WorkLoad/DTO/DoctorWorkLoadViewModel.cs @@ -177,6 +177,17 @@ namespace IRaCIS.Application.Contracts public bool IsEnable { get; set; } } + public class TrialReadingStatQuery + { + [NotDefault] + public Guid TrialId { get; set; } + + + [NotDefault] + public Guid TrialReadingCriterionId { get; set; } + + public List DoctorUserIdList { get; set; } = new List(); + } public class WorkLoadDoctorQueryDTO : PageInput { @@ -212,7 +223,7 @@ namespace IRaCIS.Application.Contracts public class WorkLoadAndTrainingDTO { - + public Guid? DoctorUserId { get; set; } public Guid DoctorId { get; set; }/*=Guid.Empty;*/ public string Code { get; set; } = String.Empty; public string FirstName { get; set; } = String.Empty; @@ -356,6 +367,7 @@ namespace IRaCIS.Application.Contracts public class DoctorTaskStat { + public Guid? DoctorUserId { get; set; } public CriterionType? CriterionType { get; set; } public Guid TrialReadingCriterionId { get; set; } diff --git a/IRaCIS.Core.Application/Service/WorkLoad/DoctorWorkloadService.cs b/IRaCIS.Core.Application/Service/WorkLoad/DoctorWorkloadService.cs index 3858fad57..5134924f9 100644 --- a/IRaCIS.Core.Application/Service/WorkLoad/DoctorWorkloadService.cs +++ b/IRaCIS.Core.Application/Service/WorkLoad/DoctorWorkloadService.cs @@ -193,6 +193,30 @@ namespace IRaCIS.Core.Application.Service return ResponseOutput.Result(success2); } + /// + /// 获取项目阅片统计 + /// + /// + public async Task> GetDoctorUserTrialReadingStat(TrialReadingStatQuery inQuery) + { + var list = _enrollRepository.Where(x => x.TrialId == inQuery.TrialId && x.EnrollStatus >= EnrollStatus.ConfirmIntoGroup) + .WhereIf(inQuery.DoctorUserIdList.Count > 0, t => inQuery.DoctorUserIdList.Contains(t.DoctorUserId)) + .SelectMany(t => t.DoctorUser.VisitTaskList.Where(t => t.TrialReadingCriterion.IsConfirm && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId) + .Where(x => x.TaskState == TaskState.Effect && x.TrialId == inQuery.TrialId)) + .GroupBy(x => new { x.TrialReadingCriterionId, x.TrialReadingCriterion.CriterionType, x.DoctorUserId }) + .Select(g => new DoctorTaskStat() + { + DoctorUserId = g.Key.DoctorUserId, + PendingCount = g.Count(x => x.ReadingTaskState != ReadingTaskState.HaveSigned), + TotalCount = g.Count(), + ComplectedCount = g.Count(x => x.ReadingTaskState == ReadingTaskState.HaveSigned), + TrialReadingCriterionId = g.Key.TrialReadingCriterionId, + CriterionType = g.Key.CriterionType, + }).ToList(); + + return list; + } + /// /// 获取某个项目入组的医生工作量统计列表 /// @@ -254,6 +278,8 @@ namespace IRaCIS.Core.Application.Service //}).ToList(), + DoctorUserId = intoGroup.DoctorUserId, + DoctorId = doctor.Id, Code = doctor.ReviewerCode, FirstName = doctor.FirstName,