修改bug

Uat_Study
hang 2022-05-05 11:50:44 +08:00
parent 0c03361791
commit 526af5fb1e
7 changed files with 96 additions and 65 deletions

View File

@ -27,7 +27,7 @@ namespace IRaCIS.Core.Application.Filter
if (context.Exception.GetType() == typeof(BusinessValidationFailedException)) if (context.Exception.GetType() == typeof(BusinessValidationFailedException))
{ {
context.Result = new JsonResult(ResponseOutput.NotOk("Verify error: " + context.Exception.Message)); context.Result = new JsonResult(ResponseOutput.NotOk(context.Exception.Message));
} }
else if(context.Exception.GetType() == typeof(QueryBusinessObjectNotExistException)) else if(context.Exception.GetType() == typeof(QueryBusinessObjectNotExistException))
{ {

View File

@ -1514,8 +1514,6 @@
<summary> <summary>
手动设置一致性核查通过 手动设置一致性核查通过
</summary> </summary>
<param name="subjectVisitId"></param>
<param name="signId"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:IRaCIS.Core.Application.Image.QA.QCOperationService.CRCRequstCheckBack(System.Guid)"> <member name="M:IRaCIS.Core.Application.Image.QA.QCOperationService.CRCRequstCheckBack(System.Guid)">
@ -1579,6 +1577,9 @@
<param name="trialId"></param> <param name="trialId"></param>
<returns></returns>SeriesCount <returns></returns>SeriesCount
</member> </member>
<member name="M:IRaCIS.Core.Application.Image.QA.QCOperationService.ReplaceQCTaskActionUser(System.Guid,System.Guid)">
<summary>替换当前领取人 </summary>
</member>
<member name="M:IRaCIS.Core.Application.Image.QA.QCOperationService.ObtainOrCancelQCTask(System.Guid,System.Guid,System.Boolean)"> <member name="M:IRaCIS.Core.Application.Image.QA.QCOperationService.ObtainOrCancelQCTask(System.Guid,System.Guid,System.Boolean)">
<summary> <summary>
手动领取 或者取消 QC任务 手动领取 或者取消 QC任务
@ -1612,12 +1613,14 @@
<param name="setOrCancel"></param> <param name="setOrCancel"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:IRaCIS.Core.Application.Image.QA.QCOperationService.VerifyReuploadIsCanJump(System.Guid,System.Guid)">
<summary>验证质疑对话页面 是否可以 跳转到重传页面 进行重传 </summary>
</member>
<member name="M:IRaCIS.Core.Application.Image.QA.QCOperationService.SetNeedReupload(System.Guid,System.Guid)"> <member name="M:IRaCIS.Core.Application.Image.QA.QCOperationService.SetNeedReupload(System.Guid,System.Guid)">
<summary> <summary>
QA设置 需要重传 QA设置 同意重传
</summary> </summary>
<param name="trialId"></param> <param name="trialId"></param>
<param name="signId"></param>
<param name="qcChallengeId"></param> <param name="qcChallengeId"></param>
<returns></returns> <returns></returns>
</member> </member>

View File

@ -58,12 +58,12 @@ namespace IRaCIS.Core.Application.Contracts
if (addOrEditUserTypeRole.MenuIds.Count > 0) if (addOrEditUserTypeRole.MenuIds.Count > 0)
{ {
entity = userTypeServiceRepository.Where(t => t.Id == addOrEditUserTypeRole.Id, true).Include(t => t.UserTypeMenuList).Include(t=>t.UserTypeGroupList).FirstOrDefault(); entity = userTypeServiceRepository.Where(t => t.Id == addOrEditUserTypeRole.Id, true).Include(t => t.UserTypeMenuList).Include(t=>t.UserTypeGroupList).FirstOrDefault().IfNullThrowException();
} }
else else
{ {
entity = userTypeServiceRepository.Where(t => t.Id == addOrEditUserTypeRole.Id, true).FirstOrDefault(); entity = userTypeServiceRepository.Where(t => t.Id == addOrEditUserTypeRole.Id, true).FirstOrDefault().IfNullThrowException();
} }
_mapper.Map(addOrEditUserTypeRole, entity); _mapper.Map(addOrEditUserTypeRole, entity);
} }

View File

@ -68,7 +68,6 @@ namespace IRaCIS.Core.Application.Contracts
public bool SetOrCancel { get; set; } public bool SetOrCancel { get; set; }
public Guid? SignId { get; set; }
} }
public class UploadSubjectAndVisitCommand public class UploadSubjectAndVisitCommand
@ -147,8 +146,6 @@ namespace IRaCIS.Core.Application.Contracts
public int? Age { get; set; } public int? Age { get; set; }
public string Sex { get; set; } = string.Empty; public string Sex { get; set; } = string.Empty;
} }

View File

@ -70,11 +70,6 @@ namespace IRaCIS.Core.Application.Contracts
subjectVisit = _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == sujectVisitId).Result.IfNullThrowException(); subjectVisit = _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == sujectVisitId).Result.IfNullThrowException();
} }
if (subjectVisit.PreliminaryAuditUserId != null)
{
throw new BusinessValidationFailedException("当前访视已审核通过,不允许操作");
}
if (subjectVisit.CurrentActionUserId != _userInfo.Id) if (subjectVisit.CurrentActionUserId != _userInfo.Id)
{ {
throw new BusinessValidationFailedException("您不是该质控任务当前领取人,没有操作权限!"); throw new BusinessValidationFailedException("您不是该质控任务当前领取人,没有操作权限!");
@ -115,7 +110,6 @@ namespace IRaCIS.Core.Application.Contracts
} }
NoneDicomStudyAddReturnDto noneDicom = new NoneDicomStudyAddReturnDto() NoneDicomStudyAddReturnDto noneDicom = new NoneDicomStudyAddReturnDto()
{ {
StudyCode = optEntity.StudyCode, StudyCode = optEntity.StudyCode,
@ -129,20 +123,14 @@ namespace IRaCIS.Core.Application.Contracts
[HttpDelete("{noneDicomStudyId:guid}/{trialId:guid}")] [HttpDelete("{noneDicomStudyId:guid}/{trialId:guid}")]
public async Task<IResponseOutput> DeleteNoneDicomStudy(Guid noneDicomStudyId) public async Task<IResponseOutput> DeleteNoneDicomStudy(Guid noneDicomStudyId)
{ {
if (_noneDicomStudyRepository.Where(t => t.Id == noneDicomStudyId).SelectMany(t => t.NoneDicomFileList).Count() > 0)
{
return ResponseOutput.NotOk("先移除文件才允许删除非Dicom");
}
var noneDicomStudy = await _noneDicomStudyRepository.FirstOrDefaultAsync(t => t.Id == noneDicomStudyId); var noneDicomStudy = (await _noneDicomStudyRepository.FirstOrDefaultAsync(t => t.Id == noneDicomStudyId)).IfNullThrowException();
if (noneDicomStudy == null) return Null404NotFound(noneDicomStudy);
await _noneDicomStudyRepository.DeleteAsync(noneDicomStudy); await _noneDicomStudyRepository.DeleteAsync(noneDicomStudy);
await _noneDicomStudyFileRepository.BatchDeleteNoTrackingAsync(t => t.NoneDicomStudyId == noneDicomStudyId); await _noneDicomStudyFileRepository.BatchDeleteNoTrackingAsync(t => t.NoneDicomStudyId == noneDicomStudyId);
await _repository.BatchDeleteAsync<StudyMonitor>(t => t.StudyId == noneDicomStudyId); await _studyMonitorRepository.BatchDeleteNoTrackingAsync(t => t.StudyId == noneDicomStudyId);
return ResponseOutput.Ok(); return ResponseOutput.Ok();
} }
@ -156,10 +144,6 @@ namespace IRaCIS.Core.Application.Contracts
var success = await _noneDicomStudyFileRepository.BatchDeleteNoTrackingAsync(t => t.Id == noneDicomStudyFileId); var success = await _noneDicomStudyFileRepository.BatchDeleteNoTrackingAsync(t => t.Id == noneDicomStudyFileId);
var subvisit = await _repository.GetQueryable<SubjectVisit>().FirstOrDefaultAsync(x => x.Id == subjectVisitId);
return ResponseOutput.Ok(); return ResponseOutput.Ok();
} }

View File

