diff --git a/ZR.Admin.WebApi/Controllers/System/TasksController.cs b/ZR.Admin.WebApi/Controllers/System/TasksController.cs index 651ca6e..754eef6 100644 --- a/ZR.Admin.WebApi/Controllers/System/TasksController.cs +++ b/ZR.Admin.WebApi/Controllers/System/TasksController.cs @@ -15,6 +15,7 @@ using ZR.Model.System; using ZR.Service.System.IService; using ZR.Tasks; using Snowflake.Core; +using Infrastructure.Extensions; namespace ZR.Admin.WebApi.Controllers { @@ -62,14 +63,14 @@ namespace ZR.Admin.WebApi.Controllers /// /// 编码 /// - [HttpGet("{id}")] + [HttpGet("get")] public IActionResult Get(string id) { if (!string.IsNullOrEmpty(id)) { return SUCCESS(_tasksQzService.GetId(id)); } - return SUCCESS(_tasksQzService.GetAll()); + return SUCCESS(null); } /// @@ -90,7 +91,10 @@ namespace ZR.Admin.WebApi.Controllers { throw new CustomException($"cron表达式不正确"); } - + if (string.IsNullOrEmpty(parm.ApiUrl) && parm.TaskType == 2) + { + throw new CustomException($"地址不能为空"); + } //从 Dto 映射到 实体 var tasksQz = parm.Adapt().ToCreate(); var worker = new IdWorker(1, 1); @@ -98,7 +102,13 @@ namespace ZR.Admin.WebApi.Controllers tasksQz.ID = worker.NextId().ToString(); tasksQz.IsStart = false; tasksQz.Create_by = HttpContext.GetName(); - + tasksQz.TaskType = parm.TaskType; + tasksQz.ApiUrl = parm.ApiUrl; + if (parm.ApiUrl.IfNotEmpty() && parm.TaskType == 2) + { + tasksQz.AssemblyName = "ZR.Tasks"; + tasksQz.ClassName = "TaskScheduler.HttpResultfulJob"; + } return SUCCESS(_tasksQzService.Add(tasksQz)); } @@ -125,7 +135,15 @@ namespace ZR.Admin.WebApi.Controllers throw new CustomException($"cron表达式不正确"); } var tasksQz = _tasksQzService.GetFirst(m => m.ID == parm.ID); - + if (string.IsNullOrEmpty(parm.ApiUrl) && parm.TaskType == 2) + { + throw new CustomException($"api地址不能为空"); + } + if (parm.ApiUrl.IfNotEmpty() && parm.TaskType == 2) + { + parm.AssemblyName = "ZR.Tasks"; + parm.ClassName = "TaskScheduler.HttpResultfulJob"; + } if (tasksQz.IsStart) { throw new CustomException($"该任务正在运行中,请先停止在更新"); @@ -142,10 +160,12 @@ namespace ZR.Admin.WebApi.Controllers TriggerType = parm.TriggerType, IntervalSecond = parm.IntervalSecond, JobParams = parm.JobParams, - Update_by = User.Identity.Name, + Update_by = HttpContextExtension.GetName(HttpContext), Update_time = DateTime.Now, BeginTime = parm.BeginTime, - EndTime = parm.EndTime + EndTime = parm.EndTime, + TaskType = parm.TaskType, + ApiUrl = parm.ApiUrl, }); if (response > 0) { diff --git a/ZR.Model/System/Dto/TasksDto.cs b/ZR.Model/System/Dto/TasksDto.cs index 3fa3cdf..9b0d9a9 100644 --- a/ZR.Model/System/Dto/TasksDto.cs +++ b/ZR.Model/System/Dto/TasksDto.cs @@ -112,6 +112,11 @@ namespace ZR.Model.System.Dto /// [Display(Name = "传入参数")] public string JobParams { get; set; } + public string ApiUrl { get; set; } + /// + /// 1、程序集任务 2、apiUrl任务 + /// + public int TaskType { get; set; } } /// @@ -219,6 +224,10 @@ namespace ZR.Model.System.Dto /// [Display(Name = "传入参数")] public string JobParams { get; set; } + public string ApiUrl { get; set; } + /// + /// 1、程序集任务 2、apiUrl任务 + /// + public int TaskType { get; set; } } - } diff --git a/ZR.Model/System/SysTasksQz.cs b/ZR.Model/System/SysTasksQz.cs index 58deb98..2827394 100644 --- a/ZR.Model/System/SysTasksQz.cs +++ b/ZR.Model/System/SysTasksQz.cs @@ -157,5 +157,13 @@ namespace ZR.Model.System /// 最后运行时间 /// public DateTime? LastRunTime { get; set; } + /// + /// api执行地址 + /// + public string ApiUrl { get; set; } + /// + /// 任务类型 1程序集2网络请求 + /// + public int TaskType { get; set; } } } diff --git a/ZR.Tasks/JobFactory.cs b/ZR.Tasks/JobFactory.cs index 13e3d50..1317ee3 100644 --- a/ZR.Tasks/JobFactory.cs +++ b/ZR.Tasks/JobFactory.cs @@ -7,7 +7,7 @@ namespace ZR.Tasks { public class JobFactory : IJobFactory { - private NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); + private readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); /// /// 注入反射获取依赖对象 @@ -42,12 +42,10 @@ namespace ZR.Tasks public void ReturnJob(IJob job) { - var disposable = job as IDisposable; - if (disposable != null) + if (job is IDisposable disposable) { disposable.Dispose(); } - } } } diff --git a/ZR.Tasks/TaskScheduler/Job_HttpRequest.cs b/ZR.Tasks/TaskScheduler/Job_HttpRequest.cs new file mode 100644 index 0000000..b65a9ad --- /dev/null +++ b/ZR.Tasks/TaskScheduler/Job_HttpRequest.cs @@ -0,0 +1,33 @@ +using Infrastructure; +using Infrastructure.Attribute; +using Quartz; +using Quartz.Impl; +using Quartz.Impl.Triggers; +using System.Threading.Tasks; +using ZR.Service.System.IService; + +namespace ZR.Tasks.TaskScheduler +{ + [AppService(ServiceType = typeof(Job_HttpRequest), ServiceLifetime = LifeTime.Scoped)] + internal class Job_HttpRequest : JobBase, IJob + { + private readonly ISysTasksQzService tasksQzService; + + public Job_HttpRequest(ISysTasksQzService tasksQzService) + { + this.tasksQzService = tasksQzService; + } + public async Task Execute(IJobExecutionContext context) + { + await ExecuteJob(context, async () => await Run(context)); + } + public async Task Run(IJobExecutionContext context) + { + AbstractTrigger trigger = (context as JobExecutionContextImpl).Trigger as AbstractTrigger; + var info = await tasksQzService.GetByIdAsync(trigger.Name); + + var result = await HttpHelper.HttpPostAsync("http://" + info.ApiUrl, info.JobParams); + //Console.WriteLine(result); + } + } +} diff --git a/ZR.Vue/src/views/monitor/job/index.vue b/ZR.Vue/src/views/monitor/job/index.vue index d24036b..f08e1b8 100644 --- a/ZR.Vue/src/views/monitor/job/index.vue +++ b/ZR.Vue/src/views/monitor/job/index.vue @@ -77,46 +77,71 @@ - +
{{form.id}}
- + - + - + - - - + + + + 执行程序集 + 执行url + - - - + + + + + + - + + + + + + + + 传入参数 + - +