From dcd80459e1ad3b7fc9ba6bcd581feb430f0778d3 Mon Sep 17 00:00:00 2001 From: Ben Lin <maobin001@msn.com> Date: 星期六, 26 十月 2024 00:35:01 +0800 Subject: [PATCH] 计划任务更新 --- Tiger.Business/Services/Base/InterfaceServiceNew.cs | 149 +++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 118 insertions(+), 31 deletions(-) diff --git a/Tiger.Business/Services/Base/InterfaceServiceNew.cs b/Tiger.Business/Services/Base/InterfaceServiceNew.cs index fae4b69..c876b3d 100644 --- a/Tiger.Business/Services/Base/InterfaceServiceNew.cs +++ b/Tiger.Business/Services/Base/InterfaceServiceNew.cs @@ -5,12 +5,16 @@ using System.Collections; using System.Collections.Generic; using System.Linq; +using System.Security.Cryptography; using System.Text; using System.Threading; using System.Threading.Tasks; using Tiger.IBusiness; using Tiger.Model; +using Tiger.Model.Entitys.MES.Position; using Tiger.Model.Minsun; +using static Microsoft.CodeAnalysis.CSharp.SyntaxTokenParser; +using static Tiger.Model.TrigArgs; namespace Tiger.Business { @@ -270,6 +274,34 @@ 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\r\n"); JobManager.JobEnd += info => Logger.Scheduler.Info($"{info.Name}: ended ({info.Duration})\r\n"); + SaveRunningStatus(); //淇濆瓨鐘舵�� + } + + private void SaveRunningStatus() { + TSK_TRIG trig = new TSK_TRIG(); + foreach (var schedule in JobManager.RunningSchedules) + { + var job = Biz.Db.Queryable<TSK_JOB>().Where(q => q.JobName == schedule.Name).First(); + if (job != null) + { + trig = Biz.Db.Queryable<TSK_TRIG>().Where(q => q.JobId == job.ID).First(); + trig.Status = TSK_TRIG.Statuss.Running.GetValue(); + trig.StartTime = DateTime.Now; + } + } + var db = Biz.Db; + //淇濆瓨鍒版暟鎹簱 + var dbTran = db.UseTran(() => + { + if (trig != null) + { + db.Updateable(trig, "system").UpdateColumns(q => new { q.Status, q.UPDATE_USER, q.UPDATE_TIME }).ExecuteCommand(); + } + }); + if (!dbTran.IsSuccess) + { + Logger.Scheduler.Trace(dbTran.ErrorException, $"浣滀笟淇濆瓨鍒版暟鎹簱寮傚父"); + } } /// <summary> @@ -279,26 +311,51 @@ /// <param name="newEntity"></param> /// <param name="jobParam"></param> /// <returns></returns> - public ApiAction AddJob<TJob>(TJob newEntity, FluentJobParam jobParam) where TJob : class, IJob + public ApiAction AddJob<TJob>(TJob newEntity, FluentJobParam jobParam) where TJob : class, ITJob { ApiAction apiAction = new(); try { - 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", - //}); - //_schedulerFactory.AddJob<TJob>(jobParam.JobName, triggerBuilder); - //var trigger = GetJob(jobParam.JobName).GetTrigger($"{jobParam.JobName}_trigger1"); - //TSK_JOB entity = ReturnDetail(jobParam.JobName); - //entity.Remark = jobParam.Remark; - //entity.JobType = typeof(TJob).Name; - //entity.JobName = jobParam.JobName; - //entity.TriggersWithGhost = new List<TSK_TRIG> { JsonConvert.DeserializeObject<TSK_TRIG>(JsonConvert.SerializeObject(trigger)) }; - //entity.Triggers[0].Args = jobParam.Period.ToString(); - //apiAction = SaveJob(entity); + JobManager.AddJob<TJob>((s) => GenerateSchedule(jobParam.Args, s.WithName(typeof(TJob).Name))); + string guid = Guid.NewGuid().ToString("N"); + var trigger = new TSK_TRIG() + { + JobId = guid, + Args = JsonConvert.SerializeObject(jobParam.Args), + Status = TSK_TRIG.Statuss.Running.GetValue(), + StartTime = DateTime.Now, + NumberOfRuns = 1, + }; + TSK_JOB job = new() + { + ID = guid, + Remark = jobParam.Remark, + JobType = typeof(TJob).Name, + AssemblyName = jobParam.AssemblyName, + JobName = jobParam.JobName, + }; + if (Biz.Db.Queryable<TSK_JOB>().Any(q=>q.JobName == typeof(TJob).Name)) { + apiAction.IsSuccessed = false; + apiAction.LocaleMsg = new($"浠诲姟宸茬粡瀛樺湪"); + return apiAction; + } + var db = Biz.Db; + //淇濆瓨鍒版暟鎹簱 + var dbTran = db.UseTran(() => + { + if (job != null) + { + db.Insertable(job, "system").ExecuteCommand(); + } + if (trigger != null) + { + db.Insertable(trigger, "system").ExecuteCommand(); + } + }); + if (!dbTran.IsSuccess) + { + Logger.Scheduler.Trace(dbTran.ErrorException, $"娣诲姞宸ヤ綔浠诲姟鏃朵繚瀛樺埌鏁版嵁搴撳紓甯�"); + } //apiAction.Data = entity; } @@ -307,6 +364,15 @@ Logger.Console.Fatal(ex, "Add Job From DB Exception"); } return apiAction; + } + + /// <summary> + /// 鍒犻櫎浣滀笟 + /// </summary> + /// <param name="jobname"></param> + public void RemovefJob(string jobname) + { + JobManager.RemoveJob(jobname); } /// <summary> @@ -344,9 +410,9 @@ /// <param name="JobName"></param> /// <param name="registry"></param> /// <returns></returns> - private Schedule Schedule<TJob>(TJob entity, string JobName, Registry registry) where TJob : class, IJob + private Schedule Schedule<TJob>(TJob entity, string JobName, Registry registry) where TJob : class, ITJob { - return registry.Schedule<TJob>().WithName(JobName); + return registry.Schedule<TJob>().WithName(typeof(TJob).Name); } /// <summary> @@ -358,12 +424,23 @@ { 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); } + if (args.NonReentrant == "Y") { schedule = schedule.NonReentrant(); } //灏辨槸鏄惁璺熶箣鍓嶇殑杩樻病杩愯瀹岀殑璁″垝鍚屾椂杩愯銆� + switch (args.runType) + { + case RunType.ToRunNow: + specificTimeUnit = schedule.ToRunNow(); //椹笂杩愯 + break; + case RunType.ToRunOnceAt: + specificTimeUnit = schedule.ToRunOnceAt(args.ToRunOnceAtDt.AddMinutes(args.NowAddMinutes)); //杩愯涓�娆″湪鍝釜鏃堕棿, + break; + case RunType.ToRunOnceIn: + timeUnit = schedule.ToRunOnceIn(args.ToRunOnceIn); //鍦ㄥ灏戝悗杩愯涓�娆� + break; + case RunType.ToRunEvery: + timeUnit = schedule.ToRunEvery(args.ToRunEvery); //姣忛殧澶氬皯杩愯涓�鍥� + break; + } + if (specificTimeUnit != null) { timeUnit = specificTimeUnit.AndEvery(args.ToRunEvery); } //姣忛殧澶氬皯杩愯涓�鍥烇紝鍔犲湪ToRunNow銆乀oRunOnceAt鍚庨潰 //鎸夋椂闂寸被鍨嬫潵杩愯 switch (args.Type) { @@ -371,7 +448,7 @@ timeUnit.Milliseconds(); break; case TrigArgs.EveryType.Seconds: - timeUnit.Seconds(); + timeUnit.Seconds(); //琛ㄧず鎸夌锛屽灏戠瑕佺湅鍓嶉潰Every鐨勬暟锛屾瘮濡傦細ToRunEvery(5).Seconds() 杩欎釜灏辫〃绀� 闅�5绉掕繍琛屼竴娆� break; case TrigArgs.EveryType.Minutes: timeUnit.Minutes(); @@ -379,7 +456,7 @@ case TrigArgs.EveryType.Hours: if (args.Minutes > 0) { - timeUnit.Hours().At(args.Minutes); + timeUnit.Hours().At(args.Minutes); //琛ㄧず鎸夋瘡灏忔椂鐨勫垎閽燂紝澶氬皯鍒嗚鐪嬪墠闈very鐨勬暟锛屾瘮濡傦細ToRunEvery(1).Hours().At(5) 杩欎釜灏辫〃绀� 闅�1灏忔椂鐨勭5鍒嗛挓杩愯涓�娆� } else { @@ -387,9 +464,9 @@ } break; case TrigArgs.EveryType.Days: - if (args.Hours > 0 && args.Minutes > 0) + if (args.Hours > 0) { - timeUnit.Days().At(args.Hours, args.Minutes); + timeUnit.Days().At(args.Hours, args.Minutes); //琛ㄧず鎸夊ぉ锛屽灏戝ぉ瑕佺湅鍓嶉潰Every鐨勬暟锛屾瘮濡傦細ToRunEvery(2).Days().At(14, 15) 杩欎釜灏辫〃绀� 闅�2澶╃殑14:15杩愯涓�娆� } else { @@ -397,9 +474,9 @@ } break; case TrigArgs.EveryType.Weeks: - if (args.Hours > 0 && args.Minutes > 0) + if (args.Hours > 0) { - timeUnit.Weeks().At(args.Hours, args.Minutes); + timeUnit.Weeks().At(args.Hours, args.Minutes); //琛ㄧず鎸夊懆锛屽灏戝懆瑕佺湅鍓嶉潰Every鐨勬暟锛屾瘮濡傦細ToRunEvery(1).Weeks().At(14, 15) 杩欎釜灏辫〃绀� 闅�1鍛ㄧ殑14:15杩愯涓�娆� } else { @@ -407,7 +484,7 @@ } break; case TrigArgs.EveryType.Weekdays: - if (args.Hours > 0 && args.Minutes > 0) + if (args.Hours > 0 ) { timeUnit.Weekdays().At(args.Hours, args.Minutes); } @@ -416,6 +493,16 @@ timeUnit.Weekdays(); } break; + case TrigArgs.EveryType.Months: + if (args.Days>0 && args.Hours > 0) + { + timeUnit.Months().On(args.Days).At(args.Hours, args.Minutes); + } + else + { + timeUnit.Months(); + } + break; } } -- Gitblit v1.9.3