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.FlexJobServer.Test/FlexJobApi.FlexJobServer.Test.csproj | 33 +++++ FlexJobApi.Core/Entities/Common/Resource.cs | 21 +++ FlexJobApi.Core/Utils/ResourceUtils/ResourceUtils.cs | 53 ++------ FlexJobApi.Core/Models/UserServer/Users/Queries/GetUserResumeQuery.cs | 29 ++++ FlexJobApi.Core/Utils/ResourceUtils/IResourceHttpProvider.cs | 46 +++++++ FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfoQuery.cs | 10 + FlexJobApi.Core/FlexJobApi.Core.xml | 37 +++++ FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfosQuery.cs | 9 + FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs | 4 FlexJobApi.FlexJobServer.Test/Tasks/TaskUnitTest.cs | 29 ++++ FlexJobApi.FlexJobServer.Test/appsettings.json | 33 +++++ FlexJobApi.sln | 7 + 12 files changed, 262 insertions(+), 49 deletions(-) diff --git a/FlexJobApi.Core/Entities/Common/Resource.cs b/FlexJobApi.Core/Entities/Common/Resource.cs index 196433f..a412a53 100644 --- a/FlexJobApi.Core/Entities/Common/Resource.cs +++ b/FlexJobApi.Core/Entities/Common/Resource.cs @@ -1,7 +1,9 @@ -锘縰sing System; +锘縰sing Furion.FriendlyException; +using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; +using System.Net.Http; using System.Text; using System.Threading.Tasks; @@ -113,5 +115,22 @@ /// 鏄惁宸茶繃鏈� /// </summary> public bool IsExpired { get; set; } + + public HttpMethod GetHttpMethod() + { + switch (Method) + { + case EnumResourceMethod.Get: + return HttpMethod.Get; + case EnumResourceMethod.Post: + return HttpMethod.Post; + case EnumResourceMethod.Put: + return HttpMethod.Put; + case EnumResourceMethod.Delete: + return HttpMethod.Delete; + default: + throw Oops.Oh(EnumErrorCodeType.s400, "涓嶆敮鎸佺殑璇锋眰绫诲瀷"); + } + } } } diff --git a/FlexJobApi.Core/FlexJobApi.Core.xml b/FlexJobApi.Core/FlexJobApi.Core.xml index bae2665..6f33937 100644 --- a/FlexJobApi.Core/FlexJobApi.Core.xml +++ b/FlexJobApi.Core/FlexJobApi.Core.xml @@ -3110,6 +3110,16 @@ 浠诲姟鍦扮偣璇︾粏鍦板潃 </summary> </member> + <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.Longitude"> + <summary> + 缁忓害 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.Latitude"> + <summary> + 绾害 + </summary> + </member> <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.BeginTime"> <summary> 浠诲姟寮�濮嬫椂闂� @@ -3140,9 +3150,14 @@ 鍏抽敭瀛楋紙浠诲姟鍚嶇О锛� </summary> </member> - <member name="P:FlexJobApi.Core.GetTaskInfosQuery.Time"> + <member name="P:FlexJobApi.Core.GetTaskInfosQuery.BeginTime"> <summary> - 鍙戝竷鏃堕棿 + 鍙戝竷鏃堕棿-寮�濮� + </summary> + </member> + <member name="P:FlexJobApi.Core.GetTaskInfosQuery.EndTime"> + <summary> + 鍙戝竷鏃堕棿-缁撴潫 </summary> </member> <member name="P:FlexJobApi.Core.GetTaskInfosQuery.CityCode"> @@ -4893,6 +4908,21 @@ 鏄惁閫変腑 </summary> </member> + <member name="T:FlexJobApi.Core.GetUserResumeQuery"> + <summary> + 鏌ヨ鐢ㄦ埛绠�鍘� + </summary> + </member> + <member name="P:FlexJobApi.Core.GetUserResumeQuery.UserId"> + <summary> + 鐢ㄦ埛Id + </summary> + </member> + <member name="T:FlexJobApi.Core.GetUserResumeQueryResult"> + <summary> + 鏌ヨ鐢ㄦ埛绠�鍘�-缁撴灉 + </summary> + </member> <member name="T:FlexJobApi.Core.AliyunOptions"> <summary> 闃块噷浜戦厤缃� @@ -5760,13 +5790,14 @@ 璧勬簮宸ュ叿 </summary> </member> - <member name="M:FlexJobApi.Core.ResourceUtils.SendHttpAsync``2(``0)"> + <member name="M:FlexJobApi.Core.ResourceUtils.SendHttpAsync``2(``0,FlexJobApi.Core.IResourceHttpProvider)"> <summary> 鍙戦�丠TTP璇锋眰 </summary> <typeparam name="TRequest"></typeparam> <typeparam name="TResponse"></typeparam> <param name="request"></param> + <param name="provider"></param> <returns></returns> </member> <member name="M:FlexJobApi.Core.ResourceUtils.GetHealthyServiceDomain(FlexJobApi.Core.Resource)"> diff --git a/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfoQuery.cs b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfoQuery.cs index 78bd9a3..273ed6f 100644 --- a/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfoQuery.cs +++ b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfoQuery.cs @@ -129,6 +129,16 @@ public string AddressDetail { get; set; } /// <summary> + /// 缁忓害 + /// </summary> + public decimal? Longitude { get; set; } + + /// <summary> + /// 绾害 + /// </summary> + public decimal? Latitude { get; set; } + + /// <summary> /// 浠诲姟寮�濮嬫椂闂� /// </summary> public DateTime BeginTime { get; set; } diff --git a/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfosQuery.cs b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfosQuery.cs index 57f3d30..ce1fffd 100644 --- a/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfosQuery.cs +++ b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfosQuery.cs @@ -24,9 +24,14 @@ public string Keywords { get; set; } /// <summary> - /// 鍙戝竷鏃堕棿 + /// 鍙戝竷鏃堕棿-寮�濮� /// </summary> - public DateTime? Time { get; set; } + public DateTime? BeginTime { get; set; } + + /// <summary> + /// 鍙戝竷鏃堕棿-缁撴潫 + /// </summary> + public DateTime? EndTime { get; set; } /// <summary> /// 浠诲姟鍦扮偣鎵�灞炲煄甯傜紪鍙� diff --git a/FlexJobApi.Core/Models/UserServer/Users/Queries/GetUserResumeQuery.cs b/FlexJobApi.Core/Models/UserServer/Users/Queries/GetUserResumeQuery.cs new file mode 100644 index 0000000..eeb4c87 --- /dev/null +++ b/FlexJobApi.Core/Models/UserServer/Users/Queries/GetUserResumeQuery.cs @@ -0,0 +1,29 @@ +锘縰sing MediatR; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core +{ + /// <summary> + /// 鏌ヨ鐢ㄦ埛绠�鍘� + /// </summary> + [Resource([EnumResourceController.User])] + public class GetUserResumeQuery : IRequest<GetUserResumeQueryResult> + { + /// <summary> + /// 鐢ㄦ埛Id + /// </summary> + public Guid? UserId { get; set; } + } + + /// <summary> + /// 鏌ヨ鐢ㄦ埛绠�鍘�-缁撴灉 + /// </summary> + public class GetUserResumeQueryResult + { + + } +} diff --git a/FlexJobApi.Core/Utils/ResourceUtils/IResourceHttpProvider.cs b/FlexJobApi.Core/Utils/ResourceUtils/IResourceHttpProvider.cs new file mode 100644 index 0000000..8cf27e5 --- /dev/null +++ b/FlexJobApi.Core/Utils/ResourceUtils/IResourceHttpProvider.cs @@ -0,0 +1,46 @@ +锘縰sing Furion; +using Furion.FriendlyException; +using Furion.HttpRemote; +using Furion.Shapeless; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http.Headers; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core +{ + public interface IResourceHttpProvider + { + HttpRequestBuilder AddAuthentication(HttpRequestBuilder builder); + Task<TResponse> SendAsAsync<TResponse>(IHttpRemoteService httpRemoteService, HttpRequestBuilder builder); + } + + public class DefaultResourceHttpProvider : IResourceHttpProvider + { + public HttpRequestBuilder AddAuthentication(HttpRequestBuilder builder) + { + var token = App.HttpContext.Request.Headers["Authorization"].ToString(); + var refreshToken = App.HttpContext.Request.Headers["X-Authorization"].ToString(); + return builder + .AddAuthentication(new AuthenticationHeaderValue("Authorization", token)) + .AddAuthentication(new AuthenticationHeaderValue("X-Authorization", 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) + { + Console.WriteLine(); + throw new Exception(); + } + else + { + return response; + } + } + } +} diff --git a/FlexJobApi.Core/Utils/ResourceUtils/ResourceUtils.cs b/FlexJobApi.Core/Utils/ResourceUtils/ResourceUtils.cs index 9b51203..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; } diff --git a/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs b/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs index 50cd830..bf22bf4 100644 --- a/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs +++ b/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs @@ -55,9 +55,9 @@ { q = q.Where(it => it.Name.Contains(request.Keywords)); } - if (request.Time.HasValue) + if (request.BeginTime.HasValue && request.EndTime.HasValue) { - q = q.Where(it => it.BeginTime <= request.Time && request.Time <= it.EndTime); + q = q.Where(it => request.BeginTime <= it.BeginTime && it.BeginTime <= request.EndTime); } if (request.CityCode.IsNotNull()) { diff --git a/FlexJobApi.FlexJobServer.Test/FlexJobApi.FlexJobServer.Test.csproj b/FlexJobApi.FlexJobServer.Test/FlexJobApi.FlexJobServer.Test.csproj new file mode 100644 index 0000000..38469f4 --- /dev/null +++ b/FlexJobApi.FlexJobServer.Test/FlexJobApi.FlexJobServer.Test.csproj @@ -0,0 +1,33 @@ +锘�<Project Sdk="Microsoft.NET.Sdk"> + + <PropertyGroup> + <TargetFramework>net9.0</TargetFramework> + <ImplicitUsings>enable</ImplicitUsings> + <Nullable>enable</Nullable> + <IsPackable>false</IsPackable> + </PropertyGroup> + + <ItemGroup> + <Content Include="appsettings.json"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + <ExcludeFromSingleFile>true</ExcludeFromSingleFile> + <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory> + </Content> + </ItemGroup> + + <ItemGroup> + <PackageReference Include="coverlet.collector" Version="6.0.2" /> + <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" /> + <PackageReference Include="xunit" Version="2.9.2" /> + <PackageReference Include="xunit.runner.visualstudio" Version="2.8.2" /> + </ItemGroup> + + <ItemGroup> + <ProjectReference Include="..\FlexJobApi.Core\FlexJobApi.Core.csproj" /> + </ItemGroup> + + <ItemGroup> + <Using Include="Xunit" /> + </ItemGroup> + +</Project> diff --git a/FlexJobApi.FlexJobServer.Test/Tasks/TaskUnitTest.cs b/FlexJobApi.FlexJobServer.Test/Tasks/TaskUnitTest.cs new file mode 100644 index 0000000..3a93b69 --- /dev/null +++ b/FlexJobApi.FlexJobServer.Test/Tasks/TaskUnitTest.cs @@ -0,0 +1,29 @@ +锘縰sing FlexJobApi.Core; +using System.Threading.Tasks; + +namespace FlexJobApi.FlexJobServer.Test +{ + public class TaskUnitTest + { + [Fact] + public async Task Test1() + { + var categories = await ResourceUtils.SendHttpAsync< + GetDictionaryCategorySelectQuery, + FriendlyResult<SelectOption<Guid, GetDictionaryCategorySelectQueryOption>>>( + new GetDictionaryCategorySelectQuery()); + Console.WriteLine(); + var result = await ResourceUtils.SendHttpAsync<SaveTaskInfoCommand, Guid>(new SaveTaskInfoCommand + { + Name = "娴嬭瘯浠诲姟", + BillingMethod = EnumBillingMethod.Month, + ServiceFee = 100, + SettlementCycle = EnumSettlementCycle.Month, + Benefits = new List<string> + { + + } + }); + } + } +} diff --git a/FlexJobApi.FlexJobServer.Test/appsettings.json b/FlexJobApi.FlexJobServer.Test/appsettings.json new file mode 100644 index 0000000..9c3686e --- /dev/null +++ b/FlexJobApi.FlexJobServer.Test/appsettings.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json", + "ConnectionStrings": { + "FlexJobApi": "Server=120.26.58.240; Database=Dev_FlexJobApi; User=bole;Password=Bole1472589;Encrypt=false;", + "FlexJobApiLog": "Server=120.26.58.240; Database=Dev_FlexJobApiLog; User=bole;Password=Bole1472589;Encrypt=false;", + "HumanResources": "Server=120.26.58.240; Database=Dev_12333; User=bole;Password=Bole1472589;Encrypt=false;" + }, + "Consul": { + "Address": "http://localhost:8500/", + "ServiceName": "Local_FlexJobApi", + "ServiceIP": "localhost", + "ServicePort": 53780, + "ServiceHealthCheck": "/healthz" + }, + "DistributedCache": { + "Access": "Redis", + "Configuration": "118.178.252.28:5390,password=Bole123!" + }, + "Aliyun": { + "OSS": { + "AccessKeyId": "LTAI4GAdJ88mUMMFBHHiyDmS", + "AccessSecret": "NX3AmjOcGkJ8bncQfIVxqmifBWkI0E", + "RegionId": "cn-hangzhou", + "Endpoint": "http://oss-cn-hangzhou.aliyuncs.com", + "BucketName": "waterdroptest2", + "Url": "https://waterdroptest2.oss-cn-hangzhou.aliyuncs.com/", + "RoleArn": "acs:ram::1483797030072898:role/boleoss", + "RoleSessionName": "SessionTest", + "Policy": "{\"Version\":\"1\",\"Statement\":[{\"Effect\":\"Allow\",\"Action\":\"oss:PutObject\",\"Resource\":[\"acs:oss:*:*:waterdroptest2/*\",\"acs:oss:*:*:parkmanagement/*\",\"acs:oss:*:*:jurenlian/*\"]}]}", + "DurationSeconds": 3600 + } + } +} \ No newline at end of file diff --git a/FlexJobApi.sln b/FlexJobApi.sln index 4801498..24a73e4 100644 --- a/FlexJobApi.sln +++ b/FlexJobApi.sln @@ -19,6 +19,8 @@ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FlexJobApi.FlexJobServer.Application", "FlexJobApi.FlexJobServer.Application\FlexJobApi.FlexJobServer.Application.csproj", "{6D8B1CA5-5859-491D-8E16-027ED8E44BDE}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FlexJobApi.FlexJobServer.Test", "FlexJobApi.FlexJobServer.Test\FlexJobApi.FlexJobServer.Test.csproj", "{1D9D054D-B5D4-4F5B-B1D1-0354CD0F322F}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -49,6 +51,10 @@ {6D8B1CA5-5859-491D-8E16-027ED8E44BDE}.Debug|Any CPU.Build.0 = Debug|Any CPU {6D8B1CA5-5859-491D-8E16-027ED8E44BDE}.Release|Any CPU.ActiveCfg = Release|Any CPU {6D8B1CA5-5859-491D-8E16-027ED8E44BDE}.Release|Any CPU.Build.0 = Release|Any CPU + {1D9D054D-B5D4-4F5B-B1D1-0354CD0F322F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1D9D054D-B5D4-4F5B-B1D1-0354CD0F322F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1D9D054D-B5D4-4F5B-B1D1-0354CD0F322F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1D9D054D-B5D4-4F5B-B1D1-0354CD0F322F}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -56,6 +62,7 @@ GlobalSection(NestedProjects) = preSolution {BAC3E134-8D84-4F6D-8C25-AD6FD8A95697} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} {6D8B1CA5-5859-491D-8E16-027ED8E44BDE} = {39E37108-90DA-4908-B04C-B5A06591326D} + {1D9D054D-B5D4-4F5B-B1D1-0354CD0F322F} = {39E37108-90DA-4908-B04C-B5A06591326D} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {B2073C2C-0FD3-452B-8047-8134D68E12CE} -- Gitblit v1.9.1