| | |
| | | using Rhea.Common; |
| | | using FluentScheduler; |
| | | using Newtonsoft.Json; |
| | | using Rhea.Common; |
| | | using Sundial; |
| | | using System; |
| | | using Tiger.IBusiness; |
| | | using Tiger.Model; |
| | | using Tiger.Model.Entitys.MES.Position; |
| | | |
| | | namespace Tiger.Business |
| | | { |
| | |
| | | /// </summary> |
| | | public class TigerJobBase |
| | | { |
| | | public Schedule Schedule; |
| | | public TSK_JOB Job = new TSK_JOB(); |
| | | public TSK_TRIG Trig = new TSK_TRIG(); |
| | | public TrigArgs Args = new TrigArgs(); |
| | | /// <summary> |
| | | /// 开始时间 |
| | | /// </summary> |
| | | public static DateTime StartTime { get; set; } |
| | | public DateTime StartTime { get; set; } |
| | | /// <summary> |
| | | /// 保存日志 |
| | | /// </summary> |
| | | public static ApiAction SaveLog(JobExecutingContext context,string remark) { |
| | | public ApiAction SaveLog(JobExecutingContext context, string remark) |
| | | { |
| | | ApiAction action = new ApiAction(); |
| | | Type type = Type.GetType(context.JobDetail.JobType, throwOnError: true); |
| | | var job = Biz.Db.Queryable<TSK_JOB>().Where(x=>x.JobName == context.JobId && x.JobType == type.Name).First(); |
| | | var logentity = new TSK_LOG { |
| | | var job = Biz.Db.Queryable<TSK_JOB>().Where(x => x.JobName == context.JobId && x.JobType == type.Name).First(); |
| | | var logentity = new TSK_LOG |
| | | { |
| | | JobId = job.ID, |
| | | TriggerType =context.JobDetail.JobType, |
| | | TriggerType = context.JobDetail.JobType, |
| | | AssemblyName = context.JobDetail.AssemblyName, |
| | | Args = context.Trigger.Args, |
| | | Operation = context.Trigger.Status.ToString(), |
| | |
| | | /// <param name="JobName"></param> |
| | | /// <param name="remark"></param> |
| | | /// <returns></returns> |
| | | public static ApiAction SaveFluentSchedulerLog(string JobName,string status, string remark) |
| | | public ApiAction SaveFluentSchedulerLog(string status, string remark) |
| | | { |
| | | ApiAction action = new ApiAction(); |
| | | var job = Biz.Db.Queryable<TSK_JOB>().Where(x => x.JobName == JobName).IncludesAllFirstLayer().First(); |
| | | var trig = job.Triggers?[0]; |
| | | if (trig != null) |
| | | if (Trig != null) |
| | | { |
| | | trig.ElapsedTime = (long)Math.Ceiling((DateTime.Now-StartTime).TotalMilliseconds); |
| | | trig.StartTime = StartTime; |
| | | trig.EndTime = DateTime.Now; |
| | | Trig.ElapsedTime = (long)Math.Ceiling((DateTime.Now - StartTime).TotalMilliseconds); |
| | | Trig.StartTime = StartTime; |
| | | Trig.EndTime = DateTime.Now; |
| | | } |
| | | else { |
| | | else |
| | | { |
| | | action.IsSuccessed = false; |
| | | action.LocaleMsg = new($"工作任务不存在"); |
| | | Logger.Scheduler.Error("工作任务不存在\r\n"); |
| | |
| | | } |
| | | var logentity = new TSK_LOG |
| | | { |
| | | JobId = job.ID, |
| | | AssemblyName = job.AssemblyName, |
| | | Args = trig.Args, |
| | | JobId = Job.ID, |
| | | AssemblyName = Job.AssemblyName, |
| | | Args = Trig.Args, |
| | | //Operation = job.Triggers?[0].Status.ToString(), |
| | | Status = status, //job.Triggers?[0].Status.ToString(), |
| | | StartTime = trig.StartTime, |
| | | EndTime = trig.EndTime, |
| | | ElapsedTime = trig.ElapsedTime, |
| | | StartTime = Trig.StartTime, |
| | | EndTime = Trig.EndTime, |
| | | ElapsedTime = Trig.ElapsedTime, |
| | | Remark = remark |
| | | }; |
| | | |
| | |
| | | //保存到数据库 |
| | | var dbTran = db.UseTran(() => |
| | | { |
| | | db.Updateable(trig, "System_Job").UpdateColumns(q => new { q.StartTime, q.ElapsedTime,q.UpdatedTime,q.UPDATE_USER}).ExecuteCommand(); |
| | | db.Updateable(Trig, "System_Job").UpdateColumns(q => new { q.StartTime, q.LastRunTime, q.ElapsedTime, q.UpdatedTime, q.UPDATE_USER }).ExecuteCommand(); |
| | | db.Insertable(logentity).ExecuteCommand(); |
| | | }); |
| | | if (!dbTran.IsSuccess) |
| | | { |
| | | action.GetResponse().CatchExceptionWithLog(dbTran.ErrorException, $"作业日志保存到数据库异常"); |
| | | } |
| | | Logger.Scheduler.Info($"计划调度(名称:{JobName})作业日志保存到数据库完成\r\n"); |
| | | Logger.Scheduler.Info($"计划调度(名称:{Job.JobName})作业日志保存到数据库完成\r\n"); |
| | | return action; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取任务 |
| | | /// </summary> |
| | | public void GetJob(string jobType) |
| | | { |
| | | Job = Biz.Db.Queryable<TSK_JOB>().Where(q => q.JobType == jobType).IncludesAllFirstLayer().First(); |
| | | Args = JsonConvert.DeserializeObject<TrigArgs>(Job.Triggers[0].Args); |
| | | Trig = Job.Triggers[0]; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 判断时间,返回是否可以继续工作任务 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public TskJobInput CheckIFCanGo() |
| | | { |
| | | TskJobInput tskJobInput = new TskJobInput(); |
| | | var dateTime = DateTime.Now; |
| | | |
| | | //按时间类型来运行 |
| | | switch (Args.Type) |
| | | { |
| | | case TrigArgs.EveryType.Milliseconds: |
| | | dateTime = Trig.LastRunTime ?? DateTime.Now.AddMilliseconds(-Args.ToRunEvery); |
| | | tskJobInput.result = Args.Interval > 0 ? true : (DateTime.Now - dateTime).TotalMilliseconds > Args.ToRunEvery; |
| | | tskJobInput.input = new() |
| | | { |
| | | startTime = Args.Interval > 0 ? ((DateTime)Trig.LastRunTime).AddHours(-Args.Interval).ToString("yyyy-MM-dd HH:mm:ss") : dateTime.ToString("yyyy-MM-dd HH:mm:ss"), |
| | | endTime = Args.ByInterval == "Y"? dateTime.ToString("yyyy-MM-dd HH:mm:ss") : dateTime.AddMilliseconds(Args.ToRunEvery).ToString("yyyy-MM-dd HH:mm:ss"), |
| | | }; |
| | | break; |
| | | case TrigArgs.EveryType.Seconds: |
| | | dateTime = Trig.LastRunTime ?? DateTime.Now.AddSeconds(-Args.ToRunEvery); |
| | | tskJobInput.result = Args.Interval > 0 ? true : (DateTime.Now - dateTime).TotalSeconds > Args.ToRunEvery; |
| | | tskJobInput.input = new() |
| | | { |
| | | startTime = Args.Interval > 0 ? ((DateTime)Trig.LastRunTime).AddHours(-Args.Interval).ToString("yyyy-MM-dd HH:mm:ss") : dateTime.ToString("yyyy-MM-dd HH:mm:ss"), |
| | | endTime = Args.ByInterval == "Y" ? dateTime.ToString("yyyy-MM-dd HH:mm:ss") : dateTime.AddSeconds(Args.ToRunEvery).ToString("yyyy-MM-dd HH:mm:ss"), |
| | | }; |
| | | break; |
| | | case TrigArgs.EveryType.Minutes: |
| | | dateTime = Trig.LastRunTime ?? DateTime.Now.AddMinutes(-Args.ToRunEvery); |
| | | tskJobInput.result = Args.Interval > 0 ? true : (DateTime.Now - dateTime).TotalMinutes > Args.ToRunEvery; |
| | | tskJobInput.input = new() |
| | | { |
| | | startTime = Args.Interval > 0 ? ((DateTime)Trig.LastRunTime).AddHours(-Args.Interval).ToString("yyyy-MM-dd HH:mm:ss") : dateTime.ToString("yyyy-MM-dd HH:mm:ss"), |
| | | endTime = Args.ByInterval == "Y" ? dateTime.ToString("yyyy-MM-dd HH:mm:ss") : dateTime.AddMinutes(Args.ToRunEvery).ToString("yyyy-MM-dd HH:mm:ss"), |
| | | }; |
| | | break; |
| | | case TrigArgs.EveryType.Hours: |
| | | dateTime = Trig.LastRunTime ?? DateTime.Now.AddHours(-Args.ToRunEvery); |
| | | tskJobInput.result = Args.Interval > 0 ? true : (DateTime.Now - dateTime).TotalHours > Args.ToRunEvery; |
| | | tskJobInput.input = new() |
| | | { |
| | | startTime = Args.Interval > 0 ? ((DateTime)Trig.LastRunTime).AddHours(-Args.Interval).ToString("yyyy-MM-dd HH:mm:ss") : dateTime.ToString("yyyy-MM-dd HH:mm:ss"), |
| | | endTime = Args.ByInterval == "Y" ? dateTime.ToString("yyyy-MM-dd HH:mm:ss") : dateTime.AddHours(Args.ToRunEvery).ToString("yyyy-MM-dd HH:mm:ss"), |
| | | }; |
| | | break; |
| | | case TrigArgs.EveryType.Days: |
| | | dateTime = Trig.LastRunTime ?? DateTime.Now.AddDays(-Args.ToRunEvery); |
| | | tskJobInput.result = Args.Interval > 0 ? true : (DateTime.Now - dateTime).TotalDays > Args.ToRunEvery; |
| | | tskJobInput.input = new() |
| | | { |
| | | startTime = Args.Interval > 0 ? ((DateTime)Trig.LastRunTime).AddHours(-Args.Interval).ToString("yyyy-MM-dd HH:mm:ss") : dateTime.ToString("yyyy-MM-dd HH:mm:ss"), |
| | | endTime = Args.ByInterval == "Y" ? dateTime.ToString("yyyy-MM-dd HH:mm:ss") : dateTime.AddDays(Args.ToRunEvery).ToString("yyyy-MM-dd HH:mm:ss"), |
| | | }; |
| | | break; |
| | | case TrigArgs.EveryType.Weeks: |
| | | dateTime = Trig.LastRunTime ?? DateTime.Now.AddDays(-7); |
| | | tskJobInput.result = Args.Interval > 0 ? true : (DateTime.Now - dateTime).TotalDays > Args.ToRunEvery * 7; |
| | | tskJobInput.input = new() |
| | | { |
| | | startTime = Args.Interval > 0 ? ((DateTime)Trig.LastRunTime).AddHours(-Args.Interval).ToString("yyyy-MM-dd HH:mm:ss") : dateTime.ToString("yyyy-MM-dd HH:mm:ss"), |
| | | endTime = Args.ByInterval == "Y" ? dateTime.ToString("yyyy-MM-dd HH:mm:ss") : dateTime.AddDays(Args.ToRunEvery).ToString("yyyy-MM-dd HH:mm:ss"), |
| | | }; |
| | | break; |
| | | case TrigArgs.EveryType.Weekdays: |
| | | dateTime = Trig.LastRunTime ?? DateTime.Now.AddDays(-Args.ToRunEvery); |
| | | tskJobInput.result = Args.Interval > 0 ? true : (DateTime.Now - dateTime).TotalDays > Args.ToRunEvery; |
| | | tskJobInput.input = new() |
| | | { |
| | | startTime = Args.Interval > 0 ? ((DateTime)Trig.LastRunTime).AddHours(-Args.Interval).ToString("yyyy-MM-dd HH:mm:ss") : dateTime.ToString("yyyy-MM-dd HH:mm:ss"), |
| | | endTime = Args.ByInterval == "Y" ? dateTime.ToString("yyyy-MM-dd HH:mm:ss") : dateTime.AddDays(Args.ToRunEvery).ToString("yyyy-MM-dd HH:mm:ss"), |
| | | }; |
| | | break; |
| | | case TrigArgs.EveryType.Months: |
| | | dateTime = Trig.LastRunTime ?? DateTime.Now.AddMonths(-Args.ToRunEvery); |
| | | tskJobInput.result = Args.Interval > 0 ? true : (DateTime.Now - dateTime).TotalDays > Args.ToRunEvery * DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month); |
| | | tskJobInput.input = new() |
| | | { |
| | | startTime = Args.Interval > 0 ? ((DateTime)Trig.LastRunTime).AddHours(-Args.Interval).ToString("yyyy-MM-dd HH:mm:ss") : dateTime.ToString("yyyy-MM-dd HH:mm:ss"), |
| | | endTime = Args.ByInterval == "Y" ? dateTime.ToString("yyyy-MM-dd HH:mm:ss") : dateTime.AddMonths(Args.ToRunEvery).ToString("yyyy-MM-dd HH:mm:ss"), |
| | | }; |
| | | break; |
| | | } |
| | | return tskJobInput; |
| | | } |
| | | } |
| | | } |