diff --git a/OpenAuth.App/Extensions/OpenJobExt.cs b/OpenAuth.App/Extensions/OpenJobExt.cs index 032f07c6..9be97c00 100644 --- a/OpenAuth.App/Extensions/OpenJobExt.cs +++ b/OpenAuth.App/Extensions/OpenJobExt.cs @@ -1,6 +1,7 @@ using System; using System.Linq; using Infrastructure; +using OpenAuth.App.Jobs; using OpenAuth.Repository.Domain; using Quartz; @@ -18,14 +19,21 @@ namespace OpenAuth.App.Extensions /// 一个Quartz Scheduler public static void Start(this OpenJob job, IScheduler scheduler) { - var jobBuilderType = typeof(JobBuilder); - var method = jobBuilderType.GetMethods().FirstOrDefault( - x => x.Name.Equals("Create", StringComparison.OrdinalIgnoreCase) && - x.IsGenericMethod && x.GetParameters().Length == 0) - ?.MakeGenericMethod(Type.GetType(job.JobCall)); - - var jobBuilder = (JobBuilder) method.Invoke(null, null); - + JobBuilder jobBuilder = null; + if (job.JobType == 1) + { + jobBuilder = JobBuilder.Create(); + } + else + { + var jobBuilderType = typeof(JobBuilder); + var method = jobBuilderType.GetMethods().FirstOrDefault( + x => x.Name.Equals("Create", StringComparison.OrdinalIgnoreCase) && + x.IsGenericMethod && x.GetParameters().Length == 0) + ?.MakeGenericMethod(Type.GetType(job.JobCall)); + jobBuilder = (JobBuilder) method.Invoke(null, null); + } + IJobDetail jobDetail = jobBuilder.WithIdentity(job.Id).Build(); jobDetail.JobDataMap[Define.JOBMAPKEY] = job.Id; //传递job信息 ITrigger trigger = TriggerBuilder.Create() diff --git a/OpenAuth.App/Jobs/HttpPostJob.cs b/OpenAuth.App/Jobs/HttpPostJob.cs new file mode 100644 index 00000000..2510e4dd --- /dev/null +++ b/OpenAuth.App/Jobs/HttpPostJob.cs @@ -0,0 +1,48 @@ +using System.Net.Http; +using System.Text; +using System.Threading.Tasks; +using Infrastructure; +using Microsoft.AspNetCore.Authentication.JwtBearer; +using OpenAuth.Repository.Domain; +using Quartz; + +namespace OpenAuth.App.Jobs +{ + public class HttpPostJob : IJob + { + private SysLogApp _sysLogApp; + private OpenJobApp _openJobApp; + private IHttpClientFactory _httpClientFactory; + + public HttpPostJob(SysLogApp sysLogApp, OpenJobApp openJobApp, IHttpClientFactory httpClientFactory) + { + _sysLogApp = sysLogApp; + _openJobApp = openJobApp; + _httpClientFactory = httpClientFactory; + } + + public async Task Execute(IJobExecutionContext context) + { + var jobId = context.MergedJobDataMap.GetString(Define.JOBMAPKEY); + var job = _openJobApp.Get(jobId); + if (job.JobType == 1) + { + using (HttpContent httpContent = new StringContent(job.JobCallParams, Encoding.UTF8)) + { + httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"); + var result = await _httpClientFactory.CreateClient().PostAsync(job.JobCall, httpContent); + _sysLogApp.Add(new SysLog + { + CreateName = "Quartz", + CreateId = "Quartz", + TypeName = "定时任务", + TypeId = "AUTOJOB", + Content = $"定时任务自动请求{job.JobCall}返回结果:{result.Content.ReadAsStringAsync().Result}" + }); + } + } + //todo:这里可以加入自己的自动任务逻辑 + _openJobApp.RecordRun(jobId); + } + } +} \ No newline at end of file