using IRaCIS.Application.Interfaces; using IRaCIS.Core.Application.BusinessFilter; using IRaCIS.Core.Application.Contracts; using IRaCIS.Core.Application.Filter; using IRaCIS.Core.Application.Image.QA; 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.Service.Reading.Interface; using IRaCIS.Core.Application.ViewModel; using IRaCIS.Core.Infra.EFCore; using IRaCIS.Core.Infrastructure.Extention; using Microsoft.AspNetCore.Mvc; using System.Threading.Tasks; namespace IRaCIS.Core.API.Controllers { [ApiController, ApiExplorerSettings(GroupName = "Reviewer")] [UnitOfWork] public class InspectionController( ITrialDocumentService _trialDocumentService, IReadingImageTaskService _iReadingImageTaskService, ITrialConfigService _trialConfigService, IClinicalAnswerService _clinicalAnswerService, IReadingClinicalDataService _readingClinicalDataService, IQCOperationService _qCOperationService, IInspectionService _inspectionService, IReadingMedicalReviewService _readingMedicalReviewService, IReadingMedicineQuestionService _readingMedicineQuestionService ) : ControllerBase { #region 获取稽查数据 /// /// 获取稽查数据 /// /// [HttpPost, Route("Inspection/GetInspectionList")] public async Task> GetInspectionList(GetDataInspectionDto dto) { return await _inspectionService.GetInspectionList(dto); } #endregion /// /// 提交肿瘤学阅片任务 /// /// /// [HttpPost, Route("Inspection/ReadingImageTask/SubmitOncologyReadingInfo")] [TrialGlobalLimit( "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")] [TrialGlobalLimit( "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")] [TrialGlobalLimit( "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")] [TrialGlobalLimit( "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")] [TrialGlobalLimit( "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")] [TrialGlobalLimit( "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")] [TrialGlobalLimit( "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; } /// /// CRC签名临床数据 /// /// /// [HttpPost, Route("Inspection/ClinicalAnswer/CRCSignClinicalData")] [TrialGlobalLimit( "AfterStopCannNotOpt" )] [UnitOfWork] public async Task CRCSignClinicalData(DataInspectionDto opt) { var singid = await _inspectionService.RecordSing(opt.SignInfo); var result = await _clinicalAnswerService.CRCSignClinicalData(opt.Data); await _inspectionService.CompletedSign(singid, result); return result; } /// /// CRC确认临床数据 /// /// /// [HttpPost, Route("Inspection/ClinicalAnswer/CRCConfirmClinical")] [TrialGlobalLimit( "AfterStopCannNotOpt" )] [UnitOfWork] public async Task CRCConfirmClinical(DataInspectionDto opt) { var singid = await _inspectionService.RecordSing(opt.SignInfo); var result = await _clinicalAnswerService.CRCConfirmClinical(opt.Data); await _inspectionService.CompletedSign(singid, result); return result; } /// /// CRC撤销临床数据 /// /// /// [HttpPost, Route("Inspection/ClinicalAnswer/CRCCancelConfirmClinical")] [TrialGlobalLimit( "AfterStopCannNotOpt" )] [UnitOfWork] public async Task CRCCancelConfirmClinical(DataInspectionDto opt) { var singid = await _inspectionService.RecordSing(opt.SignInfo); var result = await _clinicalAnswerService.CRCCancelConfirmClinical(opt.Data); await _inspectionService.CompletedSign(singid, result); return result; } /// /// PM确认临床数据 /// /// /// [HttpPost, Route("Inspection/ClinicalAnswer/PMConfirmClinical")] [TrialGlobalLimit( "AfterStopCannNotOpt" )] [UnitOfWork] public async Task PMConfirmClinical(DataInspectionDto opt) { var singid = await _inspectionService.RecordSing(opt.SignInfo); var result = await _clinicalAnswerService.PMConfirmClinical(opt.Data); await _inspectionService.CompletedSign(singid, result); return result; } /// /// PM签名一致性分析临床数据 /// /// /// [HttpPost, Route("Inspection/ReadingClinicalData/SignConsistencyAnalysisReadingClinicalData")] [TrialGlobalLimit( "AfterStopCannNotOpt" )] [UnitOfWork] public async Task SignConsistencyAnalysisReadingClinicalData(DataInspectionDto opt) { var singid = await _inspectionService.RecordSing(opt.SignInfo); var result = await _readingClinicalDataService.SignConsistencyAnalysisReadingClinicalData(opt.Data); await _inspectionService.CompletedSign(singid, result); return result; } /// /// 提交结构化录入并签名 /// /// /// [HttpPost, Route("Inspection/ClinicalAnswer/SubmitClinicalFormAndSign")] [TrialGlobalLimit( "AfterStopCannNotOpt" )] [UnitOfWork] public async Task SubmitClinicalFormAndSign(DataInspectionDto opt) { var singid = await _inspectionService.RecordSing(opt.SignInfo); var result = await _clinicalAnswerService.SubmitClinicalForm(opt.Data); await _inspectionService.CompletedSign(singid, result); return result; } /// /// 提交阅片裁判问题 /// /// /// [HttpPost, Route("Inspection/ReadingImageTask/SubmitJudgeVisitTaskResult")] [TrialGlobalLimit( "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] [TrialGlobalLimit( "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] //[TrialGlobalLimit( "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] [TrialGlobalLimit( "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/ConfigTrialPACSInfoConfirm")] [UnitOfWork] [TrialGlobalLimit( "BeforeOngoingCantOpt" )] public async Task ConfigTrialPACSInfoConfirm(DataInspectionDto opt) { opt.Data.IsTrialPACSConfirmed = true; var singid = await _inspectionService.RecordSing(opt.SignInfo); var result = await _trialConfigService.ConfigTrialPACSInfo(opt.Data); await _inspectionService.CompletedSign(singid, result); return result; } /// /// 签名确认 /// /// [HttpPost, Route("Inspection/configTrialBasicInfo/TrialConfigSignatureConfirm")] [UnitOfWork] [TrialGlobalLimit( "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; } /// /// 重置并同步项目阅片标准 /// /// [HttpPost, Route("Inspection/ReadingCriterion/ResetAndAsyncCriterion")] [UnitOfWork] [TrialGlobalLimit( "AfterStopCannNotOpt" )] public async Task ResetAndAsyncCriterion(DataInspectionDto opt) { var singid = await _inspectionService.RecordSing(opt.SignInfo); var result = await _trialConfigService.ResetAndAsyncCriterion(opt.Data); await _inspectionService.CompletedSign(singid, result); return result; } /// /// CRC RequestToQC 批量提交 /// /// /// [HttpPost, Route("Inspection/QCOperation/CRCRequestToQC")] [TrialGlobalLimit( "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")] [TrialGlobalLimit( "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")] [TrialGlobalLimit( "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")] [TrialGlobalLimit( "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; } /// /// CRC 设置已经重传完成 /// [HttpPost, Route("Inspection/QCOperation/SetReuploadFinished")] [TrialGlobalLimit( "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")] [TrialGlobalLimit( "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")] [TrialGlobalLimit( "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")] [TrialGlobalLimit( "AfterStopCannNotOpt" )] [UnitOfWork] public async Task ConfirmReReading(DataInspectionDto opt, [FromServices] IVisitTaskService _visitTaskService) { var singId = await _inspectionService.RecordSing(opt.SignInfo); var result = await _visitTaskService.ConfirmReReading(opt.Data); await _inspectionService.CompletedSign(singId, result); return result; } } }