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) =>