120 lines
4.9 KiB
C#
120 lines
4.9 KiB
C#
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<Trial> _trialRepository,
|
|
IRepository<SubjectVisit> _subjectVisitRepository,
|
|
IRepository<TrialDocument> _trialDocumentRepository,
|
|
IRepository<SystemDocument> _systemDocumentRepository,
|
|
IRepository<SystemNotice> _systemNoticeRepository,
|
|
IRepository<VisitTask> _visitTaskRepository,
|
|
IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService
|
|
{
|
|
|
|
/// <summary>
|
|
/// 访视完成度
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public async Task<List<VisitFinishedStatViewModel>> 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;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 质疑统计列表 --医学审核不区分标准
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public async Task<List<VisitQuestionViewModel>> 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;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 疗效统计表,只针对肿瘤标准 排除基线
|
|
/// </summary>
|
|
/// <param name="inQuery"></param>
|
|
/// <returns></returns>
|
|
public async Task<List<EfficacyEvaluationStatViewModel>> 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<EfficacyEvaluationStatViewModel> { };
|
|
|
|
}
|
|
} |