using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using AutoMapper; using Castle.Core.Internal; using IRaCIS.Application.Interfaces; using IRaCIS.Core.Application.Contracts; using IRaCIS.Core.Application.Filter; using IRaCIS.Core.Application.Image.QA; using IRaCIS.Core.Application.Interfaces; using IRaCIS.Core.Application.Service.Inspection.DTO; using IRaCIS.Core.Application.Service.Inspection.Interface; using IRaCIS.Core.Domain.Models; using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Infra.EFCore; using IRaCIS.Core.Infrastructure.Extention; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; namespace IRaCIS.Core.API.Controllers { [ApiController, ApiExplorerSettings(GroupName = "Reviewer")] public class InspectionController : ControllerBase { private readonly IRepository _repository; private readonly IMapper _mapper; private readonly IUserInfo _userInfo; private readonly ITrialDocumentService _trialDocumentService; private readonly IQCListService _qCListService; private readonly ITrialConfigService _trialConfigService; private readonly ISubjectService _subjectService; private readonly ISubjectVisitService _subjectVisitService; private readonly IInspectionService _inspectionService; private readonly IRepository _dataInspectionRepository; private delegate Task executionFun(dynamic data); public InspectionController(IRepository repository, IRepository _repositoryDataInspection, IMapper mapper, IUserInfo userInfo, ITrialDocumentService trialDocumentService, IRepository dataInspectionRepository, IQCListService _qCListService, IInspectionService sinspectionService, ITrialConfigService _trialConfigService, ISubjectService _subjectService, ISubjectVisitService subjectVisitService ) { _repository = repository; _mapper = mapper; _userInfo = userInfo; this._inspectionService = sinspectionService; this._trialDocumentService = trialDocumentService; this._qCListService = _qCListService; this._trialConfigService = _trialConfigService; this._subjectService = _subjectService; _subjectVisitService = subjectVisitService; this._dataInspectionRepository = dataInspectionRepository; } /// /// 获取稽查数据 /// /// [HttpPost, Route("Inspection/GetInspectionData")] public async Task> GetInspectionData(GetDataInspectionDto dto) { return await _inspectionService.GetInspectionData(dto); } #region 访视 [HttpPost, Route("Inspection/subjectVisit/addOrUpdateSV")] [UnitOfWork] public async Task AddOrUpdateSV(DataInspectionDto opt) { //opt.AuditInfo.SubjectCode = opt.OptCommand.Code; var fun = await _subjectVisitService.AddOrUpdateSV(opt.OptCommand); if (!fun.IsSuccess) { return ResponseOutput.NotOk(fun.ErrorMessage); } opt.AuditInfo.SubjectId = Guid.Parse(fun.Data); var statusdata = new { Status = 1, //OutEnrollmentTime = DateTime.Now.ToString("yyyy-MM-dd"), //VisitOverTime = DateTime.Now.ToString("yyyy-MM-dd"), Reason = string.Empty, }; return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun, statusdata); } #endregion #region setting ///// ///// 配置 基础逻辑信息 ///// ///// ///// //[HttpPut, Route("configTrialBasicInfo/configTrialBasicInfo")] //[UnitOfWork] //public async Task ConfigTrialBasicInfo(InsBasicTrialConfig opt) //{ // var fun = _trialConfigService.ConfigTrialBasicInfo; // return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, fun); //} ///// ///// 配置流程 ///// ///// ///// //[HttpPut, Route("configTrialBasicInfo/configTrialProcessInfo")] //[UnitOfWork] //public async Task ConfigTrialProcessInfo(InsTrialProcessConfig opt) //{ // var fun = _trialConfigService.ConfigTrialProcessInfo; // return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, fun); //} ///// ///// 配置加急信息 ///// ///// ///// //[HttpPut, Route("configTrialBasicInfo/ConfigTrialUrgentInfo")] //[UnitOfWork] //public async Task ConfigTrialUrgentInfo(InsTrialUrgentConfig opt) //{ // var fun = _trialConfigService.ConfigTrialUrgentInfo; // return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, fun); //} #endregion #region 受试者 /// /// 添加或更新受试者信息[New] /// /// /// //[TypeFilter(typeof(TrialResourceFilter))] [HttpPost, Route("Inspection/Subject/AddOrUpdateSubject")] [UnitOfWork] public async Task AddOrUpdateSubject(InsSubjectCommand opt) { opt.AuditInfo.SubjectCode = opt.OptCommand.Code; var fun = await _subjectService.AddOrUpdateSubject(opt.OptCommand); opt.AuditInfo.SubjectId = Guid.Parse(fun.Data); var statusdata = new { Status = "OnVisit", //OutEnrollmentTime = DateTime.Now.ToString("yyyy-MM-dd"), //VisitOverTime = DateTime.Now.ToString("yyyy-MM-dd"), Reason = string.Empty, }; return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun, statusdata); } /// /// 修改受试者状态 /// /// /// /// [HttpPut, Route("Inspection/Subject/UpdateSubjectStatus")] [UnitOfWork] public async Task UpdateSubjectStatus(InsUpdateSubjectStatus opt) { var fun = _subjectService.UpdateSubjectStatus; return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, fun); } /// /// 删除受试者 /// /// /// [HttpDelete, Route("Inspection/Subject/DeleteSubject")] [UnitOfWork] public async Task DeleteSubject(InsDeleteSubjectDto opt) { var fun = _subjectService.DeleteSubject; opt.AuditInfo.SubjectCode = opt.OptCommand.Code; var data = await _subjectService.DeleteSubject(opt.OptCommand.SubjectId); return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, fun, data); } #endregion } }