From 2da5c6be190d8078393eb2df777863931218ad19 Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期五, 08 八月 2025 10:16:40 +0800 Subject: [PATCH] feat:开发 --- FlexJobApi.Core/Utils/ResourceUtils/ResourceUtils.cs | 78 +++++++++++++++------------------------ 1 files changed, 30 insertions(+), 48 deletions(-) diff --git a/FlexJobApi.Core/Utils/ResourceUtils/ResourceUtils.cs b/FlexJobApi.Core/Utils/ResourceUtils/ResourceUtils.cs index 0bf57e6..d1749ca 100644 --- a/FlexJobApi.Core/Utils/ResourceUtils/ResourceUtils.cs +++ b/FlexJobApi.Core/Utils/ResourceUtils/ResourceUtils.cs @@ -42,8 +42,11 @@ /// <typeparam name="TRequest"></typeparam> /// <typeparam name="TResponse"></typeparam> /// <param name="request"></param> + /// <param name="provider"></param> /// <returns></returns> - public static async Task<TResponse> SendHttpAsync<TRequest, TResponse>(TRequest request) + public static async Task<TResponse> SendHttpAsync<TRequest, TResponse>( + TRequest request, + IResourceHttpProvider provider = null) where TRequest : class, new() { var requestTypeFullName = typeof(TRequest).FullName; @@ -52,46 +55,14 @@ .FirstOrDefaultAsync(); var domain = await GetHealthyServiceDomain(resource); var httpRemoteService = App.GetRequiredService<IHttpRemoteService>(); - var token = App.HttpContext.Request.Headers["Authorization"].ToString(); - var refreshToken = App.HttpContext.Request.Headers["X-Authorization"].ToString(); - TResponse response; - switch (resource.Method) - { - case EnumResourceMethod.Get: - response = await httpRemoteService.GetAsAsync<TResponse>( - $"{domain}{resource.Route}", - it => - it.WithQueryParameters(request) - .AddAuthentication(new AuthenticationHeaderValue("Authorization", token)) - .AddAuthentication(new AuthenticationHeaderValue("X-Authorization", refreshToken))); - break; - case EnumResourceMethod.Post: - response = await httpRemoteService.PostAsAsync<TResponse>( - $"{domain}{resource.Route}", - it => - it.SetJsonContent(request) - .WithHeader("Authorization", token) - .WithHeader("X-Authorization", refreshToken)); - break; - case EnumResourceMethod.Put: - response = await httpRemoteService.PutAsAsync<TResponse>( - $"{domain}{resource.Route}", - it => - it.SetJsonContent(request) - .AddAuthentication(new AuthenticationHeaderValue("Authorization", token)) - .AddAuthentication(new AuthenticationHeaderValue("X-Authorization", refreshToken))); - break; - case EnumResourceMethod.Delete: - response = await httpRemoteService.DeleteAsAsync<TResponse>( - $"{domain}{resource.Route}", - it => - it.SetJsonContent(request) - .AddAuthentication(new AuthenticationHeaderValue("Authorization", token)) - .AddAuthentication(new AuthenticationHeaderValue("X-Authorization", refreshToken))); - break; - default: - throw Oops.Oh(EnumErrorCodeType.s400, $"涓嶆敮鎸佽姹傛柟寮弡resource.Method}"); - } + var builder = HttpRequestBuilder.Create(resource.GetHttpMethod(), $"{domain}{resource.Route}"); + if (resource.Method == EnumResourceMethod.Get) + builder = builder.WithQueryParameters(request); + else + builder = builder.SetJsonContent(request); + provider = provider ?? new DefaultResourceHttpProvider(); + builder = provider.AddAuthentication(builder); + var response = await provider.SendAsAsync<TResponse>(httpRemoteService, builder); return response; } @@ -187,7 +158,7 @@ } } - var resources = await SaveResourcesAsync(models, traceId, rep); + var resources = await SaveResourcesAsync(models, rep); DynamicControllersHotPlug(resources, provider); @@ -201,7 +172,7 @@ /// <param name="traceId"></param> /// <param name="rep"></param> /// <returns></returns> - private static async Task<List<Resource>> SaveResourcesAsync(List<ResourceModel> models, string traceId, IRepository<Resource> rep = null) + private static async Task<List<Resource>> SaveResourcesAsync(List<ResourceModel> models, IRepository<Resource> rep = null) { rep = rep ?? Db.GetRepository<Resource>(); var resources = await rep.AsQueryable() @@ -213,22 +184,33 @@ if (resource == null) { resource = new Resource(); + resource.Id = IDGen.NextID(); + resource.CreatedTime = DateTimeOffset.Now; model.Adapt(resource); await rep.InsertAsync(resource); resources.Add(resource); } else { - model.Adapt(resource); - await rep.UpdateAsync(resource); + var resourceBakModel = new ResourceModel(); + resource.Adapt(resourceBakModel); + resourceBakModel.TraceId = model.TraceId; + resourceBakModel.DynamicAssemblyName = model.DynamicAssemblyName; + if (resourceBakModel.ToJson() != model.ToJson()) + { + model.Adapt(resource); + resource.UpdatedTime = DateTimeOffset.Now; + await rep.UpdateAsync(resource); + } } } - var expiredResources = resources.Where(it => it.TraceId != traceId).ToList(); + var expiredResources = resources.Where(it => !models.Any(m => m.Route == it.Route && m.Method == it.Method)).ToList(); foreach (var expiredResource in expiredResources) { - expiredResource.IsExpired = true; - await rep.UpdateAsync(expiredResource); + //expiredResource.IsExpired = true; + //await rep.UpdateAsync(expiredResource); + await rep.DeleteAsync(expiredResource); } return resources.Where(it => !it.IsExpired).ToList(); -- Gitblit v1.9.1