diff --git a/IRaCIS.Core.API/_ServiceExtensions/ServiceCollectionSetup.cs b/IRaCIS.Core.API/_ServiceExtensions/ServiceCollectionSetup.cs index 9a1d84cba..d107be0a4 100644 --- a/IRaCIS.Core.API/_ServiceExtensions/ServiceCollectionSetup.cs +++ b/IRaCIS.Core.API/_ServiceExtensions/ServiceCollectionSetup.cs @@ -31,7 +31,6 @@ public static class ServiceCollectionSetup services.AddOptions().Configure(_configuration.GetSection("EncrypteResponseConfig")); services.AddOptions().Configure(_configuration.GetSection("SystemPacsConfig")); services.Configure(_configuration.GetSection("IRaCISBasicConfig")); - services.AddOptions().Configure(_configuration.GetSection("SystemHospitalConfig")); services.Configure(_configuration.GetSection("BasicSystemConfig")); diff --git a/IRaCIS.Core.API/appsettings.Test_HIR.json b/IRaCIS.Core.API/appsettings.Test_HIR.json index 6ab387b43..e0d309245 100644 --- a/IRaCIS.Core.API/appsettings.Test_HIR.json +++ b/IRaCIS.Core.API/appsettings.Test_HIR.json @@ -38,21 +38,8 @@ "AESKey": "HIR_System_AES_Key_Info", "CmoveIntervalMinutes": 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": { "Port": 465, "Host": "smtp.qiye.aliyun.com", diff --git a/IRaCIS.Core.Application/BusinessFilter/LegacyController/TrialGlobalLimitActionFilter.cs b/IRaCIS.Core.Application/BusinessFilter/LegacyController/TrialGlobalLimitActionFilter.cs index fa853d0a3..7144c020e 100644 --- a/IRaCIS.Core.Application/BusinessFilter/LegacyController/TrialGlobalLimitActionFilter.cs +++ b/IRaCIS.Core.Application/BusinessFilter/LegacyController/TrialGlobalLimitActionFilter.cs @@ -19,7 +19,8 @@ namespace IRaCIS.Core.Application.Filter; public class TrialGlobalLimitActionFilter(IFusionCache _fusionCache, IUserInfo _userInfo, IRepository _trialRepository, IOptionsMonitor _basicSystemConfigConfig, - IOptionsMonitor _hospitalOption, IStringLocalizer _localizer) : IAsyncActionFilter + IRepository _hirHospitalRepository, + IStringLocalizer _localizer) : IAsyncActionFilter { public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { @@ -152,6 +153,9 @@ public class TrialGlobalLimitActionFilter(IFusionCache _fusionCache, IUserInfo _ if (!string.IsNullOrWhiteSpace(trialIdStr)) { 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; 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(decodedText); if (authInfo != null) diff --git a/IRaCIS.Core.Application/Helper/CacheHelper.cs b/IRaCIS.Core.Application/Helper/CacheHelper.cs index 0941dfa9b..6a83d35f6 100644 --- a/IRaCIS.Core.Application/Helper/CacheHelper.cs +++ b/IRaCIS.Core.Application/Helper/CacheHelper.cs @@ -1,4 +1,5 @@ using IRaCIS.Application.Contracts; +using IRaCIS.Core.Application.ViewModel; namespace IRaCIS.Core.Application.Helper; @@ -61,6 +62,8 @@ public static class CacheKeys public static string CmoveStudyId(string studyIdStr) => $"CmoveStudyId:{studyIdStr}"; + public static string Hospital => $"Hospital"; + } public static class CacheHelper @@ -79,4 +82,10 @@ public static class CacheHelper return list; } + + public static async Task GetHospitalCode(IRepository _hirHospitalRepository) + { + return await _hirHospitalRepository.Where(t => t.IsDefault == true).FirstNotNullAsync(); + + } } diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 294e1284e..7cd66ced2 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -18257,19 +18257,18 @@ - + 获取项目授权码 - + 获取授权码明文信息 - @@ -18280,7 +18279,7 @@ - + 激活码获取明文信息 @@ -18289,7 +18288,7 @@ - + 设置项目授权信息 diff --git a/IRaCIS.Core.Application/Service/Management/UserService.cs b/IRaCIS.Core.Application/Service/Management/UserService.cs index 6be3024e5..6f63871f6 100644 --- a/IRaCIS.Core.Application/Service/Management/UserService.cs +++ b/IRaCIS.Core.Application/Service/Management/UserService.cs @@ -28,12 +28,13 @@ namespace IRaCIS.Core.Application.Service IRepository _trialRepository, IOptionsMonitor _verifyConfig, IOptionsMonitor systemEmailConfig, - IOptionsMonitor _systemHospitalConfig, + IRepository _hirHospitalRepository, ISearcher _searcher, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer, IFusionCache _fusionCache) : BaseService, IUserService { private SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue; + private async Task VerifyUserNameAsync(Guid? userId, string userName) { if (await _userRepository.WhereIf(userId != null, t => t.Id != userId).AnyAsync(t => t.UserName == userName)) @@ -274,12 +275,14 @@ namespace IRaCIS.Core.Application.Service [UnitOfWork] public async Task ResetPassword(Guid userId) { + var hospitalInfo = await _fusionCache.GetOrSetAsync(CacheKeys.Hospital, _ => CacheHelper.GetHospitalCode(_hirHospitalRepository), TimeSpan.FromDays(7)); + //var pwd = IRCEmailPasswordHelper.GenerateRandomPassword(10); var pwd = "123456"; - if (_systemHospitalConfig.CurrentValue.IsCanConnectInternet) + if (hospitalInfo.IsCanConnectInternet) { await _mailVerificationService.AdminResetPwdSendEmailAsync(userId, pwd); } @@ -413,7 +416,7 @@ namespace IRaCIS.Core.Application.Service var result = await (userQuery.FirstOrDefaultAsync()).IfNullThrowException(); result.AccountList = _userRepository.Where(t => t.EMail == result.EMail && t.UserTypeEnum != UserTypeEnum.SuperAdmin) - .ProjectTo(_mapper.ConfigurationProvider).OrderBy(t=>t.UserTypeShortName).ToList(); + .ProjectTo(_mapper.ConfigurationProvider).OrderBy(t => t.UserTypeShortName).ToList(); return result; } @@ -426,6 +429,7 @@ namespace IRaCIS.Core.Application.Service [UnitOfWork] public async Task> AddUser(UserCommand userAddModel) { + var hospitalInfo = await _fusionCache.GetOrSetAsync(CacheKeys.Hospital, _ => CacheHelper.GetHospitalCode(_hirHospitalRepository), TimeSpan.FromDays(7)); await VerifyUserNameAsync(null, userAddModel.UserName); @@ -461,7 +465,7 @@ namespace IRaCIS.Core.Application.Service var success = await _userRepository.SaveChangesAsync(); } - if (_systemHospitalConfig.CurrentValue.IsCanConnectInternet) + if (hospitalInfo.IsCanConnectInternet) { await _mailVerificationService.AddUserSendEmailAsync(saveItem.Id, userAddModel.BaseUrl, userAddModel.RouteUrl); @@ -830,7 +834,9 @@ namespace IRaCIS.Core.Application.Service [HttpGet("{email}/{verifyCode}")] public async Task> 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 .Where(t => t.UserId == Guid.Empty && t.Code == verifyCode && t.CodeType == VerifyType.Email && t.EmailOrPhone == email).OrderByDescending(t => t.CreateTime).FirstOrDefaultAsync(); diff --git a/IRaCIS.Core.Application/Service/Visit/PatientService.cs b/IRaCIS.Core.Application/Service/Visit/PatientService.cs index ae1c0a861..5b898b884 100644 --- a/IRaCIS.Core.Application/Service/Visit/PatientService.cs +++ b/IRaCIS.Core.Application/Service/Visit/PatientService.cs @@ -380,8 +380,13 @@ namespace IRaCIS.Application.Services - public async Task> GetTrialAuthorizationInfo(Guid trialId, [FromServices] IOptionsMonitor _hospitalOption) + public async Task> GetTrialAuthorizationInfo(Guid trialId) { + + var query = _hIRHospitalRepository.Where(t => t.IsDefault == true).ProjectTo(_mapper.ConfigurationProvider); + + var hospitalInfo= await query.FirstNotNullAsync(); + var trialInfo = _trialRepository.Where(t => t.Id == trialId, ignoreQueryFilters: true).FirstOrDefault(); var authInfo = new TrialAuthorizationInfo() @@ -392,8 +397,8 @@ namespace IRaCIS.Application.Services PurchaseDuration = 1, CriterionTypeList = trialInfo.CriterionTypeList, //CriterionTypes = trialInfo.CriterionTypes, - HospitalName = _hospitalOption.CurrentValue.HospitalName, - HospitalCode = _hospitalOption.CurrentValue.HospitalCode, + HospitalName = hospitalInfo.HospitalName, + HospitalCode = hospitalInfo.HospitalCode, }; return ResponseOutput.Ok(authInfo); @@ -405,7 +410,7 @@ namespace IRaCIS.Application.Services /// /// [HttpPost] - public async Task GetTrialAuthorizationCode(TrialAuthorizationInfo authInfo, [FromServices] IOptionsMonitor _hospitalOption) + public async Task GetTrialAuthorizationCode(TrialAuthorizationInfo authInfo) { // 将明文信息转换成 Base64 编码 @@ -419,10 +424,9 @@ namespace IRaCIS.Application.Services /// 获取授权码明文信息 /// /// - /// /// [AllowAnonymous] - public async Task GetAuthorizationCodeInfo(string authorizationCode, [FromServices] IOptionsMonitor _hospitalOption) + public async Task GetAuthorizationCodeInfo(string authorizationCode) { // 解密 Base64 编码后的数据 byte[] base64DecodedBytes = Convert.FromBase64String(authorizationCode); @@ -464,7 +468,6 @@ namespace IRaCIS.Application.Services /// /// public async Task GetActivationCodeInfo(string activationCode, - [FromServices] IOptionsMonitor _hospitalOption, [FromServices] IOptionsMonitor _basicSystemConfigConfig) { @@ -505,10 +508,12 @@ namespace IRaCIS.Application.Services [HttpPut] public async Task ActivateTrial(Guid trialId, string activationCode, [FromServices] IOptionsMonitor _basicSystemConfigConfig, - [FromServices] IFusionCache _provider, - [FromServices] IOptionsMonitor _hospitalOption) + [FromServices] IFusionCache _provider) { - var hospitalCode = _hospitalOption.CurrentValue.HospitalCode; + var query = _hIRHospitalRepository.Where(t => t.IsDefault == true).ProjectTo(_mapper.ConfigurationProvider); + var hospitalInfo = await query.FirstNotNullAsync(); + + var hospitalCode = hospitalInfo.HospitalCode; var trialInfo = _trialRepository.Where(t => t.Id == trialId, ignoreQueryFilters: true).FirstOrDefault(); var decodedText = string.Empty;