@ -359,8 +359,6 @@ namespace IRaCIS.Core.Application.Image.QA
/// <summary> /// <summary>
/// 手动设置一致性核查通过 /// 手动设置一致性核查通过
/// </summary> /// </summary>
/// <param name="subjectVisitId"></param>
/// <param name="signId"></param>
/// <returns></returns> /// <returns></returns>
[HttpPut("{trialId:guid}/{signId:guid}/{subjectVisitId:guid}")] [HttpPut("{trialId:guid}/{signId:guid}/{subjectVisitId:guid}")]
[TypeFilter(typeof(TrialResourceFilter))] [TypeFilter(typeof(TrialResourceFilter))]
@ -1100,6 +1098,24 @@ namespace IRaCIS.Core.Application.Image.QA
#region 临床数据签名 领取、 设置紧急、RequestToQC QC通过、不通过 #region 临床数据签名 领取、 设置紧急、RequestToQC QC通过、不通过
/// <summary>替换当前领取人 </summary>
[HttpPut("{trialId:guid}/{subjectVisitId:guid}")]
public async Task<IResponseOutput> ReplaceQCTaskActionUser(Guid trialId, Guid subjectVisitId)
{
var dbSubjectVisit = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId)).IfNullThrowException();
dbSubjectVisit.IsTake = true;
dbSubjectVisit.CurrentActionUserId = _userInfo.Id;
dbSubjectVisit.CurrentActionUserExpireTime = DateTime.Now.AddHours(1);
var success = await _subjectVisitRepository.SaveChangesAsync();
return ResponseOutput.Result(success);
}
/// <summary> /// <summary>
/// 手动领取 或者取消 QC任务 /// 手动领取 或者取消 QC任务
/// </summary> /// </summary>
@ -1112,6 +1128,11 @@ namespace IRaCIS.Core.Application.Image.QA
public async Task<IResponseOutput> ObtainOrCancelQCTask(Guid trialId, Guid subjectVisitId, bool obtaionOrCancel) public async Task<IResponseOutput> ObtainOrCancelQCTask(Guid trialId, Guid subjectVisitId, bool obtaionOrCancel)
{ {
if (await _subjectVisitRepository.AnyAsync(t => t.CurrentActionUserId != null && t.IsTake && t.Id == subjectVisitId))
{
throw new BusinessValidationFailedException("当前访视已被领取,不允许领取");
}
var dbSubjectVisit = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId)).IfNullThrowException(); var dbSubjectVisit = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId)).IfNullThrowException();
@ -1241,7 +1262,7 @@ namespace IRaCIS.Core.Application.Image.QA
else else
{ {
return ResponseOutput.NotOk("项目配置为复审,不满足提交状态:已提交 或者 审核状态InPrimaryQC/InSecondaryQC, 不允许领取"); return ResponseOutput.NotOk("项目配置为复审,不满足提交状态:已提交 或者 审核状态InPrimaryQC/InSecondaryQC, 不允许释放");
} }
} }
@ -1693,14 +1714,27 @@ namespace IRaCIS.Core.Application.Image.QA
#region 重传、重传完设置 #region 重传、重传完设置
/// <summary>验证质疑对话页面 是否可以 跳转到重传页面 进行重传 </summary>
[HttpGet("{trialId:guid}/{qcChallengeId:guid}")]
public async Task<IResponseOutput> VerifyReuploadIsCanJump(Guid trialId, Guid qcChallengeId)
{
var qcChallenge = (await _qcChallengeRepository.FirstOrDefaultAsync(t => t.Id == qcChallengeId)).IfNullThrowException();
if (qcChallenge.ReuploadEnum != QCChanllengeReuploadEnum.QCAgreeUpload)
{
throw new BusinessValidationFailedException("当前重传状态不为QC同意重传不允许重传");
}
return ResponseOutput.Ok();
}
/// <summary> /// <summary>
/// QA设置 需要重传 /// QA设置 同意重传
/// </summary> /// </summary>
/// <param name="trialId"></param> /// <param name="trialId"></param>
/// <param name="signId"></param>
/// <param name="qcChallengeId"></param> /// <param name="qcChallengeId"></param>
/// <returns></returns> /// <returns></returns>
[HttpPut("{trialId:guid}/{qcChallengeId:guid}/{signId:guid}")] [HttpPut("{trialId: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,14 +1752,21 @@ namespace IRaCIS.Core.Application.Image.QA
return ResponseOutput.NotOk("不审操作,不会有需要重传的操作!"); return ResponseOutput.NotOk("不审操作,不会有需要重传的操作!");
} }
var qcChallenge = await _repository.FirstOrDefaultAsync<QCChallenge>(t => t.Id == qcChallengeId); var qcChallenge = (await _qcChallengeRepository.FirstOrDefaultAsync(t => t.Id == qcChallengeId)).IfNullThrowException();
if (qcChallenge == null) return Null404NotFound(qcChallenge);
if (await _repository.CountAsync<QCChallenge>(t => t.ReuploadEnum == QCChanllengeReuploadEnum.QCAgreeUpload && t.SubjectVisitId == qcChallenge.SubjectVisitId && t.IsClosed == false) >= 1) if (qcChallenge.ReuploadEnum != QCChanllengeReuploadEnum.CRCRequestReupload)
{ {
return ResponseOutput.NotOk("当前访视,有一个未关闭的质疑 QC设置了需要重传CRC还未完成上传当前不允许再次设置"); throw new BusinessValidationFailedException("当前重传状态不为CRC申请重传不允许设置同意重传");
} }
if (await _qcChallengeRepository.CountAsync(t => t.ReuploadEnum == QCChanllengeReuploadEnum.QCAgreeUpload && t.SubjectVisitId == qcChallenge.SubjectVisitId && t.IsClosed == false) >= 1)
{
return ResponseOutput.NotOk("当前访视,有一个未关闭的质疑 QC设置了同意重传CRC还未完成上传当前不允许再次设置");
}
qcChallenge.ReuploadEnum = QCChanllengeReuploadEnum.QCAgreeUpload; qcChallenge.ReuploadEnum = QCChanllengeReuploadEnum.QCAgreeUpload;
qcChallenge.LatestMsgTime = DateTime.Now; qcChallenge.LatestMsgTime = DateTime.Now;
qcChallenge.LatestReplyUserId = _userInfo.Id; qcChallenge.LatestReplyUserId = _userInfo.Id;
@ -1777,15 +1818,11 @@ namespace IRaCIS.Core.Application.Image.QA
var success = await _repository.SaveChangesAsync(); var success = await _repository.SaveChangesAsync();
//var signSuccess = await _repository.UpdateFromQueryAsync<TrialSign>(t => t.Id == signId, u => new TrialSign() { IsCompleted = true });
return ResponseOutput.Result(success); return ResponseOutput.Result(success);
} }
/// <summary> /// <summary>
/// CRC 设置已经重传完成 /// CRC 设置已经重传完成
/// </summary> /// </summary>
@ -1797,20 +1834,22 @@ namespace IRaCIS.Core.Application.Image.QA
{ {
if (_userInfo.UserTypeEnumInt != (int)UserTypeEnum.ClinicalResearchCoordinator) if (_userInfo.UserTypeEnumInt != (int)UserTypeEnum.ClinicalResearchCoordinator)
{ {
return ResponseOutput.NotOk("重传完成 只允许CRC 设置!"); throw new BusinessValidationFailedException("重传完成 只允许CRC 设置!");
} }
var qcChallenge = await _repository.FirstOrDefaultAsync<QCChallenge>(t => t.Id == cRCReuploadFinishedCommand.QCChallengeId); var qcChallenge = (await _qcChallengeRepository.FirstOrDefaultAsync(t => t.Id == cRCReuploadFinishedCommand.QCChallengeId)).IfNullThrowException();
if (qcChallenge.ReuploadEnum != QCChanllengeReuploadEnum.QCAgreeUpload)
{
throw new BusinessValidationFailedException("当前重传状态不为QC同意重传不允许设置重传完成");
}
if (qcChallenge == null) return Null404NotFound(qcChallenge);
var subjectVisitId = qcChallenge.SubjectVisitId; var subjectVisitId = qcChallenge.SubjectVisitId;
if (await _subjectVisitRepository.Where(t => t.Id == subjectVisitId).SelectMany(t => t.StudyList) if (await _subjectVisitRepository.Where(t => t.Id == subjectVisitId).SelectMany(t => t.StudyList).CountAsync() == 0 &&
.CountAsync() == 0 && await _subjectVisitRepository.Where(t => t.Id == subjectVisitId).SelectMany(t => t.NoneDicomStudyList).SelectMany(u => u.NoneDicomFileList).CountAsync() == 0)
await _subjectVisitRepository.Where(t => t.Id == subjectVisitId)
.SelectMany(t => t.NoneDicomStudyList).SelectMany(u => u.NoneDicomFileList).CountAsync() == 0)
{ {
throw new BusinessValidationFailedException("当前没有影像,不允许设置重传完成"); throw new BusinessValidationFailedException("当前没有影像,不允许设置重传完成");
} }
@ -1821,11 +1860,12 @@ namespace IRaCIS.Core.Application.Image.QA
qcChallenge.ReuploadEnum = QCChanllengeReuploadEnum.CRCReuploaded; qcChallenge.ReuploadEnum = QCChanllengeReuploadEnum.CRCReuploaded;
qcChallenge.ReUploadedTime = DateTime.Now; qcChallenge.ReUploadedTime = DateTime.Now;
qcChallenge.ReUploadUserId = _userInfo.Id;
qcChallenge.ReUploader = _userInfo.RealName; qcChallenge.ReUploader = _userInfo.RealName;
qcChallenge.LatestMsgTime = DateTime.Now; qcChallenge.LatestMsgTime = DateTime.Now;
@ -1855,13 +1895,13 @@ namespace IRaCIS.Core.Application.Image.QA
//已确认临床数据完整性 //已确认临床数据完整性
dbSubjectVisit.IsConfirmedClinicalData = true; dbSubjectVisit.IsConfirmedClinicalData = true;
var signSuccess = await _repository.BatchUpdateAsync<TrialSign>(t => t.Id == cRCReuploadFinishedCommand.SignId, u => new TrialSign() { IsCompleted = true }); //var signSuccess = await _repository.BatchUpdateAsync<TrialSign>(t => t.Id == cRCReuploadFinishedCommand.SignId, u => new TrialSign() { IsCompleted = true });
} }
var success = await _repository.SaveChangesAsync(); var success = await _subjectVisitRepository.SaveChangesAsync();
return ResponseOutput.Ok(success); return ResponseOutput.Result(success);
} }
@ -1871,9 +1911,14 @@ namespace IRaCIS.Core.Application.Image.QA
[TypeFilter(typeof(TrialResourceFilter))] [TypeFilter(typeof(TrialResourceFilter))]
public async Task<IResponseOutput> CRCRequestReUpload(Guid qcChallengeId) public async Task<IResponseOutput> CRCRequestReUpload(Guid qcChallengeId)
{ {
var qcChallenge = await _repository.FirstOrDefaultAsync<QCChallenge>(t => t.Id == qcChallengeId); var qcChallenge = (await _qcChallengeRepository.FirstOrDefaultAsync(t => t.Id == qcChallengeId)).IfNullThrowException();
if (qcChallenge.ReuploadEnum != QCChanllengeReuploadEnum.None || qcChallenge.ReuploadEnum != QCChanllengeReuploadEnum.CRCReuploaded)
{
throw new BusinessValidationFailedException("当前质疑重传状态不为初始状态|CRC重传完成状态状态不允许申请重传");
}
if (qcChallenge == null) return Null404NotFound(qcChallenge);
if (qcChallenge.ReuploadEnum == QCChanllengeReuploadEnum.CRCReuploaded) if (qcChallenge.ReuploadEnum == QCChanllengeReuploadEnum.CRCReuploaded)
{ {
@ -1892,7 +1937,7 @@ namespace IRaCIS.Core.Application.Image.QA
TalkContent = "CRC申请重传/上传影像" TalkContent = "CRC申请重传/上传影像"
}); });
await _repository.SaveChangesAsync(); await _qcChallengeRepository.SaveChangesAsync();
return ResponseOutput.Ok(); return ResponseOutput.Ok();
} }

View File

@ -32,6 +32,8 @@ namespace IRaCIS.Core.Domain.Models
public string ReUploader { get; set; } = string.Empty; public string ReUploader { get; set; } = string.Empty;
public Guid? ReUploadUserId { get; set; }
public TrialQCProcess QCProcessEnum { get; set; } public TrialQCProcess QCProcessEnum { get; set; }
public CurrentQC CurrentQCEnum { get; set; } public CurrentQC CurrentQCEnum { get; set; }