From 2ad979bee99f283878f218ff927df3a1e549653b Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 20 Apr 2022 14:43:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=80=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/InspectionController.cs | 2 +- .../IRaCIS.Core.Application.csproj | 2 + .../Common/DTO/FrontAuditConfigViewModel.cs | 2 +- .../Service/QC/NoneDicomStudyService.cs | 81 +++++++++++-------- 4 files changed, 50 insertions(+), 37 deletions(-) diff --git a/IRaCIS.Core.API/Controllers/InspectionController.cs b/IRaCIS.Core.API/Controllers/InspectionController.cs index 7f6ed7557..963a5c088 100644 --- a/IRaCIS.Core.API/Controllers/InspectionController.cs +++ b/IRaCIS.Core.API/Controllers/InspectionController.cs @@ -456,7 +456,7 @@ namespace IRaCIS.Core.API.Controllers public async Task deleteNoneDicomStudyFile(DataInspectionDto opt) { var fun = _noneDicomStudyService.DeleteNoneDicomStudyFile; - opt.AuditInfo.GeneralId = opt.OptCommand.Id; + //opt.AuditInfo.GeneralId = opt.OptCommand.Id; return await _inspectionService.Enforcement(opt.OptCommand.Id, opt.AuditInfo, opt.SignInfo, fun); } diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.csproj b/IRaCIS.Core.Application/IRaCIS.Core.Application.csproj index 22b0fd495..b01f6d8b5 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.csproj +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.csproj @@ -77,10 +77,12 @@ + + diff --git a/IRaCIS.Core.Application/Service/Common/DTO/FrontAuditConfigViewModel.cs b/IRaCIS.Core.Application/Service/Common/DTO/FrontAuditConfigViewModel.cs index 5c724f2d6..3a5c89b2e 100644 --- a/IRaCIS.Core.Application/Service/Common/DTO/FrontAuditConfigViewModel.cs +++ b/IRaCIS.Core.Application/Service/Common/DTO/FrontAuditConfigViewModel.cs @@ -196,7 +196,7 @@ namespace IRaCIS.Core.Application.ViewModel /// 日期类型 /// - public string DateType { get; set; } + public string DateType { get; set; }=string.Empty; } diff --git a/IRaCIS.Core.Application/Service/QC/NoneDicomStudyService.cs b/IRaCIS.Core.Application/Service/QC/NoneDicomStudyService.cs index d83aa0802..332e7026d 100644 --- a/IRaCIS.Core.Application/Service/QC/NoneDicomStudyService.cs +++ b/IRaCIS.Core.Application/Service/QC/NoneDicomStudyService.cs @@ -13,6 +13,7 @@ using IRaCIS.Core.Infra.EFCore; using Newtonsoft.Json; using IRaCIS.Core.Application.Service.Inspection.Interface; using IRaCIS.Core.Application.Service.Inspection.DTO; +using Nito.AsyncEx; namespace IRaCIS.Core.Application.Contracts { @@ -28,6 +29,10 @@ namespace IRaCIS.Core.Application.Contracts private readonly IInspectionService _inspectionService; private readonly IRepository _noneDicomStudyFileRepository; + + private readonly AsyncLock _mutex = new AsyncLock(); + + public NoneDicomStudyService(IRepository noneDicomStudyRepository, IHttpContextAccessor httpContext, IWebHostEnvironment hostEnvironment, @@ -57,44 +62,50 @@ namespace IRaCIS.Core.Application.Contracts [TypeFilter(typeof(TrialResourceFilter))] public async Task> AddOrUpdateNoneDicomStudy(NoneDicomStudyAddOrEdit addOrEditNoneDicomStudy) { - var entity = await _noneDicomStudyRepository.InsertOrUpdateAsync(addOrEditNoneDicomStudy, false); - - if (_repository.Entry(entity).State == Microsoft.EntityFrameworkCore.EntityState.Added) + using (await _mutex.LockAsync()) { - entity.Code = _noneDicomStudyRepository.Where(t => t.TrialId == addOrEditNoneDicomStudy.TrialId).Select(t => t.Code).DefaultIfEmpty().Max() + 1; + + var entity = await _noneDicomStudyRepository.InsertOrUpdateAsync(addOrEditNoneDicomStudy, false); + + if (_repository.Entry(entity).State == Microsoft.EntityFrameworkCore.EntityState.Added) + { + entity.Code = _noneDicomStudyRepository.Where(t => t.TrialId == addOrEditNoneDicomStudy.TrialId).Select(t => t.Code).DefaultIfEmpty().Max() + 1; + } + + entity.StudyCode = "NST" + entity.Code.ToString("D5"); + await _repository.SaveChangesAsync(); + + var svTime = _repository.Where(t => t.Id == addOrEditNoneDicomStudy.SubjectVisitId).Select(t => new + { + DicomStudyMinStudyTime = t.StudyList.Min(t => (DateTime?)t.StudyTime), + DicomStudyMaxStudyTime = t.StudyList.Max(t => (DateTime?)t.StudyTime), + NoneDicomStudyMinStudyTime = t.NoneDicomStudyList.Min(t => (DateTime?)t.ImageDate), + NoneDicomStudyMaxStudyTime = t.NoneDicomStudyList.Max(t => (DateTime?)t.ImageDate) + }).FirstOrDefault().IfNullThrowException(); + + var minArray = new DateTime?[] { svTime.DicomStudyMinStudyTime, svTime.NoneDicomStudyMinStudyTime, addOrEditNoneDicomStudy.ImageDate }; + var maxArray = new DateTime?[] { svTime.DicomStudyMaxStudyTime, svTime.NoneDicomStudyMaxStudyTime, addOrEditNoneDicomStudy.ImageDate }; + + await _repository.BatchUpdateAsync(t => t.Id == addOrEditNoneDicomStudy.SubjectVisitId, u => new SubjectVisit() + { + VisitExecuted = VisitExecutedEnum.Executed, + + EarliestScanDate = minArray.Min(), + + LatestScanDate = maxArray.Max() + }); + + await _repository.SaveChangesAsync(); + + NoneDicomStudyAddReturnDto noneDicom = new NoneDicomStudyAddReturnDto() + { + StudyCode = entity.StudyCode, + Id = entity.Id + }; + return ResponseOutput.Ok(noneDicom); } - entity.StudyCode = "NST" + entity.Code.ToString("D5"); - await _repository.SaveChangesAsync(); - - var svTime = _repository.Where(t => t.Id == addOrEditNoneDicomStudy.SubjectVisitId).Select(t => new - { - DicomStudyMinStudyTime = t.StudyList.Min(t => (DateTime?)t.StudyTime), - DicomStudyMaxStudyTime = t.StudyList.Max(t => (DateTime?)t.StudyTime), - NoneDicomStudyMinStudyTime = t.NoneDicomStudyList.Min(t => (DateTime?)t.ImageDate), - NoneDicomStudyMaxStudyTime = t.NoneDicomStudyList.Max(t => (DateTime?)t.ImageDate) - }).FirstOrDefault().IfNullThrowException(); - - var minArray = new DateTime?[] { svTime.DicomStudyMinStudyTime, svTime.NoneDicomStudyMinStudyTime, addOrEditNoneDicomStudy.ImageDate }; - var maxArray = new DateTime?[] { svTime.DicomStudyMaxStudyTime, svTime.NoneDicomStudyMaxStudyTime, addOrEditNoneDicomStudy.ImageDate }; - - await _repository.BatchUpdateAsync(t => t.Id == addOrEditNoneDicomStudy.SubjectVisitId, u => new SubjectVisit() - { - VisitExecuted = VisitExecutedEnum.Executed, - - EarliestScanDate = minArray.Min(), - - LatestScanDate = maxArray.Max() - }); - - await _repository.SaveChangesAsync(); - - NoneDicomStudyAddReturnDto noneDicom = new NoneDicomStudyAddReturnDto() - { - StudyCode= entity.StudyCode, - Id= entity.Id - }; - return ResponseOutput.Ok(noneDicom); + }