From 40430026e52f8178a9bd3516ce910fd3a06c9702 Mon Sep 17 00:00:00 2001 From: wxd <123@qq.com> Date: Mon, 9 Mar 2026 10:50:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=B7=E8=B1=9A=E4=BA=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Hty/PushPeisResultPlugInsHty.cs | 16 ++-- .../Shentun.Peis.PlugIns.csproj | 2 + .../Hty/PushPeisResultPlugInsBase.cs | 75 ++++++++++++++----- 3 files changed, 70 insertions(+), 23 deletions(-) diff --git a/ThirdPlugIns/Shentun.Peis.PlugIns.Gem/ThirdPushs/Hty/PushPeisResultPlugInsHty.cs b/ThirdPlugIns/Shentun.Peis.PlugIns.Gem/ThirdPushs/Hty/PushPeisResultPlugInsHty.cs index c7e411c2..e1cfa3a2 100644 --- a/ThirdPlugIns/Shentun.Peis.PlugIns.Gem/ThirdPushs/Hty/PushPeisResultPlugInsHty.cs +++ b/ThirdPlugIns/Shentun.Peis.PlugIns.Gem/ThirdPushs/Hty/PushPeisResultPlugInsHty.cs @@ -32,6 +32,7 @@ namespace Shentun.Peis.PlugIns.Extensions.ThirdPushs.Hty public class PushPeisResultPlugInsHty : PushPeisResultPlugInsBase { + public PushPeisResultPlugInsHty(Guid thirdInterfaceId) : base(thirdInterfaceId) { @@ -62,6 +63,11 @@ namespace Shentun.Peis.PlugIns.Extensions.ThirdPushs.Hty var pushBaseApi = InterfaceConfig.GetValue("Interface:PushBaseApi", ""); var columnReferenceId = InterfaceConfig.GetValue("Interface:ColumnReferenceId", ""); + var token = GetThirdToken(); + if (string.IsNullOrWhiteSpace(token)) + { + throw new UserFriendlyException("获取token失败"); + } using (DbConnection conn = new NpgsqlConnection(AppConnctionStr)) { @@ -126,11 +132,11 @@ namespace Shentun.Peis.PlugIns.Extensions.ThirdPushs.Hty { var constr = new pushHtyDataItemDto { - dicValue = itemRow.reference_range_value.ToString(), + dicValue = itemRow.reference_range_value, ordinary = 1, - p_value = itemRow.result.ToString(), + p_value = itemRow.result, sysCode = itemCode.interface_code_value, - unit = itemRow.unit.ToString() + unit = itemRow.unit }; var dcIndex = contents.Count + 1; @@ -148,7 +154,7 @@ namespace Shentun.Peis.PlugIns.Extensions.ThirdPushs.Hty //推送信息 var formContent = new MultipartFormDataContent(); - formContent.Add(new StringContent(_thirdToken), "token"); + formContent.Add(new StringContent(token), "token"); formContent.Add(new StringContent("fbpc"), "urlFrom"); formContent.Add(new StringContent("-1"), "tmId"); formContent.Add(new StringContent(pushRequestJsonString, Encoding.UTF8, "application/json"), "pushData"); @@ -159,7 +165,7 @@ namespace Shentun.Peis.PlugIns.Extensions.ThirdPushs.Hty if (resultModel.stateMessage == "suc") { #region 更新人员状态 - + conn.Execute("update patient_register set is_push_third_result='Y' where id=@patient_register_id", new { patient_register_id = patientRegisterId }); #endregion } diff --git a/src/Shentun.ColumnReferencePlugIns/Shentun.Peis.PlugIns.csproj b/src/Shentun.ColumnReferencePlugIns/Shentun.Peis.PlugIns.csproj index f7c4b8a3..d3cffd71 100644 --- a/src/Shentun.ColumnReferencePlugIns/Shentun.Peis.PlugIns.csproj +++ b/src/Shentun.ColumnReferencePlugIns/Shentun.Peis.PlugIns.csproj @@ -9,6 +9,8 @@ + + diff --git a/src/Shentun.ColumnReferencePlugIns/ThirdPushs/Hty/PushPeisResultPlugInsBase.cs b/src/Shentun.ColumnReferencePlugIns/ThirdPushs/Hty/PushPeisResultPlugInsBase.cs index a7330e0e..0a9520dd 100644 --- a/src/Shentun.ColumnReferencePlugIns/ThirdPushs/Hty/PushPeisResultPlugInsBase.cs +++ b/src/Shentun.ColumnReferencePlugIns/ThirdPushs/Hty/PushPeisResultPlugInsBase.cs @@ -1,4 +1,5 @@ using Dapper; +using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Configuration; using Microsoft.Identity.Client; using Newtonsoft.Json; @@ -23,7 +24,8 @@ namespace Shentun.Peis.PlugIns.ThirdPushs.Hty //当前系统数据库地址 protected string? AppConnctionStr; protected ThirdInterfaceDto? _thirdInterfaceDto; - protected string? _thirdToken; + private string? _thirdToken; + private readonly IMemoryCache _cache; static PushPeisResultPlugInsBase() { @@ -32,6 +34,7 @@ namespace Shentun.Peis.PlugIns.ThirdPushs.Hty public PushPeisResultPlugInsBase(Guid thirdInterfaceId) { + _cache = new MemoryCache(new MemoryCacheOptions()); AppConfig = new ConfigurationBuilder() .SetBasePath(DirectoryHelper.GetAppDirectory()) // 设置基础路径为当前目录 @@ -58,34 +61,70 @@ namespace Shentun.Peis.PlugIns.ThirdPushs.Hty InterfaceConfig = configurationBuilder.Build(); } - GetThirdToken(); + // GetThirdToken(); } - private void GetThirdToken() + protected string GetThirdToken() { - var pushBaseApi = InterfaceConfig.GetValue("Interface:PushBaseApi", ""); - var thirdLoginUser = InterfaceConfig.GetValue("Interface:ThirdLoginUser", ""); - var thirdLoginPassWord = InterfaceConfig.GetValue("Interface:ThirdLoginPassWord", ""); - - var formContent = new MultipartFormDataContent(); - formContent.Add(new StringContent(thirdLoginUser), "username"); - formContent.Add(new StringContent(thirdLoginPassWord), "password"); - formContent.Add(new StringContent("Ea"), "type"); - - var result = (HtyHttpPostHelper.PostFormDataAsync($"{pushBaseApi}/api/loginEaV.action", formContent, "PostmanRuntime-ApipostRuntime/1.1.0")).GetAwaiter().GetResult(); - - var resModel = JsonConvert.DeserializeObject(result); - if (resModel != null && resModel.state == "suc") + if (!IsTokenValid()) { - _thirdToken = resModel.token2; + var pushBaseApi = InterfaceConfig.GetValue("Interface:PushBaseApi", ""); + var thirdLoginUser = InterfaceConfig.GetValue("Interface:ThirdLoginUser", ""); + var thirdLoginPassWord = InterfaceConfig.GetValue("Interface:ThirdLoginPassWord", ""); + + var formContent = new MultipartFormDataContent(); + formContent.Add(new StringContent(thirdLoginUser), "username"); + formContent.Add(new StringContent(thirdLoginPassWord), "password"); + formContent.Add(new StringContent("Ea"), "type"); + + var result = (HtyHttpPostHelper.PostFormDataAsync($"{pushBaseApi}/api/loginEaV.action", formContent, "PostmanRuntime-ApipostRuntime/1.1.0")).GetAwaiter().GetResult(); + + var resModel = JsonConvert.DeserializeObject(result); + if (resModel != null && resModel.state == "suc") + { + _thirdToken = resModel.token2; + SaveToken(_thirdToken); + } + else + { + throw new UserFriendlyException("获取token失败,检查配置的账户"); + } } else { - throw new UserFriendlyException("获取token失败,检查配置的账户"); + _thirdToken = GetToken(); } + + return _thirdToken; + } + + // 保存从其他系统获取的 Token + public void SaveToken(string token) + { + var cacheEntryOptions = new MemoryCacheEntryOptions() + .SetAbsoluteExpiration(TimeSpan.FromHours(1)) // 设置1小时过期 + .SetPriority(CacheItemPriority.NeverRemove); // 避免被优先清除 + + _cache.Set("ExternalSystemToken", token, cacheEntryOptions); + } + + // 获取 Token + public string GetToken() + { + _cache.TryGetValue("ExternalSystemToken", out string token); + return token; + } + + // 检查 Token 是否有效 + public bool IsTokenValid() + { + return _cache.TryGetValue("ExternalSystemToken", out _); } } + + + }