From 8cef0673dbca8fcb85571c2a18e83b38b4dbe4b1 Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期四, 14 八月 2025 14:01:08 +0800
Subject: [PATCH] feat:开发

---
 FlexJobApi.Core/Utils/ResourceUtils/IResourceHttpProvider.cs |   93 +++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 86 insertions(+), 7 deletions(-)

diff --git a/FlexJobApi.Core/Utils/ResourceUtils/IResourceHttpProvider.cs b/FlexJobApi.Core/Utils/ResourceUtils/IResourceHttpProvider.cs
index 8cf27e5..bc12627 100644
--- a/FlexJobApi.Core/Utils/ResourceUtils/IResourceHttpProvider.cs
+++ b/FlexJobApi.Core/Utils/ResourceUtils/IResourceHttpProvider.cs
@@ -1,7 +1,12 @@
-锘縰sing Furion;
+锘縰sing Azure;
+using Azure.Core;
+using Furion;
 using Furion.FriendlyException;
 using Furion.HttpRemote;
 using Furion.Shapeless;
+using Mapster;
+using Microsoft.Extensions.Caching.Distributed;
+using Newtonsoft.Json;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -15,6 +20,7 @@
     {
         HttpRequestBuilder AddAuthentication(HttpRequestBuilder builder);
         Task<TResponse> SendAsAsync<TResponse>(IHttpRemoteService httpRemoteService, HttpRequestBuilder builder);
+        Task<string> SendAsStringAsync(IHttpRemoteService httpRemoteService, HttpRequestBuilder builder);
     }
 
     public class DefaultResourceHttpProvider : IResourceHttpProvider
@@ -30,17 +36,90 @@
 
         public async Task<TResponse> SendAsAsync<TResponse>(IHttpRemoteService httpRemoteService, HttpRequestBuilder builder)
         {
+            return await httpRemoteService.SendAsAsync<TResponse>(builder);
+        }
+
+        public async Task<string> SendAsStringAsync(IHttpRemoteService httpRemoteService, HttpRequestBuilder builder)
+        {
+            return await httpRemoteService.SendAsStringAsync(builder);
+        }
+    }
+
+    public class TokenDataModel
+    {
+        /// <summary>
+        /// 鐢ㄦ埛璁块棶浠ょ墝
+        /// </summary>
+        public string AccessToken { get; set; }
+
+        /// <summary>
+        /// 鍒锋柊浠ょ墝
+        /// </summary>
+        public string RefreshToken { get; set; }
+    }
+
+    public class SystemUserResourceHttpProvider : IResourceHttpProvider
+    {
+        public HttpRequestBuilder AddAuthentication(HttpRequestBuilder builder)
+        {
+            var token = GetToken();
+            return builder
+                .WithHeader("Authorization", "Bearer " + token.AccessToken)
+                .WithHeader("X-Authorization", "Bearer " + token.RefreshToken);
+        }
+
+        public async Task<TResponse> SendAsAsync<TResponse>(IHttpRemoteService httpRemoteService, HttpRequestBuilder builder)
+        {
             var response = await httpRemoteService.SendAsAsync<TResponse>(builder);
-            dynamic clay = Clay.Parse(response);
-            if (clay.Code == 401)
+            return response;
+        }
+
+        public async Task<string> SendAsStringAsync(IHttpRemoteService httpRemoteService, HttpRequestBuilder builder)
+        {
+            var response = await httpRemoteService.SendAsStringAsync(builder);
+            try
             {
-                Console.WriteLine();
-                throw new Exception();
+                var result = response.JsonTo(new
+                {
+                    Code = 0
+                });
+                if (result.Code == 401)
+                {
+                    var token = GetToken(true);
+                    builder = builder
+                        .WithHeader("Authorization", "Bearer " + token.AccessToken)
+                        .WithHeader("X-Authorization", "Bearer " + token.RefreshToken);
+                    response = await httpRemoteService.SendAsStringAsync(builder);
+                }
             }
-            else
+            catch { }
+            return response;
+        }
+
+        private TokenDataModel GetToken(bool recache = false)
+        {
+            var distributedCache = App.GetRequiredService<IDistributedCache>();
+            var token = distributedCache.GetString("SystemUserToken");
+            if (token == null || recache)
             {
-                return response;
+                var logier = new CurrentLogier
+                {
+                    Id = new Guid("11111111-1111-1111-1111-111111111111"),
+                    Name = "绠$悊鍛�",
+                    UserName = "system",
+                    Type = EnumUserType.Operation,
+                    ClientType = EnumClientType.PcWeb,
+                    Level = 999,
+                };
+                JwtUtils.GenerateToken(logier);
+                token = logier.Adapt<TokenDataModel>().ToJson();
+                distributedCache.SetString("SystemUserToken", token, new DistributedCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(60 * 23)
+                });
             }
+            var tokenData = token.JsonTo<TokenDataModel>();
+            return tokenData;
         }
     }
 }

--
Gitblit v1.9.1