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
|
{
|
/// <summary>
|
/// 接口服务
|
/// </summary>
|
public class InterfaceService: IInterfaceService
|
{
|
public Sundial.ISchedulerFactory _schedulerFactory { get; set; }
|
/// <summary>
|
/// 设置计划任务工厂类
|
/// </summary>
|
/// <param name="schedulerFactory"></param>
|
public void SetSchedulerFactory(Sundial.ISchedulerFactory schedulerFactory)
|
{
|
_schedulerFactory = schedulerFactory;
|
}
|
|
/// <summary>
|
/// 根据实体类名及作业名称添加作业
|
/// </summary>
|
/// <typeparam name="TJob"></typeparam>
|
/// <param name="newEntity"></param>
|
/// <param name="jobParam"></param>
|
public ApiAction AddJob<TJob>(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<TJob>(jobParam.JobName, triggerBuilder);
|
return apiAction;
|
}
|
|
/// <summary>
|
/// 根据作业名称添加作业
|
/// </summary>
|
/// <typeparam name="TJob"></typeparam>
|
/// <param name="jobname"></param>
|
/// <param name="triggerBuilders"></param>
|
public ApiAction AddJob<TJob>(string jobname, params Sundial.TriggerBuilder[] triggerBuilders) where TJob : class, Sundial.IJob
|
{
|
ApiAction apiAction = new();
|
triggerBuilders[0].LoadFrom(new
|
{
|
TriggerId = jobname + "_trigger1",
|
});
|
_schedulerFactory.AddJob<TJob>(jobname, triggerBuilders);
|
var trigger = GetJob(jobname).GetTrigger($"{jobname}_trigger1");
|
return apiAction;
|
}
|
|
/// <summary>
|
/// 更新作业
|
/// </summary>
|
/// <param name="job"></param>
|
/// <returns></returns>
|
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<TSK_JOB>(JsonConvert.SerializeObject(jobDetail));
|
}
|
|
/// <summary>
|
/// 启动所有作业
|
/// </summary>
|
public void StartAllJob()
|
{
|
_schedulerFactory.StartAll();
|
}
|
|
/// <summary>
|
/// 启动单个作业
|
/// </summary>
|
/// <param name="jobname"></param>
|
public void StartJob(string jobname)
|
{
|
// 带返回值
|
Sundial.IScheduler scheduler;
|
var scheduleResult = _schedulerFactory.TryRunJob(jobname, out scheduler);
|
}
|
|
/// <summary>
|
/// 获取单个作业
|
/// </summary>
|
/// <param name="jobname"></param>
|
/// <returns></returns>
|
public Sundial.IScheduler GetJob(string jobname)
|
{
|
Sundial.IScheduler scheduler;
|
var scheduleResult = _schedulerFactory.TryGetJob(jobname, out scheduler);
|
return scheduler;
|
}
|
|
/// <summary>
|
/// 获取所有作业
|
/// </summary>
|
/// <returns></returns>
|
public List<Sundial.IScheduler> GetJobs()
|
{
|
return _schedulerFactory.GetJobs().ToList();
|
}
|
|
/// <summary>
|
/// 暂停作业
|
/// </summary>
|
/// <param name="jobname"></param>
|
public void PauseJob(string jobname)
|
{
|
var scheduler = GetJob(jobname);
|
if (scheduler != null)
|
{
|
scheduler.Pause();
|
}
|
}
|
/// <summary>
|
/// 删除作业
|
/// </summary>
|
/// <param name="jobname"></param>
|
public void RemoveJob(string jobname)
|
{
|
var scheduler = GetJob(jobname);
|
if (scheduler != null)
|
{
|
scheduler.Remove();
|
}
|
}
|
|
/// <summary>
|
/// 从数据库加载作业
|
/// </summary>
|
public void AddJobFromDB()
|
{
|
;
|
}
|
|
public void JobInitialize()
|
{
|
JobManager.Initialize();
|
}
|
|
ApiAction IInterfaceService.AddTskJob<TJob>(TJob newEntity, FluentJobParam jobParam)
|
{
|
throw new NotImplementedException();
|
}
|
|
public void RemovefJob(string jobname)
|
{
|
throw new NotImplementedException();
|
}
|
}
|
}
|