diff --git a/IRaCIS.Core.Application/Service/QC/ClinicalDataService.cs b/IRaCIS.Core.Application/Service/QC/ClinicalDataService.cs index 8484ce835..c0302062d 100644 --- a/IRaCIS.Core.Application/Service/QC/ClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/QC/ClinicalDataService.cs @@ -10,6 +10,8 @@ using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Application.Helper; using IRaCIS.Core.Infrastructure; using IRaCIS.Core.Application.Service.Verify; +using Microsoft.AspNetCore.Authorization; +using IRaCIS.Core.Application.Auth; namespace IRaCIS.Core.Application.Contracts { @@ -51,6 +53,7 @@ namespace IRaCIS.Core.Application.Contracts /// [HttpPost("{trialId:guid}/{subjectVisitId:guid}")] [DisableRequestSizeLimit] + [Authorize(Policy = IRaCISPolicy.CRC)] public async Task UploadVisitClinicalData(IFormCollection formCollection, Guid subjectVisitId, [FromServices] IWebHostEnvironment _hostEnvironment) { await QCCommonVerify.VerifyIsCRCSubmmitAsync(_repository, _userInfo, subjectVisitId); diff --git a/IRaCIS.Core.Application/Service/QC/NoneDicomStudyService.cs b/IRaCIS.Core.Application/Service/QC/NoneDicomStudyService.cs index 308615585..69f749d43 100644 --- a/IRaCIS.Core.Application/Service/QC/NoneDicomStudyService.cs +++ b/IRaCIS.Core.Application/Service/QC/NoneDicomStudyService.cs @@ -8,9 +8,7 @@ using Microsoft.AspNetCore.Http; using IRaCIS.Core.Domain.Share; using SharpCompress.Archives; using IRaCIS.Core.Application.Filter; -using Newtonsoft.Json; using IRaCIS.Core.Application.Service.Inspection.Interface; -using IRaCIS.Core.Application.Service.Inspection.DTO; using Nito.AsyncEx; using IRaCIS.Application.Interfaces; using IRaCIS.Core.Infrastructure; @@ -18,6 +16,8 @@ using Microsoft.Extensions.Logging; using System.ComponentModel.DataAnnotations; using IRaCIS.Core.Application.Helper; using IRaCIS.Core.Application.Service.Verify; +using Microsoft.AspNetCore.Authorization; +using IRaCIS.Core.Application.Auth; namespace IRaCIS.Core.Application.Contracts { @@ -77,34 +77,12 @@ namespace IRaCIS.Core.Application.Contracts [TypeFilter(typeof(TrialResourceFilter))] public async Task> AddOrUpdateNoneDicomStudy(NoneDicomStudyAddOrEdit addOrEditNoneDicomStudy) { - var visitList = await _subjectVisitRepository.Where(t => t.SubjectId == addOrEditNoneDicomStudy.SubjectId).Select(t => new { t.VisitNum, t.EarliestScanDate, t.LatestScanDate, t.Id }).ToListAsync(); - var currentVisitNum = await _subjectVisitRepository.Where(t => t.Id == addOrEditNoneDicomStudy.SubjectVisitId).Select(t => t.VisitNum).FirstOrDefaultAsync(); + await QCCommonVerify.VerifyIsCRCSubmmitAsync(_repository, _userInfo, addOrEditNoneDicomStudy.SubjectVisitId); - if (addOrEditNoneDicomStudy.Id == null) - { - //更新验证的时候,排除自己 - visitList = visitList.Where(t => t.Id != addOrEditNoneDicomStudy.Id).ToList(); - } - - //小于当前访视 最近的最晚拍片 - var before = visitList.Where(u => u.VisitNum < currentVisitNum).Max(k => k.LatestScanDate); - - if (before != null && before > addOrEditNoneDicomStudy.ImageDate) - { - throw new BusinessValidationFailedException($"当前访视检查时间{addOrEditNoneDicomStudy.ImageDate.ToString("yyyy-MM-dd")}不能早于前序访视检查时间{before?.ToString("yyyy-MM-dd")},请核对检查数据是否有误"); - } - - - //大于当前访视 最近的最早拍片日期 - var after = visitList.Where(u => u.VisitNum > currentVisitNum).Min(k => k.EarliestScanDate); - - if (after != null && after < addOrEditNoneDicomStudy.ImageDate) - { - throw new BusinessValidationFailedException($"当前访视检查时间{addOrEditNoneDicomStudy.ImageDate.ToString("yyyy-MM-dd")}不能晚于该访视之后的检查时间{after?.ToString("yyyy-MM-dd")},请核对检查数据是否有误"); - - } + await QCCommonVerify.VerifyStudyImageDataAsync(_repository, addOrEditNoneDicomStudy.SubjectId, addOrEditNoneDicomStudy.SubjectVisitId, addOrEditNoneDicomStudy.ImageDate); + NoneDicomStudy? optEntity = null; using (await _mutex.LockAsync()) { @@ -121,14 +99,7 @@ namespace IRaCIS.Core.Application.Contracts } else { - - if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.IQC) - { - - await QCCommonVerify.VerifyIsCanQCAsync(_repository, _userInfo, null, addOrEditNoneDicomStudy.SubjectVisitId); - - } - + optEntity = await _noneDicomStudyRepository.UpdateFromDTOAsync(addOrEditNoneDicomStudy); } @@ -211,6 +182,7 @@ namespace IRaCIS.Core.Application.Contracts [RequestSizeLimit(1_073_741_824)] [HttpPost("{trialId:guid}/{subjectVisitId:guid}/{noneDicomStudyId:guid}")] [TypeFilter(typeof(TrialResourceFilter))] + [Authorize(Policy = IRaCISPolicy.CRC)] public async Task UploadNoneDicomFile(IFormCollection formCollection, Guid subjectVisitId, Guid noneDicomStudyId) { await QCCommonVerify.VerifyIsCRCSubmmitAsync(_repository, _userInfo, subjectVisitId); @@ -310,19 +282,5 @@ namespace IRaCIS.Core.Application.Contracts await _noneDicomStudyFileRepository.AddAsync(new NoneDicomStudyFile() { FileName = fileName, Path = relativePath, NoneDicomStudyId = noneDicomStudyId }); } - - - /// - /// 上传非Dicom 文件 支持压缩包 - /// - [HttpPost] - [Obsolete] - public async Task NewUploadNoneDicomFile([FromForm] UploadNoneDicomFileDto fileDto) - { - var file = this._httpContext.HttpContext?.Request.Form; - var result = await UploadNoneDicomFile(file, fileDto.subjectVisitId, fileDto.noneDicomStudyId); - return result; - } - } } diff --git a/IRaCIS.Core.Application/Service/QC/QCCommonVerify.cs b/IRaCIS.Core.Application/Service/QC/QCCommonVerify.cs index b6d38edf0..a9540b5b5 100644 --- a/IRaCIS.Core.Application/Service/QC/QCCommonVerify.cs +++ b/IRaCIS.Core.Application/Service/QC/QCCommonVerify.cs @@ -6,7 +6,14 @@ namespace IRaCIS.Core.Application.Service.Verify { public static class QCCommonVerify { - + /// + /// 验证CRC 是否已提交 已提交 就不允许进行任何操作,如果是IQC 那么还验证是否是当前任务领取人 + /// + /// + /// + /// + /// + /// public static async Task VerifyIsCRCSubmmitAsync(IRepository _repository, IUserInfo _userInfo, Guid? subjectVisitId=null) { //添加的时候不验证 @@ -19,6 +26,13 @@ namespace IRaCIS.Core.Application.Service.Verify } } + //IQC 的时候 验证是不是当前领取人 + if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.IQC) + { + + await VerifyIsCanQCAsync(_repository, _userInfo, null, subjectVisitId); + + } } @@ -34,6 +48,36 @@ namespace IRaCIS.Core.Application.Service.Verify throw new BusinessValidationFailedException("您不是该质控任务当前领取人,没有操作权限!"); } } - + + + + public static async Task VerifyStudyImageDataAsync(IRepository _repository, Guid subjectId, Guid subjectVisitId,DateTime imageDate) + { + var visitList = await _repository.Where(t => t.SubjectId == subjectId).Select(t => new { t.VisitNum, t.EarliestScanDate, t.LatestScanDate, t.Id }).ToListAsync(); + + var currentVisitNum = await _repository.Where(t => t.Id == subjectVisitId).Select(t => t.VisitNum).FirstOrDefaultAsync(); + + + + //小于当前访视 最近的最晚拍片 + var before = visitList.Where(u => u.VisitNum < currentVisitNum).Max(k => k.LatestScanDate); + + if (before != null && before > imageDate) + { + throw new BusinessValidationFailedException($"当前访视检查时间{imageDate.ToString("yyyy-MM-dd")}不能早于前序访视检查时间{before?.ToString("yyyy-MM-dd")},请核对检查数据是否有误"); + } + + + //大于当前访视 最近的最早拍片日期 + var after = visitList.Where(u => u.VisitNum > currentVisitNum).Min(k => k.EarliestScanDate); + + if (after != null && after < imageDate) + { + throw new BusinessValidationFailedException($"当前访视检查时间{imageDate.ToString("yyyy-MM-dd")}不能晚于该访视之后的检查时间{after?.ToString("yyyy-MM-dd")},请核对检查数据是否有误"); + + } + } + + } }