From 0330f4f7dd0d4fcfe3d697c3cd4712cd317718e6 Mon Sep 17 00:00:00 2001 From: Ben Lin <maobin001@msn.com> Date: 星期五, 25 十月 2024 01:40:23 +0800 Subject: [PATCH] 计划任务更新 --- Tiger.Business/Services/Base/InterfaceServiceNew.cs | 185 +++++++++++++++++++++++++--------------------- 1 files changed, 100 insertions(+), 85 deletions(-) diff --git a/Tiger.Business/Services/Base/InterfaceServiceNew.cs b/Tiger.Business/Services/Base/InterfaceServiceNew.cs index 04ebaa3..fae4b69 100644 --- a/Tiger.Business/Services/Base/InterfaceServiceNew.cs +++ b/Tiger.Business/Services/Base/InterfaceServiceNew.cs @@ -17,7 +17,7 @@ /// <summary> /// /// </summary> - public class InterfaceServiceNew: IInterfaceService + public class InterfaceServiceNew : IInterfaceService { #region Sundial璁″垝璋冨害 鏃х増鏈娇鐢� @@ -40,7 +40,7 @@ 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 + Sundial.TriggerBuilder triggerBuilder = Sundial.Triggers.Period(jobParam.Period * 60 * 1000).LoadFrom(new { TriggerId = jobParam.JobName + "_trigger1", }); @@ -203,20 +203,20 @@ { try { - var jobs = Biz.Db.Queryable<TSK_JOB>().IncludesAllFirstLayer().ToList(); - foreach (var job in jobs) - { - Type type = Type.GetType($"{job.AssemblyName}.{job.JobType},{job.AssemblyName}", throwOnError: true); - _schedulerFactory.AddJob(type, job.JobName, Sundial.Triggers.Period(Convert.ToInt32(job.Triggers?[0].Args ?? "3") * 60 * 1000)); - if (job.Triggers[0]?.Status == 3) - { - Work.DoAsync(() => - { - Thread.Sleep(2000); - PauseJob(job.JobName); - }); - } - } + var jobs = Biz.Db.Queryable<TSK_JOB>().IncludesAllFirstLayer().ToList(); + foreach (var job in jobs) + { + Type type = Type.GetType($"{job.AssemblyName}.{job.JobType},{job.AssemblyName}", throwOnError: true); + _schedulerFactory.AddJob(type, job.JobName, Sundial.Triggers.Period(Convert.ToInt32(job.Triggers?[0].Args ?? "3") * 60 * 1000)); + if (job.Triggers[0]?.Status == 3) + { + Work.DoAsync(() => + { + Thread.Sleep(2000); + PauseJob(job.JobName); + }); + } + } } catch (System.Exception ex) { @@ -266,10 +266,10 @@ /// </summary> public void JobInitialize() { - JobManager.Initialize(); + JobManager.Initialize(AddJobsFromDB()); JobManager.JobException += info => Logger.Scheduler.Error("An error just happened with a scheduled job: " + info.Exception); - JobManager.JobStart += info => Logger.Scheduler.Info($"{info.Name}: started"); - JobManager.JobEnd += info => Logger.Scheduler.Info($"{info.Name}: ended ({info.Duration})"); + JobManager.JobStart += info => Logger.Scheduler.Info($"{info.Name}: started\r\n"); + JobManager.JobEnd += info => Logger.Scheduler.Info($"{info.Name}: ended ({info.Duration})\r\n"); } /// <summary> @@ -284,7 +284,8 @@ ApiAction apiAction = new(); try { - JobManager.AddJob<TJob>((s) => s.ToRunEvery(5).Seconds()); + JobManager.AddJob<TJob>((s) => GenerateSchedule(jobParam.Args, s.WithName(jobParam.JobName))); + //Sundial.TriggerBuilder triggerBuilder = Sundial.Triggers.Period(jobParam.Period * 60 * 1000).LoadFrom(new //{ // TriggerId = jobParam.JobName + "_trigger1", @@ -311,85 +312,28 @@ /// <summary> /// 浠庢暟鎹簱鎵归噺娣诲姞浠诲姟 /// </summary> - public void AddJobsFromDB() + public Registry AddJobsFromDB() { + // 澹版槑涓�涓猂egistry绫� + var registry = new Registry(); try { var jobs = Biz.Db.Queryable<TSK_JOB>().IncludesAllFirstLayer().ToList(); - // 澹版槑涓�涓猂egistry绫� - var registry = new Registry(); foreach (var job in jobs) { Type type = Type.GetType($"{job.AssemblyName}.{job.JobType},{job.AssemblyName}", throwOnError: true); dynamic _type = Activator.CreateInstance(type); TrigArgs args = JsonConvert.DeserializeObject<TrigArgs>(job.Triggers[0].Args); - Schedule schedule = Schedule(_type,job.JobName, registry); - SpecificTimeUnit specificTimeUnit = null; - TimeUnit timeUnit = null; - if (args.NonReentrant == "Y") { schedule = schedule.NonReentrant(); } - if (args.ToRunNow == "Y") { specificTimeUnit = schedule.ToRunNow(); } - if (args.ToRunOnceIn > 0) { timeUnit = schedule.ToRunOnceIn(args.ToRunOnceIn); } - else if (args.ToRunEvery >= 0) { timeUnit = schedule.ToRunEvery(args.ToRunEvery); } - //鎸夋椂闂寸被鍨嬫潵杩愯 - switch (args.Type) - { - case TrigArgs.EveryType.Milliseconds: - timeUnit.Milliseconds(); - break; - case TrigArgs.EveryType.Seconds: - timeUnit.Seconds(); - break; - case TrigArgs.EveryType.Minutes: - timeUnit.Minutes(); - break; - case TrigArgs.EveryType.Hours: - if (args.Minutes > 0) - { - timeUnit.Hours().At(args.Minutes); - } - else - { - timeUnit.Hours(); - } - break; - case TrigArgs.EveryType.Days: - if (args.Hours>0 && args.Minutes > 0 ) - { - timeUnit.Days().At(args.Hours, args.Minutes); - } - else - { - timeUnit.Days(); - } - break; - case TrigArgs.EveryType.Weeks: - if (args.Hours > 0 && args.Minutes > 0) - { - timeUnit.Weeks().At(args.Hours, args.Minutes); - } - else - { - timeUnit.Weeks(); - } - break; - case TrigArgs.EveryType.Weekdays: - if (args.Hours > 0 && args.Minutes > 0) - { - timeUnit.Weekdays().At(args.Hours, args.Minutes); - } - else - { - timeUnit.Weekdays(); - } - break; - } - + Schedule schedule = Schedule(_type, job.JobName, registry); + //鐢熸垚璁″垝 + GenerateSchedule(args, schedule); } } catch (System.Exception ex) { Logger.Console.Fatal(ex, "Add Job From DB Exception"); } + return registry; } /// <summary> @@ -406,6 +350,76 @@ } /// <summary> + /// 鐢熸垚璁″垝 + /// </summary> + /// <param name="args"></param> + /// <param name="schedule"></param> + private void GenerateSchedule(TrigArgs args, Schedule schedule) + { + SpecificTimeUnit specificTimeUnit = null; + TimeUnit timeUnit = null; + if (args.NonReentrant == "Y") { schedule = schedule.NonReentrant(); } + if (args.ToRunNow == "Y") { specificTimeUnit = schedule.ToRunNow(); } + if (args.ToRunOnceAt == "Y") { specificTimeUnit = schedule.ToRunOnceAt(args.ToRunOnceAtDt.AddMinutes(args.NowAddMinutes)); } + if (args.ToRunOnceIn > 0) { timeUnit = schedule.ToRunOnceIn(args.ToRunOnceIn); } + else if (args.ToRunEvery >= 0) { timeUnit = schedule.ToRunEvery(args.ToRunEvery); } + if (specificTimeUnit != null && args.AndEvery>0) { timeUnit = specificTimeUnit.AndEvery(args.AndEvery); } + //鎸夋椂闂寸被鍨嬫潵杩愯 + switch (args.Type) + { + case TrigArgs.EveryType.Milliseconds: + timeUnit.Milliseconds(); + break; + case TrigArgs.EveryType.Seconds: + timeUnit.Seconds(); + break; + case TrigArgs.EveryType.Minutes: + timeUnit.Minutes(); + break; + case TrigArgs.EveryType.Hours: + if (args.Minutes > 0) + { + timeUnit.Hours().At(args.Minutes); + } + else + { + timeUnit.Hours(); + } + break; + case TrigArgs.EveryType.Days: + if (args.Hours > 0 && args.Minutes > 0) + { + timeUnit.Days().At(args.Hours, args.Minutes); + } + else + { + timeUnit.Days(); + } + break; + case TrigArgs.EveryType.Weeks: + if (args.Hours > 0 && args.Minutes > 0) + { + timeUnit.Weeks().At(args.Hours, args.Minutes); + } + else + { + timeUnit.Weeks(); + } + break; + case TrigArgs.EveryType.Weekdays: + if (args.Hours > 0 && args.Minutes > 0) + { + timeUnit.Weekdays().At(args.Hours, args.Minutes); + } + else + { + timeUnit.Weekdays(); + } + break; + } + } + + /// <summary> /// 鍋滄鏈嶅姟 /// </summary> public void Stop() @@ -416,7 +430,8 @@ /// <summary> /// 鍦ㄤ换鍔″畬鎴愬悗绛夊緟鎴栬�呭仠姝� /// </summary> - public void StopAndBlock() { + public void StopAndBlock() + { JobManager.StopAndBlock(); } -- Gitblit v1.9.3