using Apache.NMS.ActiveMQ.Threads;
using FluentScheduler;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Rhea.Common;
using SqlSugar;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Tiger.IBusiness;
using Tiger.Model;
using Tiger.Model.Minsun;
namespace Tiger.Business
{
///
/// 接口服务
///
public class InterfaceService: IInterfaceService
{
public Sundial.ISchedulerFactory _schedulerFactory { get; set; }
///
/// 设置计划任务工厂类
///
///
public void SetSchedulerFactory(Sundial.ISchedulerFactory schedulerFactory)
{
_schedulerFactory = schedulerFactory;
}
///
/// 根据实体类名及作业名称添加作业
///
///
///
///
public ApiAction AddJob(TJob newEntity, TskJobParam jobParam) where TJob : class, Sundial.IJob
{
ApiAction apiAction = new();
Sundial.TriggerBuilder triggerBuilder = Sundial.Triggers.Period(jobParam.Period * 60 * 1000).LoadFrom(new
{
TriggerId = jobParam.JobName + "_trigger1",
});
_schedulerFactory.AddJob(jobParam.JobName, triggerBuilder);
return apiAction;
}
///
/// 根据作业名称添加作业
///
///
///
///
public ApiAction AddJob(string jobname, params Sundial.TriggerBuilder[] triggerBuilders) where TJob : class, Sundial.IJob
{
ApiAction apiAction = new();
triggerBuilders[0].LoadFrom(new
{
TriggerId = jobname + "_trigger1",
});
_schedulerFactory.AddJob(jobname, triggerBuilders);
var trigger = GetJob(jobname).GetTrigger($"{jobname}_trigger1");
return apiAction;
}
///
/// 更新作业
///
///
///
public ApiAction UpdateJob(TSK_JOB job)
{
ApiAction apiAction = new ApiAction();
Sundial.IScheduler scheduler = GetJob(job.JobName);
var trigger = scheduler.GetTrigger($"{job.JobName}_trigger1");
if (trigger.Status == Sundial.TriggerStatus.Running)
{
apiAction.IsSuccessed = false;
apiAction.Message = $"作业[{job.JobName}]正在运行不能编辑";
}
//更新触发器周期
scheduler.UpdateTrigger($"{job.JobName}_trigger1", triggerBuilder =>
{
triggerBuilder.SetArgs(job.uPeriod*60*1000);
}); ;
return apiAction;
}
private TSK_JOB ReturnDetail(string jobname)
{
var jobDetail = GetJob(jobname).GetJobDetail();
return JsonConvert.DeserializeObject(JsonConvert.SerializeObject(jobDetail));
}
///
/// 启动所有作业
///
public void StartAllJob()
{
_schedulerFactory.StartAll();
}
///
/// 启动单个作业
///
///
public void StartJob(string jobname)
{
// 带返回值
Sundial.IScheduler scheduler;
var scheduleResult = _schedulerFactory.TryRunJob(jobname, out scheduler);
}
///
/// 获取单个作业
///
///
///
public Sundial.IScheduler GetJob(string jobname)
{
Sundial.IScheduler scheduler;
var scheduleResult = _schedulerFactory.TryGetJob(jobname, out scheduler);
return scheduler;
}
///
/// 获取所有作业
///
///
public List GetJobs()
{
return _schedulerFactory.GetJobs().ToList();
}
///
/// 暂停作业
///
///
public void PauseJob(string jobname)
{
var scheduler = GetJob(jobname);
if (scheduler != null)
{
scheduler.Pause();
}
}
///
/// 删除作业
///
///
public void RemoveJob(string jobname)
{
var scheduler = GetJob(jobname);
if (scheduler != null)
{
scheduler.Remove();
}
}
///
/// 从数据库加载作业
///
public void AddJobFromDB()
{
;
}
public void JobInitialize()
{
JobManager.Initialize();
}
}
}