From 525a03533b85291a33959259a9be205e83886820 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Mon, 9 May 2022 17:36:30 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AD=BE=E5=90=8D=E6=8E=A5=E5=8F=A3=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/FinancialChangeController.cs | 8 +- .../Controllers/InspectionController.cs | 947 +++--------------- .../Service/Inspection/DTO/InspectionModel.cs | 36 +- .../Service/Inspection/InspectionService.cs | 13 +- .../Interface/IInspectionService.cs | 1 + .../QC/Interface/IQCOperationService.cs | 1 + 6 files changed, 174 insertions(+), 832 deletions(-) diff --git a/IRaCIS.Core.API/Controllers/FinancialChangeController.cs b/IRaCIS.Core.API/Controllers/FinancialChangeController.cs index ae764626..ef69a073 100644 --- a/IRaCIS.Core.API/Controllers/FinancialChangeController.cs +++ b/IRaCIS.Core.API/Controllers/FinancialChangeController.cs @@ -43,11 +43,9 @@ namespace IRaCIS.Core.API.Controllers.Special public async Task AddOrUpdateTrialInspection(DataInspectionDto opt) { - var fun =await AddOrUpdateTrial(opt.OptCommand); - opt.AuditInfo.TrialId = fun.Data.Id; - opt.AuditInfo.TrialName = fun.Data.ExperimentName; - opt.AuditInfo.ResearchProgramNo = fun.Data.ResearchProgramNo; - return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo,null, fun); + var fun =await AddOrUpdateTrial(opt.Data); + + return fun; } diff --git a/IRaCIS.Core.API/Controllers/InspectionController.cs b/IRaCIS.Core.API/Controllers/InspectionController.cs index 073fc6b0..5efcf743 100644 --- a/IRaCIS.Core.API/Controllers/InspectionController.cs +++ b/IRaCIS.Core.API/Controllers/InspectionController.cs @@ -82,64 +82,7 @@ namespace IRaCIS.Core.API.Controllers } - //[HttpPost, Route("Inspection/Test")] - //public async Task Test(string Table, string ForeignKeyValue, string ForeignKeyText, string value) - //{ - // string a= await _dataInspectionRepository.GetDictionaryValue(Table, ForeignKeyValue, ForeignKeyText, value); - //} - #region 文件管理 - - /// - /// 废除项目 - /// - /// - /// - [HttpPost, Route("Inspection/TrialConfig/AbandonTrial")] - [UnitOfWork] - public async Task AbandonTrial(DataInspectionDto opt) - { - var fun = await _trialConfigService.AbandonTrial(opt.OptCommand.trialId, opt.OptCommand.isAbandon); - return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun); - } - - /// - /// 修改项目状态项目 - /// - /// - /// - [HttpPost, Route("Inspection/TrialConfig/UpdateTrialState")] - [UnitOfWork] - public async Task UpdateTrialState(DataInspectionDto opt) - { - var fun = await _trialConfigService.UpdateTrialState(opt.OptCommand.trialId, opt.OptCommand.trialStatusStr, opt.OptCommand.reason); - opt.AuditInfo.Reason = opt.OptCommand.reason; - return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun); - } - - - /// - /// - /// - /// 参数 - /// - [HttpPost, Route("Inspection/trialDocument/AddOrUpdateTrialDocument")] - [UnitOfWork] - public async Task AddOrUpdateTrialDocument(DataInspectionDto opt) - { - var fun = _trialDocumentService.AddOrUpdateTrialDocument; - return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, fun); - } - - - [HttpPost, Route("Inspection/trialDocument/UserAbandonDoc")] - [UnitOfWork] - public async Task UserAbandonDoc(DataInspectionDto opt) - { - var fun = _trialDocumentService.UserAbandonDoc; - return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, fun); - } - #endregion #region 获取稽查数据 /// @@ -154,319 +97,135 @@ namespace IRaCIS.Core.API.Controllers #endregion - #region 影像质疑 + /// - /// 手动领取 或者取消 QC任务 + /// 配置 基础逻辑信息 /// /// - /// - [HttpPost, Route("Inspection/QCOperation/ObtainOrCancelQCTask")] + /// + [HttpPost, Route("Inspection/configTrialBasicInfo/configTrialBasicInfo")] [UnitOfWork] - public async Task ObtainOrCancelQCTask(DataInspectionDto opt) + public async Task ConfigTrialBasicInfo(DataInspectionDto opt) { - var fun = await _qCOperationService.ObtainOrCancelQCTask(opt.OptCommand.trialId, opt.OptCommand.subjectVisitId, opt.OptCommand.obtaionOrCancel); - if (!fun.IsSuccess) + await _inspectionService.RecordSing(opt.SignCodeId); + return await _trialConfigService.ConfigTrialBasicInfo(opt.Data); + } + + /// + /// 配置 基础逻辑信息并确认 + /// + /// + /// + [HttpPost, Route("Inspection/configTrialBasicInfo/ConfigTrialBasicInfoConfirm")] + [UnitOfWork] + public async Task ConfigTrialBasicInfoConfirm(DataInspectionDto opt) + { + + await _inspectionService.RecordSing(opt.SignCodeId); + var data = await _trialConfigService.ConfigTrialBasicInfo(opt.Data); + if (!data.IsSuccess) { - return ResponseOutput.NotOk(fun.ErrorMessage); + return ResponseOutput.NotOk(data.ErrorMessage); } - return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun); - } - /// - /// 添加或者更新 QC核对问题列表 - /// - /// - /// - [HttpPost, Route("Inspection/QCOperation/AddOrUpdateQCQuestionAnswerList")] - [UnitOfWork] - public async Task AddOrUpdateQCQuestionAnswerList(DataInspectionDto opt) - - { - var fun = await _qCOperationService.AddOrUpdateQCQuestionAnswerList(opt.OptCommand.qcQuestionAnswerCommands, opt.OptCommand.trialId, opt.OptCommand.subjectVisitId, opt.OptCommand.trialQCProcess, opt.OptCommand.currentQCType); - if (!fun.IsSuccess) + return await _trialConfigService.TrialConfigSignatureConfirm(new SignConfirmDTO() { - return ResponseOutput.NotOk(fun.ErrorMessage); - } - return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun); + TrialId = opt.Data.TrialId, + SignCode = opt.Data.SignCode + }); } - /// - /// 添加和更新质疑 + /// 签名确认 /// - [HttpPost, Route("Inspection/QCOperation/AddOrUpdateQCChallenge")] + /// + [HttpPost, Route("Inspection/configTrialBasicInfo/TrialConfigSignatureConfirm")] [UnitOfWork] - public async Task AddOrUpdateQCChallenge(DataInspectionDto opt) + public async Task TrialConfigSignatureConfirm(DataInspectionDto opt) { - var fun = await _qCOperationService.AddOrUpdateQCChallenge(opt.OptCommand.qaQuestionCommand, opt.OptCommand.trialId, opt.OptCommand.trialQCProcess, opt.OptCommand.currentQCType); - //opt.AuditInfo.GeneralId = fun.Id; - //Dictionary keyValuePairs = new Dictionary(); - //keyValuePairs.Add("ChallengeCode", "Q" + fun.ChallengeCode.ToString("D5")); - //opt.AuditInfo.JsonDetail = _inspectionService.AddJsonItem(opt.AuditInfo.JsonDetail, keyValuePairs); - return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, ResponseOutput.Ok()); + await _inspectionService.RecordSing(opt.SignCodeId); + return await _trialConfigService.TrialConfigSignatureConfirm(opt.Data); } /// - /// 回复质疑 + /// 配置流程 /// - [HttpPost, Route("Inspection/QCOperation/AddQCChallengeReply")] + /// + /// + [HttpPost, Route("Inspection/configTrialBasicInfo/configTrialProcessInfo")] [UnitOfWork] - public async Task AddQCChallengeReply(DataInspectionDto opt) + public async Task ConfigTrialProcessInfo(DataInspectionDto opt) { - var fun = _qCOperationService.AddQCChallengeReply; - opt.AuditInfo.GeneralId = opt.OptCommand.QCChallengeId; - return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, fun); + + await _inspectionService.RecordSing(opt.SignCodeId); + return await _trialConfigService.ConfigTrialProcessInfo(opt.Data); } - /// - /// 关闭质疑 - /// - [HttpPost, Route("Inspection/QCOperation/CloseQCChallenge")] - [UnitOfWork] - public async Task CloseQCChallenge(DataInspectionDto opt) - { - var fun = await _qCOperationService.CloseQCChallenge(opt.OptCommand.qcChallengeId, opt.OptCommand.subjectVisitId, opt.OptCommand.closeEnum, opt.OptCommand.closeReason); - opt.AuditInfo.GeneralId = opt.OptCommand.qcChallengeId; - if (!fun.IsSuccess) + /// + /// 配置流程并确认 + /// + /// + /// + [HttpPost, Route("Inspection/configTrialBasicInfo/ConfigTrialProcessInfoConfirm")] + [UnitOfWork] + public async Task ConfigTrialProcessInfoConfirm(DataInspectionDto opt) + { + await _inspectionService.RecordSing(opt.SignCodeId); + var data = await _trialConfigService.ConfigTrialProcessInfo(opt.Data); + if (!data.IsSuccess) { - return ResponseOutput.NotOk(fun.ErrorMessage); + return ResponseOutput.NotOk(data.ErrorMessage); } - return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun); - } - - - - /// - /// 删除QC质疑记录 - /// - /// - /// - [HttpPost, Route("Inspection/QCOperation/DeleteQCChallenge")] - [UnitOfWork] - public async Task DeleteQCChallenge(DataInspectionDto opt) - { - var fun = _qCOperationService.DeleteQCChallenge; - opt.AuditInfo.GeneralId = opt.OptCommand.Id; - return await _inspectionService.Enforcement(opt.OptCommand.Id, opt.AuditInfo, opt.SignInfo, fun); - } - - - - /// - /// 一致性核查 质疑的添加/回复 - /// - [HttpPost, Route("Inspection/QCOperation/AddCheckChallengeReply")] - [UnitOfWork] - public async Task AddCheckChallengeReply(DataInspectionDto opt) - - { - var fun = _qCOperationService.AddCheckChallengeReply; - - return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, fun); - } - - - /// - /// 删除QC质疑记录 - /// - /// - /// - [HttpPost, Route("Inspection/QCOperation/CloseCheckChallenge")] - [UnitOfWork] - public async Task CloseCheckChallenge(DataInspectionDto opt) - { - var fun = _qCOperationService.CloseCheckChallenge; - opt.AuditInfo.Reason = opt.OptCommand.CloseCheckChallenge; - return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, fun); - } - - /// - /// 手动设置一致性核查通过 - /// - [HttpPost, Route("Inspection/QCOperation/SetCheckPass")] - [UnitOfWork] - public async Task SetCheckPass(DataInspectionDto opt) - { - var fun = _qCOperationService.SetCheckPass; - return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, fun); - } - - /// - /// CRC 请求回退 - /// - [HttpPost, Route("Inspection/QCOperation/CRCRequstCheckBack")] - [UnitOfWork] - public async Task CRCRequstCheckBack(DataInspectionDto opt) - { - var fun = _qCOperationService.CRCRequstCheckBack; - return await _inspectionService.Enforcement(opt.OptCommand.Id, opt.AuditInfo, opt.SignInfo, fun); - } - - - /// - /// 一致性核查 回退 对话记录不清除 只允许PM回退 - /// - [HttpPost, Route("Inspection/QCOperation/CheckBack")] - [UnitOfWork] - public async Task CheckBack(DataInspectionDto opt) - { - var fun = _qCOperationService.CheckBack; - return await _inspectionService.Enforcement(opt.OptCommand.Id, opt.AuditInfo, opt.SignInfo, fun); - } - - - ///// - ///// QC修改检查部位和 拍片类型 - ///// - //[HttpPost, Route("Inspection/QCOperation/UpdateModality")] - //[UnitOfWork] - //public async Task UpdateModality(DataInspectionDto opt) - //{ - // var fun = await _qCOperationService.UpdateModality(opt.OptCommand.id, (Guid)opt.AuditInfo.SubjectVisitId, opt.OptCommand.type, opt.OptCommand.modality, opt.OptCommand.bodyPart); - // return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun); - //} - - /// - /// 1、设置为不读片,2 设置为读片(取消 先前设置为不读片) 4 设置为删除(数据库记录软删除) 5 恢复为未删除 - /// - [HttpPost, Route("Inspection/QCOperation/SetSeriesState")] - [UnitOfWork] - public async Task SetSeriesState(DataInspectionDto opt) - { - var fun = await _qCOperationService.SetSeriesState(opt.OptCommand.subjectVisitId, opt.OptCommand.studyId, opt.OptCommand.seriesId, opt.OptCommand.state); - return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun); - } - - /// - /// 设置QC 通过或者不通过 7:QC failed 8:QC passed - /// - [HttpPost, Route("Inspection/QCOperation/QCPassedOrFailed")] - [UnitOfWork] - public async Task QCPassedOrFailed(DataInspectionDto opt) - { - var fun = await _qCOperationService.QCPassedOrFailed(opt.OptCommand.trialId, opt.OptCommand.subjectVisitId, opt.OptCommand.auditState); - return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun); - } - - - /// - /// 设置、取消 访视紧急 - /// - [HttpPost, Route("Inspection/QCOperation/SetVisitUrgent")] - [UnitOfWork] - public async Task SetVisitUrgent(DataInspectionDto opt) - { - var fun = await _qCOperationService.SetVisitUrgent(opt.OptCommand.trialId, opt.OptCommand.subjectVisitId, opt.OptCommand.setOrCancel); - return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun); - } - - - /// - /// QA设置 需要重传 - /// - [HttpPost, Route("Inspection/QCOperation/SetNeedReupload")] - [UnitOfWork] - public async Task SetNeedReupload(DataInspectionDto opt) - { - var fun = await _qCOperationService.SetNeedReupload(opt.OptCommand.trialId, opt.OptCommand.qcChallengeId); - return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun); - } - - - /// - /// CRC 设置已经重传完成 - /// - [HttpPost, Route("Inspection/QCOperation/SetReuploadFinished")] - [UnitOfWork] - public async Task SetReuploadFinished(DataInspectionDto opt) - { - var fun = _qCOperationService.SetReuploadFinished; - return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, fun); - } - - /// - /// CRCRequestReUpload - /// - /// - /// - [HttpPost, Route("Inspection/QCOperation/CRCRequestReUpload")] - [UnitOfWork] - public async Task CRCRequestReUpload(DataInspectionDto opt) - { - var fun = _qCOperationService.CRCRequestReUpload; - return await _inspectionService.Enforcement(opt.OptCommand.Id, opt.AuditInfo, opt.SignInfo, fun); - } - - /// - /// 影像转发 - /// - /// - /// - [HttpPost, Route("Inspection/QCOperation/ForwardSVDicomImage")] - [UnitOfWork] - public async Task ForwardSVDicomImage(DataInspectionDto opt) - { - var fun = _qCOperationService.ForwardSVDicomImage; - opt.AuditInfo.NeedSava = false; - return await _inspectionService.Enforcement(opt.OptCommand.subjectVisitIdList, opt.AuditInfo, opt.SignInfo, fun); - } - - /// - /// 一致性核查 excel上传 支持三种格式 - /// - /// - /// - /// - [HttpPost, Route("Inspection/QCOperation/UploadVisitCheckExcel")] - [UnitOfWork] - public async Task UploadVisitCheckExcel(IFormFile file, [FromForm] UploadVisitCheckExcelDto opt) - { - - - var fun = await _qCOperationService.UploadVisitCheckExcel(file, opt.trialId); - return fun; - //var data = JsonConvert.DeserializeObject(opt.AuditInfo); - //return await _inspectionService.Enforcement(opt.trialId, data, null, null, fun); - } - - #endregion - #region 影像上传 - - - /// - /// 疾病进展确认评估 - /// - /// - /// - [HttpPost, Route("Inspection/QCOperation/UpdateSubjectAndSVInfo")] - [UnitOfWork] - public async Task UpdateSubjectAndSVInfo(DataInspectionDto opt) - { - var fun = _qCOperationService.UpdateSubjectAndSVInfo; - return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, fun); - } - - - /// - /// 删除影像 - /// - /// - /// - [HttpPost, Route("Inspection/QCOperation/deleteStudyList")] - [UnitOfWork] - public async Task deleteStudyList(DataInspectionDto opt) - { - var fun = await _qCOperationService.DeleteStudyList(opt.OptCommand.ids, opt.OptCommand.subjectVisitId, opt.OptCommand.trialId); - if (!fun.IsSuccess) + return await _trialConfigService.TrialConfigSignatureConfirm(new SignConfirmDTO() { - return ResponseOutput.NotOk(fun.ErrorMessage); + TrialId = opt.Data.TrialId, + SignCode = opt.Data.SignCode + }); + + } + + + /// + /// 配置加急信息 + /// + /// + /// + [HttpPost, Route("Inspection/configTrialBasicInfo/ConfigTrialUrgentInfo")] + [UnitOfWork] + public async Task ConfigTrialUrgentInfo(DataInspectionDto opt) + { + + await _inspectionService.RecordSing(opt.SignCodeId); + return await _trialConfigService.ConfigTrialUrgentInfo(opt.Data); + } + + + /// + /// 配置加急信息并确认 + /// + /// + /// + [HttpPost, Route("Inspection/configTrialBasicInfo/ConfigTrialUrgentInfoConfirm")] + [UnitOfWork] + public async Task ConfigTrialUrgentInfoConfirm(DataInspectionDto opt) + { + + await _inspectionService.RecordSing(opt.SignCodeId); + + var data = await _trialConfigService.ConfigTrialUrgentInfo(opt.Data); + if (!data.IsSuccess) + { + return ResponseOutput.NotOk(data.ErrorMessage); } - opt.AuditInfo.NeedSava = false; - return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun); + return await _trialConfigService.TrialConfigSignatureConfirm(new SignConfirmDTO() + { + TrialId = opt.Data.TrialId, + SignCode = opt.Data.SignCode + }); } @@ -479,486 +238,66 @@ namespace IRaCIS.Core.API.Controllers [UnitOfWork] public async Task CRCRequestToQC(DataInspectionDto opt) { - var fun = _qCOperationService.CRCRequestToQC; - opt.AuditInfo.NeedSava = false; - return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, fun); + await _inspectionService.RecordSing(opt.SignCodeId); + return await _qCOperationService.CRCRequestToQC(opt.Data); } /// - /// 非DICOM影像新增编辑 + /// 设置QC 通过或者不通过 7:QC failed 8:QC passed + /// + [HttpPost, Route("Inspection/QCOperation/QCPassedOrFailed")] + [UnitOfWork] + public async Task QCPassedOrFailed(DataInspectionDto opt) + { + await _inspectionService.RecordSing(opt.SignCodeId); + return await _qCOperationService.QCPassedOrFailed(opt.Data.trialId, opt.Data.subjectVisitId, opt.Data.auditState); + } + + /// + /// 一致性核查 回退 对话记录不清除 只允许PM回退 + /// + [HttpPost, Route("Inspection/QCOperation/CheckBack")] + [UnitOfWork] + public async Task CheckBack(DataInspectionDto opt) + { + await _inspectionService.RecordSing(opt.SignCodeId); + return await _qCOperationService.CheckBack(opt.Data.Id); + } + + + + /// + /// CRC 设置已经重传完成 + /// + [HttpPost, Route("Inspection/QCOperation/SetReuploadFinished")] + [UnitOfWork] + public async Task SetReuploadFinished(DataInspectionDto opt) + { + await _inspectionService.RecordSing(opt.SignCodeId); + return await _qCOperationService.SetReuploadFinished(opt.Data); + } + + /// + /// 更新项目状态 /// /// /// - [HttpPost, Route("Inspection/noneDicomStudy/AddOrUpdateNoneDicomStudy")] + [HttpPost, Route("Inspection/TrialConfig/updateTrialState")] [UnitOfWork] - public async Task AddOrUpdateNoneDicomStudy(DataInspectionDto opt) + public async Task UpdateTrialState(DataInspectionDto opt) { - var fun = await _noneDicomStudyService.AddOrUpdateNoneDicomStudy(opt.OptCommand); - if (!fun.IsSuccess) - { - return ResponseOutput.NotOk(fun.ErrorMessage); - } - if (opt.OptCommand.Id == null) - { - Dictionary keyValuePairs = new Dictionary(); - keyValuePairs.Add("CodeView", fun.Data.StudyCode); - opt.AuditInfo.JsonDetail = _inspectionService.AddJsonItem(opt.AuditInfo.JsonDetail, keyValuePairs); - } - - opt.AuditInfo.GeneralId = fun.Data.Id; - return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun); + await _inspectionService.RecordSing(opt.SignCodeId); + return await _trialConfigService.UpdateTrialState(opt.Data.trialId, opt.Data.trialStatusStr, opt.Data.reason); } + - /// - /// 删除非dicom - /// - /// - /// - [HttpPost, Route("Inspection/noneDicom/DeleteNoneDicomStudy")] - [UnitOfWork] - public async Task DeleteNoneDicomStudy(DataInspectionDto opt) - { - var fun = _noneDicomStudyService.DeleteNoneDicomStudy; - opt.AuditInfo.GeneralId = opt.OptCommand.Id; - return await _inspectionService.Enforcement(opt.OptCommand.Id, opt.AuditInfo, opt.SignInfo, fun); - } + - /// - /// 删除非dicom文件 - /// - /// - /// - [HttpPost, Route("Inspection/noneDicom/deleteNoneDicomStudyFile")] - [UnitOfWork] - public async Task deleteNoneDicomStudyFile(DataInspectionDto opt) - { - var fun = _noneDicomStudyService.DeleteNoneDicomStudyFile; - //opt.AuditInfo.GeneralId = opt.OptCommand.Id; - return await _inspectionService.Enforcement(opt.OptCommand.Id, opt.AuditInfo, opt.SignInfo, fun); - } - - #endregion - - #region 临床数据采集 ClinicalDataService - /// - /// 新增或修改既往放疗史 - /// - /// - /// - [HttpPost, Route("Inspection/clinicalData/AddOrUpdatePreviousHistory")] - [UnitOfWork] - public async Task AddOrUpdatePreviousHistory(DataInspectionDto opt) - { - var fun = await _clinicalDataService.AddOrUpdatePreviousHistory(opt.OptCommand); - opt.AuditInfo.GeneralId = fun.Data; - return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun); - } - - - /// - /// 删除既往放疗史 - /// - /// - /// - [HttpPost, Route("Inspection/clinicalData/DeletePreviousHistory")] - [UnitOfWork] - public async Task DeletePreviousHistory(DataInspectionDto opt) - { - var fun = _clinicalDataService.DeletePreviousHistory; - opt.AuditInfo.GeneralId = opt.OptCommand.Id; - return await _inspectionService.Enforcement(opt.OptCommand.Id, opt.AuditInfo, opt.SignInfo, fun); - } - - - - - /// - /// 新增或修改既往手术史 - /// - /// - /// - [HttpPost, Route("Inspection/clinicalData/AddOrUpdatePreviousSurgery")] - [UnitOfWork] - public async Task AddOrUpdatePreviousSurgery(DataInspectionDto opt) - { - var fun = await _clinicalDataService.AddOrUpdatePreviousSurgery(opt.OptCommand); - opt.AuditInfo.GeneralId = fun.Data; - return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun); - } - - - /// - /// 删除既往手术史 - /// - /// - /// - [HttpPost, Route("Inspection/clinicalData/DeletePreviousSurgery")] - [UnitOfWork] - public async Task DeletePreviousSurgery(DataInspectionDto opt) - { - var fun = _clinicalDataService.DeletePreviousSurgery; - opt.AuditInfo.GeneralId = opt.OptCommand.Id; - return await _inspectionService.Enforcement(opt.OptCommand.Id, opt.AuditInfo, opt.SignInfo, fun); - } - - - /// - /// 新增或修改既往其他治疗史 - /// - /// - /// - [HttpPost, Route("Inspection/clinicalData/AddOrUpdatePreviousOther")] - [UnitOfWork] - public async Task AddOrUpdatePreviousOther(DataInspectionDto opt) - { - var fun = await _clinicalDataService.AddOrUpdatePreviousOther(opt.OptCommand); - opt.AuditInfo.GeneralId = fun.Data; - return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun); - } - - - /// - /// 删除既往其他治疗史 - /// - /// - /// - [HttpPost, Route("Inspection/clinicalData/DeletePreviousOther")] - [UnitOfWork] - public async Task DeletePreviousOther(DataInspectionDto opt) - { - - var fun = _clinicalDataService.DeletePreviousOther; - opt.AuditInfo.GeneralId = opt.OptCommand.Id; - return await _inspectionService.Enforcement(opt.OptCommand.Id, opt.AuditInfo, opt.SignInfo, fun); - } - #endregion - #region 访视计划 - ///// - ///// 新增或添加访视计划 - ///// - ///// - ///// - //[HttpPost, Route("Inspection/VisitPlan/AddOrUpdateVisitStage")] - //[UnitOfWork] - //public async Task AddOrUpdateVisitStage(DataInspectionDto opt) - //{ - // var fun = await _visitPlanService.AddOrUpdateVisitStage(opt.OptCommand); - // if (!fun.IsSuccess) - // { - // return ResponseOutput.NotOk(fun.ErrorMessage); - // } - // opt.AuditInfo.VisitStageId = fun.Data.Id; - // opt.OptCommand.Id = fun.Data.Id; - // opt.AuditInfo.BlindName = fun.Data.BlindName; - // return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun); - //} - - - /// - /// 删除访视计划对象 - /// - /// - /// - [HttpPost, Route("Inspection/VisitPlan/DeleteVisitStage")] - [UnitOfWork] - public async Task DeleteVisitStage(DataInspectionDto opt) - { - var fun = _visitPlanService.DeleteVisitStage; - - return await _inspectionService.Enforcement(opt.OptCommand.Id, opt.AuditInfo, opt.SignInfo, fun); - } - - /// - /// 确认访视计划 - /// - /// - /// - [HttpPost, Route("Inspection/VisitPlan/ConfirmTrialVisitPlan")] - [UnitOfWork] - public async Task ConfirmTrialVisitPlan(DataInspectionDto opt) - { - var fun = _visitPlanService.ConfirmTrialVisitPlan; - opt.AuditInfo.NeedSava = false; - return await _inspectionService.Enforcement(opt.OptCommand.Id, opt.AuditInfo, opt.SignInfo, fun); - } - - /// - /// 下载访视计划 - /// - /// - /// - [HttpPost, Route("Inspection/VisitPlan/DownloadInflunceStudyList")] - [UnitOfWork] - public async Task DownloadInflunceStudyList(DataInspectionDto opt) - { - var fun = _visitPlanService.DownloadInflunceStudyList; - return await _inspectionService.Enforcement(opt.OptCommand.Id, opt.AuditInfo, opt.SignInfo, fun); - } - #endregion - #region 访视 - - [HttpPost, Route("Inspection/subjectVisit/addOrUpdateSV")] - [UnitOfWork] - public async Task AddOrUpdateSV(DataInspectionDto opt) - { - var fun = await _subjectVisitService.AddOrUpdateSV(opt.OptCommand); - if (!fun.IsSuccess) - { - return ResponseOutput.NotOk(fun.ErrorMessage); - } - opt.AuditInfo.SubjectVisitId = Guid.Parse(fun.Data); - opt.AuditInfo.SubjectVisitName = opt.OptCommand.VisitName; - return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun); - } - - - [HttpPost, Route("Inspection/subjectVisit/SetSubjectVisitUrgent")] - [UnitOfWork] - public async Task SetSubjectVisitUrgent(DataInspectionDto opt) - { - - var fun = await _subjectVisitService.SetSubjectVisitUrgent(opt.OptCommand.SubjectVisitId, opt.OptCommand.isUrgent); - if (!fun.IsSuccess) - { - return ResponseOutput.NotOk(fun.ErrorMessage); - } - return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun); - } - - - [HttpPost, Route("Inspection/subjectVisit/DeleteSV")] - [UnitOfWork] - public async Task DeleteSV(DataInspectionDto opt) - { - - var fun = await _subjectVisitService.DeleteSV(opt.OptCommand.SubjectVisitId); - if (!fun.IsSuccess) - { - return ResponseOutput.NotOk(fun.ErrorMessage); - } - return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun); - } - - [HttpPost, Route("Inspection/subjectVisit/SetSVExecuted")] - [UnitOfWork] - public async Task SetSVExecuted(DataInspectionDto opt) - { - - var fun = await _subjectVisitService.SetSVExecuted(opt.OptCommand.SubjectVisitId); - if (!fun.IsSuccess) - { - return ResponseOutput.NotOk(fun.ErrorMessage); - } - return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun); - } - - #endregion - #region 配置项目信息 - /// - /// 配置 基础逻辑信息 - /// - /// - /// - [HttpPost, Route("Inspection/configTrialBasicInfo/configTrialBasicInfo")] - [UnitOfWork] - public async Task ConfigTrialBasicInfo(DataInspectionDto opt) - { - var fun = _trialConfigService.ConfigTrialBasicInfo; - return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, fun); - } - - /// - /// 配置流程 - /// - /// - /// - [HttpPost, Route("Inspection/configTrialBasicInfo/configTrialProcessInfo")] - [UnitOfWork] - public async Task ConfigTrialProcessInfo(DataInspectionDto opt) - { - var fun = _trialConfigService.ConfigTrialProcessInfo; - return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, fun); - } - - /// - /// 配置加急信息 - /// - /// - /// - [HttpPost, Route("Inspection/configTrialBasicInfo/ConfigTrialUrgentInfo")] - [UnitOfWork] - public async Task ConfigTrialUrgentInfo(DataInspectionDto opt) - { - var fun = _trialConfigService.ConfigTrialUrgentInfo; - return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, fun); - } - - /// - /// 签名确认 - /// - /// - [HttpPost, Route("Inspection/configTrialBasicInfo/TrialConfigSignatureConfirm")] - [UnitOfWork] - public async Task TrialConfigSignatureConfirm(DataInspectionDto opt) - { - var fun = _trialConfigService.TrialConfigSignatureConfirm; - return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, fun); - } - - - /// - /// 配置 基础逻辑信息并确认 - /// - /// - /// - [HttpPost, Route("Inspection/configTrialBasicInfo/ConfigTrialBasicInfoConfirm")] - [UnitOfWork] - public async Task ConfigTrialBasicInfoConfirm(DataInspectionDto opt) - { - var data = await _trialConfigService.ConfigTrialBasicInfo(opt.OptCommand); - if (!data.IsSuccess) - { - return ResponseOutput.NotOk(data.ErrorMessage); - } - var fun = _trialConfigService.TrialConfigSignatureConfirm; - return await _inspectionService.Enforcement(new SignConfirmDTO() - { - TrialId = opt.OptCommand.TrialId, - SignCode = opt.OptCommand.SignCode - }, opt.AuditInfo, opt.SignInfo, fun); - - } - - /// - /// 配置流程并确认 - /// - /// - /// - [HttpPost, Route("Inspection/configTrialBasicInfo/ConfigTrialProcessInfoConfirm")] - [UnitOfWork] - public async Task ConfigTrialProcessInfoConfirm(DataInspectionDto opt) - { - var data = await _trialConfigService.ConfigTrialProcessInfo(opt.OptCommand); - if (!data.IsSuccess) - { - return ResponseOutput.NotOk(data.ErrorMessage); - } - var fun = _trialConfigService.TrialConfigSignatureConfirm; - return await _inspectionService.Enforcement(new SignConfirmDTO() - { - TrialId = opt.OptCommand.TrialId, - SignCode = opt.OptCommand.SignCode - }, opt.AuditInfo, opt.SignInfo, fun); - } - - /// - /// 配置加急信息并确认 - /// - /// - /// - [HttpPost, Route("Inspection/configTrialBasicInfo/ConfigTrialUrgentInfoConfirm")] - [UnitOfWork] - public async Task ConfigTrialUrgentInfoConfirm(DataInspectionDto opt) - { - var data = await _trialConfigService.ConfigTrialUrgentInfo(opt.OptCommand); - if (!data.IsSuccess) - { - return ResponseOutput.NotOk(data.ErrorMessage); - } - var fun = _trialConfigService.TrialConfigSignatureConfirm; - return await _inspectionService.Enforcement(new SignConfirmDTO() - { - TrialId = opt.OptCommand.TrialId, - SignCode = opt.OptCommand.SignCode - }, opt.AuditInfo, opt.SignInfo, fun); - } - - - ///// - ///// 保存并确认访视计划 - ///// - ///// - ///// - //[HttpPost, Route("Inspection/VisitPlan/SaveConfirmTrialVisitPlan")] - //[UnitOfWork] - //public async Task SaveConfirmTrialVisitPlan(DataInspectionDto opt) - //{ - // var update = await _visitPlanService.AddOrUpdateVisitStage(opt.OptCommand); - // if (!update.IsSuccess) - // { - // return ResponseOutput.NotOk(update.ErrorMessage); - // } - // var fun = _visitPlanService.ConfirmTrialVisitPlan; - // return await _inspectionService.Enforcement(opt.OptCommand.Id, 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); - } - - /// - /// 修改受试者状态 - /// - /// - /// - /// - [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 - - - - } +} diff --git a/IRaCIS.Core.Application/Service/Inspection/DTO/InspectionModel.cs b/IRaCIS.Core.Application/Service/Inspection/DTO/InspectionModel.cs index 9194ae81..fa47bf20 100644 --- a/IRaCIS.Core.Application/Service/Inspection/DTO/InspectionModel.cs +++ b/IRaCIS.Core.Application/Service/Inspection/DTO/InspectionModel.cs @@ -7,6 +7,7 @@ using Newtonsoft.Json; using Newtonsoft.Json.Converters; using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -192,6 +193,14 @@ namespace IRaCIS.Core.Application.Service.Inspection.DTO public bool setOrCancel { get; set; } } + + public class UpdateTrialStateDto + { + public Guid trialId {get; set; } + public string trialStatusStr { get; set; } + + public string? reason { get; set; } + } public class QCPassedOrFailedDto { public Guid trialId { get; set; } @@ -261,34 +270,17 @@ namespace IRaCIS.Core.Application.Service.Inspection.DTO /// 稽查泛型Dto /// /// 泛型 - public class DataInspectionDto : IInspectionDTO, ISignDTO + public class DataInspectionDto { - public T OptCommand { get; set; } + public T Data { get; set; } + [NotDefault] + public Guid SignCodeId { get; set; } - public DataInspectionAddDTO AuditInfo - { - get - { - if (auditInfo.JsonDetail.IsNullOrEmpty()) - { - auditInfo.JsonDetail = JsonConvert.SerializeObject(OptCommand); - } - - return auditInfo; - } - set - { - auditInfo = value; - } - } - - private DataInspectionAddDTO auditInfo=new DataInspectionAddDTO (); - - public SignDTO SignInfo { get; set; } = new SignDTO() { }; + } #region Qc diff --git a/IRaCIS.Core.Application/Service/Inspection/InspectionService.cs b/IRaCIS.Core.Application/Service/Inspection/InspectionService.cs index 2e748d34..09b2e6bf 100644 --- a/IRaCIS.Core.Application/Service/Inspection/InspectionService.cs +++ b/IRaCIS.Core.Application/Service/Inspection/InspectionService.cs @@ -170,7 +170,18 @@ namespace IRaCIS.Core.Application.Service.Inspection } //public async Task - + + + /// + /// 传入参数记录ID + /// + /// + /// + public async Task RecordSing(Guid SignId) + { + _userInfo.SignId = SignId; + await _repository.BatchUpdateAsync(t => t.Id == SignId, u => new TrialSign() { IsCompleted = true }); + } /// /// 通用逻辑封装 diff --git a/IRaCIS.Core.Application/Service/Inspection/Interface/IInspectionService.cs b/IRaCIS.Core.Application/Service/Inspection/Interface/IInspectionService.cs index 73e6d34c..4a085570 100644 --- a/IRaCIS.Core.Application/Service/Inspection/Interface/IInspectionService.cs +++ b/IRaCIS.Core.Application/Service/Inspection/Interface/IInspectionService.cs @@ -20,6 +20,7 @@ namespace IRaCIS.Core.Application.Service.Inspection.Interface Task AddSignRecordAsync(SignDTO signDTO); + Task RecordSing(Guid SignId); Task Enforcement(dynamic OptCommand, DataInspectionAddDTO AuditInfo, SignDTO SignInfo, dynamic fun, IResponseOutput? response = null); //Task SetEnum(DataInspectionAddDTO Data); diff --git a/IRaCIS.Core.Application/Service/QC/Interface/IQCOperationService.cs b/IRaCIS.Core.Application/Service/QC/Interface/IQCOperationService.cs index e60f6648..90a4625b 100644 --- a/IRaCIS.Core.Application/Service/QC/Interface/IQCOperationService.cs +++ b/IRaCIS.Core.Application/Service/QC/Interface/IQCOperationService.cs @@ -39,6 +39,7 @@ namespace IRaCIS.Core.Application.Image.QA Task UploadVisitCheckExcel(IFormFile file, Guid trialId); Task VerifyCanQCPassedOrFailed(Guid subjectVisitId); + Task ForwardSVDicomImage(Guid[] subjectVisitIdList); } } \ No newline at end of file