using Volo.Abp.Application.Services;
using Yi.Framework.Rbac.Application.Contracts.IServices;
namespace Yi.Framework.Rbac.Application.Services
{
public class TaskService : ApplicationService, ITaskService
{
//private readonly ISchedulerFactory _schedulerFactory;
//public TaskService(ISchedulerFactory schedulerFactory)
//{
// _schedulerFactory = schedulerFactory;
//}
/////
///// 单查job
/////
/////
/////
//[HttpGet("{jobId}")]
//public TaskGetOutput GetById([FromRoute] string jobId)
//{
// var result = _schedulerFactory.TryGetJob(jobId, out var scheduler);
// var data = scheduler.GetModel();
// var output = data.JobDetail.Adapt();
// output.TriggerArgs = data.Triggers[0].Args;
// output.NextRunTime = data.Triggers[0].NextRunTime;
// output.LastRunTime = data.Triggers[0].LastRunTime;
// output.NumberOfRuns = data.Triggers[0].NumberOfRuns;
// return output;
//}
/////
///// 多查job
/////
/////
//[HttpGet("")]
//public PagedResultDto 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 =>
// {
// var res = new TaskGetListOutput();
// res = x.JobDetail.Adapt();
// res.TriggerArgs = x.Triggers[0].Args;
// res.Status = x.Triggers[0].Status.ToString();
// return res;
// }).ToList();
// return new PagedResultDto(data.Count(), output);
//}
/////
///// 创建job
/////
/////
/////
//public ScheduleResult Create(TaskCreateInput input)
//{
// //jobBuilder
// var jobBuilder = JobBuilder.Create(input.AssemblyName, input.JobType).SetJobId(input.JobId).SetGroupName(input.GroupName)
// .SetConcurrent(input.Concurrent).SetDescription(input.Description);
// //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;
//}
/////
///// 移除job
/////
/////
/////
//public ScheduleResult Remove(string jobId)
//{
// var res = _schedulerFactory.TryRemoveJob(jobId, out var scheduler);
// return res;
//}
/////
///// 暂停job
/////
/////
/////
//[HttpPut]
//public ScheduleResult Pause(string jobId)
//{
// var res = _schedulerFactory.TryGetJob(jobId, out var scheduler);
// scheduler.Pause();
// return res;
//}
/////
///// 开始job
/////
/////
/////
//[HttpPut]
//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(input.AssemblyName, input.JobType).SetJobId(jobId).SetGroupName(input.GroupName)
// .SetConcurrent(input.Concurrent).SetDescription(input.Description);
// //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;
//}
//[HttpPost]
//public bool RunOnce(string jobId)
//{
// var result = _schedulerFactory.TryGetJob(jobId, out var scheduler);
// var triggerBuilder = Triggers.Period(100).SetRunOnStart(true).SetMaxNumberOfRuns(1);
// scheduler.AddTrigger(triggerBuilder);
// //设置启动时执行一次,然后最大只执行一次
// return true;
//}
}
}