using IRaCIS.Api.Filter; using IRaCIS.Application; using IRaCIS.Application.Interfaces; using IRaCIS.Application.ViewModels; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using IRaCIS.Core.Application.Contracts.RequestAndResponse; using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Domain.Interfaces; using System.Linq; namespace IRaCIS.Core.API.Controllers { /// /// 入组具体流程各个医生列表信息、和提交动作 /// [Route("enroll")] [ApiController, Authorize, ApiExplorerSettings(GroupName = "Enroll")] public class EnrollController : ControllerBase { private readonly IFileService _fileService; private readonly ITrialEnrollmentService _trialEnrollmentService; private readonly IDoctorListQueryService _doctorListQueryService; private readonly IEnrollRepository _enrollRepository; private readonly IDoctorRepository _doctorRepository; public EnrollController(IFileService fileService, ITrialEnrollmentService trialEnrollmentService, IDoctorListQueryService doctorListQueryService, IEnrollRepository enrollRepository, IDoctorRepository doctorRepository ) { _fileService = fileService; _trialEnrollmentService = trialEnrollmentService; _doctorListQueryService = doctorListQueryService; _enrollRepository = enrollRepository; _doctorRepository = doctorRepository; } #region Trial 入组相关 /// 为项目筛选医生 提交 【select】 /// 项目Id /// 医生Id数组 /// [LogFilter] [HttpPost, Route("selectReviewers/{trialId:guid}")] public IResponseOutput SelectReviewers(Guid trialId, Guid[] doctorIdArray) { var userId = Guid.Parse(User.FindFirst("id").Value); return _trialEnrollmentService.SelectReviewer(userId, trialId, doctorIdArray); } [LogFilter] [HttpPost, Route("downloadResume/{trialId:guid}")] public IResponseOutput DownloadResume(Guid trialId, Guid[] doctorIdArray) { var userId = Guid.Parse(User.FindFirst("id").Value); var zipPath = _fileService.CreateOfficialResumeZip(doctorIdArray); return ResponseOutput.Ok(SystemConfig.RootUrl + zipPath); } /// 提交CRO列表 【Submit】 /// 项目Id /// 医生Id列表 /// /// [LogFilter] [HttpPost, Route("submitReviewer/{trialId:guid}/{commitState:int}")] public IResponseOutput SubmitReviewer(Guid trialId, Guid[] doctorIdArray, int commitState) { var userId = Guid.Parse(User.FindFirst("id").Value); return _trialEnrollmentService.SubmitReviewer(userId, trialId, doctorIdArray, commitState); } /// 入组名单确认 提交【 Approve】 /// 项目Id /// 医生Id列表 /// /// [LogFilter] [HttpPost, Route("approveReviewer/{trialId:guid}/{auditState:int}")] public IResponseOutput ApproveReviewer(Guid trialId, Guid[] doctorIdArray, int auditState) { var userId = Guid.Parse(User.FindFirst("id").Value); return _trialEnrollmentService.ApproveReviewer(userId, trialId, doctorIdArray, auditState); } /// /// 获取医生项目列表 /// /// /// [HttpPost,Route("Enroll/GetTrialDoctorList")] [LogFilter] public PageOutput GetTrialDoctorList(EnrollGetQuery challengeQuery) { return _doctorListQueryService.GetTrialDoctorList(challengeQuery); //return ResponseOutput.Ok(_doctorListQueryService.GetTrialDoctorList(challengeQuery)); } /// /// 添加或更新项目医生项目价格 /// [LogFilter] [HttpPost, Route("addOrUpdateModel")] public IResponseOutput AddOrUpdateEnroll(EnrollCommand addOrUpdateModel) { return ResponseOutput.Ok(_doctorListQueryService.AddOrUpdateEnroll(addOrUpdateModel)); } /// /// 后台确认医生入组 【Confirm】 /// [LogFilter] [HttpPost, Route("confirmReviewer/{trialId:guid}/{confirmState:int}")] public IResponseOutput ConfirmReviewer(Guid trialId, Guid[] doctorIdArray, int confirmState) { var userId = Guid.Parse(User.FindFirst("id").Value); return _trialEnrollmentService.ConfirmReviewer(userId, trialId, doctorIdArray, confirmState); } #endregion #region 入组过程,各个状态的列表接口 /// /// 筛选医生列表 [AUTH] /// [HttpPost, Route("getSelectionReviewerList")] public IResponseOutput> GetSelectionReviewerList( ReviewerSelectionQueryDTO param) { return ResponseOutput.Ok(_doctorListQueryService.GetSelectionReviewerList(param)); } /// /// 根据状态获取医生列表,入组 相关接口 (提交CRO-1) CRO确认-4 /// [HttpPost, Route("getSubmissionOrApprovalReviewerList")] public IResponseOutput> GetSubmissionOrApprovalReviewerList( ReviewerSubmissionQueryDTO param) { return ResponseOutput.Ok(_doctorListQueryService.GetSubmissionOrApprovalReviewerList(param)); } /// /// 获取项目下医生入组状态列表[Confirmation] /// [HttpPost, Route("getConfirmationReviewerList")] public IResponseOutput> GetConfirmationReviewerList( ReviewerConfirmationQueryDTO trialIdPageModel) { return ResponseOutput.Ok(_doctorListQueryService.GetConfirmationReviewerList(trialIdPageModel)); } #endregion } }