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 Furion.Schedule;
|
||||
using Furion.TimeCrontab;
|
||||
using Yi.Framework.Infrastructure.Ddd.Dtos;
|
||||
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
|
||||
{
|
||||
@@ -16,28 +19,55 @@ namespace Yi.Furion.Application.Rbac.Services.Impl
|
||||
{
|
||||
_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);
|
||||
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
|
||||
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
|
||||
//毫秒
|
||||
var triggerBuilder = Triggers.Period(5000);
|
||||
//cron
|
||||
var triggerBuilder2 = Triggers.Cron("* * * * *", CronStringFormat.Default);
|
||||
TriggerBuilder triggerBuilder = null;
|
||||
switch (input.Type)
|
||||
{
|
||||
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组合
|
||||
var schedulerBuilder = SchedulerBuilder.Create(jobBuilder, triggerBuilder, triggerBuilder2);
|
||||
var schedulerBuilder = SchedulerBuilder.Create(jobBuilder, triggerBuilder);
|
||||
|
||||
|
||||
//调度中心工厂,使用作业计划管理job,返回调度中心单个
|
||||
@@ -45,24 +75,70 @@ namespace Yi.Furion.Application.Rbac.Services.Impl
|
||||
|
||||
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);
|
||||
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
|
||||
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
|
||||
//毫秒
|
||||
var triggerBuilder = Triggers.Period(5000);
|
||||
//cron
|
||||
var triggerBuilder2 = Triggers.Cron("* * * * *", CronStringFormat.Default);
|
||||
TriggerBuilder triggerBuilder = null;
|
||||
switch (input.Type)
|
||||
{
|
||||
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组合
|
||||
var schedulerBuilder = SchedulerBuilder.Create(jobBuilder, triggerBuilder, triggerBuilder2);
|
||||
var schedulerBuilder = SchedulerBuilder.Create(jobBuilder, triggerBuilder);
|
||||
|
||||
|
||||
var result = _schedulerFactory.TryUpdateJob(schedulerBuilder, out var scheduler);
|
||||
|
||||
@@ -451,6 +451,55 @@
|
||||
<param name="state"></param>
|
||||
<returns></returns>
|
||||
</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">
|
||||
<summary>
|
||||
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 =>
|
||||
{
|
||||
// 注册作业,并配置作业触发器
|
||||
options.AddJob<SystemDataJob>(Triggers.Period(10000)); // 表示每秒执行
|
||||
// options.AddJob<SystemDataJob>(Triggers.Cron("0 0 0,12 ? * ?",CronStringFormat.WithSeconds)); // 表示每秒执行
|
||||
//options.AddJob<SystemDataJob>(Triggers.Period(10000)); // 表示每秒执行
|
||||
options.AddJob<SystemDataJob>(Triggers.Cron("0 0 0,12 ? * ?",CronStringFormat.WithSeconds)); // 表示每天凌晨与12点
|
||||
});
|
||||
services.AddFileLogging("application-{0:yyyy}-{0:MM}-{0:dd}.log", options =>
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user