irc-netcore-api/IRaCIS.Core.API/Controllers/InspectionController.cs

967 lines
39 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using AutoMapper;
using Castle.Core.Internal;
using IRaCIS.Application.Contracts;
using IRaCIS.Application.Interfaces;
using IRaCIS.Core.Application.Contracts;
using IRaCIS.Core.Application.Contracts.DTO;
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;
using Newtonsoft.Json;
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 IHttpContextAccessor _httpContext;
private readonly ITrialConfigService _trialConfigService;
private readonly INoneDicomStudyService _noneDicomStudyService;
private readonly ISubjectService _subjectService;
private readonly ISubjectVisitService _subjectVisitService;
private readonly IQCOperationService _qCOperationService;
private readonly IClinicalDataService _clinicalDataService;
private readonly IVisitPlanService _visitPlanService;
private readonly IInspectionService _inspectionService;
private readonly IRepository<DataInspection> _dataInspectionRepository;
private delegate Task<IResponseOutput> executionFun(dynamic data);
public InspectionController(IRepository repository,
IRepository<DataInspection> _repositoryDataInspection,
IMapper mapper, IUserInfo userInfo,
ITrialDocumentService trialDocumentService,
IRepository<DataInspection> dataInspectionRepository,
IQCListService _qCListService,
IHttpContextAccessor httpContext,
IInspectionService sinspectionService,
ITrialConfigService _trialConfigService,
INoneDicomStudyService noneDicomStudyService,
ISubjectService _subjectService,
ISubjectVisitService subjectVisitService,
IQCOperationService qCOperationService,
IClinicalDataService clinicalDataService,
IVisitPlanService visitPlanService
)
{
this._repository = repository;
this._mapper = mapper;
this._userInfo = userInfo;
this._inspectionService = sinspectionService;
this._trialDocumentService = trialDocumentService;
this._qCListService = _qCListService;
this._httpContext = httpContext;
this._trialConfigService = _trialConfigService;
this._noneDicomStudyService = noneDicomStudyService;
this._subjectService = _subjectService;
this._subjectVisitService = subjectVisitService;
this._qCOperationService = qCOperationService;
this._clinicalDataService = clinicalDataService;
this._visitPlanService = visitPlanService;
this._dataInspectionRepository = dataInspectionRepository;
}
//[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 文件管理
/// <summary>
/// 废除项目
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/TrialConfig/AbandonTrial")]
[UnitOfWork]
public async Task<IResponseOutput> AbandonTrial(DataInspectionDto<AbandonTrial> opt)
{
var fun = await _trialConfigService.AbandonTrial(opt.OptCommand.trialId, opt.OptCommand.isAbandon);
return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun);
}
/// <summary>
/// 修改项目状态项目
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/TrialConfig/UpdateTrialState")]
[UnitOfWork]
public async Task<IResponseOutput> UpdateTrialState(DataInspectionDto<UpdateTrialState> 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);
}
/// <summary>
///
/// </summary>
/// <param name="opt">参数</param>
/// <returns></returns>
[HttpPost, Route("Inspection/trialDocument/AddOrUpdateTrialDocument")]
[UnitOfWork]
public async Task<IResponseOutput> AddOrUpdateTrialDocument(DataInspectionDto<AddOrEditTrialDocument> 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<IResponseOutput> UserAbandonDoc(DataInspectionDto<AddOrEditTrialDocument> opt)
{
var fun = _trialDocumentService.UserAbandonDoc;
return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, fun);
}
#endregion
#region 获取稽查数据
/// <summary>
/// 获取稽查数据
/// </summary>
/// <returns></returns>
[HttpPost, Route("Inspection/GetInspectionData")]
public async Task<PageOutput<GetDataInspectionOutDto>> GetInspectionData(GetDataInspectionDto dto)
{
return await _inspectionService.GetInspectionData(dto);
}
#endregion
#region 影像质疑
/// <summary>
/// 手动领取 或者取消 QC任务
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/QCOperation/ObtainOrCancelQCTask")]
[UnitOfWork]
public async Task<IResponseOutput> ObtainOrCancelQCTask(DataInspectionDto<ObtainOrCancelQCTaskDto> opt)
{
var fun = await _qCOperationService.ObtainOrCancelQCTask(opt.OptCommand.trialId, opt.OptCommand.subjectVisitId, opt.OptCommand.obtaionOrCancel);
if (!fun.IsSuccess)
{
return ResponseOutput.NotOk(fun.ErrorMessage);
}
return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun);
}
/// <summary>
/// 添加或者更新 QC核对问题列表
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/QCOperation/AddOrUpdateQCQuestionAnswerList")]
[UnitOfWork]
public async Task<IResponseOutput> AddOrUpdateQCQuestionAnswerList(DataInspectionDto<AddOrUpdateQCQuestionAnswerListDto> 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 ResponseOutput.NotOk(fun.ErrorMessage);
}
return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun);
}
/// <summary>
/// 添加和更新质疑
/// </summary>
[HttpPost, Route("Inspection/QCOperation/AddOrUpdateQCChallenge")]
[UnitOfWork]
public async Task<IResponseOutput> AddOrUpdateQCChallenge(DataInspectionDto<AddOrUpdateQCChallengeDto> opt)
{
var fun = await _qCOperationService.AddOrUpdateQCChallenge(opt.OptCommand.qaQuestionCommand, opt.OptCommand.trialId, opt.OptCommand.trialQCProcess, opt.OptCommand.currentQCType);
opt.AuditInfo.GeneralId = fun.Id;
Dictionary<string, object> keyValuePairs = new Dictionary<string, object>();
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());
}
/// <summary>
/// 回复质疑
/// </summary>
[HttpPost, Route("Inspection/QCOperation/AddQCChallengeReply")]
[UnitOfWork]
public async Task<IResponseOutput> AddQCChallengeReply(DataInspectionDto<QADialogCommand> opt)
{
var fun = _qCOperationService.AddQCChallengeReply;
opt.AuditInfo.GeneralId = opt.OptCommand.QCChallengeId;
return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, fun);
}
/// <summary>
/// 关闭质疑
/// </summary>
[HttpPost, Route("Inspection/QCOperation/CloseQCChallenge")]
[UnitOfWork]
public async Task<IResponseOutput> CloseQCChallenge(DataInspectionDto<CloseQCChallengeDto> 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)
{
return ResponseOutput.NotOk(fun.ErrorMessage);
}
return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun);
}
/// <summary>
/// 删除QC质疑记录
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/QCOperation/DeleteQCChallenge")]
[UnitOfWork]
public async Task<IResponseOutput> DeleteQCChallenge(DataInspectionDto<IDDto> opt)
{
var fun = _qCOperationService.DeleteQCChallenge;
opt.AuditInfo.GeneralId = opt.OptCommand.Id;
return await _inspectionService.Enforcement(opt.OptCommand.Id, opt.AuditInfo, opt.SignInfo, fun);
}
/// <summary>
/// 一致性核查 质疑的添加/回复
/// </summary>
[HttpPost, Route("Inspection/QCOperation/AddCheckChallengeReply")]
[UnitOfWork]
public async Task<IResponseOutput> AddCheckChallengeReply(DataInspectionDto<CheckChallengeDialogCommand> opt)
{
var fun = _qCOperationService.AddCheckChallengeReply;
return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, fun);
}
/// <summary>
/// 删除QC质疑记录
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/QCOperation/CloseCheckChallenge")]
[UnitOfWork]
public async Task<IResponseOutput> CloseCheckChallenge(DataInspectionDto<CloseCheckChallengeDto> opt)
{
var fun = _qCOperationService.CloseCheckChallenge;
opt.AuditInfo.Reason = opt.OptCommand.CloseCheckChallenge;
return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, fun);
}
/// <summary>
/// 手动设置一致性核查通过
/// </summary>
[HttpPost, Route("Inspection/QCOperation/SetCheckPass")]
[UnitOfWork]
public async Task<IResponseOutput> SetCheckPass(DataInspectionDto<SetCheckPassDt> opt)
{
var fun = _qCOperationService.SetCheckPass;
return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, fun);
}
/// <summary>
/// CRC 请求回退
/// </summary>
[HttpPost, Route("Inspection/QCOperation/CRCRequstCheckBack")]
[UnitOfWork]
public async Task<IResponseOutput> CRCRequstCheckBack(DataInspectionDto<IDDto> opt)
{
var fun = _qCOperationService.CRCRequstCheckBack;
return await _inspectionService.Enforcement(opt.OptCommand.Id, opt.AuditInfo, opt.SignInfo, fun);
}
/// <summary>
/// 一致性核查 回退 对话记录不清除 只允许PM回退
/// </summary>
[HttpPost, Route("Inspection/QCOperation/CheckBack")]
[UnitOfWork]
public async Task<IResponseOutput> CheckBack(DataInspectionDto<IDDto> opt)
{
var fun = _qCOperationService.CheckBack;
return await _inspectionService.Enforcement(opt.OptCommand.Id, opt.AuditInfo, opt.SignInfo, fun);
}
/// <summary>
/// QC修改检查部位和 拍片类型
/// </summary>
[HttpPost, Route("Inspection/QCOperation/UpdateModality")]
[UnitOfWork]
public async Task<IResponseOutput> UpdateModality(DataInspectionDto<UpdateModalityDto> 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);
}
/// <summary>
/// 1、设置为不读片2 设置为读片(取消 先前设置为不读片) 4 设置为删除(数据库记录软删除) 5 恢复为未删除
/// </summary>
[HttpPost, Route("Inspection/QCOperation/SetSeriesState")]
[UnitOfWork]
public async Task<IResponseOutput> SetSeriesState(DataInspectionDto<SetSeriesStateDto> 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);
}
/// <summary>
/// 设置QC 通过或者不通过 7:QC failed 8QC passed
/// </summary>
[HttpPost, Route("Inspection/QCOperation/QCPassedOrFailed")]
[UnitOfWork]
public async Task<IResponseOutput> QCPassedOrFailed(DataInspectionDto<QCPassedOrFailedDto> 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);
}
/// <summary>
/// 设置、取消 访视紧急
/// </summary>
[HttpPost, Route("Inspection/QCOperation/SetVisitUrgent")]
[UnitOfWork]
public async Task<IResponseOutput> SetVisitUrgent(DataInspectionDto<SetVisitUrgentDto> 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);
}
/// <summary>
/// QA设置 需要重传
/// </summary>
[HttpPost, Route("Inspection/QCOperation/SetNeedReupload")]
[UnitOfWork]
public async Task<IResponseOutput> SetNeedReupload(DataInspectionDto<SetNeedReuploadDto> opt)
{
var fun = await _qCOperationService.SetNeedReupload(opt.OptCommand.trialId, opt.OptCommand.qcChallengeId);
return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun);
}
/// <summary>
/// CRC 设置已经重传完成
/// </summary>
[HttpPost, Route("Inspection/QCOperation/SetReuploadFinished")]
[UnitOfWork]
public async Task<IResponseOutput> SetReuploadFinished(DataInspectionDto<CRCReuploadFinishedCommand> opt)
{
var fun = _qCOperationService.SetReuploadFinished;
return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, fun);
}
/// <summary>
/// CRCRequestReUpload
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/QCOperation/CRCRequestReUpload")]
[UnitOfWork]
public async Task<IResponseOutput> CRCRequestReUpload(DataInspectionDto<IDDto> opt)
{
var fun = _qCOperationService.CRCRequestReUpload;
return await _inspectionService.Enforcement(opt.OptCommand.Id, opt.AuditInfo, opt.SignInfo, fun);
}
/// <summary>
/// 影像转发
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/QCOperation/ForwardSVDicomImage")]
[UnitOfWork]
public async Task<IResponseOutput> ForwardSVDicomImage(DataInspectionDto<ForwardSVDicomImageDto> opt)
{
var fun = _qCOperationService.ForwardSVDicomImage;
opt.AuditInfo.NeedSava = false;
return await _inspectionService.Enforcement(opt.OptCommand.subjectVisitIdList, opt.AuditInfo, opt.SignInfo, fun);
}
/// <summary>
/// 一致性核查 excel上传 支持三种格式
/// </summary>
/// <param name="file"></param>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/QCOperation/UploadVisitCheckExcel")]
[UnitOfWork]
public async Task<IResponseOutput> UploadVisitCheckExcel(IFormFile file, [FromForm] UploadVisitCheckExcelDto opt)
{
var fun = await _qCOperationService.UploadVisitCheckExcel(file, opt.trialId);
return fun;
//var data = JsonConvert.DeserializeObject<DataInspectionAddDTO>(opt.AuditInfo);
//return await _inspectionService.Enforcement(opt.trialId, data, null, null, fun);
}
#endregion
#region 影像上传
/// <summary>
/// 疾病进展确认评估
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/QCOperation/UpdateSubjectAndSVInfo")]
[UnitOfWork]
public async Task<IResponseOutput> UpdateSubjectAndSVInfo(DataInspectionDto<UploadSubjectAndVisitCommand> opt)
{
var fun = _qCOperationService.UpdateSubjectAndSVInfo;
return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, fun);
}
/// <summary>
/// 删除影像
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/QCOperation/deleteStudyList")]
[UnitOfWork]
public async Task<IResponseOutput> deleteStudyList(DataInspectionDto<DeleteStudyList> opt)
{
var fun = await _qCOperationService.DeleteStudyList(opt.OptCommand.ids, opt.OptCommand.subjectVisitId, opt.OptCommand.trialId);
if (!fun.IsSuccess)
{
return ResponseOutput.NotOk(fun.ErrorMessage);
}
opt.AuditInfo.NeedSava = false;
return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun);
}
/// <summary>
/// CRC RequestToQC 批量提交
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/QCOperation/CRCRequestToQC")]
[UnitOfWork]
public async Task<IResponseOutput> CRCRequestToQC(DataInspectionDto<CRCRequestToQCCommand> opt)
{
var fun = _qCOperationService.CRCRequestToQC;
opt.AuditInfo.NeedSava = false;
return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, fun);
}
/// <summary>
/// 非DICOM影像新增编辑
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/noneDicomStudy/AddOrUpdateNoneDicomStudy")]
[UnitOfWork]
public async Task<IResponseOutput> AddOrUpdateNoneDicomStudy(DataInspectionDto<NoneDicomStudyAddOrEdit> opt)
{
var fun = await _noneDicomStudyService.AddOrUpdateNoneDicomStudy(opt.OptCommand);
if (!fun.IsSuccess)
{
return ResponseOutput.NotOk(fun.ErrorMessage);
}
if (opt.OptCommand.Id == null)
{
Dictionary<string, object> keyValuePairs = new Dictionary<string, object>();
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);
}
/// <summary>
/// 删除非dicom
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/noneDicom/DeleteNoneDicomStudy")]
[UnitOfWork]
public async Task<IResponseOutput> DeleteNoneDicomStudy(DataInspectionDto<IDDto> opt)
{
var fun = _noneDicomStudyService.DeleteNoneDicomStudy;
opt.AuditInfo.GeneralId = opt.OptCommand.Id;
return await _inspectionService.Enforcement(opt.OptCommand.Id, opt.AuditInfo, opt.SignInfo, fun);
}
/// <summary>
/// 删除非dicom文件
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/noneDicom/deleteNoneDicomStudyFile")]
[UnitOfWork]
public async Task<IResponseOutput> deleteNoneDicomStudyFile(DataInspectionDto<IDDto> 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
/// <summary>
/// 新增或修改既往放疗史
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/clinicalData/AddOrUpdatePreviousHistory")]
[UnitOfWork]
public async Task<IResponseOutput> AddOrUpdatePreviousHistory(DataInspectionDto<PreviousHistoryAddOrEdit> 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);
}
/// <summary>
/// 删除既往放疗史
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/clinicalData/DeletePreviousHistory")]
[UnitOfWork]
public async Task<IResponseOutput> DeletePreviousHistory(DataInspectionDto<IDDto> opt)
{
var fun = _clinicalDataService.DeletePreviousHistory;
opt.AuditInfo.GeneralId = opt.OptCommand.Id;
return await _inspectionService.Enforcement(opt.OptCommand.Id, opt.AuditInfo, opt.SignInfo, fun);
}
/// <summary>
/// 新增或修改既往手术史
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/clinicalData/AddOrUpdatePreviousSurgery")]
[UnitOfWork]
public async Task<IResponseOutput> AddOrUpdatePreviousSurgery(DataInspectionDto<PreviousSurgeryAddOrEdit> 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);
}
/// <summary>
/// 删除既往手术史
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/clinicalData/DeletePreviousSurgery")]
[UnitOfWork]
public async Task<IResponseOutput> DeletePreviousSurgery(DataInspectionDto<IDDto> opt)
{
var fun = _clinicalDataService.DeletePreviousSurgery;
opt.AuditInfo.GeneralId = opt.OptCommand.Id;
return await _inspectionService.Enforcement(opt.OptCommand.Id, opt.AuditInfo, opt.SignInfo, fun);
}
/// <summary>
/// 新增或修改既往其他治疗史
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/clinicalData/AddOrUpdatePreviousOther")]
[UnitOfWork]
public async Task<IResponseOutput> AddOrUpdatePreviousOther(DataInspectionDto<PreviousOtherAddOrEdit> 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);
}
/// <summary>
/// 删除既往其他治疗史
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/clinicalData/DeletePreviousOther")]
[UnitOfWork]
public async Task<IResponseOutput> DeletePreviousOther(DataInspectionDto<IDDto> 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 访视计划
/// <summary>
/// 新增或添加访视计划
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/VisitPlan/AddOrUpdateVisitStage")]
[UnitOfWork]
public async Task<IResponseOutput> AddOrUpdateVisitStage(DataInspectionDto<VisitPlanCommand> 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);
}
/// <summary>
/// 删除访视计划对象
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/VisitPlan/DeleteVisitStage")]
[UnitOfWork]
public async Task<IResponseOutput> DeleteVisitStage(DataInspectionDto<IDDto> opt)
{
var fun = _visitPlanService.DeleteVisitStage;
return await _inspectionService.Enforcement(opt.OptCommand.Id, opt.AuditInfo, opt.SignInfo, fun);
}
/// <summary>
/// 确认访视计划
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/VisitPlan/ConfirmTrialVisitPlan")]
[UnitOfWork]
public async Task<IResponseOutput> ConfirmTrialVisitPlan(DataInspectionDto<IDDto> opt)
{
var fun = _visitPlanService.ConfirmTrialVisitPlan;
opt.AuditInfo.NeedSava = false;
return await _inspectionService.Enforcement(opt.OptCommand.Id, opt.AuditInfo, opt.SignInfo, fun);
}
/// <summary>
/// 下载访视计划
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/VisitPlan/DownloadInflunceStudyList")]
[UnitOfWork]
public async Task<IResponseOutput> DownloadInflunceStudyList(DataInspectionDto<IDDto> 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<IResponseOutput> AddOrUpdateSV(DataInspectionDto<SubjectVisitCommand> 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<IResponseOutput> SetSubjectVisitUrgent(DataInspectionDto<SetSubjectVisitUrgentCommand> 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<IResponseOutput> DeleteSV(DataInspectionDto<DeleteSVCommand> 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<IResponseOutput> SetSVExecuted(DataInspectionDto<DeleteSVCommand> 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 配置项目信息
/// <summary>
/// 配置 基础逻辑信息
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/configTrialBasicInfo/configTrialBasicInfo")]
[UnitOfWork]
public async Task<IResponseOutput> ConfigTrialBasicInfo(DataInspectionDto<BasicTrialConfig> opt)
{
var fun = _trialConfigService.ConfigTrialBasicInfo;
return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, fun);
}
/// <summary>
/// 配置流程
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/configTrialBasicInfo/configTrialProcessInfo")]
[UnitOfWork]
public async Task<IResponseOutput> ConfigTrialProcessInfo(DataInspectionDto<TrialProcessConfig> opt)
{
var fun = _trialConfigService.ConfigTrialProcessInfo;
return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, fun);
}
/// <summary>
/// 配置加急信息
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/configTrialBasicInfo/ConfigTrialUrgentInfo")]
[UnitOfWork]
public async Task<IResponseOutput> ConfigTrialUrgentInfo(DataInspectionDto<TrialUrgentConfig> opt)
{
var fun = _trialConfigService.ConfigTrialUrgentInfo;
return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, fun);
}
/// <summary>
/// 签名确认
/// </summary>
/// <returns></returns>
[HttpPost, Route("Inspection/configTrialBasicInfo/TrialConfigSignatureConfirm")]
[UnitOfWork]
public async Task<IResponseOutput> TrialConfigSignatureConfirm(DataInspectionDto<SignConfirmDTO> opt)
{
var fun = _trialConfigService.TrialConfigSignatureConfirm;
return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, fun);
}
/// <summary>
/// 配置 基础逻辑信息并确认
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/configTrialBasicInfo/ConfigTrialBasicInfoConfirm")]
[UnitOfWork]
public async Task<IResponseOutput> ConfigTrialBasicInfoConfirm(DataInspectionDto<BasicTrialConfig> 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);
}
/// <summary>
/// 配置流程并确认
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/configTrialBasicInfo/ConfigTrialProcessInfoConfirm")]
[UnitOfWork]
public async Task<IResponseOutput> ConfigTrialProcessInfoConfirm(DataInspectionDto<TrialProcessConfig> 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);
}
/// <summary>
/// 配置加急信息并确认
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/configTrialBasicInfo/ConfigTrialUrgentInfoConfirm")]
[UnitOfWork]
public async Task<IResponseOutput> ConfigTrialUrgentInfoConfirm(DataInspectionDto<TrialUrgentConfig> 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);
}
/// <summary>
/// 保存并确认访视计划
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/VisitPlan/SaveConfirmTrialVisitPlan")]
[UnitOfWork]
public async Task<IResponseOutput> SaveConfirmTrialVisitPlan(DataInspectionDto<VisitPlanCommand> 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 受试者
/// <summary>
/// 添加或更新受试者信息[New]
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
//[TypeFilter(typeof(TrialResourceFilter))]
[HttpPost, Route("Inspection/Subject/AddOrUpdateSubject")]
[UnitOfWork]
public async Task<IResponseOutput> 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);
}
/// <summary>
/// 修改受试者状态
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
///
[HttpPut, Route("Inspection/Subject/UpdateSubjectStatus")]
[UnitOfWork]
public async Task<IResponseOutput> UpdateSubjectStatus(InsUpdateSubjectStatus opt)
{
var fun = _subjectService.UpdateSubjectStatus;
return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, fun);
}
/// <summary>
/// 删除受试者
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpDelete, Route("Inspection/Subject/DeleteSubject")]
[UnitOfWork]
public async Task<IResponseOutput> 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
}
}