diff --git a/Yi.Furion.Net6/Yi.Furion.Application/Rbac/Job/TestJob.cs b/Yi.Furion.Net6/Yi.Furion.Application/Rbac/Job/TestJob.cs
new file mode 100644
index 00000000..7a5bdb54
--- /dev/null
+++ b/Yi.Furion.Net6/Yi.Furion.Application/Rbac/Job/TestJob.cs
@@ -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;
+ }
+}
diff --git a/Yi.Furion.Net6/Yi.Furion.Application/Rbac/Services/Impl/TaskService.cs b/Yi.Furion.Net6/Yi.Furion.Application/Rbac/Services/Impl/TaskService.cs
index e20a600f..598efd2c 100644
--- a/Yi.Furion.Net6/Yi.Furion.Application/Rbac/Services/Impl/TaskService.cs
+++ b/Yi.Furion.Net6/Yi.Furion.Application/Rbac/Services/Impl/TaskService.cs
@@ -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)
+ ///
+ /// 单查job
+ ///
+ ///
+ ///
+ public SchedulerModel GetById(string jobId)
{
var result = _schedulerFactory.TryGetJob(jobId, out var scheduler);
return scheduler.GetModel();
}
- public object Get()
+
+ ///
+ /// 多询job
+ ///
+ ///
+ public PagedResultDto 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(data.Count(), data);
}
- public object Create()
+
+ ///
+ /// 创建job
+ ///
+ ///
+ ///
+ 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)
+
+ ///
+ /// 移除job
+ ///
+ ///
+ ///
+ public ScheduleResult Remove(string jobId)
{
var res = _schedulerFactory.TryRemoveJob(jobId, out var scheduler);
return res;
}
- public object Update()
+
+ ///
+ /// 暂停job
+ ///
+ ///
+ ///
+ public ScheduleResult Pause(string jobId)
+ {
+ var res = _schedulerFactory.TryGetJob(jobId, out var scheduler);
+
+ scheduler.Pause();
+ return res;
+ }
+
+ ///
+ /// 开始job
+ ///
+ ///
+ ///
+ public ScheduleResult Start(string jobId)
+ {
+ var res = _schedulerFactory.TryGetJob(jobId, out var scheduler);
+ scheduler.Start();
+ return res;
+ }
+
+ ///
+ /// 更新job
+ ///
+ ///
+ ///
+ ///
+ 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);
diff --git a/Yi.Furion.Net6/Yi.Furion.Application/Yi.Furion.Application.xml b/Yi.Furion.Net6/Yi.Furion.Application/Yi.Furion.Application.xml
index 1fb18bfe..a20dc0c4 100644
--- a/Yi.Furion.Net6/Yi.Furion.Application/Yi.Furion.Application.xml
+++ b/Yi.Furion.Net6/Yi.Furion.Application/Yi.Furion.Application.xml
@@ -451,6 +451,55 @@
+
+
+ 单查job
+
+
+
+
+
+
+ 多询job
+
+
+
+
+
+ 创建job
+
+
+
+
+
+
+ 移除job
+
+
+
+
+
+
+ 暂停job
+
+
+
+
+
+
+ 开始job
+
+
+
+
+
+
+ 更新job
+
+
+
+
+
User服务实现
diff --git a/Yi.Furion.Net6/Yi.Furion.Core/Rbac/Dtos/Task/TaskCreateInput.cs b/Yi.Furion.Net6/Yi.Furion.Core/Rbac/Dtos/Task/TaskCreateInput.cs
new file mode 100644
index 00000000..161e2b7d
--- /dev/null
+++ b/Yi.Furion.Net6/Yi.Furion.Core/Rbac/Dtos/Task/TaskCreateInput.cs
@@ -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 Properties { get; set; }
+
+ public string Description { get; set; }
+ }
+}
diff --git a/Yi.Furion.Net6/Yi.Furion.Core/Rbac/Dtos/Task/TaskGetListInput.cs b/Yi.Furion.Net6/Yi.Furion.Core/Rbac/Dtos/Task/TaskGetListInput.cs
new file mode 100644
index 00000000..1b75aa04
--- /dev/null
+++ b/Yi.Furion.Net6/Yi.Furion.Core/Rbac/Dtos/Task/TaskGetListInput.cs
@@ -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
+ {
+ }
+}
diff --git a/Yi.Furion.Net6/Yi.Furion.Core/Rbac/Dtos/Task/TaskGetListOutput.cs b/Yi.Furion.Net6/Yi.Furion.Core/Rbac/Dtos/Task/TaskGetListOutput.cs
new file mode 100644
index 00000000..1db63ace
--- /dev/null
+++ b/Yi.Furion.Net6/Yi.Furion.Core/Rbac/Dtos/Task/TaskGetListOutput.cs
@@ -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
+ {
+ }
+}
diff --git a/Yi.Furion.Net6/Yi.Furion.Core/Rbac/Dtos/Task/TaskGetOutput.cs b/Yi.Furion.Net6/Yi.Furion.Core/Rbac/Dtos/Task/TaskGetOutput.cs
new file mode 100644
index 00000000..0f61c000
--- /dev/null
+++ b/Yi.Furion.Net6/Yi.Furion.Core/Rbac/Dtos/Task/TaskGetOutput.cs
@@ -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
+ {
+ }
+}
diff --git a/Yi.Furion.Net6/Yi.Furion.Core/Rbac/Dtos/Task/TaskUpdateInput.cs b/Yi.Furion.Net6/Yi.Furion.Core/Rbac/Dtos/Task/TaskUpdateInput.cs
new file mode 100644
index 00000000..9b0fa4e2
--- /dev/null
+++ b/Yi.Furion.Net6/Yi.Furion.Core/Rbac/Dtos/Task/TaskUpdateInput.cs
@@ -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 Properties { get; set; }
+
+ public string Description { get; set; }
+ }
+}
diff --git a/Yi.Furion.Net6/Yi.Furion.Core/Rbac/Enums/JobTypeEnum.cs b/Yi.Furion.Net6/Yi.Furion.Core/Rbac/Enums/JobTypeEnum.cs
new file mode 100644
index 00000000..b367f8e4
--- /dev/null
+++ b/Yi.Furion.Net6/Yi.Furion.Core/Rbac/Enums/JobTypeEnum.cs
@@ -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
+ }
+}
diff --git a/Yi.Furion.Net6/Yi.Furion.Web.Core/Startup.cs b/Yi.Furion.Net6/Yi.Furion.Web.Core/Startup.cs
index 717b4d82..118a4618 100644
--- a/Yi.Furion.Net6/Yi.Furion.Web.Core/Startup.cs
+++ b/Yi.Furion.Net6/Yi.Furion.Web.Core/Startup.cs
@@ -36,8 +36,8 @@ public class Startup : AppStartup
services.AddSchedule(options =>
{
// 注册作业,并配置作业触发器
- options.AddJob(Triggers.Period(10000)); // 表示每秒执行
- // options.AddJob(Triggers.Cron("0 0 0,12 ? * ?",CronStringFormat.WithSeconds)); // 表示每秒执行
+ //options.AddJob(Triggers.Period(10000)); // 表示每秒执行
+ options.AddJob(Triggers.Cron("0 0 0,12 ? * ?",CronStringFormat.WithSeconds)); // 表示每天凌晨与12点
});
services.AddFileLogging("application-{0:yyyy}-{0:MM}-{0:dd}.log", options =>
{