From fcea8146709858bbd0e98a30f8a74a9613ffb28c Mon Sep 17 00:00:00 2001 From: LiJiaWen Date: Mon, 17 Aug 2026 15:40:21 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=90=AF=E5=8A=A8=E6=97=B6?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=88=9D=E5=A7=8B=E5=8C=96=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 程序启动时自动调用init接口来初始化ESign的SDK服务 --- .../Controllers/OnlineHospitalController.cs | 55 ++++++++++++------- CA-Platform-Linker/Startup.cs | 45 +++++++++++++++ CA-Platform-Linker/Tools/SdkState.cs | 25 +++++++++ 3 files changed, 106 insertions(+), 19 deletions(-) create mode 100644 CA-Platform-Linker/Tools/SdkState.cs diff --git a/CA-Platform-Linker/Controllers/OnlineHospitalController.cs b/CA-Platform-Linker/Controllers/OnlineHospitalController.cs index e4c6112..9b3db6c 100644 --- a/CA-Platform-Linker/Controllers/OnlineHospitalController.cs +++ b/CA-Platform-Linker/Controllers/OnlineHospitalController.cs @@ -18,29 +18,34 @@ namespace CA_Platform_Linker.Controllers _onlineHospitalService = onlineHospitalService; } - [HttpGet] - public async Task InitSDK() - { - try - { - var result = await _onlineHospitalService.InitSDKAsync(); - if (result.errCode == 0) - { - return Ok(ApiResponse.Ok(result.msg)); - } - LogHelper.Log.Error($"初始化SDK失败: {result.msg}"); - return Ok(ApiResponse.Fail(result.msg)); - } - catch (Exception ex) - { - LogHelper.Log.Error($"初始化SDK异常: {ex.Message}"); - return Ok(ApiResponse.Fail($"初始化SDK异常: {ex.Message}")); - } - } + // SDK初始化已改为程序启动后自动执行(Startup中启动后台任务,每30秒循环调用init),不再对外暴露 + //[HttpGet] + //public async Task InitSDK() + //{ + // try + // { + // var result = await _onlineHospitalService.InitSDKAsync(); + // if (result.errCode == 0) + // { + // return Ok(ApiResponse.Ok(result.msg)); + // } + // LogHelper.Log.Error($"初始化SDK失败: {result.msg}"); + // return Ok(ApiResponse.Fail(result.msg)); + // } + // catch (Exception ex) + // { + // LogHelper.Log.Error($"初始化SDK异常: {ex.Message}"); + // return Ok(ApiResponse.Fail($"初始化SDK异常: {ex.Message}")); + // } + //} [HttpPost] public async Task SignWithP7([FromBody] EsignSignRequest request) { + if (!SdkState.IsInitialized) + { + return Ok(ApiResponse.Fail("SDK尚未初始化成功,请稍后重试")); + } try { if (string.IsNullOrEmpty(request.DoctorCode)) @@ -77,6 +82,10 @@ namespace CA_Platform_Linker.Controllers [HttpPost] public async Task VerifyP7([FromBody] EsignVerifyRequest request) { + if (!SdkState.IsInitialized) + { + return Ok(ApiResponse.Fail("SDK尚未初始化成功,请稍后重试")); + } try { if (string.IsNullOrEmpty(request.PlainText)) @@ -106,6 +115,10 @@ namespace CA_Platform_Linker.Controllers [HttpPost] public async Task CreatePersonAccount([FromBody] EsignCreatePersonRequest request) { + if (!SdkState.IsInitialized) + { + return Ok(ApiResponse.Fail("SDK尚未初始化成功,请稍后重试")); + } try { if (string.IsNullOrEmpty(request.DoctorCode)) @@ -131,6 +144,10 @@ namespace CA_Platform_Linker.Controllers [HttpPost] public async Task GetIndivAuthUrl([FromBody] EsignIndivAuthRequest request) { + if (!SdkState.IsInitialized) + { + return Ok(ApiResponse.Fail("SDK尚未初始化成功,请稍后重试")); + } try { if (string.IsNullOrEmpty(request.DoctorCode)) diff --git a/CA-Platform-Linker/Startup.cs b/CA-Platform-Linker/Startup.cs index cfd79cc..d650620 100644 --- a/CA-Platform-Linker/Startup.cs +++ b/CA-Platform-Linker/Startup.cs @@ -81,6 +81,51 @@ namespace CA_Platform_Linker { endpoints.MapControllers(); }); + + // 启动后台任务:每30秒重试初始化SDK,初始化成功后结束任务并开放接口调用 + StartSdkInitTask(app.ApplicationServices); + } + + /// + /// 启动SDK初始化后台任务:第一次先等30秒再调用init,失败则每30秒重试,成功即结束 + /// + private void StartSdkInitTask(IServiceProvider services) + { + System.Threading.Tasks.Task.Run(async () => + { + LogHelper.Log.Info("SDK初始化任务已启动,将在30秒后开始第一次调用"); + + // 第一次进入循环时先等30秒 + await System.Threading.Tasks.Task.Delay(TimeSpan.FromSeconds(30)); + + int retryCount = 0; + while (true) + { + retryCount++; + string now = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + LogHelper.Log.Info($"[第{retryCount}次初始化尝试] 开始时间: {now}"); + + try + { + var service = services.GetRequiredService(); + var result = await service.InitSDKAsync(); + if (result.errCode == 0) + { + SdkState.SetInitialized(true); + LogHelper.Log.Info($"[第{retryCount}次初始化尝试] 成功,完成时间: {System.DateTime.Now:yyyy-MM-dd HH:mm:ss},已开放接口调用,结束初始化任务"); + return; + } + LogHelper.Log.Warn($"[第{retryCount}次初始化尝试] 失败,时间: {now},errCode: {result.errCode},失败原因: {result.msg},将在30秒后重试"); + } + catch (System.Exception ex) + { + LogHelper.Log.Error($"[第{retryCount}次初始化尝试] 异常,时间: {now},异常类型: {ex.GetType().Name},异常信息: {ex.Message},将在30秒后重试"); + } + + LogHelper.Log.Info($"等待30秒后开始第{retryCount + 1}次尝试,预计时间: {System.DateTime.Now.AddSeconds(30):yyyy-MM-dd HH:mm:ss}"); + await System.Threading.Tasks.Task.Delay(TimeSpan.FromSeconds(30)); + } + }); } } } diff --git a/CA-Platform-Linker/Tools/SdkState.cs b/CA-Platform-Linker/Tools/SdkState.cs new file mode 100644 index 0000000..1c2115e --- /dev/null +++ b/CA-Platform-Linker/Tools/SdkState.cs @@ -0,0 +1,25 @@ +using System.Threading; + +namespace CA_Platform_Linker.Tools +{ + /// + /// SDK初始化状态管理 + /// + public static class SdkState + { + private static int _isInitialized = 0; + + /// + /// SDK是否已初始化成功 + /// + public static bool IsInitialized => _isInitialized == 1; + + /// + /// 标记SDK初始化状态 + /// + public static void SetInitialized(bool initialized) + { + Interlocked.Exchange(ref _isInitialized, initialized ? 1 : 0); + } + } +}