Merge branch 'Test_HIR_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_HIR_Net8
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
commit
d5609560e2
|
@ -0,0 +1,35 @@
|
||||||
|
{
|
||||||
|
"Logging": {
|
||||||
|
"LogLevel": {
|
||||||
|
"Default": "Information",
|
||||||
|
"Microsoft": "Warning",
|
||||||
|
"Microsoft.Hosting.Lifetime": "Information"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ObjectStoreService": {
|
||||||
|
"ObjectStoreUse": "MinIO",
|
||||||
|
"MinIO": {
|
||||||
|
"EndPoint": "192.168.40.99",
|
||||||
|
"Port": "9000",
|
||||||
|
"UseSSL": false,
|
||||||
|
"AccessKeyId": "Jnywl9aIw83yewZIJKod",
|
||||||
|
"SecretAccessKey": "N83bTzoJGkg4OLW8x54IZRwwSvdxcdYi9UZ2BYII",
|
||||||
|
"BucketName": "tj-hir",
|
||||||
|
"ViewEndpoint": "http://192.168.40.99:9000/tj-hir"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"ConnectionStrings": {
|
||||||
|
"RemoteNew": "Server=192.168.40.98,1433;Database=TJ_Prod_HIR;User ID=sa;Password=xc_123456;TrustServerCertificate=true",
|
||||||
|
"Hangfire": "Server=192.168.40.98,1433;Database=TJ_Prod_HIR_Hangfire;User ID=sa;Password=xc_123456;TrustServerCertificate=true"
|
||||||
|
},
|
||||||
|
"DicomSCPServiceConfig": {
|
||||||
|
"CalledAEList": [
|
||||||
|
"STORESCP",
|
||||||
|
"HIRAE",
|
||||||
|
"Value2",
|
||||||
|
"Value3"
|
||||||
|
],
|
||||||
|
"ServerPort": 11112
|
||||||
|
}
|
||||||
|
}
|
|
@ -31,7 +31,6 @@ public static class ServiceCollectionSetup
|
||||||
services.AddOptions().Configure<IRCEncreptOption>(_configuration.GetSection("EncrypteResponseConfig"));
|
services.AddOptions().Configure<IRCEncreptOption>(_configuration.GetSection("EncrypteResponseConfig"));
|
||||||
services.AddOptions().Configure<SystemPacsConfig>(_configuration.GetSection("SystemPacsConfig"));
|
services.AddOptions().Configure<SystemPacsConfig>(_configuration.GetSection("SystemPacsConfig"));
|
||||||
services.Configure<IRaCISBasicConfigOption>(_configuration.GetSection("IRaCISBasicConfig"));
|
services.Configure<IRaCISBasicConfigOption>(_configuration.GetSection("IRaCISBasicConfig"));
|
||||||
services.AddOptions().Configure<SystemHospitalOption>(_configuration.GetSection("SystemHospitalConfig"));
|
|
||||||
|
|
||||||
services.Configure<ServiceVerifyConfigOption>(_configuration.GetSection("BasicSystemConfig"));
|
services.Configure<ServiceVerifyConfigOption>(_configuration.GetSection("BasicSystemConfig"));
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,62 @@
|
||||||
|
{
|
||||||
|
"Logging": {
|
||||||
|
"LogLevel": {
|
||||||
|
"Default": "Information",
|
||||||
|
"Microsoft": "Warning",
|
||||||
|
"Microsoft.Hosting.Lifetime": "Information"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ObjectStoreService": {
|
||||||
|
"ObjectStoreUse": "MinIO",
|
||||||
|
"MinIO": {
|
||||||
|
"EndPoint": "192.168.40.99",
|
||||||
|
"Port": "9000",
|
||||||
|
"UseSSL": false,
|
||||||
|
"AccessKeyId": "Jnywl9aIw83yewZIJKod",
|
||||||
|
"SecretAccessKey": "N83bTzoJGkg4OLW8x54IZRwwSvdxcdYi9UZ2BYII",
|
||||||
|
"BucketName": "tj-hir",
|
||||||
|
"ViewEndpoint": "http://192.168.40.99:9000/tj-hir"
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
"ConnectionStrings": {
|
||||||
|
"RemoteNew": "Server=192.168.40.98,1433;Database=TJ_Prod_HIR;User ID=sa;Password=xc_123456;TrustServerCertificate=true",
|
||||||
|
"Hangfire": "Server=192.168.40.98,1433;Database=TJ_Prod_HIR_Hangfire;User ID=sa;Password=xc_123456;TrustServerCertificate=true"
|
||||||
|
},
|
||||||
|
"BasicSystemConfig": {
|
||||||
|
"OpenUserComplexPassword": true,
|
||||||
|
"OpenSignDocumentBeforeWork": false,
|
||||||
|
"OpenTrialRelationDelete": false,
|
||||||
|
"OpenLoginLimit": true,
|
||||||
|
"LoginMaxFailCount": 5,
|
||||||
|
"LoginFailLockMinutes": 30,
|
||||||
|
"AutoLoginOutMinutes": 120,
|
||||||
|
"AESKey": "HIR_System_AES_Key_Info",
|
||||||
|
"CmoveIntervalMinutes": 1,
|
||||||
|
"CmoveInstanceIntervalMinutes": 1
|
||||||
|
},
|
||||||
|
"SystemHospitalConfig": {
|
||||||
|
"HospitalCode": "EI",
|
||||||
|
"HospitalLogoPath": "/System/GeneralDocuments/1716453306898_图片2.png",
|
||||||
|
"TrialKeepCount": 60,
|
||||||
|
"HospitalName": "上海展影医疗科技有限公司",
|
||||||
|
"HospitalAliasName": "展影医疗",
|
||||||
|
"Country": "中国",
|
||||||
|
"City": "上海",
|
||||||
|
"Province": "上海",
|
||||||
|
"Address": "上海市杨浦区国泰路复旦科技园",
|
||||||
|
"Phone": "021-60702575",
|
||||||
|
"IsCanConnectInternet": false
|
||||||
|
},
|
||||||
|
"SystemEmailSendConfig": {
|
||||||
|
"Port": 465,
|
||||||
|
"Host": "smtp.qiye.aliyun.com",
|
||||||
|
"FromEmail": "test-study@extimaging.com",
|
||||||
|
"FromName": "Test_HIR",
|
||||||
|
"AuthorizationCode": "zhanying123",
|
||||||
|
"SiteUrl": "http://hir.test.extimaging.com/login"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -29,30 +29,17 @@
|
||||||
},
|
},
|
||||||
"BasicSystemConfig": {
|
"BasicSystemConfig": {
|
||||||
"OpenUserComplexPassword": true,
|
"OpenUserComplexPassword": true,
|
||||||
"OpenSignDocumentBeforeWork": false,
|
"OpenSignDocumentBeforeWork": true,
|
||||||
"OpenTrialRelationDelete": true,
|
"OpenTrialRelationDelete": true,
|
||||||
"OpenLoginLimit": false,
|
"OpenLoginLimit": true,
|
||||||
"LoginMaxFailCount": 5,
|
"LoginMaxFailCount": 5,
|
||||||
"LoginFailLockMinutes": 30,
|
"LoginFailLockMinutes": 30,
|
||||||
"AutoLoginOutMinutes": 120,
|
"AutoLoginOutMinutes": 120,
|
||||||
"AESKey": "HIR_System_AES_Key_Info",
|
"AESKey": "HIR_System_AES_Key_Info",
|
||||||
"CmoveIntervalMinutes": 1,
|
"CmoveIntervalMinutes": 1,
|
||||||
"CmoveInstanceIntervalMinutes": 1
|
"CmoveInstanceIntervalMinutes": 1
|
||||||
|
},
|
||||||
|
|
||||||
},
|
|
||||||
"SystemHospitalConfig": {
|
|
||||||
"HospitalCode": "EI",
|
|
||||||
"HospitalLogoPath": "/System/GeneralDocuments/1732515108701_肿瘤医院logo 新.jpg",
|
|
||||||
"TrialKeepCount": 60,
|
|
||||||
"HospitalName": "上海展影医疗科技有限公司",
|
|
||||||
"HospitalAliasName": "展影医疗",
|
|
||||||
"Country": "中国",
|
|
||||||
"City": "上海",
|
|
||||||
"Province": "上海",
|
|
||||||
"Address": "上海市杨浦区国泰路复旦科技园",
|
|
||||||
"Phone": "021-60702575",
|
|
||||||
"IsCanConnectInternet": false
|
|
||||||
},
|
|
||||||
"SystemEmailSendConfig": {
|
"SystemEmailSendConfig": {
|
||||||
"Port": 465,
|
"Port": 465,
|
||||||
"Host": "smtp.qiye.aliyun.com",
|
"Host": "smtp.qiye.aliyun.com",
|
||||||
|
|
|
@ -19,7 +19,8 @@ namespace IRaCIS.Core.Application.Filter;
|
||||||
|
|
||||||
public class TrialGlobalLimitActionFilter(IFusionCache _fusionCache, IUserInfo _userInfo, IRepository<Trial> _trialRepository,
|
public class TrialGlobalLimitActionFilter(IFusionCache _fusionCache, IUserInfo _userInfo, IRepository<Trial> _trialRepository,
|
||||||
IOptionsMonitor<ServiceVerifyConfigOption> _basicSystemConfigConfig,
|
IOptionsMonitor<ServiceVerifyConfigOption> _basicSystemConfigConfig,
|
||||||
IOptionsMonitor<SystemHospitalOption> _hospitalOption, IStringLocalizer _localizer) : IAsyncActionFilter
|
IRepository<HIRHospital> _hirHospitalRepository,
|
||||||
|
IStringLocalizer _localizer) : IAsyncActionFilter
|
||||||
{
|
{
|
||||||
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
|
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
|
||||||
{
|
{
|
||||||
|
@ -152,6 +153,9 @@ public class TrialGlobalLimitActionFilter(IFusionCache _fusionCache, IUserInfo _
|
||||||
if (!string.IsNullOrWhiteSpace(trialIdStr))
|
if (!string.IsNullOrWhiteSpace(trialIdStr))
|
||||||
{
|
{
|
||||||
var trialInfo = await _fusionCache.GetOrSetAsync(CacheKeys.Trial(trialIdStr), _ => CacheHelper.GetTrialStatusAsync(Guid.Parse(trialIdStr), _trialRepository), TimeSpan.FromDays(7));
|
var trialInfo = await _fusionCache.GetOrSetAsync(CacheKeys.Trial(trialIdStr), _ => CacheHelper.GetTrialStatusAsync(Guid.Parse(trialIdStr), _trialRepository), TimeSpan.FromDays(7));
|
||||||
|
|
||||||
|
var hospitalInfo = await _fusionCache.GetOrSetAsync(CacheKeys.Hospital, _ => CacheHelper.GetHospitalCode(_hirHospitalRepository), TimeSpan.FromDays(7));
|
||||||
|
|
||||||
var trialStatusStr = string.Empty;
|
var trialStatusStr = string.Empty;
|
||||||
|
|
||||||
if (trialInfo != null)
|
if (trialInfo != null)
|
||||||
|
@ -181,7 +185,7 @@ public class TrialGlobalLimitActionFilter(IFusionCache _fusionCache, IUserInfo _
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
var hospitalCode = _hospitalOption.CurrentValue.HospitalCode;
|
var hospitalCode = hospitalInfo.HospitalCode;
|
||||||
var authInfo = JsonConvert.DeserializeObject<TrialAuthorizationInfo>(decodedText);
|
var authInfo = JsonConvert.DeserializeObject<TrialAuthorizationInfo>(decodedText);
|
||||||
|
|
||||||
if (authInfo != null)
|
if (authInfo != null)
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
using IRaCIS.Application.Contracts;
|
using IRaCIS.Application.Contracts;
|
||||||
|
using IRaCIS.Core.Application.ViewModel;
|
||||||
|
|
||||||
namespace IRaCIS.Core.Application.Helper;
|
namespace IRaCIS.Core.Application.Helper;
|
||||||
|
|
||||||
|
@ -61,6 +62,8 @@ public static class CacheKeys
|
||||||
|
|
||||||
public static string CmoveStudyId(string studyIdStr) => $"CmoveStudyId:{studyIdStr}";
|
public static string CmoveStudyId(string studyIdStr) => $"CmoveStudyId:{studyIdStr}";
|
||||||
|
|
||||||
|
public static string Hospital => $"Hospital";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class CacheHelper
|
public static class CacheHelper
|
||||||
|
@ -79,4 +82,10 @@ public static class CacheHelper
|
||||||
|
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static async Task<HIRHospital> GetHospitalCode(IRepository<HIRHospital> _hirHospitalRepository)
|
||||||
|
{
|
||||||
|
return await _hirHospitalRepository.Where(t => t.IsDefault == true).FirstNotNullAsync();
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17998,6 +17998,16 @@
|
||||||
数据
|
数据
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="P:IRaCIS.Application.Contracts.TJCmoveStudyCommand.StudyInstanceUIDList">
|
||||||
|
<summary>
|
||||||
|
C-move 检查 数组
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Application.Contracts.TJCmoveStudyCommand.CalledAE">
|
||||||
|
<summary>
|
||||||
|
PacsAE 的名字
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
<member name="T:IRaCIS.Application.Contracts.WorkLoadDetailDTO">
|
<member name="T:IRaCIS.Application.Contracts.WorkLoadDetailDTO">
|
||||||
<summary>
|
<summary>
|
||||||
后台 工作量审核视图模型
|
后台 工作量审核视图模型
|
||||||
|
@ -18257,19 +18267,18 @@
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
<exception cref="T:IRaCIS.Core.Infrastructure.BusinessValidationFailedException"></exception>
|
<exception cref="T:IRaCIS.Core.Infrastructure.BusinessValidationFailedException"></exception>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Application.Services.PatientService.GetTrialAuthorizationCode(IRaCIS.Application.Contracts.TrialAuthorizationInfo,Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Application.Contracts.SystemHospitalOption})">
|
<member name="M:IRaCIS.Application.Services.PatientService.GetTrialAuthorizationCode(IRaCIS.Application.Contracts.TrialAuthorizationInfo)">
|
||||||
<summary>
|
<summary>
|
||||||
获取项目授权码
|
获取项目授权码
|
||||||
</summary>
|
</summary>
|
||||||
<param name="authInfo"></param>
|
<param name="authInfo"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Application.Services.PatientService.GetAuthorizationCodeInfo(System.String,Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Application.Contracts.SystemHospitalOption})">
|
<member name="M:IRaCIS.Application.Services.PatientService.GetAuthorizationCodeInfo(System.String)">
|
||||||
<summary>
|
<summary>
|
||||||
获取授权码明文信息
|
获取授权码明文信息
|
||||||
</summary>
|
</summary>
|
||||||
<param name="authorizationCode"></param>
|
<param name="authorizationCode"></param>
|
||||||
<param name="_hospitalOption"></param>
|
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Application.Services.PatientService.GetTrialActivationCode(IRaCIS.Application.Contracts.TrialAuthorizationInfo,Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Core.Domain.Share.ServiceVerifyConfigOption})">
|
<member name="M:IRaCIS.Application.Services.PatientService.GetTrialActivationCode(IRaCIS.Application.Contracts.TrialAuthorizationInfo,Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Core.Domain.Share.ServiceVerifyConfigOption})">
|
||||||
|
@ -18280,7 +18289,7 @@
|
||||||
<param name="_basicSystemConfigConfig"></param>
|
<param name="_basicSystemConfigConfig"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Application.Services.PatientService.GetActivationCodeInfo(System.String,Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Application.Contracts.SystemHospitalOption},Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Core.Domain.Share.ServiceVerifyConfigOption})">
|
<member name="M:IRaCIS.Application.Services.PatientService.GetActivationCodeInfo(System.String,Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Core.Domain.Share.ServiceVerifyConfigOption})">
|
||||||
<summary>
|
<summary>
|
||||||
激活码获取明文信息
|
激活码获取明文信息
|
||||||
</summary>
|
</summary>
|
||||||
|
@ -18289,7 +18298,7 @@
|
||||||
<param name="_basicSystemConfigConfig"></param>
|
<param name="_basicSystemConfigConfig"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Application.Services.PatientService.ActivateTrial(System.Guid,System.String,Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Core.Domain.Share.ServiceVerifyConfigOption},ZiggyCreatures.Caching.Fusion.IFusionCache,Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Application.Contracts.SystemHospitalOption})">
|
<member name="M:IRaCIS.Application.Services.PatientService.ActivateTrial(System.Guid,System.String,Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Core.Domain.Share.ServiceVerifyConfigOption},ZiggyCreatures.Caching.Fusion.IFusionCache)">
|
||||||
<summary>
|
<summary>
|
||||||
设置项目授权信息
|
设置项目授权信息
|
||||||
</summary>
|
</summary>
|
||||||
|
@ -18540,14 +18549,18 @@
|
||||||
<param name="inCommand"></param>
|
<param name="inCommand"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Application.Services.PatientService.CmoveStudyList(IRaCIS.Application.Contracts.SCUCmoveCommand,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.DicomAE},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SCPInstance},Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Core.Domain.Share.ServiceVerifyConfigOption})">
|
<member name="M:IRaCIS.Application.Services.PatientService.CmoveStudyList(IRaCIS.Application.Contracts.SCUCmoveCommand)">
|
||||||
<summary>
|
<summary>
|
||||||
拉取影像
|
拉取影像
|
||||||
</summary>
|
</summary>
|
||||||
<param name="inCommand"></param>
|
<param name="inCommand"></param>
|
||||||
<param name="_dicomAEReposiotry"></param>
|
<returns></returns>
|
||||||
<param name="_scpInstanceRepository"></param>
|
</member>
|
||||||
<param name="_basicSystemConfigConfig"></param>
|
<member name="M:IRaCIS.Application.Services.PatientService.TjCmoveStudy(IRaCIS.Application.Contracts.TJCmoveStudyCommand)">
|
||||||
|
<summary>
|
||||||
|
同济医院 第三方系统 发送命令拉取影像
|
||||||
|
</summary>
|
||||||
|
<param name="inCommand"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
</members>
|
</members>
|
||||||
|
|
|
@ -25,7 +25,11 @@ namespace IRaCIS.Application.Contracts
|
||||||
public class TJUserInfoDto
|
public class TJUserInfoDto
|
||||||
{
|
{
|
||||||
public string Code { get; set; }
|
public string Code { get; set; }
|
||||||
|
|
||||||
public string Msg { get; set; }
|
public string Msg { get; set; }
|
||||||
|
|
||||||
|
public bool Success { get; set; }
|
||||||
|
|
||||||
public TJUserInfoData Data { get; set; }
|
public TJUserInfoData Data { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,6 +42,8 @@ namespace IRaCIS.Application.Contracts
|
||||||
public string Birthday { get; set; }
|
public string Birthday { get; set; }
|
||||||
public string Title { get; set; }
|
public string Title { get; set; }
|
||||||
public string UserType { get; set; }
|
public string UserType { get; set; }
|
||||||
|
|
||||||
|
public List<string> Roles { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
using IP2Region.Net.Abstractions;
|
using DocumentFormat.OpenXml.Spreadsheet;
|
||||||
|
using IP2Region.Net.Abstractions;
|
||||||
using IRaCIS.Application.Contracts;
|
using IRaCIS.Application.Contracts;
|
||||||
|
using IRaCIS.Core.Application.Auth;
|
||||||
using IRaCIS.Core.Application.Contracts;
|
using IRaCIS.Core.Application.Contracts;
|
||||||
using IRaCIS.Core.Application.Helper;
|
using IRaCIS.Core.Application.Helper;
|
||||||
using IRaCIS.Core.Application.Helper.OtherTool;
|
using IRaCIS.Core.Application.Helper.OtherTool;
|
||||||
|
@ -10,6 +12,7 @@ using Medallion.Threading;
|
||||||
using Microsoft.AspNetCore.Authorization;
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
|
using NPOI.SS.Formula.Functions;
|
||||||
using Panda.DynamicWebApi.Attributes;
|
using Panda.DynamicWebApi.Attributes;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using ZiggyCreatures.Caching.Fusion;
|
using ZiggyCreatures.Caching.Fusion;
|
||||||
|
@ -28,12 +31,14 @@ namespace IRaCIS.Core.Application.Service
|
||||||
IRepository<Trial> _trialRepository,
|
IRepository<Trial> _trialRepository,
|
||||||
IOptionsMonitor<ServiceVerifyConfigOption> _verifyConfig,
|
IOptionsMonitor<ServiceVerifyConfigOption> _verifyConfig,
|
||||||
IOptionsMonitor<SystemEmailSendConfig> systemEmailConfig,
|
IOptionsMonitor<SystemEmailSendConfig> systemEmailConfig,
|
||||||
IOptionsMonitor<SystemHospitalOption> _systemHospitalConfig,
|
IRepository<HIRHospital> _hirHospitalRepository,
|
||||||
|
ITokenService _tokenService,
|
||||||
ISearcher _searcher, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer, IFusionCache _fusionCache) : BaseService, IUserService
|
ISearcher _searcher, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer, IFusionCache _fusionCache) : BaseService, IUserService
|
||||||
{
|
{
|
||||||
|
|
||||||
private SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue;
|
private SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue;
|
||||||
|
|
||||||
|
|
||||||
private async Task VerifyUserNameAsync(Guid? userId, string userName)
|
private async Task VerifyUserNameAsync(Guid? userId, string userName)
|
||||||
{
|
{
|
||||||
if (await _userRepository.WhereIf(userId != null, t => t.Id != userId).AnyAsync(t => t.UserName == userName))
|
if (await _userRepository.WhereIf(userId != null, t => t.Id != userId).AnyAsync(t => t.UserName == userName))
|
||||||
|
@ -274,12 +279,14 @@ namespace IRaCIS.Core.Application.Service
|
||||||
[UnitOfWork]
|
[UnitOfWork]
|
||||||
public async Task<IResponseOutput> ResetPassword(Guid userId)
|
public async Task<IResponseOutput> ResetPassword(Guid userId)
|
||||||
{
|
{
|
||||||
|
var hospitalInfo = await _fusionCache.GetOrSetAsync(CacheKeys.Hospital, _ => CacheHelper.GetHospitalCode(_hirHospitalRepository), TimeSpan.FromDays(7));
|
||||||
|
|
||||||
|
|
||||||
//var pwd = IRCEmailPasswordHelper.GenerateRandomPassword(10);
|
//var pwd = IRCEmailPasswordHelper.GenerateRandomPassword(10);
|
||||||
|
|
||||||
var pwd = "123456";
|
var pwd = "123456";
|
||||||
|
|
||||||
if (_systemHospitalConfig.CurrentValue.IsCanConnectInternet)
|
if (hospitalInfo.IsCanConnectInternet)
|
||||||
{
|
{
|
||||||
await _mailVerificationService.AdminResetPwdSendEmailAsync(userId, pwd);
|
await _mailVerificationService.AdminResetPwdSendEmailAsync(userId, pwd);
|
||||||
}
|
}
|
||||||
|
@ -413,7 +420,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
var result = await (userQuery.FirstOrDefaultAsync()).IfNullThrowException();
|
var result = await (userQuery.FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
|
|
||||||
result.AccountList = _userRepository.Where(t => t.EMail == result.EMail && t.UserTypeEnum != UserTypeEnum.SuperAdmin)
|
result.AccountList = _userRepository.Where(t => t.EMail == result.EMail && t.UserTypeEnum != UserTypeEnum.SuperAdmin)
|
||||||
.ProjectTo<UserAccountInfo>(_mapper.ConfigurationProvider).ToList();
|
.ProjectTo<UserAccountInfo>(_mapper.ConfigurationProvider).OrderBy(t => t.UserTypeShortName).ToList();
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -426,6 +433,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
[UnitOfWork]
|
[UnitOfWork]
|
||||||
public async Task<IResponseOutput<UserAddedReturnDTO>> AddUser(UserCommand userAddModel)
|
public async Task<IResponseOutput<UserAddedReturnDTO>> AddUser(UserCommand userAddModel)
|
||||||
{
|
{
|
||||||
|
var hospitalInfo = await _fusionCache.GetOrSetAsync(CacheKeys.Hospital, _ => CacheHelper.GetHospitalCode(_hirHospitalRepository), TimeSpan.FromDays(7));
|
||||||
|
|
||||||
|
|
||||||
await VerifyUserNameAsync(null, userAddModel.UserName);
|
await VerifyUserNameAsync(null, userAddModel.UserName);
|
||||||
|
@ -461,7 +469,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
var success = await _userRepository.SaveChangesAsync();
|
var success = await _userRepository.SaveChangesAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_systemHospitalConfig.CurrentValue.IsCanConnectInternet)
|
if (hospitalInfo.IsCanConnectInternet)
|
||||||
{
|
{
|
||||||
await _mailVerificationService.AddUserSendEmailAsync(saveItem.Id, userAddModel.BaseUrl, userAddModel.RouteUrl);
|
await _mailVerificationService.AddUserSendEmailAsync(saveItem.Id, userAddModel.BaseUrl, userAddModel.RouteUrl);
|
||||||
|
|
||||||
|
@ -630,8 +638,12 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
|
|
||||||
[AllowAnonymous]
|
[AllowAnonymous]
|
||||||
public async Task<IResponseOutput> TJUserLoginInfo(string token)
|
[HttpGet]
|
||||||
|
public async Task<IResponseOutput> TJUserLoginInfo(string token,
|
||||||
|
[FromServices] IRepository<UserType> _userTypeRepository,
|
||||||
|
[FromServices] IRepository<HIRHospital> _hirHospitalRepository)
|
||||||
{
|
{
|
||||||
|
#region MyRegion
|
||||||
//同济医院token 地址:http://192.168.40.88:8080 appid:third-hirs
|
//同济医院token 地址:http://192.168.40.88:8080 appid:third-hirs
|
||||||
|
|
||||||
//本地测试地址接口
|
//本地测试地址接口
|
||||||
|
@ -644,14 +656,118 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
var requestData = new
|
var requestData = new
|
||||||
{
|
{
|
||||||
userToken = token,
|
token = token,
|
||||||
appId = "third-hirs",
|
appId = "third-hirs",
|
||||||
};
|
};
|
||||||
|
|
||||||
var tjUserInfo = await RestClientAPI.PostAsync<TJUserInfoDto>(apiUrl, requestData, headers);
|
var tjUserInfo = await RestClientAPI.PostAsync<TJUserInfoDto>(apiUrl, requestData, headers);
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region 测试数据
|
||||||
|
|
||||||
|
//var tjUserInfo = new TJUserInfoDto
|
||||||
|
//{
|
||||||
|
// Code = "200",
|
||||||
|
// Msg = "操作成功",
|
||||||
|
// Success = true,
|
||||||
|
// Data = new TJUserInfoData
|
||||||
|
// {
|
||||||
|
// UserCode = "YS10138",
|
||||||
|
// UserName = "胡学梅",
|
||||||
|
// DeptCode = "2121",
|
||||||
|
// Sex = "未知",
|
||||||
|
// Birthday = "",
|
||||||
|
// Title = "",
|
||||||
|
// UserType = "doctor",
|
||||||
|
// Roles = new List<string> { "pm", "crc" }
|
||||||
|
// }
|
||||||
|
//};
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
var generateRoles = new List<string>() { "PM", "CRC", "SR", "PI", "QA" };
|
||||||
|
|
||||||
|
if (tjUserInfo != null && tjUserInfo.Data?.Roles != null &&
|
||||||
|
tjUserInfo.Data.Roles.Any(role => generateRoles.Any(gRole => string.Equals(gRole, role, StringComparison.OrdinalIgnoreCase))))
|
||||||
|
{
|
||||||
|
|
||||||
|
var sysUserTypeList = _userTypeRepository.Where().Select(t => new { t.UserTypeShortName, t.UserTypeEnum, t.Id }).ToList();
|
||||||
|
|
||||||
|
var matchedRoles = generateRoles.Where(role => tjUserInfo.Data.Roles.Any(r => string.Equals(r, role, StringComparison.OrdinalIgnoreCase))).ToList();
|
||||||
|
|
||||||
|
|
||||||
|
var hospital = await _hirHospitalRepository.Where(t => t.IsDefault == true).ProjectTo<HIRHospitalView>(_mapper.ConfigurationProvider).FirstNotNullAsync();
|
||||||
|
|
||||||
|
var thirdUId = tjUserInfo.Data.UserCode;
|
||||||
|
|
||||||
|
var email = $"{tjUserInfo.Data.UserCode}@tjhir.com";
|
||||||
|
|
||||||
|
var @lock = _distributedLockProvider.CreateLock($"UserAccount");
|
||||||
|
|
||||||
|
using (await @lock.AcquireAsync())
|
||||||
|
{
|
||||||
|
//匹配的角色 都匹配一遍账号,没有便生成
|
||||||
|
foreach (var roleName in matchedRoles)
|
||||||
|
{
|
||||||
|
var userType = sysUserTypeList.Where(t => t.UserTypeShortName == roleName).First();
|
||||||
|
|
||||||
|
var userTypeId = userType.Id;
|
||||||
|
|
||||||
|
if (!_userRepository.Any(t => t.ThirdUserCode == thirdUId && t.UserTypeId == userTypeId))
|
||||||
|
{
|
||||||
|
var newCode = await _userRepository.Select(t => t.Code).DefaultIfEmpty().MaxAsync() + 1;
|
||||||
|
|
||||||
|
var newUser = new User()
|
||||||
|
{
|
||||||
|
FirstName = $"{tjUserInfo.Data.UserName}",
|
||||||
|
LastName = "tj",
|
||||||
|
|
||||||
|
IsFirstAdd = false,
|
||||||
|
IsZhiZhun = true,
|
||||||
|
OrganizationName = hospital.HospitalName,
|
||||||
|
Code = newCode,
|
||||||
|
Password = MD5Helper.Md5("123456"),
|
||||||
|
CheckCode = "123456",
|
||||||
|
UserCode = AppSettings.GetCodeStr(newCode, nameof(User)),
|
||||||
|
|
||||||
|
UserTypeId = userTypeId,
|
||||||
|
UserTypeEnum = userType.UserTypeEnum,
|
||||||
|
|
||||||
|
EMail = email,
|
||||||
|
UserName = $"{tjUserInfo.Data.UserName}-{roleName}",
|
||||||
|
ThirdUserCode = thirdUId,
|
||||||
|
};
|
||||||
|
|
||||||
|
await _userRepository.AddAsync(newUser);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
await _userRepository.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
//返回该账号的在系统的中的所有角色,如果单个角色,就直接登录,如果是多个角色,那么前端进行选择后进行登录
|
||||||
|
|
||||||
|
var accountList = _userRepository.Where(t => t.EMail == email && t.UserTypeEnum != UserTypeEnum.SuperAdmin)
|
||||||
|
.ProjectTo<UserAccountInfo>(_mapper.ConfigurationProvider).OrderBy(t => t.UserTypeShortName).ToList();
|
||||||
|
|
||||||
|
var hirToken = _tokenService.GetToken(IRaCISClaims.Create(new UserBasicInfo() { Id = Guid.NewGuid(), UserName = tjUserInfo.Data.UserName }));
|
||||||
|
|
||||||
|
return ResponseOutput.Ok(accountList, hirToken);
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return ResponseOutput.NotOk("跳转系统对接的用户未配置当前系统的角色,无法自动生成账号,请联系管理员配置该跳转账户信息");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return ResponseOutput.Ok(tjUserInfo);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -829,7 +945,9 @@ namespace IRaCIS.Core.Application.Service
|
||||||
[HttpGet("{email}/{verifyCode}")]
|
[HttpGet("{email}/{verifyCode}")]
|
||||||
public async Task<List<UserAccountDto>> VerifyAnonymousVerifyCode(string email, string verifyCode)
|
public async Task<List<UserAccountDto>> VerifyAnonymousVerifyCode(string email, string verifyCode)
|
||||||
{
|
{
|
||||||
if (_systemHospitalConfig.CurrentValue.IsCanConnectInternet)
|
var hospitalInfo = await _fusionCache.GetOrSetAsync(CacheKeys.Hospital, _ => CacheHelper.GetHospitalCode(_hirHospitalRepository), TimeSpan.FromDays(7));
|
||||||
|
|
||||||
|
if (hospitalInfo.IsCanConnectInternet)
|
||||||
{
|
{
|
||||||
var verificationRecord = await _verificationCodeRepository
|
var verificationRecord = await _verificationCodeRepository
|
||||||
.Where(t => t.UserId == Guid.Empty && t.Code == verifyCode && t.CodeType == VerifyType.Email && t.EmailOrPhone == email).OrderByDescending(t => t.CreateTime).FirstOrDefaultAsync();
|
.Where(t => t.UserId == Guid.Empty && t.Code == verifyCode && t.CodeType == VerifyType.Email && t.EmailOrPhone == email).OrderByDescending(t => t.CreateTime).FirstOrDefaultAsync();
|
||||||
|
|
|
@ -61,4 +61,19 @@ namespace IRaCIS.Application.Contracts
|
||||||
public string? ModalitiesInStudy { get; set; }
|
public string? ModalitiesInStudy { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class TJCmoveStudyCommand
|
||||||
|
{
|
||||||
|
public string Token { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// C-move 检查 数组
|
||||||
|
/// </summary>
|
||||||
|
public List<string> StudyInstanceUIDList { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///PacsAE 的名字
|
||||||
|
/// </summary>
|
||||||
|
public string CalledAE { get; set; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,6 +52,7 @@ using IRaCIS.Core.Infra.EFCore.Migrations;
|
||||||
using System.Dynamic;
|
using System.Dynamic;
|
||||||
using System.Threading.Channels;
|
using System.Threading.Channels;
|
||||||
using NPOI.HSSF.Record.Chart;
|
using NPOI.HSSF.Record.Chart;
|
||||||
|
using IRaCIS.Core.Application.Helper.OtherTool;
|
||||||
|
|
||||||
|
|
||||||
namespace IRaCIS.Application.Services
|
namespace IRaCIS.Application.Services
|
||||||
|
@ -68,6 +69,9 @@ namespace IRaCIS.Application.Services
|
||||||
IRepository<SCPImageUpload> _SCPImageUploadRepository,
|
IRepository<SCPImageUpload> _SCPImageUploadRepository,
|
||||||
IRepository<User> _userRepository,
|
IRepository<User> _userRepository,
|
||||||
IRepository<HIRHospital> _hIRHospitalRepository,
|
IRepository<HIRHospital> _hIRHospitalRepository,
|
||||||
|
IRepository<DicomAE> _dicomAEReposiotry,
|
||||||
|
IRepository<SCPInstance> _scpInstanceRepository,
|
||||||
|
IOptionsMonitor<ServiceVerifyConfigOption> _basicSystemConfigConfig,
|
||||||
ILogger<PatientService> _logger,
|
ILogger<PatientService> _logger,
|
||||||
IDistributedLockProvider _distributedLockProvider, IMapper _mapper, IUserInfo _userInfo, IWebHostEnvironment _hostEnvironment, IStringLocalizer _localizer, IFusionCache _fusionCache
|
IDistributedLockProvider _distributedLockProvider, IMapper _mapper, IUserInfo _userInfo, IWebHostEnvironment _hostEnvironment, IStringLocalizer _localizer, IFusionCache _fusionCache
|
||||||
|
|
||||||
|
@ -380,8 +384,13 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public async Task<IResponseOutput<TrialAuthorizationInfo>> GetTrialAuthorizationInfo(Guid trialId, [FromServices] IOptionsMonitor<SystemHospitalOption> _hospitalOption)
|
public async Task<IResponseOutput<TrialAuthorizationInfo>> GetTrialAuthorizationInfo(Guid trialId)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
var query = _hIRHospitalRepository.Where(t => t.IsDefault == true).ProjectTo<HIRHospitalView>(_mapper.ConfigurationProvider);
|
||||||
|
|
||||||
|
var hospitalInfo = await query.FirstNotNullAsync();
|
||||||
|
|
||||||
var trialInfo = _trialRepository.Where(t => t.Id == trialId, ignoreQueryFilters: true).FirstOrDefault();
|
var trialInfo = _trialRepository.Where(t => t.Id == trialId, ignoreQueryFilters: true).FirstOrDefault();
|
||||||
|
|
||||||
var authInfo = new TrialAuthorizationInfo()
|
var authInfo = new TrialAuthorizationInfo()
|
||||||
|
@ -392,8 +401,8 @@ namespace IRaCIS.Application.Services
|
||||||
PurchaseDuration = 1,
|
PurchaseDuration = 1,
|
||||||
CriterionTypeList = trialInfo.CriterionTypeList,
|
CriterionTypeList = trialInfo.CriterionTypeList,
|
||||||
//CriterionTypes = trialInfo.CriterionTypes,
|
//CriterionTypes = trialInfo.CriterionTypes,
|
||||||
HospitalName = _hospitalOption.CurrentValue.HospitalName,
|
HospitalName = hospitalInfo.HospitalName,
|
||||||
HospitalCode = _hospitalOption.CurrentValue.HospitalCode,
|
HospitalCode = hospitalInfo.HospitalCode,
|
||||||
};
|
};
|
||||||
|
|
||||||
return ResponseOutput.Ok(authInfo);
|
return ResponseOutput.Ok(authInfo);
|
||||||
|
@ -405,7 +414,7 @@ namespace IRaCIS.Application.Services
|
||||||
/// <param name="authInfo"></param>
|
/// <param name="authInfo"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<IResponseOutput> GetTrialAuthorizationCode(TrialAuthorizationInfo authInfo, [FromServices] IOptionsMonitor<SystemHospitalOption> _hospitalOption)
|
public async Task<IResponseOutput> GetTrialAuthorizationCode(TrialAuthorizationInfo authInfo)
|
||||||
{
|
{
|
||||||
|
|
||||||
// 将明文信息转换成 Base64 编码
|
// 将明文信息转换成 Base64 编码
|
||||||
|
@ -419,10 +428,9 @@ namespace IRaCIS.Application.Services
|
||||||
/// 获取授权码明文信息
|
/// 获取授权码明文信息
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="authorizationCode"></param>
|
/// <param name="authorizationCode"></param>
|
||||||
/// <param name="_hospitalOption"></param>
|
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[AllowAnonymous]
|
[AllowAnonymous]
|
||||||
public async Task<IResponseOutput> GetAuthorizationCodeInfo(string authorizationCode, [FromServices] IOptionsMonitor<SystemHospitalOption> _hospitalOption)
|
public async Task<IResponseOutput> GetAuthorizationCodeInfo(string authorizationCode)
|
||||||
{
|
{
|
||||||
// 解密 Base64 编码后的数据
|
// 解密 Base64 编码后的数据
|
||||||
byte[] base64DecodedBytes = Convert.FromBase64String(authorizationCode);
|
byte[] base64DecodedBytes = Convert.FromBase64String(authorizationCode);
|
||||||
|
@ -464,7 +472,6 @@ namespace IRaCIS.Application.Services
|
||||||
/// <param name="_basicSystemConfigConfig"></param>
|
/// <param name="_basicSystemConfigConfig"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<IResponseOutput> GetActivationCodeInfo(string activationCode,
|
public async Task<IResponseOutput> GetActivationCodeInfo(string activationCode,
|
||||||
[FromServices] IOptionsMonitor<SystemHospitalOption> _hospitalOption,
|
|
||||||
[FromServices] IOptionsMonitor<ServiceVerifyConfigOption> _basicSystemConfigConfig)
|
[FromServices] IOptionsMonitor<ServiceVerifyConfigOption> _basicSystemConfigConfig)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -505,10 +512,12 @@ namespace IRaCIS.Application.Services
|
||||||
[HttpPut]
|
[HttpPut]
|
||||||
public async Task<IResponseOutput> ActivateTrial(Guid trialId, string activationCode,
|
public async Task<IResponseOutput> ActivateTrial(Guid trialId, string activationCode,
|
||||||
[FromServices] IOptionsMonitor<ServiceVerifyConfigOption> _basicSystemConfigConfig,
|
[FromServices] IOptionsMonitor<ServiceVerifyConfigOption> _basicSystemConfigConfig,
|
||||||
[FromServices] IFusionCache _provider,
|
[FromServices] IFusionCache _provider)
|
||||||
[FromServices] IOptionsMonitor<SystemHospitalOption> _hospitalOption)
|
|
||||||
{
|
{
|
||||||
var hospitalCode = _hospitalOption.CurrentValue.HospitalCode;
|
var query = _hIRHospitalRepository.Where(t => t.IsDefault == true).ProjectTo<HIRHospitalView>(_mapper.ConfigurationProvider);
|
||||||
|
var hospitalInfo = await query.FirstNotNullAsync();
|
||||||
|
|
||||||
|
var hospitalCode = hospitalInfo.HospitalCode;
|
||||||
var trialInfo = _trialRepository.Where(t => t.Id == trialId, ignoreQueryFilters: true).FirstOrDefault();
|
var trialInfo = _trialRepository.Where(t => t.Id == trialId, ignoreQueryFilters: true).FirstOrDefault();
|
||||||
|
|
||||||
var decodedText = string.Empty;
|
var decodedText = string.Empty;
|
||||||
|
@ -3303,14 +3312,8 @@ namespace IRaCIS.Application.Services
|
||||||
/// 拉取影像
|
/// 拉取影像
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="inCommand"></param>
|
/// <param name="inCommand"></param>
|
||||||
/// <param name="_dicomAEReposiotry"></param>
|
|
||||||
/// <param name="_scpInstanceRepository"></param>
|
|
||||||
/// <param name="_basicSystemConfigConfig"></param>
|
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<IResponseOutput> CmoveStudyList(SCUCmoveCommand inCommand,
|
public async Task<IResponseOutput> CmoveStudyList(SCUCmoveCommand inCommand)
|
||||||
[FromServices] IRepository<DicomAE> _dicomAEReposiotry,
|
|
||||||
[FromServices] IRepository<SCPInstance> _scpInstanceRepository,
|
|
||||||
[FromServices] IOptionsMonitor<ServiceVerifyConfigOption> _basicSystemConfigConfig)
|
|
||||||
{
|
{
|
||||||
|
|
||||||
var result = new List<SCUStudyView>();
|
var result = new List<SCUStudyView>();
|
||||||
|
@ -3402,7 +3405,57 @@ namespace IRaCIS.Application.Services
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 同济医院 第三方系统 发送命令拉取影像
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="inCommand"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpPost]
|
||||||
|
[AllowAnonymous]
|
||||||
|
public async Task<IResponseOutput> TjCmoveStudy(TJCmoveStudyCommand inCommand)
|
||||||
|
{
|
||||||
|
|
||||||
|
var apiUrl = "http://192.168.40.88:8080/dock/userinfo";
|
||||||
|
var headers = new Dictionary<string, string>
|
||||||
|
{
|
||||||
|
{ "Content-Type", "application/json" } // 根据需要添加其他头部信息
|
||||||
|
};
|
||||||
|
|
||||||
|
var requestData = new
|
||||||
|
{
|
||||||
|
token = inCommand.Token,
|
||||||
|
appId = "third-hirs",
|
||||||
|
};
|
||||||
|
|
||||||
|
var tjUserInfo = await RestClientAPI.PostAsync<TJUserInfoDto>(apiUrl, requestData, headers);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (tjUserInfo != null && tjUserInfo.Data?.Roles != null &&
|
||||||
|
tjUserInfo.Data.Roles.Any(role => string.Equals("PM", role, StringComparison.OrdinalIgnoreCase)))
|
||||||
|
{
|
||||||
|
var find = await _dicomAEReposiotry.FirstOrDefaultAsync(t => t.CalledAE == inCommand.CalledAE && t.PacsTypeEnum == PacsType.PacsServer);
|
||||||
|
|
||||||
|
if (find == null)
|
||||||
|
{
|
||||||
|
return ResponseOutput.NotOk($"{inCommand.CalledAE}在系统中未配置,请联系维护人员核查");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var cmoveCommand = new SCUCmoveCommand() { PacsDicomAEId = find.Id, StudyInstanceUIDList = inCommand.StudyInstanceUIDList };
|
||||||
|
|
||||||
|
|
||||||
|
return await CmoveStudyList(cmoveCommand);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return ResponseOutput.NotOk("未获取到该用户信息或者该用户token 不包含PM 角色");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
|
@ -87,7 +87,11 @@ public class User : BaseFullAuditEntity
|
||||||
public Guid UserTypeId { get; set; }
|
public Guid UserTypeId { get; set; }
|
||||||
|
|
||||||
#region HIR
|
#region HIR
|
||||||
|
|
||||||
public string CheckCode { get; set; } = string.Empty;
|
public string CheckCode { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
//目前是tj医院
|
||||||
|
public string ThirdUserCode { get; set; } = string.Empty;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
18770
IRaCIS.Core.Infra.EFCore/Migrations/20250328015326_tjAddUserCode.Designer.cs
generated
Normal file
18770
IRaCIS.Core.Infra.EFCore/Migrations/20250328015326_tjAddUserCode.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,30 @@
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public partial class tjAddUserCode : Migration
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.AddColumn<string>(
|
||||||
|
name: "ThirdUserCode",
|
||||||
|
table: "User",
|
||||||
|
type: "nvarchar(400)",
|
||||||
|
maxLength: 400,
|
||||||
|
nullable: false,
|
||||||
|
defaultValue: "");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "ThirdUserCode",
|
||||||
|
table: "User");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -13148,6 +13148,11 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
b.Property<bool>("SuperAdmin")
|
b.Property<bool>("SuperAdmin")
|
||||||
.HasColumnType("bit");
|
.HasColumnType("bit");
|
||||||
|
|
||||||
|
b.Property<string>("ThirdUserCode")
|
||||||
|
.IsRequired()
|
||||||
|
.HasMaxLength(400)
|
||||||
|
.HasColumnType("nvarchar(400)");
|
||||||
|
|
||||||
b.Property<DateTime>("UpdateTime")
|
b.Property<DateTime>("UpdateTime")
|
||||||
.HasColumnType("datetime2");
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue