服务端的TigerApi 框架,基于.NET6 2024 版本
Ben Lin
2024-10-28 34380836fee980ccb7bdff70d4f72c66bdb3d3dc
计划任务优化
已修改11个文件
159 ■■■■ 文件已修改
Tiger.Business.MES/Task/Jobs.U9C_ME_GetCustSn.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/Task/Jobs.U9C_ME_GetCustomer.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/Task/Jobs.U9C_ME_GetItem.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/Task/Jobs.U9C_ME_GetSupplier.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/Task/Jobs.U9C_ME_GetWo.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/iERP/U9C_MES.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business/Services/Base/InterfaceService.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business/Services/Base/InterfaceServiceNew.cs 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business/Services/Base/TigerJobBase.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Controllers.System/Controllers/TSK/TskController.Base.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.IBusiness/Service/IInterfaceService.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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 = $"从U9C获取客户条码信息成功:{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"); //固定写法
        }
    }
}
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 = $"从U9C获取客户信息成功:{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"); //固定写法
        }
    }
}
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 = $"从U9C获取物料信息成功:{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"); //固定写法
        }
    }
}
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 = $"从U9C获取供应商信息成功:{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"); //固定写法
        }
    }
}
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 = $"从U9C获取工单信息成功:{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
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;
        }
Tiger.Business/Services/Base/InterfaceService.cs
@@ -185,5 +185,10 @@
        {
            throw new NotImplementedException();
        }
        ApiAction IInterfaceService.ImmediateRun<TJob>(TJob newEntity, string jobname)
        {
            throw new NotImplementedException();
        }
    }
}
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()
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;
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>
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();