using IRaCIS.Core.Application.ViewModel; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace IRaCIS.Core.Application; [ApiExplorerSettings(GroupName = "Trial")] public class TrialStatService( IRepository _trialRepository, IRepository _subjectVisitRepository, IRepository _trialDocumentRepository, IRepository _systemDocumentRepository, IRepository _systemNoticeRepository, IRepository _visitTaskRepository, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService { /// /// 访视完成度 /// /// public async Task> GetTrialVisitFinishedStatList(VisitFinishedStatQuery inQuery) { var list = await _trialRepository.Where(t => t.Id == inQuery.TrialId).Select(t => new VisitFinishedStatViewModel() { UploadedCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).Count(), QCFinishedCount = t.SubjectVisitList.Where(t => t.AuditState == AuditStateEnum.QCPassed || t.AuditState == AuditStateEnum.QCFailed).Count(), CheckFinishedCount = t.SubjectVisitList.Where(t => t.CheckState == CheckStateEnum.CVPassed).Count(), CriterionList = t.TrialReadingCriterionList.Where(t => inQuery.TrialReadingCriterionId != null ? t.Id == inQuery.TrialReadingCriterionId : true) .Select(t => new VisitReadingCriterionInfo() { TrialReadingCriterionId = t.Id, TrialReadingCriterionName = t.CriterionName, ReadingFinishedCount = t.VisitTaskList.Where(t => t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false && t.ReadingTaskState == ReadingTaskState.HaveSigned && t.ReadingCategory == ReadingCategory.Visit) .GroupBy(t => t.SourceSubjectVisitId) .Where(g => t.ReadingType == ReadingMethod.Double ? g.Count() == 2 : true) .Count() }).ToList() }).ToListAsync(); return list; } /// /// 质疑统计列表 --医学审核不区分标准 /// /// public async Task> GetTrialQuestionStatList(VisitQuestionStatQuery inQuery) { var list = await _trialRepository.Where(t => t.Id == inQuery.TrialId).Select(t => new VisitQuestionViewModel() { QCQuestion_ClosedCount = t.SubjectVisitList.SelectMany(t => t.QCChallengeList).Where(c => c.IsClosed).Count(), QCQuestion_IngCount = t.SubjectVisitList.SelectMany(t => t.QCChallengeList).Where(c => c.IsClosed == false).Count(), CheckQuestion_ClosedCount = t.SubjectVisitList.Where(t => t.CheckChallengeState == CheckChanllengeTypeEnum.Closed).Count(), CheckQuestion_IngCount = t.SubjectVisitList.Where(t => t.CheckChallengeState != CheckChanllengeTypeEnum.Closed).Count(), MedicalReviewQuestion_ClosedCount = t.TaskMedicalReviewList.Where(t => t.VisitTask.IsAnalysisCreate == false && t.IsClosedDialog).Count(), MedicalReviewQuestion_IngCount = t.TaskMedicalReviewList.Where(t => t.VisitTask.IsAnalysisCreate == false && t.IsClosedDialog == false).Count(), }).ToListAsync(); return list; } /// /// 疗效统计表,只针对肿瘤标准 排除基线 /// /// /// public async Task> GetTrialEfficacyEvaluationStatList(EfficacyEvaluationQuery inQuery) { var query = _visitTaskRepository .Where(t => t.TrialId == inQuery.TrialId && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId && t.IsAnalysisCreate == false && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze)) //访视和全局查询已签名完成的,裁判可以是未签名,未完成的 .Where(t => (t.ReadingTaskState == ReadingTaskState.HaveSigned && (t.ReadingCategory == ReadingCategory.Visit || t.ReadingCategory == ReadingCategory.Global)) || t.ReadingCategory == ReadingCategory.Judge) .Select(t => new EfficacyEvaluationExport() { Id = t.Id, SubjectId = t.SubjectId, SubjectCode = t.Subject.Code, VisitTaskNum = t.VisitTaskNum, TaskName = t.TaskName, TaskBlindName = t.TaskBlindName, ReadingTaskState = t.ReadingTaskState, ReadingCategory = t.ReadingCategory, }); return new List { }; } }