From 6e38f3f3dfcdcab8fe77b51992b082532782fecc Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Mon, 9 Sep 2024 15:21:07 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=BD=B1=E5=83=8F?= =?UTF-8?q?=E7=AD=9B=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ImageAndDoc/DownloadAndUploadService.cs | 4 +++- IRaCIS.Core.Application/Service/ImageAndDoc/_MapConfig.cs | 5 +++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index 1de05482f..33e79a3f7 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -787,9 +787,10 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc select new { - SubjectCode = sv.Subject.Code, + SubjectCode = inQuery.SubjectCode, VisitName = sv.VisitName, StudyList = sv.StudyList.Where(t => isQueryDicom ? inQuery.DicomStudyIdList.Contains(t.Id) : false) + .Where(t=>info.IsImageFilter? ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|"):true) .Select(u => new { u.PatientId, @@ -809,6 +810,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc }), NoneDicomStudyList = sv.NoneDicomStudyList.Where(t => isQueryNoneDicom ? inQuery.NoneDicomStudyIdList.Contains(t.Id) : false) + .Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.Modality + "|") : true) .Select(nd => new { nd.Modality, diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/_MapConfig.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/_MapConfig.cs index d6fb7d319..1d8c270d2 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/_MapConfig.cs @@ -1,4 +1,5 @@ using AutoMapper; +using DocumentFormat.OpenXml.EMMA; using IRaCIS.Application.Contracts; using IRaCIS.Core.Application.Contracts; using IRaCIS.Core.Application.Contracts.Dicom.DTO; @@ -138,8 +139,8 @@ namespace IRaCIS.Core.Application.Service .ForMember(d => d.IsImageFilter, u => u.MapFrom(s => s.TrialReadingCriterion.IsImageFilter)) .ForMember(d => d.CriterionModalitys, u => u.MapFrom(s => s.TrialReadingCriterion.CriterionModalitys)) .ForMember(d => d.SubjectCode, u => u.MapFrom(u => u.IsSelfAnalysis == true ? u.BlindSubjectCode : u.Subject.Code)) - .ForMember(d => d.DicomStudyList, u => u.MapFrom(s => s.SourceSubjectVisit.StudyList)) - .ForMember(d => d.NoneDicomStudyList, u => u.MapFrom(s => s.SourceSubjectVisit.NoneDicomStudyList)) + .ForMember(d => d.DicomStudyList, u => u.MapFrom(s => s.TrialReadingCriterion.IsImageFilter? s.SourceSubjectVisit.StudyList.Where(t=> ("|" + s.TrialReadingCriterion.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|")) : s.SourceSubjectVisit.StudyList)) + .ForMember(d => d.NoneDicomStudyList, u => u.MapFrom(s => s.TrialReadingCriterion.IsImageFilter ? s.SourceSubjectVisit.NoneDicomStudyList.Where(t => ("|" + s.TrialReadingCriterion.CriterionModalitys + "|").Contains("|" + t.Modality + "|")) : s.SourceSubjectVisit.NoneDicomStudyList)) ; From afa2b50951a1802e4d031909327b968845489e5f Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Mon, 9 Sep 2024 15:55:08 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=AD=9B=E9=80=89bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ImageAndDoc/DTO/UnionStudyViewDodel.cs | 10 ++++++- .../ImageAndDoc/DownloadAndUploadService.cs | 29 +++++++++++++++---- .../Service/ImageAndDoc/_MapConfig.cs | 4 +-- 3 files changed, 34 insertions(+), 9 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs index 25856ce22..088c77ef3 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs @@ -541,11 +541,19 @@ namespace IRaCIS.Core.Application.Contracts [NotDefault] public string SubjectCode { get; set; } - public List SubjectVisitIdList { get; set; } + public List SubjectVisitTaskList { get; set; } public List DicomStudyIdList { get; set; } public List NoneDicomStudyIdList { get; set; } } + + + public class SubjectVisitTaskInfo + { + public Guid SubjectVisitId { get; set; } + + public Guid VisitTaskId { get; set; } + } } diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index 33e79a3f7..aa1d7fb8d 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -1,4 +1,6 @@ -using FellowOakDicom; +using Amazon.Runtime.EventStreams.Internal; +using DocumentFormat.OpenXml.EMMA; +using FellowOakDicom; using IRaCIS.Application.Contracts; using IRaCIS.Core.Application.Contracts; using IRaCIS.Core.Application.Contracts.Dicom.DTO; @@ -356,7 +358,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc if (studyMonitor.IsDicomReUpload == false) { //目前不考虑重传的问题,后面的直接覆盖前面的,全部删除 - if(_taskStudyRepository.Any(t=>t.VisitTaskId==visiTaskId && t.StudyInstanceUid == incommand.Study.StudyInstanceUid)) + if (_taskStudyRepository.Any(t => t.VisitTaskId == visiTaskId && t.StudyInstanceUid == incommand.Study.StudyInstanceUid)) { await _taskStudyRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visiTaskId); await _taskSeriesRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visiTaskId); @@ -559,8 +561,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc } else { - await _taskStudyRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId && t.Id== dicomStudyId); - await _taskSeriesRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId && t.Id== dicomStudyId); + await _taskStudyRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId && t.Id == dicomStudyId); + await _taskSeriesRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId && t.Id == dicomStudyId); await _taskInstanceRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId && t.Id == dicomStudyId); } } @@ -723,6 +725,16 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc var list = await query.Where(t => t.SubjectCode == inQuery.SubjectCode).ToListAsync(); + foreach (var item in list) + { + if (item.IsImageFilter) + { + item.DicomStudyList = item.DicomStudyList.Where(t => ("|" + item.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|")).ToList(); + item.NoneDicomStudyList = item.NoneDicomStudyList.Where(t => ("|" + item.CriterionModalitys + "|").Contains("|" + t.Modality + "|")).ToList(); + } + } + + #region 将任务级别转为检查级别 var result = new List(); @@ -783,14 +795,17 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc var isQueryDicom = inQuery.DicomStudyIdList.Count > 0; var isQueryNoneDicom = inQuery.NoneDicomStudyIdList.Count > 0; - var query = from sv in _subjectRepository.Where(t => t.Id == inQuery.SubjectId).SelectMany(t => t.SubjectVisitList.Where(t => inQuery.SubjectVisitIdList.Contains(t.Id))) + var subjectVisitIdList = inQuery.SubjectVisitTaskList.Select(t => t.SubjectVisitId).ToList(); + var query = from sv in _subjectRepository.Where(t => t.Id == inQuery.SubjectId).SelectMany(t => t.SubjectVisitList.Where(t => subjectVisitIdList.Contains(t.Id))) + join visitTask in _visitTaskRepository.Where() on sv.Id equals visitTask.SourceSubjectVisitId select new { SubjectCode = inQuery.SubjectCode, VisitName = sv.VisitName, + TaskBlindName = visitTask.TaskBlindName, StudyList = sv.StudyList.Where(t => isQueryDicom ? inQuery.DicomStudyIdList.Contains(t.Id) : false) - .Where(t=>info.IsImageFilter? ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|"):true) + .Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true) .Select(u => new { u.PatientId, @@ -830,6 +845,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc var result = await query.ToListAsync(); + + return ResponseOutput.Ok(result); } diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/_MapConfig.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/_MapConfig.cs index 1d8c270d2..78b0c12ea 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/_MapConfig.cs @@ -139,8 +139,8 @@ namespace IRaCIS.Core.Application.Service .ForMember(d => d.IsImageFilter, u => u.MapFrom(s => s.TrialReadingCriterion.IsImageFilter)) .ForMember(d => d.CriterionModalitys, u => u.MapFrom(s => s.TrialReadingCriterion.CriterionModalitys)) .ForMember(d => d.SubjectCode, u => u.MapFrom(u => u.IsSelfAnalysis == true ? u.BlindSubjectCode : u.Subject.Code)) - .ForMember(d => d.DicomStudyList, u => u.MapFrom(s => s.TrialReadingCriterion.IsImageFilter? s.SourceSubjectVisit.StudyList.Where(t=> ("|" + s.TrialReadingCriterion.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|")) : s.SourceSubjectVisit.StudyList)) - .ForMember(d => d.NoneDicomStudyList, u => u.MapFrom(s => s.TrialReadingCriterion.IsImageFilter ? s.SourceSubjectVisit.NoneDicomStudyList.Where(t => ("|" + s.TrialReadingCriterion.CriterionModalitys + "|").Contains("|" + t.Modality + "|")) : s.SourceSubjectVisit.NoneDicomStudyList)) + .ForMember(d => d.DicomStudyList, u => u.MapFrom(s => s.SourceSubjectVisit.StudyList)) + .ForMember(d => d.NoneDicomStudyList, u => u.MapFrom(s => s.SourceSubjectVisit.NoneDicomStudyList)) ; From 3dbf329a3139b548526bd706fe456ab03db45249 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Mon, 9 Sep 2024 16:36:29 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ImageAndDoc/DownloadAndUploadService.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index aa1d7fb8d..874fad30a 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -798,7 +798,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc var subjectVisitIdList = inQuery.SubjectVisitTaskList.Select(t => t.SubjectVisitId).ToList(); var query = from sv in _subjectRepository.Where(t => t.Id == inQuery.SubjectId).SelectMany(t => t.SubjectVisitList.Where(t => subjectVisitIdList.Contains(t.Id))) - join visitTask in _visitTaskRepository.Where() on sv.Id equals visitTask.SourceSubjectVisitId + join visitTask in _visitTaskRepository.Where(t=>t.TaskState==TaskState.Effect && t.DoctorUserId == _userInfo.Id && t.TrialReadingCriterionId==inQuery.TrialReadingCriterionId) + on sv.Id equals visitTask.SourceSubjectVisitId select new { SubjectCode = inQuery.SubjectCode, From 3730d955dd3f86b0168006e5fabdbb1d7337a22f Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Mon, 9 Sep 2024 17:06:37 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BC=93=E5=AD=98key?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.Application/Helper/CacheHelper.cs | 2 +- .../Service/ImageAndDoc/DownloadAndUploadService.cs | 10 +++------- .../Service/ImageAndDoc/StudyService.cs | 12 ++++++++++-- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/IRaCIS.Core.Application/Helper/CacheHelper.cs b/IRaCIS.Core.Application/Helper/CacheHelper.cs index f2135ea9b..3cafbc58a 100644 --- a/IRaCIS.Core.Application/Helper/CacheHelper.cs +++ b/IRaCIS.Core.Application/Helper/CacheHelper.cs @@ -18,7 +18,7 @@ namespace IRaCIS.Core.Application.Helper public static string TrialStudyUidDBLock(Guid trialId, string studyUid) => $"TrialStudyUidDBLock:{trialId}_{studyUid}"; - + public static string TrialTaskStudyUidDBLock(Guid trialId, Guid visiTaskId, string studyUid) => $"TrialTaskStudyUidDBLock:{trialId}_{visiTaskId}_{studyUid}"; public static string SystemAnonymization => $"SystemAnonymization"; diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index 874fad30a..68add7e6b 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -326,7 +326,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc using (await @uploadLock.AcquireAsync()) { - if (_fusionCache.GetOrDefault(CacheKeys.TrialStudyUidDBLock(incommand.TrialId, incommand.Study.StudyInstanceUid)) != Guid.Empty) + if (_fusionCache.GetOrDefault(CacheKeys.TrialTaskStudyUidDBLock(incommand.TrialId, incommand.VisitTaskId, incommand.Study.StudyInstanceUid)) != Guid.Empty) { //---当前已有人正在上传和归档该检查! return ResponseOutput.NotOk(StaticData.International("UploadDownLoad_ArchiveInProgress")); @@ -334,7 +334,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc else { //在事务未完成前 防止前端重复提交 - await _fusionCache.SetAsync(CacheKeys.TrialStudyUidDBLock(incommand.TrialId, incommand.Study.StudyInstanceUid), _userInfo.Id, TimeSpan.FromMinutes(3)); + await _fusionCache.SetAsync(CacheKeys.TrialTaskStudyUidDBLock(incommand.TrialId, incommand.VisitTaskId, incommand.Study.StudyInstanceUid), _userInfo.Id, TimeSpan.FromMinutes(3)); } } @@ -442,10 +442,6 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc await _taskInstanceRepository.AddAsync(isntance); } } - - - - } else { @@ -535,7 +531,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc } finally { - await _fusionCache.RemoveAsync(CacheKeys.TrialStudyUidUploading(incommand.TrialId, incommand.Study.StudyInstanceUid)); + await _fusionCache.RemoveAsync(CacheKeys.TrialTaskStudyUidDBLock(incommand.TrialId, incommand.VisitTaskId, incommand.Study.StudyInstanceUid)); } diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs index ef6d6c0c9..5cb6b03ee 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs @@ -103,9 +103,17 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc } [HttpGet] - public async Task DicomUploadInProgress(Guid trialId, string studyInstanceUid) + public async Task DicomUploadInProgress(Guid trialId, string studyInstanceUid,Guid? visitTaskId) { - await _fusionCache.SetAsync(CacheKeys.TrialStudyUidUploading(trialId, studyInstanceUid), _userInfo.Id, TimeSpan.FromSeconds(15)); + if(visitTaskId != null) + { + await _fusionCache.SetAsync(CacheKeys.TrialTaskStudyUidDBLock(trialId, visitTaskId.Value, studyInstanceUid), _userInfo.Id, TimeSpan.FromSeconds(15)); + } + else + { + await _fusionCache.SetAsync(CacheKeys.TrialStudyUidUploading(trialId, studyInstanceUid), _userInfo.Id, TimeSpan.FromSeconds(15)); + + } return ResponseOutput.Ok(); From 578281b707a27e9a98b32db7c28ba7f5d3b4cc47 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Mon, 9 Sep 2024 17:28:21 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E7=BC=93=E5=AD=98=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.Application/Helper/CacheHelper.cs | 9 ++++++--- .../Service/ImageAndDoc/DownloadAndUploadService.cs | 7 ++++--- .../Service/ImageAndDoc/StudyService.cs | 12 +++++++++++- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/IRaCIS.Core.Application/Helper/CacheHelper.cs b/IRaCIS.Core.Application/Helper/CacheHelper.cs index 3cafbc58a..f3cf0cf51 100644 --- a/IRaCIS.Core.Application/Helper/CacheHelper.cs +++ b/IRaCIS.Core.Application/Helper/CacheHelper.cs @@ -12,16 +12,19 @@ namespace IRaCIS.Core.Application.Helper { public static string Trial(string trialIdStr) => $"TrialId:{trialIdStr}"; + //检查编号递增锁 public static string TrialStudyMaxCode(Guid trialId) => $"TrialStudyMaxCode:{trialId}"; public static string TrialStudyUidUploading(Guid trialId, string studyUid) => $"TrialStudyUid:{trialId}_{studyUid}"; - + //CRC上传影像提交锁key public static string TrialStudyUidDBLock(Guid trialId, string studyUid) => $"TrialStudyUidDBLock:{trialId}_{studyUid}"; + public static string TrialTaskStudyUidUploading(Guid trialId, Guid visiTaskId, string studyUid) => $"TrialStudyUid:{trialId}_{visiTaskId}_{studyUid}"; + //影像后处理上传提交锁key public static string TrialTaskStudyUidDBLock(Guid trialId, Guid visiTaskId, string studyUid) => $"TrialTaskStudyUidDBLock:{trialId}_{visiTaskId}_{studyUid}"; - + //系统匿名化 public static string SystemAnonymization => $"SystemAnonymization"; - + //前端国际化 public static string FrontInternational => $"FrontInternationalList"; //登录挤账号 diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index 68add7e6b..dd6458838 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -334,7 +334,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc else { //在事务未完成前 防止前端重复提交 - await _fusionCache.SetAsync(CacheKeys.TrialTaskStudyUidDBLock(incommand.TrialId, incommand.VisitTaskId, incommand.Study.StudyInstanceUid), _userInfo.Id, TimeSpan.FromMinutes(3)); + await _fusionCache.SetAsync(CacheKeys.TrialTaskStudyUidDBLock(incommand.TrialId, incommand.VisitTaskId, incommand.Study.StudyInstanceUid), _userInfo.Id, TimeSpan.FromMinutes(1)); } } @@ -532,6 +532,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc finally { await _fusionCache.RemoveAsync(CacheKeys.TrialTaskStudyUidDBLock(incommand.TrialId, incommand.VisitTaskId, incommand.Study.StudyInstanceUid)); + await _fusionCache.RemoveAsync(CacheKeys.TrialTaskStudyUidUploading(incommand.TrialId, incommand.VisitTaskId, incommand.Study.StudyInstanceUid)); } @@ -794,7 +795,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc var subjectVisitIdList = inQuery.SubjectVisitTaskList.Select(t => t.SubjectVisitId).ToList(); var query = from sv in _subjectRepository.Where(t => t.Id == inQuery.SubjectId).SelectMany(t => t.SubjectVisitList.Where(t => subjectVisitIdList.Contains(t.Id))) - join visitTask in _visitTaskRepository.Where(t=>t.TaskState==TaskState.Effect && t.DoctorUserId == _userInfo.Id && t.TrialReadingCriterionId==inQuery.TrialReadingCriterionId) + join visitTask in _visitTaskRepository.Where(t => t.TaskState == TaskState.Effect && t.DoctorUserId == _userInfo.Id && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId) on sv.Id equals visitTask.SourceSubjectVisitId select new { @@ -842,7 +843,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc var result = await query.ToListAsync(); - + return ResponseOutput.Ok(result); } diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs index 5cb6b03ee..9c7bc702c 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs @@ -107,7 +107,17 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc { if(visitTaskId != null) { - await _fusionCache.SetAsync(CacheKeys.TrialTaskStudyUidDBLock(trialId, visitTaskId.Value, studyInstanceUid), _userInfo.Id, TimeSpan.FromSeconds(15)); + var cacheValue = _fusionCache.GetOrDefault(CacheKeys.TrialTaskStudyUidUploading(trialId, visitTaskId.Value, studyInstanceUid)); + if (cacheValue != Guid.Empty && cacheValue !=_userInfo.Id) + { + //---当前已有人正在上传和归档该检查! + return ResponseOutput.NotOk(StaticData.International("UploadDownLoad_ArchiveInProgress")); + } + else + { + await _fusionCache.SetAsync(CacheKeys.TrialTaskStudyUidUploading(trialId, visitTaskId.Value, studyInstanceUid), _userInfo.Id, TimeSpan.FromSeconds(15)); + + } } else { From 16107dc8a92954dc84590d00d99e863a33a73add Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Mon, 9 Sep 2024 17:35:08 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E5=8F=97=E8=AF=95=E8=80=85=E9=9A=8F?= =?UTF-8?q?=E6=9C=BA=EF=BC=8C=E9=87=8D=E9=98=85=E5=90=8E=EF=BC=8C=E4=B8=8D?= =?UTF-8?q?=E9=87=8D=E6=96=B0=E7=BC=96=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ImageAndDoc/DownloadAndUploadService.cs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index dd6458838..b59a3e043 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -79,19 +79,28 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc //已经处理过的任务名称的数量 - var haveDealedTaskCount = await _visitTaskRepository.CountAsync(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == false && t.DoctorUserId == _userInfo.Id - && t.ReadingTaskState != ReadingTaskState.HaveSigned && t.ReadingCategory == ReadingCategory.Visit && t.TaskBlindName != "Timepoint"); + var haveDealedTaskList = await _visitTaskRepository.Where(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == false && t.DoctorUserId == _userInfo.Id + && t.ReadingTaskState != ReadingTaskState.HaveSigned && t.ReadingCategory == ReadingCategory.Visit && t.TaskBlindName != "Timepoint").Select(t => new { t.TaskBlindName, t.SourceSubjectVisitId, t.SouceReadModuleId }).ToListAsync(); //随机赋值编号 比如要处理5个任务,实例化一个包含1-5的数组,每次随机取出一个 - List availableNumbers = Enumerable.Range(haveDealedTaskCount + haveFinishedTaskCount + 1, needDealTaskList.Count).ToList(); + List availableNumbers = Enumerable.Range(haveDealedTaskList.Count + haveFinishedTaskCount + 1, needDealTaskList.Count).ToList(); Random rng = new Random(); foreach (var visitTask in needDealTaskList) { int randomIndex = rng.Next(availableNumbers.Count); - visitTask.TaskBlindName = $"Timepoint Ran {availableNumbers[randomIndex]}"; + var findOldTask = haveDealedTaskList.Where(t => t.SourceSubjectVisitId == visitTask.SourceSubjectVisitId && t.SouceReadModuleId == visitTask.SouceReadModuleId).FirstOrDefault(); + + if (findOldTask != null) + { + visitTask.TaskBlindName = findOldTask.TaskBlindName; + } + else + { + visitTask.TaskBlindName = $"Timepoint Ran {availableNumbers[randomIndex]}"; + } availableNumbers.RemoveAt(randomIndex); } From 360bcd6bfef8ece7e6dbe316bc204c0e9c8889ca Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Mon, 9 Sep 2024 18:05:59 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E5=AD=97=E5=85=B8=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E7=94=9F=E6=88=90=E6=9E=9A=E4=B8=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Common/DictionaryService.cs | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/IRaCIS.Core.Application/Service/Common/DictionaryService.cs b/IRaCIS.Core.Application/Service/Common/DictionaryService.cs index 0174ee41d..57fe7ac1c 100644 --- a/IRaCIS.Core.Application/Service/Common/DictionaryService.cs +++ b/IRaCIS.Core.Application/Service/Common/DictionaryService.cs @@ -5,6 +5,9 @@ using Microsoft.AspNetCore.Mvc; using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Application.Contracts; using IRaCIS.Core.Infra.EFCore.Common; +using IP2Region.Net.XDB; +using System.Collections; +using System.Text; namespace IRaCIS.Application.Services { @@ -29,6 +32,32 @@ namespace IRaCIS.Application.Services { + public async Task GenerateEnumDefine(string code) + { + var searchList = await _dicRepository.Where(t => t.Parent.Code == code && t.ParentId != null && t.IsEnable).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + + // StringBuilder 用于构建枚举代码字符串 + var enumCode = new StringBuilder(); + + // 生成枚举定义 + enumCode.AppendLine($"public enum {code}"); + enumCode.AppendLine("{"); + + foreach (var item in searchList) + { + // 每个枚举值生成 + enumCode.AppendLine($" {item.Code} = {item.ValueCN},"); + } + + enumCode.AppendLine("}"); + + // 返回生成的枚举代码 + var enumStr= enumCode.ToString(); + + return ResponseOutput.Ok(enumStr); + + } + /// /// 添加bool ///