Files
Yi.Framework/Yi.Furion.Net6/Yi.Furion.Application/Rbac/Services/Impl/TaskService.cs
2023-04-25 09:19:17 +08:00

159 lines
5.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections.Generic;
using System.Linq;
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
{
public class TaskService : ApplicationService, ITaskService, IDynamicApiController, ITransient
{
private readonly ISchedulerFactory _schedulerFactory;
public TaskService(ISchedulerFactory schedulerFactory)
{
_schedulerFactory = schedulerFactory;
}
/// <summary>
/// 单查job
/// </summary>
/// <param name="jobId"></param>
/// <returns></returns>
[HttpGet("{jobId}")]
public SchedulerModel GetById([FromRoute] string jobId)
{
var result = _schedulerFactory.TryGetJob(jobId, out var scheduler);
return scheduler.GetModel();
}
/// <summary>
/// 多查job
/// </summary>
/// <returns></returns>
[HttpGet("")]
public PagedResultDto<TaskGetListOutput> GetList([FromQuery] TaskGetListInput input)
{
var data = _schedulerFactory.GetJobsOfModels().Skip((input.PageNum - 1) * input.PageSize).Take(input.PageSize).OrderByDescending(x => x.JobDetail.UpdatedTime)
.ToList();
var output = data.Select(x => x.JobDetail).Adapt<List<TaskGetListOutput>>();
return new PagedResultDto<TaskGetListOutput>(data.Count(), output);
}
/// <summary>
/// 创建job
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public ScheduleResult Create(TaskCreateInput input)
{
//jobBuilder
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 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);
//调度中心工厂使用作业计划管理job,返回调度中心单个
var result = _schedulerFactory.TryAddJob(schedulerBuilder, out var scheduler);
return result;
}
/// <summary>
/// 移除job
/// </summary>
/// <param name="jobId"></param>
/// <returns></returns>
public ScheduleResult Remove(string jobId)
{
var res = _schedulerFactory.TryRemoveJob(jobId, out var scheduler);
return res;
}
/// <summary>
/// 暂停job
/// </summary>
/// <param name="jobId"></param>
/// <returns></returns>
[HttpPut]
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>
[HttpPut]
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(input.AssemblyName, input.JobTypeFullName).SetJobId(jobId).SetGroupName(input.GroupName)
.SetConcurrent(input.Concurrent).SetDescription(input.Description).SetProperties(Newtonsoft.Json.JsonConvert.SerializeObject(input.Properties));
//triggerBuilder
//毫秒
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);
var result = _schedulerFactory.TryUpdateJob(schedulerBuilder, out var scheduler);
return result;
}
}
}