修改接口参数

Uat_Study
hang 2022-05-07 09:33:11 +08:00
parent 7a744293e5
commit 993085f894
4 changed files with 37 additions and 93 deletions

View File

@ -201,10 +201,10 @@ namespace IRaCIS.Core.API.Controllers
public async Task<IResponseOutput> AddOrUpdateQCChallenge(DataInspectionDto<AddOrUpdateQCChallengeDto> opt) 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); var fun = await _qCOperationService.AddOrUpdateQCChallenge(opt.OptCommand.qaQuestionCommand, opt.OptCommand.trialId, opt.OptCommand.trialQCProcess, opt.OptCommand.currentQCType);
opt.AuditInfo.GeneralId = fun.Id; //opt.AuditInfo.GeneralId = fun.Id;
Dictionary<string, object> keyValuePairs = new Dictionary<string, object>(); //Dictionary<string, object> keyValuePairs = new Dictionary<string, object>();
keyValuePairs.Add("ChallengeCode", "Q" + fun.ChallengeCode.ToString("D5")); //keyValuePairs.Add("ChallengeCode", "Q" + fun.ChallengeCode.ToString("D5"));
opt.AuditInfo.JsonDetail = _inspectionService.AddJsonItem(opt.AuditInfo.JsonDetail, keyValuePairs); //opt.AuditInfo.JsonDetail = _inspectionService.AddJsonItem(opt.AuditInfo.JsonDetail, keyValuePairs);
return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, ResponseOutput.Ok()); return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, ResponseOutput.Ok());
} }

View File

@ -246,7 +246,7 @@ namespace IRaCIS.Core.Application.Service.Inspection.DTO
{ {
public string ManualPassReason { get; set; } = string.Empty; public string ManualPassReason { get; set; } = string.Empty;
public Guid Id { get; set; } public Guid SubjectVisitId { get; set; }
} }

View File

@ -19,8 +19,8 @@ namespace IRaCIS.Core.Application.Image.QA
Task<IResponseOutput<CheckChallengeDialog>> AddCheckChallengeReply(CheckChallengeDialogCommand checkDialogCommand); Task<IResponseOutput> AddCheckChallengeReply(CheckChallengeDialogCommand checkDialogCommand);
Task<QCChallenge> AddOrUpdateQCChallenge(QCChallengeCommand qaQuestionCommand, Guid trialId, [FromRoute] TrialQCProcess trialQCProcess, [FromRoute] CurrentQC currentQCType); Task<IResponseOutput> AddOrUpdateQCChallenge(QCChallengeCommand qaQuestionCommand, Guid trialId, [FromRoute] TrialQCProcess trialQCProcess, [FromRoute] CurrentQC currentQCType);
Task<IResponseOutput> AddOrUpdateQCQuestionAnswerList(QCQuestionAnswerCommand[] qcQuestionAnswerCommands, Guid trialId, Guid subjectVisitId, [FromRoute] TrialQCProcess trialQCProcess, [FromRoute] CurrentQC currentQCType); Task<IResponseOutput> AddOrUpdateQCQuestionAnswerList(QCQuestionAnswerCommand[] qcQuestionAnswerCommands, Guid trialId, Guid subjectVisitId, [FromRoute] TrialQCProcess trialQCProcess, [FromRoute] CurrentQC currentQCType);
Task<IResponseOutput> AddQCChallengeReply(QADialogCommand qaDialogCommand); Task<IResponseOutput> AddQCChallengeReply(QADialogCommand qaDialogCommand);
Task<IResponseOutput> CloseCheckChallenge(CloseCheckChallengeDto input); Task<IResponseOutput> CloseCheckChallenge(CloseCheckChallengeDto input);

View File

