feat:完成job定时任务功能模块
This commit is contained in:
24
Yi.Furion.Net6/Yi.Furion.Application/Rbac/Job/TestJob.cs
Normal file
24
Yi.Furion.Net6/Yi.Furion.Application/Rbac/Job/TestJob.cs
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Furion.Schedule;
|
||||||
|
|
||||||
|
namespace Yi.Furion.Application.Rbac.Job
|
||||||
|
{
|
||||||
|
public class TestJob : IJob
|
||||||
|
{
|
||||||
|
public Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)
|
||||||
|
{
|
||||||
|
ddd.ttt += 1;
|
||||||
|
Console.WriteLine($"你好,执行了{ddd.ttt}次");
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ddd
|
||||||
|
{
|
||||||
|
public static int ttt = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,7 +5,10 @@ using System.Text;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Furion.Schedule;
|
using Furion.Schedule;
|
||||||
using Furion.TimeCrontab;
|
using Furion.TimeCrontab;
|
||||||
|
using Yi.Framework.Infrastructure.Ddd.Dtos;
|
||||||
using Yi.Framework.Infrastructure.Ddd.Services;
|
using Yi.Framework.Infrastructure.Ddd.Services;
|
||||||
|
using Yi.Furion.Application.Rbac.Job;
|
||||||
|
using Yi.Furion.Core.Rbac.Dtos.Task;
|
||||||
|
|
||||||
namespace Yi.Furion.Application.Rbac.Services.Impl
|
namespace Yi.Furion.Application.Rbac.Services.Impl
|
||||||
{
|
{
|
||||||
@@ -16,28 +19,55 @@ namespace Yi.Furion.Application.Rbac.Services.Impl
|
|||||||
{
|
{
|
||||||
_schedulerFactory = schedulerFactory;
|
_schedulerFactory = schedulerFactory;
|
||||||
}
|
}
|
||||||
public object GetById(string jobId)
|
/// <summary>
|
||||||
|
/// 单查job
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="jobId"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public SchedulerModel GetById(string jobId)
|
||||||
{
|
{
|
||||||
var result = _schedulerFactory.TryGetJob(jobId, out var scheduler);
|
var result = _schedulerFactory.TryGetJob(jobId, out var scheduler);
|
||||||
return scheduler.GetModel();
|
return scheduler.GetModel();
|
||||||
}
|
}
|
||||||
public object Get()
|
|
||||||
|
/// <summary>
|
||||||
|
/// 多询job
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public PagedResultDto<SchedulerModel> GetList([FromQuery]TaskGetListInput input)
|
||||||
{
|
{
|
||||||
return _schedulerFactory.GetJobsOfModels();
|
var data = _schedulerFactory.GetJobsOfModels().Skip(input.PageNum * input.PageSize).Take(input.PageSize).OrderByDescending(x => x.JobDetail.UpdatedTime).ToList();
|
||||||
|
return new PagedResultDto<SchedulerModel>(data.Count(), data);
|
||||||
}
|
}
|
||||||
public object Create()
|
|
||||||
|
/// <summary>
|
||||||
|
/// 创建job
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="input"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public ScheduleResult Create(TaskCreateInput input)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
//jobBuilder
|
//jobBuilder
|
||||||
var jobBuilder = JobBuilder.Create("YourProject", "YourProject.MyJob");
|
var jobBuilder = JobBuilder.Create(input.AssemblyName, input.JobTypeFullName).SetJobId(input.JobId).SetGroupName(input.GroupName);
|
||||||
|
//.SetConcurrent(input.Concurrent).SetDescription(input.Description).SetProperties(Newtonsoft.Json.JsonConvert.SerializeObject(input.Properties));
|
||||||
|
|
||||||
//triggerBuilder
|
//triggerBuilder
|
||||||
//毫秒
|
//毫秒
|
||||||
var triggerBuilder = Triggers.Period(5000);
|
TriggerBuilder triggerBuilder = null;
|
||||||
//cron
|
switch (input.Type)
|
||||||
var triggerBuilder2 = Triggers.Cron("* * * * *", CronStringFormat.Default);
|
{
|
||||||
|
case Core.Rbac.Enums.JobTypeEnum.Cron:
|
||||||
|
triggerBuilder = Triggers.Cron(input.Cron, CronStringFormat.WithSeconds);
|
||||||
|
break;
|
||||||
|
case Core.Rbac.Enums.JobTypeEnum.Millisecond:
|
||||||
|
triggerBuilder = Triggers.Period(input.Millisecond);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
//作业计划,单个jobBuilder与多个triggerBuilder组合
|
//作业计划,单个jobBuilder与多个triggerBuilder组合
|
||||||
var schedulerBuilder = SchedulerBuilder.Create(jobBuilder, triggerBuilder, triggerBuilder2);
|
var schedulerBuilder = SchedulerBuilder.Create(jobBuilder, triggerBuilder);
|
||||||
|
|
||||||
|
|
||||||
//调度中心工厂,使用作业计划管理job,返回调度中心单个
|
//调度中心工厂,使用作业计划管理job,返回调度中心单个
|
||||||
@@ -45,24 +75,70 @@ namespace Yi.Furion.Application.Rbac.Services.Impl
|
|||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
public object Remove(string jobId)
|
|
||||||
|
/// <summary>
|
||||||
|
/// 移除job
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="jobId"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public ScheduleResult Remove(string jobId)
|
||||||
{
|
{
|
||||||
var res = _schedulerFactory.TryRemoveJob(jobId, out var scheduler);
|
var res = _schedulerFactory.TryRemoveJob(jobId, out var scheduler);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
public object Update()
|
|
||||||
|
/// <summary>
|
||||||
|
/// 暂停job
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="jobId"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public ScheduleResult Pause(string jobId)
|
||||||
|
{
|
||||||
|
var res = _schedulerFactory.TryGetJob(jobId, out var scheduler);
|
||||||
|
|
||||||
|
scheduler.Pause();
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 开始job
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="jobId"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public ScheduleResult Start(string jobId)
|
||||||
|
{
|
||||||
|
var res = _schedulerFactory.TryGetJob(jobId, out var scheduler);
|
||||||
|
scheduler.Start();
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 更新job
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="jobId"></param>
|
||||||
|
/// <param name="input"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public ScheduleResult Update(string jobId,TaskUpdateInput input)
|
||||||
{
|
{
|
||||||
//jobBuilder
|
//jobBuilder
|
||||||
var jobBuilder = JobBuilder.Create("YourProject", "YourProject.MyJob");
|
var jobBuilder = JobBuilder.Create(input.AssemblyName, input.JobTypeFullName).SetJobId(jobId).SetGroupName(input.GroupName)
|
||||||
|
.SetConcurrent(input.Concurrent).SetDescription(input.Description).SetProperties(Newtonsoft.Json.JsonConvert.SerializeObject(input.Properties));
|
||||||
|
|
||||||
//triggerBuilder
|
//triggerBuilder
|
||||||
//毫秒
|
//毫秒
|
||||||
var triggerBuilder = Triggers.Period(5000);
|
TriggerBuilder triggerBuilder = null;
|
||||||
//cron
|
switch (input.Type)
|
||||||
var triggerBuilder2 = Triggers.Cron("* * * * *", CronStringFormat.Default);
|
{
|
||||||
|
case Core.Rbac.Enums.JobTypeEnum.Cron:
|
||||||
|
triggerBuilder = Triggers.Cron(input.Cron, CronStringFormat.WithSeconds);
|
||||||
|
break;
|
||||||
|
case Core.Rbac.Enums.JobTypeEnum.Millisecond:
|
||||||
|
triggerBuilder = Triggers.Period(input.Millisecond);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
//作业计划,单个jobBuilder与多个triggerBuilder组合
|
//作业计划,单个jobBuilder与多个triggerBuilder组合
|
||||||
var schedulerBuilder = SchedulerBuilder.Create(jobBuilder, triggerBuilder, triggerBuilder2);
|
var schedulerBuilder = SchedulerBuilder.Create(jobBuilder, triggerBuilder);
|
||||||
|
|
||||||
|
|
||||||
var result = _schedulerFactory.TryUpdateJob(schedulerBuilder, out var scheduler);
|
var result = _schedulerFactory.TryUpdateJob(schedulerBuilder, out var scheduler);
|
||||||
|
|||||||
@@ -451,6 +451,55 @@
|
|||||||
<param name="state"></param>
|
<param name="state"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:Yi.Furion.Application.Rbac.Services.Impl.TaskService.GetById(System.String)">
|
||||||
|
<summary>
|
||||||
|
单查job
|
||||||
|
</summary>
|
||||||
|
<param name="jobId"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:Yi.Furion.Application.Rbac.Services.Impl.TaskService.GetList(Yi.Furion.Core.Rbac.Dtos.Task.TaskGetListInput)">
|
||||||
|
<summary>
|
||||||
|
多询job
|
||||||
|
</summary>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:Yi.Furion.Application.Rbac.Services.Impl.TaskService.Create(Yi.Furion.Core.Rbac.Dtos.Task.TaskCreateInput)">
|
||||||
|
<summary>
|
||||||
|
创建job
|
||||||
|
</summary>
|
||||||
|
<param name="input"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:Yi.Furion.Application.Rbac.Services.Impl.TaskService.Remove(System.String)">
|
||||||
|
<summary>
|
||||||
|
移除job
|
||||||
|
</summary>
|
||||||
|
<param name="jobId"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:Yi.Furion.Application.Rbac.Services.Impl.TaskService.Pause(System.String)">
|
||||||
|
<summary>
|
||||||
|
暂停job
|
||||||
|
</summary>
|
||||||
|
<param name="jobId"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:Yi.Furion.Application.Rbac.Services.Impl.TaskService.Start(System.String)">
|
||||||
|
<summary>
|
||||||
|
开始job
|
||||||
|
</summary>
|
||||||
|
<param name="jobId"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:Yi.Furion.Application.Rbac.Services.Impl.TaskService.Update(System.String,Yi.Furion.Core.Rbac.Dtos.Task.TaskUpdateInput)">
|
||||||
|
<summary>
|
||||||
|
更新job
|
||||||
|
</summary>
|
||||||
|
<param name="jobId"></param>
|
||||||
|
<param name="input"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="T:Yi.Furion.Application.Rbac.Services.Impl.UserService">
|
<member name="T:Yi.Furion.Application.Rbac.Services.Impl.UserService">
|
||||||
<summary>
|
<summary>
|
||||||
User服务实现
|
User服务实现
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Yi.Furion.Core.Rbac.Enums;
|
||||||
|
|
||||||
|
namespace Yi.Furion.Core.Rbac.Dtos.Task
|
||||||
|
{
|
||||||
|
public class TaskCreateInput
|
||||||
|
{
|
||||||
|
public string AssemblyName { get; set; }
|
||||||
|
|
||||||
|
public string JobTypeFullName { get; set; }
|
||||||
|
|
||||||
|
public string JobId { get; set; }
|
||||||
|
|
||||||
|
public string GroupName { get; set; }
|
||||||
|
|
||||||
|
public JobTypeEnum Type { get; set; }
|
||||||
|
|
||||||
|
public string Cron { get; set; }
|
||||||
|
|
||||||
|
public int Millisecond { get; set; }
|
||||||
|
|
||||||
|
public bool Concurrent { get; set; }
|
||||||
|
|
||||||
|
public Dictionary<string, object> Properties { get; set; }
|
||||||
|
|
||||||
|
public string Description { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Yi.Framework.Infrastructure.Ddd.Dtos;
|
||||||
|
|
||||||
|
namespace Yi.Furion.Core.Rbac.Dtos.Task
|
||||||
|
{
|
||||||
|
public class TaskGetListInput: PagedAllResultRequestDto
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Yi.Furion.Core.Rbac.Dtos.Task
|
||||||
|
{
|
||||||
|
public class TaskGetListOutput
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Yi.Furion.Core.Rbac.Dtos.Task
|
||||||
|
{
|
||||||
|
public class TaskGetOutput
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Yi.Furion.Core.Rbac.Enums;
|
||||||
|
|
||||||
|
namespace Yi.Furion.Core.Rbac.Dtos.Task
|
||||||
|
{
|
||||||
|
public class TaskUpdateInput
|
||||||
|
{
|
||||||
|
public string AssemblyName { get; set; }
|
||||||
|
|
||||||
|
public string JobTypeFullName { get; set; }
|
||||||
|
|
||||||
|
public string GroupName { get; set; }
|
||||||
|
|
||||||
|
public JobTypeEnum Type { get; set; }
|
||||||
|
|
||||||
|
public string Cron { get; set; }
|
||||||
|
|
||||||
|
public int Millisecond { get; set; }
|
||||||
|
|
||||||
|
public bool Concurrent { get; set; }
|
||||||
|
|
||||||
|
public Dictionary<string, object> Properties { get; set; }
|
||||||
|
|
||||||
|
public string Description { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
14
Yi.Furion.Net6/Yi.Furion.Core/Rbac/Enums/JobTypeEnum.cs
Normal file
14
Yi.Furion.Net6/Yi.Furion.Core/Rbac/Enums/JobTypeEnum.cs
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Yi.Furion.Core.Rbac.Enums
|
||||||
|
{
|
||||||
|
public enum JobTypeEnum
|
||||||
|
{
|
||||||
|
Cron,
|
||||||
|
Millisecond
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -36,8 +36,8 @@ public class Startup : AppStartup
|
|||||||
services.AddSchedule(options =>
|
services.AddSchedule(options =>
|
||||||
{
|
{
|
||||||
// 注册作业,并配置作业触发器
|
// 注册作业,并配置作业触发器
|
||||||
options.AddJob<SystemDataJob>(Triggers.Period(10000)); // 表示每秒执行
|
//options.AddJob<SystemDataJob>(Triggers.Period(10000)); // 表示每秒执行
|
||||||
// options.AddJob<SystemDataJob>(Triggers.Cron("0 0 0,12 ? * ?",CronStringFormat.WithSeconds)); // 表示每秒执行
|
options.AddJob<SystemDataJob>(Triggers.Cron("0 0 0,12 ? * ?",CronStringFormat.WithSeconds)); // 表示每天凌晨与12点
|
||||||
});
|
});
|
||||||
services.AddFileLogging("application-{0:yyyy}-{0:MM}-{0:dd}.log", options =>
|
services.AddFileLogging("application-{0:yyyy}-{0:MM}-{0:dd}.log", options =>
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user