diff --git a/IRaCIS.Core.API/appsettings.Prod_Event_IRC.json b/IRaCIS.Core.API/appsettings.Prod_Event_IRC.json index ce4109160..ae7090c45 100644 --- a/IRaCIS.Core.API/appsettings.Prod_Event_IRC.json +++ b/IRaCIS.Core.API/appsettings.Prod_Event_IRC.json @@ -7,7 +7,7 @@ } }, "ConnectionStrings": { - "RemoteNew": "Server=101.132.193.237,1433;Database=Prod_IRC_pidr_restore_new;User ID=sa;Password=xc@123456;TrustServerCertificate=true", + "RemoteNew": "Server=101.132.193.237,1433;Database=Prod_IRC_pidr_restore;User ID=sa;Password=xc@123456;TrustServerCertificate=true", "Hangfire": "Server=101.132.193.237,1433;Database=irc_Hangfire_bak;User ID=sa;Password=xc@123456;TrustServerCertificate=true" //"RemoteNew": "Server=prod_mssql_standard,1433;Database=Prod_IRC;User ID=sa;Password=zhanying@2021;TrustServerCertificate=true", //"Hangfire": "Server=prod_mssql_standard,1433;Database=Prod_IRC_Hangfire;User ID=sa;Password=zhanying@2021;TrustServerCertificate=true" @@ -44,11 +44,11 @@ "RegionId": "cn-shanghai", "InternalEndpoint": "https://oss-cn-shanghai-internal.aliyuncs.com", "EndPoint": "https://oss-cn-shanghai.aliyuncs.com", - "AccessKeyId": "LTAI5tNRTsqL6aWmHkDmTwoH", - "AccessKeySecret": "7mtGz3qrYWI6JMMBZiLeC119VWicZH", - "RoleArn": "acs:ram::1899121822495495:role/irc-oss-access", - "BucketName": "zy-irc-store", - "ViewEndpoint": "https://zy-irc-cache.oss-cn-shanghai.aliyuncs.com", + "AccessKeyId": "LTAI5tFUCCmz5TwghZHsj45Y", + "AccessKeySecret": "8evrBy1fVfzJG25i67Jm0xqn9Xcw2T", + "RoleArn": "acs:ram::1078130221702011:role/uat-oss-access", + "BucketName": "tl-med-irc-event-store", + "ViewEndpoint": "https://tl-med-rc-event-cache.oss-cn-shanghai.aliyuncs.com", "Region": "oss-cn-shanghai", "DurationSeconds": 7200 }, @@ -70,7 +70,7 @@ "OpenUserComplexPassword": true, "OpenSignDocumentBeforeWork": true, - "OpenLoginLimit": true, + "OpenLoginLimit": false, "LoginMaxFailCount": 5, "LoginFailLockMinutes": 30, "AutoLoginOutMinutes": 120, diff --git a/IRaCIS.Core.Application/BusinessFilter/LegacyController/TrialGlobalLimitActionFilter.cs b/IRaCIS.Core.Application/BusinessFilter/LegacyController/TrialGlobalLimitActionFilter.cs index 23f459567..179f7882f 100644 --- a/IRaCIS.Core.Application/BusinessFilter/LegacyController/TrialGlobalLimitActionFilter.cs +++ b/IRaCIS.Core.Application/BusinessFilter/LegacyController/TrialGlobalLimitActionFilter.cs @@ -37,13 +37,13 @@ public class TrialGlobalLimitActionFilter(IFusionCache _fusionCache, IUserInfo _ #region 特殊用户类型拦截 // 用户类型检查 - if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA && _userInfo.RequestUrl.ToLower() != "TrialDocument/userConfirm".ToLower()) - { - //对不起,您的账户没有操作权限 - context.Result = new JsonResult(ResponseOutput.NotOk(I18n.T("TrialResource_NoAccessPermission"))); + //if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA && _userInfo.RequestUrl.ToLower() != "TrialDocument/userConfirm".ToLower()) + //{ + // //对不起,您的账户没有操作权限 + // context.Result = new JsonResult(ResponseOutput.NotOk(I18n.T("TrialResource_NoAccessPermission"))); - return; - } + // return; + //} #endregion diff --git a/IRaCIS.Core.Application/BusinessFilter/MinimalAPI/TrialGlobalLimitEndpointFilter.cs b/IRaCIS.Core.Application/BusinessFilter/MinimalAPI/TrialGlobalLimitEndpointFilter.cs index 6648db25e..47aa961f4 100644 --- a/IRaCIS.Core.Application/BusinessFilter/MinimalAPI/TrialGlobalLimitEndpointFilter.cs +++ b/IRaCIS.Core.Application/BusinessFilter/MinimalAPI/TrialGlobalLimitEndpointFilter.cs @@ -47,12 +47,12 @@ public class TrialGlobalLimitEndpointFilter(IFusionCache _fusionCache, IUserInfo } #region 特殊用户类型拦截 - // 用户类型检查 - if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA && _userInfo.RequestUrl.ToLower() != "TrialDocument/userConfirm".ToLower()) - { - //对不起,您的账户没有操作权限 - return Results.Json(ResponseOutput.NotOk(I18n.T("TrialResource_NoAccessPermission"))); - } + //// 用户类型检查 + //if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA && _userInfo.RequestUrl.ToLower() != "TrialDocument/userConfirm".ToLower()) + //{ + // //对不起,您的账户没有操作权限 + // return Results.Json(ResponseOutput.NotOk(I18n.T("TrialResource_NoAccessPermission"))); + //} #endregion diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index dcd22cf5f..c89a6316c 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -17584,17 +17584,17 @@ - ���� + 质疑 - һ���Ժ˲� + 一致性核查 - ���� + 复制 diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index 7d74b7480..9897ecf83 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -228,7 +228,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc var query = _visitTaskRepository.Where(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId && t.SourceSubjectVisit.CheckState == CheckStateEnum.CVPassed - && t.DoctorUserId == _userInfo.UserRoleId && t.TaskState == TaskState.Effect) + /* && t.DoctorUserId == _userInfo.UserRoleId*/ && t.TaskState == TaskState.Effect) //满足 有序,或者随机只看到当前任务的dicom 非dicom检查 .WhereIf(criterionInfo.IsReadingTaskViewInOrder != ReadingOrder.SubjectRandom && inQuery.VisitTaskId != null, t => t.Id == inQuery.VisitTaskId) .Select(u => new SubjectImageUploadDTO() @@ -739,6 +739,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc //找到该序列已经存在的instanceId var existInstanceIdList = _taskInstanceRepository.Where(t => t.SeriesId == dicomSeries.Id).Select(t => t.Id).ToList(); + foreach (var instanceItem in seriesItem.InstanceList) { var insntance = _mapper.Map(instanceItem); @@ -764,6 +765,14 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc } findStudy.InstanceCount++; } + else + { + //更新,需要删除缓存,并更新路径 + + await _oSSService.DeleteFromPrefix(insntance.Path, true); + + await _taskInstanceRepository.BatchUpdateNoTrackingAsync(t => t.Id == insntance.Id, u => new TaskInstance() { Path = insntance.Path }); + } } // 不管是新的序列 还是 该序列 掉了Instance 重传的时候 检查的instance 数量都会增加 @@ -1059,7 +1068,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc else { var query = from u in _visitTaskRepository.Where(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId - && t.SourceSubjectVisit.CheckState == CheckStateEnum.CVPassed && t.DoctorUserId == doctorUserId && t.TaskState == TaskState.Effect) + && t.SourceSubjectVisit.CheckState == CheckStateEnum.CVPassed /*&& t.DoctorUserId == doctorUserId*/ && t.TaskState == TaskState.Effect) //满足 有序,或者随机只看到当前任务的dicom 非dicom检查 .WhereIf(info.IsReadingTaskViewInOrder != ReadingOrder.SubjectRandom && inQuery.VisitTaskId != null, t => t.Id == inQuery.VisitTaskId) join ns in _noneDicomStudyReposiotry.Where(t => t.SubjectId == subjectId).WhereIf(info.IsImageFilter, t => ("|" + info.CriterionModalitys + "|").Contains("|" + t.Modality + "|")) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs index 947e73c9a..e24c8b288 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs @@ -772,9 +772,14 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc DicomSeries dicomSeries = await _dicomSeriesRepository.FirstOrDefaultAsync(t => t.Id == seriesId); + + var isNewSeries = false; + //判断重复 if (dicomSeries == null) { + isNewSeries = true; + var series = _mapper.Map(seriesItem); series.Id = seriesId; @@ -790,29 +795,53 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc //新的序列 那么 检查的序列数量+1 findStudy.SeriesCount += 1; } - else - { - //该序列掉了instance - dicomSeries.InstanceCount += seriesItem.InstanceList.Count; - } + //else + //{ + // //该序列掉了instance + // dicomSeries.InstanceCount += seriesItem.InstanceList.Count; + //} + + + //找到该序列已经存在的instanceId + var existInstanceIdList = _dicomInstanceRepository.Where(t => t.SeriesId == dicomSeries.Id).Select(t => t.Id).ToList(); foreach (var instanceItem in seriesItem.InstanceList) { var insntance = _mapper.Map(instanceItem); insntance.Id = IdentifierHelper.CreateGuid(insntance.StudyInstanceUid, insntance.SeriesInstanceUid, insntance.SopInstanceUid, trialId.ToString()); - insntance.StudyId = findStudy.Id; - insntance.SeriesId = dicomSeries.Id; - insntance.TrialId = incommand.TrialId; - insntance.SubjectId = incommand.SubjectId; - insntance.SubjectVisitId = incommand.SubjectVisitId; + if (!existInstanceIdList.Any(t => t == insntance.Id)) + { + insntance.StudyId = findStudy.Id; + insntance.SeriesId = dicomSeries.Id; + + insntance.TrialId = incommand.TrialId; + insntance.SubjectId = incommand.SubjectId; + insntance.SubjectVisitId = incommand.SubjectVisitId; + + await _dicomInstanceRepository.AddAsync(insntance); + + if (isNewSeries == false) + { + dicomSeries.InstanceCount++; + } + + findStudy.InstanceCount++; + } + else + { + //更新,需要删除缓存,并更新路径 + + await _oSSService.DeleteFromPrefix(insntance.Path,true); + + await _dicomInstanceRepository.BatchUpdateNoTrackingAsync(t => t.Id == insntance.Id, u => new DicomInstance() { Path = insntance.Path }); + } - await _dicomInstanceRepository.AddAsync(insntance); } - // 不管是新的序列 还是 该序列 掉了Instance 重传的时候 检查的instance 数量都会增加 - findStudy.InstanceCount += seriesItem.InstanceList.Count; + //// 不管是新的序列 还是 该序列 掉了Instance 重传的时候 检查的instance 数量都会增加 + //findStudy.InstanceCount += seriesItem.InstanceList.Count; if (incommand.Study.RadionuclideTotalDose != string.Empty diff --git a/IRaCIS.Core.Application/Service/Management/MenuService.cs b/IRaCIS.Core.Application/Service/Management/MenuService.cs index f88d1777a..7848b78d1 100644 --- a/IRaCIS.Core.Application/Service/Management/MenuService.cs +++ b/IRaCIS.Core.Application/Service/Management/MenuService.cs @@ -168,6 +168,19 @@ namespace IRaCIS.Core.Application.Service .Where(t => t.UserTypeId == _userInfo.UserTypeId && (t.Menu.MenuType == "M" || t.Menu.MenuType == "C") && t.Menu.IsEnable) .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + + if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA) + { + var otherGuid = new List() { Guid.Parse("41d2bcbe-4ae2-4158-856e-08da0661d17d"), Guid.Parse("5acebe02-99de-4e39-f090-08da0c7fe82c") }; + + var otherlist = await _userTypeMenuRepository + .Where(t => otherGuid.Contains(t.MenuId) && (t.Menu.MenuType == "M" || t.Menu.MenuType == "C") && t.Menu.IsEnable) + .ProjectTo(_mapper.ConfigurationProvider).Distinct().ToListAsync(); + + menuFunctionlist.AddRange(otherlist); + } + + var list = menuFunctionlist!.ToTree((root, child) => child!.ParentId == Guid.Empty, (root, child) => child!.ParentId == root!.MenuId, (child, datalist) =>