From e43dce220c2f7012d25f5641e98b5e86fcdf89ed Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 18 Apr 2025 09:54:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=BF=80=E6=B4=BB=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TrialGlobalLimitEndpointFilter.cs | 8 ++- .../TrialSiteUser/TrialConfigService.cs | 50 +++++++++++-------- 2 files changed, 35 insertions(+), 23 deletions(-) diff --git a/IRaCIS.Core.Application/BusinessFilter/MinimalAPI/TrialGlobalLimitEndpointFilter.cs b/IRaCIS.Core.Application/BusinessFilter/MinimalAPI/TrialGlobalLimitEndpointFilter.cs index ccd1fcf49..666647aef 100644 --- a/IRaCIS.Core.Application/BusinessFilter/MinimalAPI/TrialGlobalLimitEndpointFilter.cs +++ b/IRaCIS.Core.Application/BusinessFilter/MinimalAPI/TrialGlobalLimitEndpointFilter.cs @@ -30,7 +30,8 @@ public class TrialGlobalLimitAttribute : Attribute public class TrialGlobalLimitEndpointFilter(IFusionCache _fusionCache, IUserInfo _userInfo, IRepository _trialRepository, IOptionsMonitor _basicSystemConfigConfig, - IOptionsMonitor _hospitalOption, IStringLocalizer _localizer) : IEndpointFilter + IRepository _hirHospitalRepository, + IStringLocalizer _localizer) : IEndpointFilter { public async ValueTask InvokeAsync(EndpointFilterInvocationContext context, EndpointFilterDelegate next) @@ -158,6 +159,9 @@ public class TrialGlobalLimitEndpointFilter(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; @@ -187,7 +191,7 @@ public class TrialGlobalLimitEndpointFilter(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/Service/TrialSiteUser/TrialConfigService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs index e1a924a23..536d54071 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs @@ -44,7 +44,7 @@ namespace IRaCIS.Core.Application IRepository _trialStateChangeRepository, IRepository _readingTableQuestionTrialRepository, IOptionsMonitor _basicSystemConfigConfig, - IOptionsMonitor _hospitalOption, + IRepository _hIRHospitalRepository, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer, IFusionCache _fusionCache) : BaseService, ITrialConfigService { @@ -1243,30 +1243,38 @@ namespace IRaCIS.Core.Application #region 自动激活一个月 - var hospitalCode = _hospitalOption.CurrentValue.HospitalCode; - var hospitalName = _hospitalOption.CurrentValue.HospitalName; - var deadLineDate = DateTime.Now.Date.AddMonths(1).AddDays(1).AddSeconds(-1); - - var authorizationInfo = new TrialAuthorizationInfo() + if (trial.AuthorizationDate == null && trial.AuthorizationEncrypt.IsNotNullOrEmpty()) { - ActiveTime = DateTime.Now, - PurchaseDuration = 1, - CriterionTypeList = trial.CriterionTypeList, - HospitalCode = hospitalCode, - HospitalName = hospitalName, - CreateUserId = trial.CreateUserId, - TrialId = trial.Id, - TrialCode = trial.TrialCode, - AuthorizationDeadLineDate = deadLineDate, - ActiveDeadLineDate = DateTime.Now.Date.AddDays(8).AddSeconds(-1) - }; - var newActivationCode = AesEncryption.Encrypt($"{JsonConvert.SerializeObject(authorizationInfo)}", _basicSystemConfigConfig.CurrentValue.AESKey, "Trial_AuthorizationEncrypt"); + var query = _hIRHospitalRepository.Where(t => t.IsDefault == true).ProjectTo(_mapper.ConfigurationProvider); - trial.AuthorizationEncrypt = newActivationCode; - trial.AuthorizationDate = deadLineDate; + var hospitalInfo = await query.FirstNotNullAsync(); - //await _trialRepository.BatchUpdateNoTrackingAsync(t => t.Id == trialId, u => new Trial() { AuthorizationEncrypt = newActivationCode, AuthorizationDate = deadLineDate }); + var hospitalCode = hospitalInfo.HospitalCode; + var hospitalName = hospitalInfo.HospitalName; + var deadLineDate = DateTime.Now.Date.AddMonths(1).AddDays(1).AddSeconds(-1); + + var authorizationInfo = new TrialAuthorizationInfo() + { + ActiveTime = DateTime.Now, + PurchaseDuration = 1, + CriterionTypeList = trial.CriterionTypeList, + HospitalCode = hospitalCode, + HospitalName = hospitalName, + CreateUserId = trial.CreateUserId, + TrialId = trial.Id, + TrialCode = trial.TrialCode, + AuthorizationDeadLineDate = deadLineDate, + ActiveDeadLineDate = DateTime.Now.Date.AddDays(8).AddSeconds(-1) + }; + + var newActivationCode = AesEncryption.Encrypt($"{JsonConvert.SerializeObject(authorizationInfo)}", _basicSystemConfigConfig.CurrentValue.AESKey, "Trial_AuthorizationEncrypt"); + + trial.AuthorizationEncrypt = newActivationCode; + trial.AuthorizationDate = deadLineDate; + + //await _trialRepository.BatchUpdateNoTrackingAsync(t => t.Id == trialId, u => new Trial() { AuthorizationEncrypt = newActivationCode, AuthorizationDate = deadLineDate }); + } #endregion