Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing Details

IRC_NewDev
he 2024-07-22 15:20:21 +08:00
commit 63530b7847
19 changed files with 72 additions and 40 deletions

4
Dockerfile Normal file
View File

@ -0,0 +1,4 @@
FROM registry.cn-shanghai.aliyuncs.com/extimaging/aspnetcore:v8.2
WORKDIR /app
COPY publish .
ENTRYPOINT ["dotnet", "IRaCIS.Core.API.dll"]

View File

@ -1,31 +1,14 @@
{ {
"$schema": "http://json.schemastore.org/launchsettings.json", "$schema": "http://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:36358",
"sslPort": 0
}
},
"profiles": { "profiles": {
"Test_IRC_SCP": { "Test_IRC_SCP": {
"commandName": "Project", "commandName": "Project",
"dotnetRunMessages": true, "dotnetRunMessages": true,
"launchBrowser": true, "launchBrowser": true,
"launchUrl": "swagger", "launchUrl": "swagger",
"applicationUrl": "http://localhost:5243", "applicationUrl": "http://localhost:6200",
"environmentVariables": { "environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "IRC_Test_SCP" "ASPNETCORE_ENVIRONMENT": "Test_IRC_SCP"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "swagger",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
} }
} }
} }

View File

@ -102,32 +102,40 @@ namespace IRaCIS.Core.SCP.Service
var trialDicomAEList = _trialDicomAERepository.Select(t => new { t.CalledAE, t.TrialId }).ToList(); var trialDicomAEList = _trialDicomAERepository.Select(t => new { t.CalledAE, t.TrialId }).ToList();
var trialCalledAEList = trialDicomAEList.Select(t => t.CalledAE).ToList(); var trialCalledAEList = trialDicomAEList.Select(t => t.CalledAE).ToList();
Log.Logger.Information("当前系统配置:", string.Join('|', trialDicomAEList));
var findCalledAE = trialDicomAEList.Where(t => t.CalledAE == association.CalledAE).FirstOrDefault(); var findCalledAE = trialDicomAEList.Where(t => t.CalledAE == association.CalledAE).FirstOrDefault();
var isCanReceiveIamge = false; var isCanReceiveIamge = false;
if (findCalledAE!=null) if (findCalledAE != null)
{ {
_trialId = findCalledAE.TrialId; _trialId = findCalledAE.TrialId;
var _trialSiteDicomAERepository = _serviceProvider.GetService<IRepository<TrialSiteDicomAE>>(); var _trialSiteDicomAERepository = _serviceProvider.GetService<IRepository<TrialSiteDicomAE>>();
var findTrialSiteAE = _trialSiteDicomAERepository.Where(t=>t.CallingAE==association.CallingAE).FirstOrDefault(); var findTrialSiteAE = _trialSiteDicomAERepository.Where(t => t.CallingAE == association.CallingAE).FirstOrDefault();
if (findTrialSiteAE!=null) if (findTrialSiteAE != null)
{ {
_trialSiteId= findTrialSiteAE.TrialSiteId; _trialSiteId = findTrialSiteAE.TrialSiteId;
isCanReceiveIamge = true; isCanReceiveIamge = true;
} }
} }
if (association.CallingAE == "test-callingAE")
{
isCanReceiveIamge = true;
}
if (!trialCalledAEList.Contains(association.CalledAE) || isCanReceiveIamge==false) if (!trialCalledAEList.Contains(association.CalledAE) || isCanReceiveIamge == false)
{ {
Log.Logger.Warning($"拒绝CalledAE:{association.CalledAE}的连接"); Log.Logger.Warning($"拒绝CallingAE:{association.CallingAE} CalledAE:{association.CalledAE}的连接");
return SendAssociationRejectAsync( return SendAssociationRejectAsync(
DicomRejectResult.Permanent, DicomRejectResult.Permanent,
@ -163,8 +171,8 @@ namespace IRaCIS.Core.SCP.Service
_upload.EndTime = DateTime.Now; _upload.EndTime = DateTime.Now;
_upload.StudyCount = _SCPStudyIdList.Count; _upload.StudyCount = _SCPStudyIdList.Count;
_upload.TrialId=_trialId; _upload.TrialId = _trialId;
_upload.TrialSiteId=_trialSiteId; _upload.TrialSiteId = _trialSiteId;
await _SCPImageUploadRepository.AddAsync(_upload, true); await _SCPImageUploadRepository.AddAsync(_upload, true);
@ -292,7 +300,7 @@ namespace IRaCIS.Core.SCP.Service
{ {
try try
{ {
var scpStudyId = await dicomArchiveService.ArchiveDicomFileAsync(request.Dataset,_trialId,_trialSiteId, storeRelativePath, Association.CallingAE, Association.CalledAE); var scpStudyId = await dicomArchiveService.ArchiveDicomFileAsync(request.Dataset, _trialId, _trialSiteId, storeRelativePath, Association.CallingAE, Association.CalledAE);
if (!_SCPStudyIdList.Contains(scpStudyId)) if (!_SCPStudyIdList.Contains(scpStudyId))
{ {

View File

@ -40,8 +40,8 @@
}, },
"ConnectionStrings": { "ConnectionStrings": {
"RemoteNew": "Server=106.14.89.110,1435;Database=Test_HIR;User ID=sa;Password=xc@123456;TrustServerCertificate=true", "RemoteNew": "Server=106.14.89.110,1435;Database=Test_IRC;User ID=sa;Password=xc@123456;TrustServerCertificate=true",
"Hangfire": "Server=106.14.89.110,1435;Database=Test_HIR_Hangfire;User ID=sa;Password=xc@123456;TrustServerCertificate=true" "Hangfire": "Server=106.14.89.110,1435;Database=Test_IRC_Hangfire;User ID=sa;Password=xc@123456;TrustServerCertificate=true"
}, },
"BasicSystemConfig": { "BasicSystemConfig": {

View File

@ -530,6 +530,7 @@ namespace IRaCIS.Core.API.Controllers
studyMonitor.StudyCode = noneDicomStudy.StudyCode; studyMonitor.StudyCode = noneDicomStudy.StudyCode;
studyMonitor.ArchiveFinishedTime = DateTime.Now; studyMonitor.ArchiveFinishedTime = DateTime.Now;
studyMonitor.IP = _userInfo.IP; studyMonitor.IP = _userInfo.IP;
studyMonitor.IsSuccess = true;
await _repository.SaveChangesAsync(); await _repository.SaveChangesAsync();

View File

@ -14,6 +14,7 @@
"ObjectStoreUse": "AliyunOSS", "ObjectStoreUse": "AliyunOSS",
"AliyunOSS": { "AliyunOSS": {
"regionId": "cn-shanghai", "regionId": "cn-shanghai",
"internalEndpoint": "https://oss-cn-shanghai-internal.aliyuncs.com",
"endpoint": "https://oss-cn-shanghai.aliyuncs.com", "endpoint": "https://oss-cn-shanghai.aliyuncs.com",
"accessKeyId": "LTAI5tKvzs7ed3UfSpNk3xwQ", "accessKeyId": "LTAI5tKvzs7ed3UfSpNk3xwQ",
"accessKeySecret": "zTIceGEShlZDGnLrCFfIGFE7TXVRio", "accessKeySecret": "zTIceGEShlZDGnLrCFfIGFE7TXVRio",

View File

@ -16,6 +16,7 @@
"ObjectStoreUse": "AliyunOSS", "ObjectStoreUse": "AliyunOSS",
"AliyunOSS": { "AliyunOSS": {
"regionId": "cn-shanghai", "regionId": "cn-shanghai",
"internalEndpoint": "https://oss-cn-shanghai-internal.aliyuncs.com",
"endpoint": "https://oss-cn-shanghai.aliyuncs.com", "endpoint": "https://oss-cn-shanghai.aliyuncs.com",
"accessKeyId": "LTAI5tKvzs7ed3UfSpNk3xwQ", "accessKeyId": "LTAI5tKvzs7ed3UfSpNk3xwQ",
"accessKeySecret": "zTIceGEShlZDGnLrCFfIGFE7TXVRio", "accessKeySecret": "zTIceGEShlZDGnLrCFfIGFE7TXVRio",

View File

@ -17,6 +17,7 @@
"AliyunOSS": { "AliyunOSS": {
"regionId": "cn-shanghai", "regionId": "cn-shanghai",
"internalEndpoint": "https://oss-cn-shanghai-internal.aliyuncs.com",
"endPoint": "https://oss-cn-shanghai.aliyuncs.com", "endPoint": "https://oss-cn-shanghai.aliyuncs.com",
"accessKeyId": "LTAI5tKvzs7ed3UfSpNk3xwQ", "accessKeyId": "LTAI5tKvzs7ed3UfSpNk3xwQ",
"accessKeySecret": "zTIceGEShlZDGnLrCFfIGFE7TXVRio", "accessKeySecret": "zTIceGEShlZDGnLrCFfIGFE7TXVRio",

View File

@ -17,6 +17,7 @@
"ObjectStoreUse": "AWS", "ObjectStoreUse": "AWS",
"AliyunOSS": { "AliyunOSS": {
"regionId": "cn-shanghai", "regionId": "cn-shanghai",
"internalEndpoint": "https://oss-cn-shanghai-internal.aliyuncs.com",
"endPoint": "https://oss-cn-shanghai.aliyuncs.com", "endPoint": "https://oss-cn-shanghai.aliyuncs.com",
"accessKeyId": "", "accessKeyId": "",
"accessKeySecret": "", "accessKeySecret": "",

View File

@ -16,6 +16,7 @@
"ObjectStoreUse": "MinIO", "ObjectStoreUse": "MinIO",
"AliyunOSS": { "AliyunOSS": {
"regionId": "cn-shanghai", "regionId": "cn-shanghai",
"internalEndpoint": "https://oss-cn-shanghai-internal.aliyuncs.com",
"endPoint": "https://oss-cn-shanghai.aliyuncs.com", "endPoint": "https://oss-cn-shanghai.aliyuncs.com",
"accessKeyId": "LTAI5tKvzs7ed3UfSpNk3xwQ", "accessKeyId": "LTAI5tKvzs7ed3UfSpNk3xwQ",
"accessKeySecret": "zTIceGEShlZDGnLrCFfIGFE7TXVRio", "accessKeySecret": "zTIceGEShlZDGnLrCFfIGFE7TXVRio",

View File

@ -20,6 +20,7 @@
"AliyunOSS": { "AliyunOSS": {
"regionId": "cn-shanghai", "regionId": "cn-shanghai",
"internalEndpoint": "https://oss-cn-shanghai-internal.aliyuncs.com",
"endPoint": "https://oss-cn-shanghai.aliyuncs.com", "endPoint": "https://oss-cn-shanghai.aliyuncs.com",
"accessKeyId": "LTAI5tKvzs7ed3UfSpNk3xwQ", "accessKeyId": "LTAI5tKvzs7ed3UfSpNk3xwQ",
"accessKeySecret": "zTIceGEShlZDGnLrCFfIGFE7TXVRio", "accessKeySecret": "zTIceGEShlZDGnLrCFfIGFE7TXVRio",

View File

@ -16,6 +16,7 @@
"AliyunOSS": { "AliyunOSS": {
"regionId": "cn-shanghai", "regionId": "cn-shanghai",
"internalEndpoint": "https://oss-cn-shanghai-internal.aliyuncs.com",
"endpoint": "https://oss-cn-shanghai.aliyuncs.com", "endpoint": "https://oss-cn-shanghai.aliyuncs.com",
"accessKeyId": "LTAI5tKvzs7ed3UfSpNk3xwQ", "accessKeyId": "LTAI5tKvzs7ed3UfSpNk3xwQ",
"accessKeySecret": "zTIceGEShlZDGnLrCFfIGFE7TXVRio", "accessKeySecret": "zTIceGEShlZDGnLrCFfIGFE7TXVRio",

View File

@ -39,6 +39,9 @@ namespace IRaCIS.Core.Application.Helper
public string regionId { get; set; } public string regionId { get; set; }
public string accessKeyId { get; set; } public string accessKeyId { get; set; }
public string accessKeySecret { get; set; } public string accessKeySecret { get; set; }
public string internalEndpoint { get; set; }
public string endPoint { get; set; } public string endPoint { get; set; }
public string bucketName { get; set; } public string bucketName { get; set; }
@ -144,7 +147,7 @@ namespace IRaCIS.Core.Application.Helper
{ {
var aliConfig = ObjectStoreServiceOptions.AliyunOSS; var aliConfig = ObjectStoreServiceOptions.AliyunOSS;
var _ossClient = new OssClient(aliConfig.endPoint, aliConfig.accessKeyId, aliConfig.accessKeySecret); var _ossClient = new OssClient(aliConfig.internalEndpoint, aliConfig.accessKeyId, aliConfig.accessKeySecret);
@ -220,7 +223,7 @@ namespace IRaCIS.Core.Application.Helper
{ {
var aliConfig = ObjectStoreServiceOptions.AliyunOSS; var aliConfig = ObjectStoreServiceOptions.AliyunOSS;
var _ossClient = new OssClient(aliConfig.endPoint, aliConfig.accessKeyId, aliConfig.accessKeySecret); var _ossClient = new OssClient(aliConfig.internalEndpoint, aliConfig.accessKeyId, aliConfig.accessKeySecret);
// 上传文件 // 上传文件
var result = _ossClient.PutObject(aliConfig.bucketName, ossRelativePath, localFilePath); var result = _ossClient.PutObject(aliConfig.bucketName, ossRelativePath, localFilePath);
@ -279,7 +282,7 @@ namespace IRaCIS.Core.Application.Helper
{ {
var aliConfig = ObjectStoreServiceOptions.AliyunOSS; var aliConfig = ObjectStoreServiceOptions.AliyunOSS;
var _ossClient = new OssClient(aliConfig.endPoint, aliConfig.accessKeyId, aliConfig.accessKeySecret); var _ossClient = new OssClient(aliConfig.internalEndpoint, aliConfig.accessKeyId, aliConfig.accessKeySecret);
// 上传文件 // 上传文件
var result = _ossClient.GetObject(aliConfig.bucketName, ossRelativePath); var result = _ossClient.GetObject(aliConfig.bucketName, ossRelativePath);
@ -351,7 +354,7 @@ namespace IRaCIS.Core.Application.Helper
{ {
var aliConfig = ObjectStoreServiceOptions.AliyunOSS; var aliConfig = ObjectStoreServiceOptions.AliyunOSS;
var _ossClient = new OssClient(aliConfig.endPoint, aliConfig.accessKeyId, aliConfig.accessKeySecret); var _ossClient = new OssClient(aliConfig.internalEndpoint, aliConfig.accessKeyId, aliConfig.accessKeySecret);
// 生成签名URL。 // 生成签名URL。
var req = new GeneratePresignedUriRequest(aliConfig.bucketName, ossRelativePath, SignHttpMethod.Get) var req = new GeneratePresignedUriRequest(aliConfig.bucketName, ossRelativePath, SignHttpMethod.Get)

View File

@ -5641,6 +5641,11 @@
单位 单位
</summary> </summary>
</member> </member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.ReadingReportDto.HighlightAnswer">
<summary>
高亮问题的答案
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.ReadingReportDto.GroupEnName"> <member name="P:IRaCIS.Core.Application.Service.Reading.Dto.ReadingReportDto.GroupEnName">
<summary> <summary>
问题英文分组 问题英文分组
@ -8632,6 +8637,11 @@
关联Value 关联Value
</summary> </summary>
</member> </member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.AddOrUpdateReadingQuestionSystemInDto.HighlightAnswer">
<summary>
高亮问题的答案
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.AddOrUpdateReadingQuestionSystemInDto.Type"> <member name="P:IRaCIS.Core.Application.Service.Reading.Dto.AddOrUpdateReadingQuestionSystemInDto.Type">
<summary> <summary>
类型 类型
@ -8732,6 +8742,11 @@
Id Id
</summary> </summary>
</member> </member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.AddOrUpdateReadingQuestionTrialInDto.HighlightAnswer">
<summary>
高亮问题的答案
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.AddOrUpdateReadingQuestionTrialInDto.ClassifyAlgorithms"> <member name="P:IRaCIS.Core.Application.Service.Reading.Dto.AddOrUpdateReadingQuestionTrialInDto.ClassifyAlgorithms">
<summary> <summary>
分类算法 分类算法

View File

@ -19,6 +19,7 @@ using System.IO.Compression;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Web;
namespace IRaCIS.Core.Application.Service.ImageAndDoc namespace IRaCIS.Core.Application.Service.ImageAndDoc
{ {
@ -491,6 +492,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
public async Task<IResponseOutput> RequestPackageAndAnonymizImage(Guid trialId, Guid subjectVisitId, bool isDicom, bool isAnonymize = true) public async Task<IResponseOutput> RequestPackageAndAnonymizImage(Guid trialId, Guid subjectVisitId, bool isDicom, bool isAnonymize = true)
{ {
var extralConfig = _repository.Where<Trial>(t => t.Id == trialId).Select(t => t.TrialExtraConfigJsonStr).FirstOrDefault() ?? string.Empty; var extralConfig = _repository.Where<Trial>(t => t.Id == trialId).Select(t => t.TrialExtraConfigJsonStr).FirstOrDefault() ?? string.Empty;
var config = JsonConvert.DeserializeObject<TrialExtraConfig>(extralConfig) ?? new TrialExtraConfig(); var config = JsonConvert.DeserializeObject<TrialExtraConfig>(extralConfig) ?? new TrialExtraConfig();
@ -764,7 +767,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
string destinationPath = Path.Combine(studyNoneDicomFolderPath, Path.GetFileName(file.FileName)); string destinationPath = Path.Combine(studyNoneDicomFolderPath, Path.GetFileName(file.FileName));
//下载到当前目录 //下载到当前目录
await _oSSService.DownLoadFromOSSAsync(file.Path, destinationPath); await _oSSService.DownLoadFromOSSAsync(HttpUtility.UrlDecode(file.Path) , destinationPath);
} }
} }

View File

@ -422,6 +422,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
VisitNum = t.SubjectVisit.VisitNum, VisitNum = t.SubjectVisit.VisitNum,
IsDicom = false, IsDicom = false,
IsFromPACS=false,
SubjectCode = t.Subject.Code, SubjectCode = t.Subject.Code,

View File

@ -1052,7 +1052,7 @@ namespace IRaCIS.Application.Contracts
public string CallingAE { get; set; } = string.Empty; public string CallingAE { get; set; } = string.Empty;
public string BodyPartExamined { get; set; } = string.Empty; public string BodyPartExamined { get; set; } = string.Empty;
public string AccessionNumber { get; set; } = string.Empty;
public string PatientIdStr { get; set; } = string.Empty; public string PatientIdStr { get; set; } = string.Empty;
public string PatientName { get; set; } = string.Empty; public string PatientName { get; set; } = string.Empty;
public string PatientAge { get; set; } = string.Empty; public string PatientAge { get; set; } = string.Empty;

View File

@ -266,6 +266,7 @@ namespace IRaCIS.Application.Services
SeriesCount = scpStudy.SeriesCount, SeriesCount = scpStudy.SeriesCount,
StudyTime = scpStudy.StudyTime, StudyTime = scpStudy.StudyTime,
BodyPartExamined=scpStudy.BodyPartExamined, BodyPartExamined=scpStudy.BodyPartExamined,
AccessionNumber=scpStudy.AccessionNumber,
PatientBirthDate=scpStudy.PatientBirthDate, PatientBirthDate=scpStudy.PatientBirthDate,
PatientAge = scpStudy.PatientAge, PatientAge = scpStudy.PatientAge,

View File

@ -120,6 +120,12 @@ namespace IRaCIS.Core.Application.Service
.ForMember(d => d.TrialSiteName, u => u.MapFrom(s => s.TrialSite.TrialSiteName)) .ForMember(d => d.TrialSiteName, u => u.MapFrom(s => s.TrialSite.TrialSiteName))
; ;
CreateMap<SCPStudy, DicomStudy>();
CreateMap<SCPSeries, DicomSeries>();
CreateMap<SCPInstance, DicomInstance>();
} }
} }