@ -17,12 +17,9 @@ using Microsoft.AspNetCore.Authorization;
using WinSCP; using WinSCP;
using Magicodes.ExporterAndImporter.Excel; using Magicodes.ExporterAndImporter.Excel;
using Newtonsoft.Json; using Newtonsoft.Json;
using IRaCIS.Core.Application.Service.Inspection.Interface;
using IRaCIS.Core.Infrastructure; using IRaCIS.Core.Infrastructure;
using IRaCIS.Core.Application.Service.Inspection.DTO; using IRaCIS.Core.Application.Service.Inspection.DTO;
using Nito.AsyncEx; using Nito.AsyncEx;
using IRaCIS.Application.Interfaces;
using IRaCIS.Core.Domain.Common;
namespace IRaCIS.Core.Application.Image.QA namespace IRaCIS.Core.Application.Image.QA
{ {
@ -34,13 +31,9 @@ namespace IRaCIS.Core.Application.Image.QA
private readonly IRepository<SubjectVisit> _subjectVisitRepository; private readonly IRepository<SubjectVisit> _subjectVisitRepository;
private readonly IRepository<QCChallenge> _qcChallengeRepository; private readonly IRepository<QCChallenge> _qcChallengeRepository;
private readonly IRepository<DicomStudy> _dicomStudyRepository; private readonly IRepository<DicomStudy> _dicomStudyRepository;
private readonly IRepository<Dictionary> _dictionaryrepository;
private readonly IRepository<Subject> _subjectRepository; private readonly IRepository<Subject> _subjectRepository;
private readonly IRepository<Trial> _trialRepository; private readonly IRepository<Trial> _trialRepository;
private readonly IMediator _mediator; private readonly IMediator _mediator;
private readonly IInspectionService _inspectionService;
private readonly IDictionaryService _dictionaryService;
private object _locker = new object();
private readonly AsyncLock _mutex = new AsyncLock(); private readonly AsyncLock _mutex = new AsyncLock();
@ -48,10 +41,7 @@ namespace IRaCIS.Core.Application.Image.QA
IRepository<QCChallenge> qcChallengeRepository, IRepository<QCChallenge> qcChallengeRepository,
IRepository<Trial> trialRepository, IRepository<Trial> trialRepository,
IMediator mediator, IMediator mediator,
IInspectionService inspectionService,
IDictionaryService dictionaryService,
IRepository<DicomStudy> dicomStudyRepository, IRepository<DicomStudy> dicomStudyRepository,
IRepository<Dictionary> dictionaryrepository,
IRepository<Subject> subjectRepository IRepository<Subject> subjectRepository
) )
{ {
@ -59,17 +49,14 @@ namespace IRaCIS.Core.Application.Image.QA
_subjectVisitRepository = subjectVisitRepository; _subjectVisitRepository = subjectVisitRepository;
_qcChallengeRepository = qcChallengeRepository; _qcChallengeRepository = qcChallengeRepository;
_dicomStudyRepository = dicomStudyRepository; _dicomStudyRepository = dicomStudyRepository;
this._dictionaryrepository = dictionaryrepository;
this._subjectRepository = subjectRepository; this._subjectRepository = subjectRepository;
_mediator = mediator; _mediator = mediator;
_trialRepository = trialRepository; _trialRepository = trialRepository;
_inspectionService = inspectionService;
this._dictionaryService = dictionaryService;
} }
#region QC质疑 以及回复 关闭 #region QC质疑 以及回复 关闭
[HttpPost("{trialId:guid}/{subjectVisitId:guid}/{currentQCType:int}")] [HttpGet("{trialId:guid}/{subjectVisitId:guid}/{currentQCType:int}")]
[TypeFilter(typeof(TrialResourceFilter))] [TypeFilter(typeof(TrialResourceFilter))]
public async Task<IResponseOutput> VerifyQCCanAddChallenge(Guid subjectVisitId, [FromRoute] CurrentQC currentQCType) public async Task<IResponseOutput> VerifyQCCanAddChallenge(Guid subjectVisitId, [FromRoute] CurrentQC currentQCType)
{ {
@ -93,7 +80,7 @@ namespace IRaCIS.Core.Application.Image.QA
[HttpPost("{trialId:guid}/{trialQCProcess:int}/{currentQCType:int}")] [HttpPost("{trialId:guid}/{trialQCProcess:int}/{currentQCType:int}")]
[TypeFilter(typeof(TrialResourceFilter))] [TypeFilter(typeof(TrialResourceFilter))]
[Authorize(Policy = "ImageQCPolicy")] [Authorize(Policy = "ImageQCPolicy")]
public async Task<QCChallenge> AddOrUpdateQCChallenge(QCChallengeCommand qaQuestionCommand, Guid trialId, [FromRoute] TrialQCProcess trialQCProcess, [FromRoute] CurrentQC currentQCType) public async Task<IResponseOutput> AddOrUpdateQCChallenge(QCChallengeCommand qaQuestionCommand, Guid trialId, [FromRoute] TrialQCProcess trialQCProcess, [FromRoute] CurrentQC currentQCType)
{ {
await VerifyIsCanQCAsync(null, qaQuestionCommand.SubjectVisitId); await VerifyIsCanQCAsync(null, qaQuestionCommand.SubjectVisitId);
@ -124,18 +111,21 @@ namespace IRaCIS.Core.Application.Image.QA
qcChallenge = await _qcChallengeRepository.AddAsync(qcChallenge, true); qcChallenge = await _qcChallengeRepository.AddAsync(qcChallenge, true);
return qcChallenge; return ResponseOutput.Ok(qcChallenge.Id);
} }
} }
else else
{ {
return await _repository.UpdateFromDTOAsync<QCChallenge, QCChallengeCommand>(qaQuestionCommand, true); await _repository.UpdateFromDTOAsync<QCChallenge, QCChallengeCommand>(qaQuestionCommand, true);
return ResponseOutput.Ok();
} }
} }
@ -147,7 +137,7 @@ namespace IRaCIS.Core.Application.Image.QA
/// <param name="closeEnum"></param> /// <param name="closeEnum"></param>
/// <param name="closeReason"></param> /// <param name="closeReason"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost("{trialId:guid}/{qcChallengeId:guid}/{subjectVisitId:guid}/{closeEnum}/{closeReason}")] [HttpPut("{trialId:guid}/{subjectVisitId:guid}/{qcChallengeId:guid}/{closeEnum}/{closeReason}")]
[TypeFilter(typeof(TrialResourceFilter))] [TypeFilter(typeof(TrialResourceFilter))]
[UnitOfWork] [UnitOfWork]
//[Authorize(Policy = "ImageQCPolicy")] //[Authorize(Policy = "ImageQCPolicy")]
@ -168,8 +158,6 @@ namespace IRaCIS.Core.Application.Image.QA
} }
#region 之前 #region 之前
dbQCChallenge.CloseResonEnum = closeEnum; dbQCChallenge.CloseResonEnum = closeEnum;
@ -194,29 +182,6 @@ namespace IRaCIS.Core.Application.Image.QA
return ResponseOutput.Result(success); return ResponseOutput.Result(success);
#region 对话实体不会加入
//dbQCChallenge.DialogList.Add(new QCChallengeDialog()
//{
// SubjectVisitId = dbQCChallenge.SubjectVisitId,
// UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt,
// QCChallengeId = dbQCChallenge.Id,
// TalkContent = "关闭原因: " + closeReason
//});
//var success = await _qcChallengeRepository.PartialUpdateAsync(dbQCChallenge, u => new QCChallenge()
//{
// CloseResonEnum = closeEnum,
// IsClosed = true,
// ClosedTime = DateTime.Now,
//}, true);
#endregion
} }
@ -228,7 +193,7 @@ namespace IRaCIS.Core.Application.Image.QA
/// 删除QC质疑记录 /// 删除QC质疑记录
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[HttpDelete("{qcChallengeId:guid}/{trialId:guid}")] [HttpDelete("{trialId:guid}/{subjectVisitId:guid}/{qcChallengeId:guid}")]
[TypeFilter(typeof(TrialResourceFilter))] [TypeFilter(typeof(TrialResourceFilter))]
[Authorize(Policy = "ImageQCPolicy")] [Authorize(Policy = "ImageQCPolicy")]
public async Task<IResponseOutput> DeleteQCChallenge(Guid qcChallengeId) public async Task<IResponseOutput> DeleteQCChallenge(Guid qcChallengeId)
@ -239,9 +204,8 @@ namespace IRaCIS.Core.Application.Image.QA
ResponseOutput.NotOk("this QC Challenge Has been replied "); ResponseOutput.NotOk("this QC Challenge Has been replied ");
} }
var qaRecord = await _qcChallengeRepository.FirstOrDefaultAsync(t => t.Id == qcChallengeId); var qaRecord = (await _qcChallengeRepository.FirstOrDefaultAsync(t => t.Id == qcChallengeId)).IfNullThrowException();
if (qaRecord == null) return Null404NotFound(qaRecord);
await _qcChallengeRepository.DeleteAsync(qaRecord); await _qcChallengeRepository.DeleteAsync(qaRecord);
@ -257,7 +221,6 @@ namespace IRaCIS.Core.Application.Image.QA
/// <param name="qaDialogCommand"></param> /// <param name="qaDialogCommand"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost("{trialId:guid}")] [HttpPost("{trialId:guid}")]
[TypeFilter(typeof(TrialResourceFilter))] [TypeFilter(typeof(TrialResourceFilter))]
[Authorize(Policy = "ImageQCPolicy")] [Authorize(Policy = "ImageQCPolicy")]
public async Task<IResponseOutput> AddQCChallengeReply(QADialogCommand qaDialogCommand) public async Task<IResponseOutput> AddQCChallengeReply(QADialogCommand qaDialogCommand)
@ -295,7 +258,7 @@ namespace IRaCIS.Core.Application.Image.QA
[HttpPost("{trialId:guid}")] [HttpPost("{trialId:guid}")]
[TypeFilter(typeof(TrialResourceFilter))] [TypeFilter(typeof(TrialResourceFilter))]
[Authorize(Policy = "ImageCheckPolicy")] [Authorize(Policy = "ImageCheckPolicy")]
public async Task<IResponseOutput<CheckChallengeDialog>> AddCheckChallengeReply(CheckChallengeDialogCommand checkDialogCommand) public async Task<IResponseOutput> AddCheckChallengeReply(CheckChallengeDialogCommand checkDialogCommand)
{ {
@ -324,14 +287,14 @@ namespace IRaCIS.Core.Application.Image.QA
var success = await _repository.SaveChangesAsync(); var success = await _repository.SaveChangesAsync();
return ResponseOutput.Result(success, qaReply); return ResponseOutput.Result(success, qaReply.Id);
} }
/// <summary> /// <summary>
/// 关闭 一致性核查质疑 /// 关闭 一致性核查质疑
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[HttpPut("{trialId:guid}/{subjectVisitId:guid}")] [HttpPut("{trialId:guid}")]
[TypeFilter(typeof(TrialResourceFilter))] [TypeFilter(typeof(TrialResourceFilter))]
public async Task<IResponseOutput> CloseCheckChallenge(CloseCheckChallengeDto input) public async Task<IResponseOutput> CloseCheckChallenge(CloseCheckChallengeDto input)
{ {
@ -355,7 +318,7 @@ namespace IRaCIS.Core.Application.Image.QA
/// 手动设置一致性核查通过 /// 手动设置一致性核查通过
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[HttpPut("{trialId:guid}/{signId:guid}/{subjectVisitId:guid}")] [HttpPut("{trialId:guid}")]
[TypeFilter(typeof(TrialResourceFilter))] [TypeFilter(typeof(TrialResourceFilter))]
public async Task<IResponseOutput> SetCheckPass(SetCheckPassDt data) public async Task<IResponseOutput> SetCheckPass(SetCheckPassDt data)
{ {
@ -364,9 +327,8 @@ namespace IRaCIS.Core.Application.Image.QA
ResponseOutput.NotOk("只允许PM 手动设置一致性核查通过"); ResponseOutput.NotOk("只允许PM 手动设置一致性核查通过");
} }
var sv = await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == data.Id); var sv = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == data.SubjectVisitId)).IfNullThrowException();
if (sv == null) return Null404NotFound(sv);
if (sv.RequestBackState == RequestBackStateEnum.PM_AgressBack) if (sv.RequestBackState == RequestBackStateEnum.PM_AgressBack)
{ {
@ -384,9 +346,8 @@ namespace IRaCIS.Core.Application.Image.QA
sv.ManualPassReason = data.ManualPassReason; sv.ManualPassReason = data.ManualPassReason;
sv.CheckPassedTime = DateTime.Now; sv.CheckPassedTime = DateTime.Now;
await _repository.SaveChangesAsync(); await _subjectVisitRepository.SaveChangesAsync();
//var signSuccess = await _repository.UpdateFromQueryAsync<TrialSign>(t => t.Id == signId, u => new TrialSign() { IsCompleted = true });
return ResponseOutput.Result(true); return ResponseOutput.Result(true);
@ -401,16 +362,15 @@ namespace IRaCIS.Core.Application.Image.QA
[TypeFilter(typeof(TrialResourceFilter))] [TypeFilter(typeof(TrialResourceFilter))]
public async Task<IResponseOutput> CRCRequstCheckBack(Guid subjectVisitId) public async Task<IResponseOutput> CRCRequstCheckBack(Guid subjectVisitId)
{ {
var sv = await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId); var sv = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId)).IfNullThrowException();
if (sv == null) return Null404NotFound(sv);
if (sv.CheckState == CheckStateEnum.CVPassed) if (sv.CheckState == CheckStateEnum.CVPassed)
{ {
return ResponseOutput.NotOk("核查通过的数据不允许申请回退"); return ResponseOutput.NotOk("核查通过的数据不允许申请回退");
} }
await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.Id == subjectVisitId, u => new SubjectVisit() { RequestBackState = RequestBackStateEnum.CRC_RequestBack });
await _subjectVisitRepository.UpdatePartialFromQueryAsync( subjectVisitId, u => new SubjectVisit() { RequestBackState = RequestBackStateEnum.CRC_RequestBack },true);
return ResponseOutput.Ok(); return ResponseOutput.Ok();
@ -420,7 +380,7 @@ namespace IRaCIS.Core.Application.Image.QA
/// 一致性核查 回退 对话记录不清除 只允许PM回退 /// 一致性核查 回退 对话记录不清除 只允许PM回退
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[HttpPut("{trialId:guid}/{signId:guid}/{subjectVisitId:guid}")] [HttpPut("{trialId:guid}/{subjectVisitId:guid}")]
[TypeFilter(typeof(TrialResourceFilter))] [TypeFilter(typeof(TrialResourceFilter))]
public async Task<IResponseOutput> CheckBack(Guid subjectVisitId) public async Task<IResponseOutput> CheckBack(Guid subjectVisitId)
{ {
@ -429,9 +389,8 @@ namespace IRaCIS.Core.Application.Image.QA
return ResponseOutput.NotOk(" 只允许PM 回退!"); return ResponseOutput.NotOk(" 只允许PM 回退!");
} }
var sv = await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId); var sv = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId)).IfNullThrowException();
if (sv == null) return Null404NotFound(sv);
if (sv.CheckState == CheckStateEnum.CVPassed || sv.CheckState == CheckStateEnum.ToCheck) if (sv.CheckState == CheckStateEnum.CVPassed || sv.CheckState == CheckStateEnum.ToCheck)
{ {
@ -476,9 +435,8 @@ namespace IRaCIS.Core.Application.Image.QA
await _repository.BatchDeleteAsync<TrialQCQuestionAnswer>(t => t.SubjectVisitId == subjectVisitId); await _repository.BatchDeleteAsync<TrialQCQuestionAnswer>(t => t.SubjectVisitId == subjectVisitId);
var success = await _repository.SaveChangesAsync(); var success = await _subjectVisitRepository.SaveChangesAsync();
// var signSuccess = await _repository.UpdateFromQueryAsync<TrialSign>(t => t.Id == signId, u => new TrialSign() { IsCompleted = true });
return ResponseOutput.Result(success); return ResponseOutput.Result(success);
@ -874,7 +832,7 @@ namespace IRaCIS.Core.Application.Image.QA
/// </summary> /// </summary>
/// <param name="subjectVisitId"></param> /// <param name="subjectVisitId"></param>
/// <returns></returns> /// <returns></returns>
[HttpGet("{subjectVisitId:guid}")] [HttpGet("{trialId:guid}/{subjectVisitId:guid}")]
public async Task<IResponseOutput> VerifyCanQCPassedOrFailed(Guid subjectVisitId) public async Task<IResponseOutput> VerifyCanQCPassedOrFailed(Guid subjectVisitId)
{ {
await VerifyIsCanQCAsync(null, subjectVisitId); await VerifyIsCanQCAsync(null, subjectVisitId);
@ -896,7 +854,7 @@ namespace IRaCIS.Core.Application.Image.QA
/// <param name="subjectVisitId"></param> /// <param name="subjectVisitId"></param>
/// <param name="trialId"></param> /// <param name="trialId"></param>
/// <returns></returns>SeriesCount /// <returns></returns>SeriesCount
[HttpPost, Route("{trialId:guid}/{subjectVisitId:guid}")] [HttpDelete, Route("{trialId:guid}/{subjectVisitId:guid}")]
[TypeFilter(typeof(TrialResourceFilter))] [TypeFilter(typeof(TrialResourceFilter))]
[UnitOfWork] [UnitOfWork]
public async Task<IResponseOutput> DeleteStudyList(Guid[] ids, Guid subjectVisitId, Guid trialId) public async Task<IResponseOutput> DeleteStudyList(Guid[] ids, Guid subjectVisitId, Guid trialId)
@ -911,13 +869,6 @@ namespace IRaCIS.Core.Application.Image.QA
} }
var waitDeleteStudyList = await _dicomStudyRepository.Where(x => ids.Contains(x.Id)).ToListAsync(); var waitDeleteStudyList = await _dicomStudyRepository.Where(x => ids.Contains(x.Id)).ToListAsync();
foreach (var study in waitDeleteStudyList) foreach (var study in waitDeleteStudyList)
{ {
@ -975,7 +926,7 @@ namespace IRaCIS.Core.Application.Image.QA
#endregion #endregion
public async Task VerifyIsCanQCAsync(SubjectVisit? subjectVisit, Guid? sujectVisitId = null) private async Task VerifyIsCanQCAsync(SubjectVisit? subjectVisit, Guid? sujectVisitId = null)
{ {
if (sujectVisitId != null) if (sujectVisitId != null)
{ {
@ -1016,7 +967,7 @@ namespace IRaCIS.Core.Application.Image.QA
/// <param name="subjectVisitId"></param> /// <param name="subjectVisitId"></param>
/// <param name="obtaionOrCancel">true 获取 false是取消领取</param> /// <param name="obtaionOrCancel">true 获取 false是取消领取</param>
/// <returns></returns> /// <returns></returns>
[HttpPost("{trialId:guid}/{subjectVisitId:guid}/{obtaionOrCancel:bool}")] [HttpPut("{trialId:guid}/{subjectVisitId:guid}/{obtaionOrCancel:bool}")]
[TypeFilter(typeof(TrialResourceFilter))] [TypeFilter(typeof(TrialResourceFilter))]
public async Task<IResponseOutput> ObtainOrCancelQCTask(Guid trialId, Guid subjectVisitId, bool obtaionOrCancel) public async Task<IResponseOutput> ObtainOrCancelQCTask(Guid trialId, Guid subjectVisitId, bool obtaionOrCancel)
{ {
@ -1326,7 +1277,6 @@ namespace IRaCIS.Core.Application.Image.QA
/// <param name="auditState"></param> /// <param name="auditState"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost("{trialId:guid}/{subjectVisitId:guid}/{auditState:int}")] [HttpPost("{trialId:guid}/{subjectVisitId:guid}/{auditState:int}")]
[TypeFilter(typeof(TrialResourceFilter))] [TypeFilter(typeof(TrialResourceFilter))]
public async Task<IResponseOutput> QCPassedOrFailed(Guid trialId, Guid subjectVisitId, [FromRoute] AuditStateEnum auditState) public async Task<IResponseOutput> QCPassedOrFailed(Guid trialId, Guid subjectVisitId, [FromRoute] AuditStateEnum auditState)
{ {
@ -1512,8 +1462,7 @@ namespace IRaCIS.Core.Application.Image.QA
[TypeFilter(typeof(TrialResourceFilter))] [TypeFilter(typeof(TrialResourceFilter))]
public async Task<IResponseOutput> SetVisitUrgent(Guid trialId, Guid subjectVisitId, bool setOrCancel) public async Task<IResponseOutput> SetVisitUrgent(Guid trialId, Guid subjectVisitId, bool setOrCancel)
{ {
var sv = await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId); var sv = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId)).IfNullThrowException();
if (sv == null) return Null404NotFound(sv);
sv.IsUrgent = setOrCancel; sv.IsUrgent = setOrCancel;
var success = await _repository.SaveChangesAsync(); var success = await _repository.SaveChangesAsync();
@ -1545,7 +1494,7 @@ namespace IRaCIS.Core.Application.Image.QA
/// <param name="trialId"></param> /// <param name="trialId"></param>
/// <param name="qcChallengeId"></param> /// <param name="qcChallengeId"></param>
/// <returns></returns> /// <returns></returns>
[HttpPut("{trialId:guid}/{qcChallengeId:guid}")] [HttpPut("{trialId:guid}/{subjectVisitId:guid}/{qcChallengeId:guid}")]
[TypeFilter(typeof(TrialResourceFilter))] [TypeFilter(typeof(TrialResourceFilter))]
public async Task<IResponseOutput> SetNeedReupload(Guid trialId, Guid qcChallengeId) public async Task<IResponseOutput> SetNeedReupload(Guid trialId, Guid qcChallengeId)
{ {
@ -1718,7 +1667,7 @@ namespace IRaCIS.Core.Application.Image.QA
[HttpPut("{trialId:guid}/{qcChallengeId:guid}")] [HttpPut("{trialId:guid}/{subjectVisitId:guid}/{qcChallengeId:guid}")]
[TypeFilter(typeof(TrialResourceFilter))] [TypeFilter(typeof(TrialResourceFilter))]
public async Task<IResponseOutput> CRCRequestReUpload(Guid qcChallengeId) public async Task<IResponseOutput> CRCRequestReUpload(Guid qcChallengeId)
{ {
@ -1786,11 +1735,6 @@ namespace IRaCIS.Core.Application.Image.QA
} }
dbSubjectVisit.IsEnrollmentConfirm = command.IsEnrollmentConfirm.Value; dbSubjectVisit.IsEnrollmentConfirm = command.IsEnrollmentConfirm.Value;
} }
if (command.SubjectFirstGiveMedicineTime != null) if (command.SubjectFirstGiveMedicineTime != null)