using System.Threading.Tasks; using AutoMapper; 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; using IRaCIS.Core.Application.Service.Inspection.DTO; using IRaCIS.Core.Application.Service.Inspection.Interface; using IRaCIS.Core.Application.Service.Reading.Dto; using IRaCIS.Core.Application.ViewModel; 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; namespace IRaCIS.Core.API.Controllers { [ApiController, ApiExplorerSettings(GroupName = "Reviewer")] [UnitOfWork] 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 IReadingImageTaskService _iReadingImageTaskService; private readonly IHttpContextAccessor _httpContext; private readonly ITrialConfigService _trialConfigService; private readonly INoneDicomStudyService _noneDicomStudyService; private readonly ISubjectService _subjectService; private readonly IReadingClinicalDataService _readingClinicalDataService; private readonly ISubjectVisitService _subjectVisitService; private readonly IQCOperationService _qCOperationService; private readonly IClinicalDataService _clinicalDataService; private readonly IVisitPlanService _visitPlanService; private readonly IInspectionService _inspectionService; private readonly IReadingMedicalReviewService _readingMedicalReviewService; private readonly IReadingMedicineQuestionService _readingMedicineQuestionService; 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, IReadingImageTaskService _iReadingImageTaskService, IHttpContextAccessor httpContext, IInspectionService sinspectionService, IReadingMedicalReviewService readingMedicalReviewService, IReadingMedicineQuestionService readingMedicineQuestionService, ITrialConfigService _trialConfigService, INoneDicomStudyService noneDicomStudyService, ISubjectService _subjectService, IReadingClinicalDataService _readingClinicalDataService, ISubjectVisitService subjectVisitService, IQCOperationService qCOperationService, IClinicalDataService clinicalDataService, IVisitPlanService visitPlanService ) { this._repository = repository; this._mapper = mapper; this._userInfo = userInfo; this._inspectionService = sinspectionService; this._readingMedicalReviewService = readingMedicalReviewService; this._readingMedicineQuestionService = readingMedicineQuestionService; this._trialDocumentService = trialDocumentService; this._qCListService = _qCListService; this._iReadingImageTaskService = _iReadingImageTaskService; this._httpContext = httpContext; this._trialConfigService = _trialConfigService; this._noneDicomStudyService = noneDicomStudyService; this._subjectService = _subjectService; this._readingClinicalDataService = _readingClinicalDataService; this._subjectVisitService = subjectVisitService; this._qCOperationService = qCOperationService; this._clinicalDataService = clinicalDataService; this._visitPlanService = visitPlanService; this._dataInspectionRepository = dataInspectionRepository; } #region 获取稽查数据 /// /// 获取稽查数据 /// /// [HttpPost, Route("Inspection/GetInspectionList")] public async Task> GetInspectionList(GetDataInspectionDto dto) { return await _inspectionService.GetInspectionList(dto); } #endregion /// /// 提交肿瘤学阅片任务 /// /// /// [HttpPost, Route("Inspection/ReadingImageTask/SubmitOncologyReadingInfo")] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] [UnitOfWork] public async Task SetOncologyReadingInfo(DataInspectionDto opt) { var singid = await _inspectionService.RecordSing(opt.SignInfo); var result = await _iReadingImageTaskService.SubmitOncologyReadingInfo(opt.Data); await _inspectionService.CompletedSign(singid, result); return result; } /// /// 提交Diocm阅片 /// /// /// [HttpPost, Route("Inspection/ReadingImageTask/SubmitDicomVisitTask")] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] [UnitOfWork] public async Task SubmitDicomVisitTask(DataInspectionDto opt) { var singid = await _inspectionService.RecordSing(opt.SignInfo); var result = await _iReadingImageTaskService.SubmitDicomVisitTask(opt.Data); await _inspectionService.CompletedSign(singid, result); return result; } /// /// 提交全局阅片任务 /// /// /// [HttpPost, Route("Inspection/ReadingImageTask/SubmitGlobalReadingInfo")] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] [UnitOfWork] public async Task SubmitGlobalReadingInfo(DataInspectionDto opt) { var singid = await _inspectionService.RecordSing(opt.SignInfo); var result = await _iReadingImageTaskService.SubmitGlobalReadingInfo(opt.Data); await _inspectionService.CompletedSign(singid, result); return result; } /// /// 项目阅片信息签名 /// /// /// [HttpPost, Route("Inspection/configTrialBasicInfo/TrialReadingInfoSign")] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] [UnitOfWork] public async Task TrialReadingInfoSign(DataInspectionDto opt) { var singid = await _inspectionService.RecordSing(opt.SignInfo); var result = await _trialConfigService.TrialReadingInfoSign(opt.Data); await _inspectionService.CompletedSign(singid, result); return result; } /// /// 医学审核完成 /// /// /// [HttpPost, Route("Inspection/ReadingMedicalReview/FinishMedicalReview")] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] [UnitOfWork] public async Task FinishMedicalReview(DataInspectionDto opt) { var singid = await _inspectionService.RecordSing(opt.SignInfo); var result = await _readingMedicalReviewService.FinishMedicalReview(opt.Data); await _inspectionService.CompletedSign(singid, result); return result; } /// /// 确认项目医学审核问题 /// /// /// [HttpPost, Route("Inspection/ReadingMedicineQuestion/ConfirmReadingMedicineQuestion")] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] [UnitOfWork] public async Task ConfirmReadingMedicineQuestion(DataInspectionDto opt) { var singid = await _inspectionService.RecordSing(opt.SignInfo); var result = await _readingMedicineQuestionService.ConfirmReadingMedicineQuestion(opt.Data); await _inspectionService.CompletedSign(singid, result); return result; } /// /// 提交阅片问题 /// /// /// [HttpPost, Route("Inspection/ReadingImageTask/SubmitVisitTaskQuestions")] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] [UnitOfWork] public async Task SubmitVisitTaskQuestions(DataInspectionDto opt) { var singid = await _inspectionService.RecordSing(opt.SignInfo); var result = await _iReadingImageTaskService.SubmitVisitTaskQuestions(opt.Data); await _inspectionService.CompletedSign(singid, result); return result; } /// /// 提交阅片裁判问题 /// /// /// [HttpPost, Route("Inspection/ReadingImageTask/SubmitJudgeVisitTaskResult")] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] [UnitOfWork] public async Task SubmitJudgeVisitTaskResult(DataInspectionDto opt) { var singid = await _inspectionService.RecordSing(opt.SignInfo); var result = await _iReadingImageTaskService.SubmitJudgeVisitTaskResult(opt.Data); await _inspectionService.CompletedSign(singid, result); return result; } /// /// 配置 基础逻辑信息并确认 /// /// /// [HttpPost, Route("Inspection/configTrialBasicInfo/ConfigTrialBasicInfoConfirm")] [UnitOfWork] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "BeforeOngoingCantOpt" })] public async Task ConfigTrialBasicInfoConfirm(DataInspectionDto opt) { opt.Data.IsTrialBasicLogicConfirmed = true; var singid= await _inspectionService.RecordSing(opt.SignInfo); var result = await _trialConfigService.ConfigTrialBasicInfo(opt.Data); await _inspectionService.CompletedSign(singid, result); return result; } /// /// 配置流程并确认 /// /// /// [HttpPost, Route("Inspection/configTrialBasicInfo/ConfigTrialProcessInfoConfirm")] [UnitOfWork] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "BeforeOngoingCantOpt" })] public async Task ConfigTrialProcessInfoConfirm(DataInspectionDto opt) { opt.Data.IsTrialProcessConfirmed = true; var singid = await _inspectionService.RecordSing(opt.SignInfo); var result = await _trialConfigService.ConfigTrialProcessInfo(opt.Data); await _inspectionService.CompletedSign(singid, result); return result; } /// /// 配置加急信息并确认 /// /// /// [HttpPost, Route("Inspection/configTrialBasicInfo/ConfigTrialUrgentInfoConfirm")] [UnitOfWork] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "BeforeOngoingCantOpt" })] public async Task ConfigTrialUrgentInfoConfirm(DataInspectionDto opt) { opt.Data.IsTrialUrgentConfirmed = true; var singid = await _inspectionService.RecordSing(opt.SignInfo); var result= await _trialConfigService.ConfigTrialUrgentInfo(opt.Data); await _inspectionService.CompletedSign(singid, result); return result; } /// /// 签名确认 /// /// [HttpPost, Route("Inspection/configTrialBasicInfo/TrialConfigSignatureConfirm")] [UnitOfWork] [TypeFilter(typeof(TrialResourceFilter),Arguments = new object[] { "AfterStopCannNotOpt" })] public async Task TrialConfigSignatureConfirm(DataInspectionDto opt) { var singid = await _inspectionService.RecordSing(opt.SignInfo); var result = await _trialConfigService.TrialConfigSignatureConfirm(opt.Data); await _inspectionService.CompletedSign(singid, result); return result; } /// /// IC RequestToQC 批量提交 /// /// /// [HttpPost, Route("Inspection/QCOperation/CRCRequestToQC")] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] [UnitOfWork] public async Task CRCRequestToQC(DataInspectionDto opt) { var singid = await _inspectionService.RecordSing(opt.SignInfo); var result = await _qCOperationService.CRCRequestToQC(opt.Data); await _inspectionService.CompletedSign(singid, result); return result; } /// /// 设置QC 通过或者不通过 7:QC failed 8:QC passed /// [HttpPost, Route("Inspection/QCOperation/QCPassedOrFailed")] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] [UnitOfWork] public async Task QCPassedOrFailed(DataInspectionDto opt) { var singid = await _inspectionService.RecordSing(opt.SignInfo); var result= await _qCOperationService.QCPassedOrFailed(opt.Data.trialId, opt.Data.subjectVisitId, opt.Data.auditState); await _inspectionService.CompletedSign(singid, result); return result; } /// /// 一致性核查 回退 对话记录不清除 只允许PM回退 /// [HttpPost, Route("Inspection/QCOperation/CheckBack")] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] [UnitOfWork] public async Task CheckBack(DataInspectionDto opt) { var singid = await _inspectionService.RecordSing(opt.SignInfo); var result = await _qCOperationService.CheckBack(opt.Data.Id); await _inspectionService.CompletedSign(singid, result); return result; } /// /// 影像阅片临床数据签名 /// /// /// [HttpPost, Route("Inspection/ReadClinicalData/ReadClinicalDataSign")] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] [UnitOfWork] public async Task ReadClinicalDataSign(DataInspectionDto opt) { var singid = await _inspectionService.RecordSing(opt.SignInfo); var result = await _readingClinicalDataService.ReadClinicalDataSign(opt.Data); await _inspectionService.CompletedSign(singid, result); return result; } /// /// IC 设置已经重传完成 /// [HttpPost, Route("Inspection/QCOperation/SetReuploadFinished")] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] [UnitOfWork] public async Task SetReuploadFinished(DataInspectionDto opt) { var singid = await _inspectionService.RecordSing(opt.SignInfo); var result = await _qCOperationService.SetReuploadFinished(opt.Data); await _inspectionService.CompletedSign(singid, result); return result; } /// /// 更新项目状态 /// /// /// [HttpPost, Route("Inspection/TrialConfig/updateTrialState")] //[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "BeforeOngoingCantOpt" })] [UnitOfWork] public async Task UpdateTrialState(DataInspectionDto opt) { var singid = await _inspectionService.RecordSing(opt.SignInfo); var result = await _trialConfigService.UpdateTrialState(opt.Data.trialId, opt.Data.trialStatusStr, opt.Data.reason); await _inspectionService.CompletedSign(singid, result); return result; } /// /// 用户 签名某个文档 /// /// [HttpPost, Route("Inspection/TrialDocument/userConfirm")] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "BeforeOngoingCantOpt", "SignSystemDocNoTrialId", "AfterStopCannNotOpt" })] [UnitOfWork] public async Task UserConfirm(DataInspectionDto opt) { var singid = await _inspectionService.RecordSing(opt.SignInfo); opt.Data.SignText = opt.SignInfo.SignText; var result = await _trialDocumentService.UserConfirm(opt.Data); await _inspectionService.CompletedSign(singid, result); return result; } /// /// 重阅同意 /// /// [HttpPost, Route("Inspection/VisitTask/ConfirmReReading")] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] [UnitOfWork] public async Task ConfirmReReading(DataInspectionDto opt , [FromServices] IVisitTaskHelpeService _visitTaskCommonService,[FromServices] IVisitTaskService _visitTaskService) { var singId = await _inspectionService.RecordSing(opt.SignInfo); var result = await _visitTaskService.ConfirmReReading(opt.Data, _visitTaskCommonService); await _inspectionService.CompletedSign(singId, result); return result; } } }