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
}
}