From 34380836fee980ccb7bdff70d4f72c66bdb3d3dc Mon Sep 17 00:00:00 2001 From: Ben Lin <maobin001@msn.com> Date: 星期一, 28 十月 2024 22:20:57 +0800 Subject: [PATCH] 计划任务优化 --- Tiger.Business.MES/iERP/U9C_MES.cs | 8 ++ Tiger.Business.MES/Task/Jobs.U9C_ME_GetSupplier.cs | 13 +++- Tiger.IBusiness/Service/IInterfaceService.cs | 1 Tiger.Business.MES/Task/Jobs.U9C_ME_GetWo.cs | 15 +++- Tiger.Business/Services/Base/InterfaceService.cs | 5 + Tiger.Business/Services/Base/TigerJobBase.cs | 14 ++-- Tiger.Business/Services/Base/InterfaceServiceNew.cs | 41 +++++++++++++ Tiger.Controllers.System/Controllers/TSK/TskController.Base.cs | 21 +++++++ Tiger.Business.MES/Task/Jobs.U9C_ME_GetCustSn.cs | 13 +++- Tiger.Business.MES/Task/Jobs.U9C_ME_GetCustomer.cs | 15 +++- Tiger.Business.MES/Task/Jobs.U9C_ME_GetItem.cs | 13 +++- 11 files changed, 130 insertions(+), 29 deletions(-) diff --git a/Tiger.Business.MES/Task/Jobs.U9C_ME_GetCustSn.cs b/Tiger.Business.MES/Task/Jobs.U9C_ME_GetCustSn.cs index 0458c8f..843bef0 100644 --- a/Tiger.Business.MES/Task/Jobs.U9C_ME_GetCustSn.cs +++ b/Tiger.Business.MES/Task/Jobs.U9C_ME_GetCustSn.cs @@ -30,11 +30,13 @@ public void Execute() { - Logger.Scheduler.Info($"杩涘叆璁″垝璋冨害(鍚嶇О:{Name})...\r\n"); + #region 鍥哄畾鍐欐硶 + Logger.Scheduler.Info($"/**\r\n *杩涘叆璁″垝璋冨害(鍚嶇О: {Name} )....\r\n */\r\n"); //鍥哄畾鍐欐硶 + Schedule = JobManager.GetSchedule(Name); //鍥哄畾鍐欐硶 + StartTime = DateTime.Now; //鍥哄畾鍐欐硶 + #endregion try { - Schedule = JobManager.GetSchedule(Name); - StartTime = DateTime.Now; string msg = ""; string status = "Successed"; GetJob(typeof(U9C_ME_GetCustSn).Name); @@ -51,7 +53,9 @@ else { msg = $"浠嶶9C鑾峰彇瀹㈡埛鏉$爜淇℃伅鎴愬姛:{result.Message}"; - Trig.LastRunTime = (tskJobInput.input.endTime.ToDateTime() - DateTime.Now).TotalMinutes > 0 ? Trig.LastRunTime : tskJobInput.input.endTime.ToDateTime(); + //鍥哄畾鍐欐硶 + Trig.LastRunTime = tskJobInput.input.endTime.ToDateTime(); + Trig.NextRunTime = Schedule.NextRun; } } SaveFluentSchedulerLog(status, $"{msg}"); @@ -62,6 +66,7 @@ Logger.Scheduler.Fatal(ex, "鑾峰彇瀹㈡埛鏉$爜淇℃伅寮傚父"); SaveFluentSchedulerLog("Failed", ex.Message); } + Logger.Scheduler.Info($"/* 璁″垝璋冨害(鍚嶇О:{Name})缁撴潫 */\r\n"); //鍥哄畾鍐欐硶 } } } diff --git a/Tiger.Business.MES/Task/Jobs.U9C_ME_GetCustomer.cs b/Tiger.Business.MES/Task/Jobs.U9C_ME_GetCustomer.cs index 5aeef52..f9c9a72 100644 --- a/Tiger.Business.MES/Task/Jobs.U9C_ME_GetCustomer.cs +++ b/Tiger.Business.MES/Task/Jobs.U9C_ME_GetCustomer.cs @@ -30,11 +30,13 @@ public void Execute() { - Logger.Scheduler.Info($"杩涘叆璁″垝璋冨害(鍚嶇О:{Name})...\r\n"); + #region 鍥哄畾鍐欐硶 + Logger.Scheduler.Info($"/**\r\n *杩涘叆璁″垝璋冨害(鍚嶇О: {Name} )....\r\n */\r\n"); //鍥哄畾鍐欐硶 + Schedule = JobManager.GetSchedule(Name); //鍥哄畾鍐欐硶 + StartTime = DateTime.Now; //鍥哄畾鍐欐硶 + #endregion try { - Schedule = JobManager.GetSchedule(Name); - StartTime = DateTime.Now; string msg = ""; string status = "Successed"; GetJob(typeof(U9C_MES_GetCustomer).Name); @@ -51,17 +53,20 @@ else { msg = $"浠嶶9C鑾峰彇瀹㈡埛淇℃伅鎴愬姛:{result.Message}"; - Trig.LastRunTime = (tskJobInput.input.endTime.ToDateTime() - DateTime.Now).TotalMinutes > 0 ? Trig.LastRunTime : tskJobInput.input.endTime.ToDateTime(); + //鍥哄畾鍐欐硶 + Trig.LastRunTime = tskJobInput.input.endTime.ToDateTime(); + Trig.NextRunTime = Schedule.NextRun; } } SaveFluentSchedulerLog(status, $"{msg}"); - Logger.Scheduler.Info($"璁″垝璋冨害(鍚嶇О:{Name})瀹屾垚锛岃繑鍥炰俊鎭�:{msg}\r\n"); + Logger.Scheduler.Info($"璁″垝璋冨害(鍚嶇О:{Name})瀹屾垚锛岃繑鍥炰俊鎭�:{msg}\r\n"); } catch (System.Exception ex) { Logger.Scheduler.Fatal(ex, "鑾峰彇瀹㈡埛淇℃伅寮傚父"); SaveFluentSchedulerLog("Failed", ex.Message); } + Logger.Scheduler.Info($"/* 璁″垝璋冨害(鍚嶇О:{Name})缁撴潫 */\r\n"); //鍥哄畾鍐欐硶 } } } diff --git a/Tiger.Business.MES/Task/Jobs.U9C_ME_GetItem.cs b/Tiger.Business.MES/Task/Jobs.U9C_ME_GetItem.cs index d6e6081..f9019d4 100644 --- a/Tiger.Business.MES/Task/Jobs.U9C_ME_GetItem.cs +++ b/Tiger.Business.MES/Task/Jobs.U9C_ME_GetItem.cs @@ -31,11 +31,13 @@ public void Execute() { - Logger.Scheduler.Info($"杩涘叆璁″垝璋冨害(鍚嶇О:{Name})...\r\n"); + #region 鍥哄畾鍐欐硶 + Logger.Scheduler.Info($"/**\r\n *杩涘叆璁″垝璋冨害(鍚嶇О: {Name} )....\r\n */\r\n"); //鍥哄畾鍐欐硶 + Schedule = JobManager.GetSchedule(Name); //鍥哄畾鍐欐硶 + StartTime = DateTime.Now; //鍥哄畾鍐欐硶 + #endregion try { - Schedule = JobManager.GetSchedule(Name); - StartTime = DateTime.Now; string msg = ""; string status = "Successed"; GetJob(typeof(U9C_MES_GetItem).Name); @@ -52,7 +54,9 @@ else { msg = $"浠嶶9C鑾峰彇鐗╂枡淇℃伅鎴愬姛:{result.Message}"; - Trig.LastRunTime = (tskJobInput.input.endTime.ToDateTime() - DateTime.Now).TotalMinutes > 0 ? Trig.LastRunTime : tskJobInput.input.endTime.ToDateTime(); + //鍥哄畾鍐欐硶 + Trig.LastRunTime = tskJobInput.input.endTime.ToDateTime(); + Trig.NextRunTime = Schedule.NextRun; } } SaveFluentSchedulerLog(status, $"{msg}"); @@ -63,6 +67,7 @@ Logger.Scheduler.Fatal(ex, "鑾峰彇鐗╂枡淇℃伅寮傚父"); SaveFluentSchedulerLog("Failed", ex.Message); } + Logger.Scheduler.Info($"/* 璁″垝璋冨害(鍚嶇О:{Name})缁撴潫 */\r\n"); //鍥哄畾鍐欐硶 } } } diff --git a/Tiger.Business.MES/Task/Jobs.U9C_ME_GetSupplier.cs b/Tiger.Business.MES/Task/Jobs.U9C_ME_GetSupplier.cs index 5619878..d5a5f65 100644 --- a/Tiger.Business.MES/Task/Jobs.U9C_ME_GetSupplier.cs +++ b/Tiger.Business.MES/Task/Jobs.U9C_ME_GetSupplier.cs @@ -32,11 +32,13 @@ public void Execute() { - Logger.Scheduler.Info($"杩涘叆璁″垝璋冨害(鍚嶇О:{Name})...\r\n"); + #region 鍥哄畾鍐欐硶 + Logger.Scheduler.Info($"/**\r\n *杩涘叆璁″垝璋冨害(鍚嶇О: {Name} )....\r\n */\r\n"); //鍥哄畾鍐欐硶 + Schedule = JobManager.GetSchedule(Name); //鍥哄畾鍐欐硶 + StartTime = DateTime.Now; //鍥哄畾鍐欐硶 + #endregion try { - Schedule = JobManager.GetSchedule(Name); - StartTime = DateTime.Now; string msg = ""; string status = "Successed"; GetJob(typeof(U9C_ME_GetSupplier).Name); @@ -53,7 +55,9 @@ else { msg = $"浠嶶9C鑾峰彇渚涘簲鍟嗕俊鎭垚鍔�:{result.Message}"; - Trig.LastRunTime = (tskJobInput.input.endTime.ToDateTime() - DateTime.Now).TotalMinutes > 0 ? Trig.LastRunTime : tskJobInput.input.endTime.ToDateTime(); + //鍥哄畾鍐欐硶 + Trig.LastRunTime = tskJobInput.input.endTime.ToDateTime(); + Trig.NextRunTime = Schedule.NextRun; } } SaveFluentSchedulerLog(status, $"{msg}"); @@ -64,6 +68,7 @@ Logger.Scheduler.Fatal(ex, "鑾峰彇渚涘簲鍟嗕俊鎭紓甯�"); SaveFluentSchedulerLog("Failed", ex.Message); } + Logger.Scheduler.Info($"/* 璁″垝璋冨害(鍚嶇О:{Name})缁撴潫 */\r\n"); //鍥哄畾鍐欐硶 } } } diff --git a/Tiger.Business.MES/Task/Jobs.U9C_ME_GetWo.cs b/Tiger.Business.MES/Task/Jobs.U9C_ME_GetWo.cs index 0188002..f684dce 100644 --- a/Tiger.Business.MES/Task/Jobs.U9C_ME_GetWo.cs +++ b/Tiger.Business.MES/Task/Jobs.U9C_ME_GetWo.cs @@ -80,11 +80,13 @@ public void Execute() { - Logger.Scheduler.Info($"杩涘叆璁″垝璋冨害(鍚嶇О:{Name})...\r\n"); + #region 鍥哄畾鍐欐硶 + Logger.Scheduler.Info($"/**\r\n *杩涘叆璁″垝璋冨害(鍚嶇О: {Name} )....\r\n */\r\n"); //鍥哄畾鍐欐硶 + Schedule = JobManager.GetSchedule(Name); //鍥哄畾鍐欐硶 + StartTime = DateTime.Now; //鍥哄畾鍐欐硶 + #endregion try { - Schedule = JobManager.GetSchedule(Name); - StartTime = DateTime.Now; string msg = ""; string status = "Successed"; GetJob(typeof(fU9C_MES_GetWo).Name); @@ -101,17 +103,20 @@ else { msg = $"浠嶶9C鑾峰彇宸ュ崟淇℃伅鎴愬姛:{result.Message}"; - Trig.LastRunTime = (tskJobInput.input.endTime.ToDateTime() - DateTime.Now).TotalMinutes > 0 ? Trig.LastRunTime : tskJobInput.input.endTime.ToDateTime(); + //鍥哄畾鍐欐硶 + Trig.LastRunTime = tskJobInput.input.endTime.ToDateTime(); + Trig.NextRunTime = Schedule.NextRun; } } SaveFluentSchedulerLog(status, $"{msg}"); - Logger.Scheduler.Info($"璁″垝璋冨害(鍚嶇О:{Name})瀹屾垚锛岃繑鍥炰俊鎭�:{msg}\r\n"); + Logger.Scheduler.Info($"璁″垝璋冨害(鍚嶇О: {Name} )瀹屾垚锛岃繑鍥炰俊鎭�: {msg} \r\n"); } catch (System.Exception ex) { Logger.Scheduler.Fatal(ex, "鑾峰彇宸ュ崟淇℃伅寮傚父"); SaveFluentSchedulerLog("Failed", ex.Message); } + Logger.Scheduler.Info($"/* 璁″垝璋冨害(鍚嶇О:{Name})缁撴潫 */\r\n"); //鍥哄畾鍐欐硶 } }//endClass diff --git a/Tiger.Business.MES/iERP/U9C_MES.cs b/Tiger.Business.MES/iERP/U9C_MES.cs index ba786d4..7f56288 100644 --- a/Tiger.Business.MES/iERP/U9C_MES.cs +++ b/Tiger.Business.MES/iERP/U9C_MES.cs @@ -84,6 +84,7 @@ } } Logger.Scheduler.Info($"鐗╂枡淇℃伅瀛樺叆瀹炰綋涓紝鎬绘暟锛歔{items.Count}]"); + db = Biz.Db; var dbTran = db.UseTran(() => { if (items.Any()) @@ -136,6 +137,7 @@ Logger.Scheduler.Error(action.Message); } Logger.Scheduler.Info($"鐗╂枡淇℃伅瀛樺叆鏁版嵁搴擄紝鎬绘暟锛歔{items.Count}]"); + action.Message = $"鐗╂枡淇℃伅瀛樺叆鏁版嵁搴擄紝鎬绘暟锛歔{items.Count}]"; return action; } @@ -340,6 +342,7 @@ } } Logger.Scheduler.Info($"瀹㈡埛淇℃伅瀛樺叆瀹炰綋涓紝鎬绘暟锛歔{items.Count}]"); + db = Biz.Db; var dbTran = db.UseTran(() => { if (items.Any()) @@ -372,6 +375,7 @@ Logger.Scheduler.Error(action.Message); } Logger.Scheduler.Info($"瀹㈡埛淇℃伅瀛樺叆鏁版嵁搴擄紝鎬绘暟锛歔{items.Count}]"); + action.Message = $"瀹㈡埛淇℃伅瀛樺叆鏁版嵁搴擄紝鎬绘暟锛歔{items.Count}]"; return action; } @@ -412,6 +416,7 @@ } } Logger.Scheduler.Info($"渚涘簲鍟嗕俊鎭瓨鍏ュ疄浣撲腑锛屾�绘暟锛歔{items.Count}]"); + db = Biz.Db; var dbTran = db.UseTran(() => { if (items.Any()) @@ -444,6 +449,7 @@ Logger.Scheduler.Error(action.Message); } Logger.Scheduler.Info($"渚涘簲鍟嗕俊鎭瓨鍏ユ暟鎹簱锛屾�绘暟锛歔{items.Count}]"); + action.Message = $"渚涘簲鍟嗕俊鎭瓨鍏ユ暟鎹簱锛屾�绘暟锛歔{items.Count}]"; return action; } @@ -489,6 +495,7 @@ } } Logger.Scheduler.Info($"瀹㈡埛鏉$爜淇℃伅瀛樺叆瀹炰綋涓紝鎬绘暟锛歔{items.Count}]"); + db = Biz.Db; var dbTran = db.UseTran(() => { if (items.Any()) @@ -521,6 +528,7 @@ Logger.Scheduler.Error(action.Message); } Logger.Scheduler.Info($"瀹㈡埛鏉$爜淇℃伅瀛樺叆鏁版嵁搴擄紝鎬绘暟锛歔{items.Count}]"); + action.Message = $"瀹㈡埛鏉$爜淇℃伅瀛樺叆鏁版嵁搴擄紝鎬绘暟锛歔{items.Count}]"; return action; } diff --git a/Tiger.Business/Services/Base/InterfaceService.cs b/Tiger.Business/Services/Base/InterfaceService.cs index 0dfcd20..b904103 100644 --- a/Tiger.Business/Services/Base/InterfaceService.cs +++ b/Tiger.Business/Services/Base/InterfaceService.cs @@ -185,5 +185,10 @@ { throw new NotImplementedException(); } + + ApiAction IInterfaceService.ImmediateRun<TJob>(TJob newEntity, string jobname) + { + throw new NotImplementedException(); + } } } diff --git a/Tiger.Business/Services/Base/InterfaceServiceNew.cs b/Tiger.Business/Services/Base/InterfaceServiceNew.cs index 5b362a3..d827d0a 100644 --- a/Tiger.Business/Services/Base/InterfaceServiceNew.cs +++ b/Tiger.Business/Services/Base/InterfaceServiceNew.cs @@ -541,6 +541,47 @@ } /// <summary> + /// 绔嬪嵆杩愯 + /// </summary> + /// <param name="jobname"></param> + public ApiAction ImmediateRun<TJob>(TJob newEntity, string jobname) where TJob : class, ITJob + { + ApiAction apiAction = new(); + try + { + if (JobManager.AllSchedules.Any(q => q.Name == jobname)) + { + JobManager.RemoveJob(jobname); + string guid = Guid.NewGuid().ToString("N"); + TSK_JOB job = Biz.Db.Queryable<TSK_JOB>().Where(x => x.JobName == jobname).First(); + var trigger = Biz.Db.Queryable<TSK_TRIG>().Where(x => x.JobId == job.ID).First(); + TrigArgs args = JsonConvert.DeserializeObject<TrigArgs>(job.Triggers[0].Args); + args.runType = RunType.ToRunNow; + JobManager.AddJob<TJob>((s) => GenerateSchedule(args, s.WithName(jobname))); + trigger.Status = TSK_TRIG.Statuss.Running.GetValue(); + trigger.Args = JsonConvert.SerializeObject(args); + + var db = Biz.Db; + //淇濆瓨鍒版暟鎹簱 + var dbTran = db.UseTran(() => + { + db.Updateable(trigger, "system_ImmediateRun_job").UpdateColumns(q => new { q.Status, q.Args, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand(); + }); + if (!dbTran.IsSuccess) + { + Logger.Scheduler.Fatal(dbTran.ErrorException, $"绔嬪嵆杩愯宸ヤ綔浠诲姟鏃朵繚瀛樼姸鎬佸埌鏁版嵁搴撳紓甯�"); + } + apiAction.LocaleMsg = new($"绔嬪嵆杩愯宸ヤ綔浠诲姟鎴愬姛"); + } + } + catch (System.Exception ex) + { + apiAction.CatchExceptionWithLog(ex); + } + return apiAction; + } + + /// <summary> /// 鍋滄鏈嶅姟 /// </summary> public void Stop() diff --git a/Tiger.Business/Services/Base/TigerJobBase.cs b/Tiger.Business/Services/Base/TigerJobBase.cs index af7a6f8..f2fc093 100644 --- a/Tiger.Business/Services/Base/TigerJobBase.cs +++ b/Tiger.Business/Services/Base/TigerJobBase.cs @@ -14,10 +14,10 @@ /// </summary> public class TigerJobBase { - public static Schedule Schedule; - public static TSK_JOB Job = new TSK_JOB(); - public static TSK_TRIG Trig = new TSK_TRIG(); - public static TrigArgs Args = new TrigArgs(); + public Schedule Schedule; + public TSK_JOB Job = new TSK_JOB(); + public TSK_TRIG Trig = new TSK_TRIG(); + public TrigArgs Args = new TrigArgs(); /// <summary> /// 寮�濮嬫椂闂� /// </summary> @@ -63,7 +63,7 @@ /// <param name="JobName"></param> /// <param name="remark"></param> /// <returns></returns> - public static ApiAction SaveFluentSchedulerLog(string status, string remark) + public ApiAction SaveFluentSchedulerLog(string status, string remark) { ApiAction action = new ApiAction(); if (Trig != null) @@ -110,7 +110,7 @@ /// <summary> /// 鑾峰彇浠诲姟 /// </summary> - public static void GetJob(string jobType) + 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); @@ -121,7 +121,7 @@ /// 鍒ゆ柇鏃堕棿锛岃繑鍥炴槸鍚﹀彲浠ョ户缁伐浣滀换鍔� /// </summary> /// <returns></returns> - public static TskJobInput CheckIFCanGo() + public TskJobInput CheckIFCanGo() { TskJobInput tskJobInput = new TskJobInput(); var dateTime = DateTime.Now; diff --git a/Tiger.Controllers.System/Controllers/TSK/TskController.Base.cs b/Tiger.Controllers.System/Controllers/TSK/TskController.Base.cs index 358e6d6..889ee9a 100644 --- a/Tiger.Controllers.System/Controllers/TSK/TskController.Base.cs +++ b/Tiger.Controllers.System/Controllers/TSK/TskController.Base.cs @@ -194,6 +194,27 @@ } /// <summary> + /// 绔嬪嵆杩愯浠诲姟 + /// </summary> + /// <param name="action"></param> + /// <returns></returns> + [HttpPost] + [Route("api/[controller]/[action]")] + public async Task<IActionResult> ImmediateRun(ApiAction action) + { + ApiAction response = new(); + try + { + response = response.GetResponse(DI.Resolve<IBizContext>().GetInterfaceService()?.ImmediateRun(action.NewDataEntity(), action.Data?.ToString()) ?? new ApiAction($"浠诲姟鏈惎鐢�", false)); + } + catch (System.Exception ex) + { + response = response.GetResponse().CatchExceptionWithLog(ex); + } + return Ok(response); + } + + /// <summary> /// 鍒犻櫎浣滀笟 /// </summary> /// <param name="action"></param> diff --git a/Tiger.IBusiness/Service/IInterfaceService.cs b/Tiger.IBusiness/Service/IInterfaceService.cs index 52e71df..cb0a794 100644 --- a/Tiger.IBusiness/Service/IInterfaceService.cs +++ b/Tiger.IBusiness/Service/IInterfaceService.cs @@ -15,6 +15,7 @@ public void SetSchedulerFactory(Sundial.ISchedulerFactory schedulerFactory); public ApiAction AddJob<TJob>(TJob newEntity, TskJobParam jobParam) where TJob : class, Sundial.IJob; public ApiAction AddTskJob<TJob>(TJob newEntity, FluentJobParam jobParam) where TJob : class, ITJob; + public ApiAction ImmediateRun<TJob>(TJob newEntity, string jobname) where TJob : class, ITJob; public ApiAction AddJob<TJob>(string jobname, params Sundial.TriggerBuilder[] triggerBuilders) where TJob : class, Sundial.IJob; public ApiAction UpdateJob(TSK_JOB job); public void StartAllJob(); -- Gitblit v1.9.3