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/ServicesBus.cs              |    2 
 Tiger.Business.MES/Task/Jobs.U9C_ME_GetWo.cs        |   50 +++++++++
 Tiger.Business/Services/Base/TigerJobBase.cs        |    6 
 Tiger.Model.Net/Entitys/TSK/TSK_TRIG.cs             |    4 
 Tiger.Business/Services/Base/InterfaceServiceNew.cs |  185 ++++++++++++++++++++-----------------
 5 files changed, 155 insertions(+), 92 deletions(-)

diff --git a/Tiger.Business.MES/Task/Jobs.U9C_ME_GetWo.cs b/Tiger.Business.MES/Task/Jobs.U9C_ME_GetWo.cs
index cf411c3..fc9464d 100644
--- a/Tiger.Business.MES/Task/Jobs.U9C_ME_GetWo.cs
+++ b/Tiger.Business.MES/Task/Jobs.U9C_ME_GetWo.cs
@@ -17,9 +17,11 @@
     /// </summary>
     public class U9C_MES_GetWo : TigerJobBase, ITigerJob
     {
-        public string Id { get; set; } = Guid.NewGuid().ToString("N");
-        public string Tag { get; set; } = "U9C_MES_GetWo Interface Job";
-        public string Name { get; set; } = "U9C_MES_GetWo Interface Job";
+        public U9C_MES_GetWo() {
+            Id = Guid.NewGuid().ToString("N");
+            Tag = "U9C_MES_GetWo Interface Job";
+            Name = "U9C_MES_GetWo Interface Job";
+        }
 
         public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)
         {
@@ -50,4 +52,46 @@
             await Task.CompletedTask;
         }
     }
+
+    /// <summary>
+    /// 浠嶶9C鑾峰彇宸ュ崟淇℃伅 FluentScheduler鐗�
+    /// </summary>
+    public class fU9C_MES_GetWo : TigerJobBase, FluentScheduler.IJob
+    {
+        public fU9C_MES_GetWo()
+        {
+            Id = Guid.NewGuid().ToString("N");
+            Tag = "U9C_MES_GetWo Interface Job";
+            Name = "浠嶶9C鍚屾宸ュ崟淇℃伅";
+        }
+
+        public void Execute()
+        {
+            Logger.Scheduler.Info($"杩涘叆璁″垝璋冨害(鍚嶇О:{Name})...\r\n");
+            try
+            {
+                var _lastRunTime = Biz.SysParam["GetWo_LastRun", "Interface_LastRun"].PARAM_VALUE;
+                var LastRunTime = string.IsNullOrEmpty(_lastRunTime) ? DateTime.Now.AddMinutes(-10) : Convert.ToDateTime(_lastRunTime);
+                //if ((DateTime.Now - LastRunTime).TotalMinutes > 10)
+                //{
+                //    GetWoInput input = new GetWoInput
+                //    {
+                //        startTime = LastRunTime.ToString("yyyy-MM-dd HH:mm:ss"),
+                //        endTime = LastRunTime.AddMinutes(10).ToString("yyyy-MM-dd HH:mm:ss")
+                //    };
+                //    var result = await DI.Resolve<IU9C_MES>().GetBasWo(input);
+                //    if (!result.IsSuccessed)
+                //    {
+                //        Logger.Scheduler.Error($"鑾峰彇宸ュ崟淇℃伅寮傚父:{result.Message}");
+                //    }
+                //}
+                //SaveLog(context, "浠嶶9C鑾峰彇宸ュ崟淇℃伅鎴愬姛");
+                Logger.Scheduler.Info($"璁″垝璋冨害(鍚嶇О:{Name})瀹屾垚\r\n");
+            }
+            catch (System.Exception ex)
+            {
+                Logger.Scheduler.Fatal(ex, "鑾峰彇宸ュ崟淇℃伅寮傚父");
+            }
+        }
+    }
 }
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();
         }
 
diff --git a/Tiger.Business/Services/Base/TigerJobBase.cs b/Tiger.Business/Services/Base/TigerJobBase.cs
index 0cac359..842287b 100644
--- a/Tiger.Business/Services/Base/TigerJobBase.cs
+++ b/Tiger.Business/Services/Base/TigerJobBase.cs
@@ -11,9 +11,9 @@
     /// </summary>
     public class TigerJobBase
     {
-        public string Id { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
-        public string Tag { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
-        public string Name { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
+        public string Id { get; set; }
+        public string Tag { get; set; }
+        public string Name { get; set; }
 
         /// <summary>
         /// 淇濆瓨鏃ュ織
diff --git a/Tiger.Business/Services/ServicesBus.cs b/Tiger.Business/Services/ServicesBus.cs
index 2512b3c..db5d5b0 100644
--- a/Tiger.Business/Services/ServicesBus.cs
+++ b/Tiger.Business/Services/ServicesBus.cs
@@ -20,7 +20,7 @@
         {
             if (ApiConfig.RunInterface)
             {
-                //BizContext.InterfaceService = DI.Resolve<IInterfaceService>();
+                BizContext.InterfaceService = DI.Resolve<IInterfaceService>();
                 //BizContext.InterfaceService.SetSchedulerFactory(schedulerFactory);
                 ////鍚姩鏃朵粠鏈嶅姟鍣ㄥ姞杞芥墍鏈変綔涓�
                 //BizContext.InterfaceService.AddJobFromDB();
diff --git a/Tiger.Model.Net/Entitys/TSK/TSK_TRIG.cs b/Tiger.Model.Net/Entitys/TSK/TSK_TRIG.cs
index 0c7a2ab..d47cc78 100644
--- a/Tiger.Model.Net/Entitys/TSK/TSK_TRIG.cs
+++ b/Tiger.Model.Net/Entitys/TSK/TSK_TRIG.cs
@@ -183,6 +183,10 @@
 	public class TrigArgs
     {
         public string ToRunNow { get; set; }
+        public string ToRunOnceAt { get; set; }
+        public DateTime ToRunOnceAtDt { get; set; }
+        public int NowAddMinutes { get; set; }
+        public int AndEvery { get; set; }
         public int ToRunEvery { get; set; }
         public int ToRunOnceIn { get; set; }
         public string NonReentrant { get; set; } //Y涓嶉噸澶嶏紝N閲嶅

--
Gitblit v1.9.3