服务端的TigerApi 框架,基于.NET6 2024 版本
Ben Lin
2024-10-25 0330f4f7dd0d4fcfe3d697c3cd4712cd317718e6
Tiger.Business/Services/Base/InterfaceServiceNew.cs
@@ -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,25 +312,58 @@
        /// <summary>
        /// 从数据库批量添加任务
        /// </summary>
        public void AddJobsFromDB()
        public Registry AddJobsFromDB()
        {
            // 声明一个Registry类
            var registry = new Registry();
            try
            {
                var jobs = Biz.Db.Queryable<TSK_JOB>().IncludesAllFirstLayer().ToList();
                // 声明一个Registry类
                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);
                    //生成计划
                    GenerateSchedule(args, schedule);
                }
            }
            catch (System.Exception ex)
            {
                Logger.Console.Fatal(ex, "Add Job From DB Exception");
            }
            return registry;
        }
        /// <summary>
        /// 根据实体名注册计划
        /// </summary>
        /// <typeparam name="TJob"></typeparam>
        /// <param name="entity"></param>
        /// <param name="JobName"></param>
        /// <param name="registry"></param>
        /// <returns></returns>
        private Schedule Schedule<TJob>(TJob entity, string JobName, Registry registry) where TJob : class, IJob
        {
            return registry.Schedule<TJob>().WithName(JobName);
        }
        /// <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)
                    {
@@ -383,26 +417,6 @@
                            }
                            break;
                    }
                }
            }
            catch (System.Exception ex)
            {
                Logger.Console.Fatal(ex, "Add Job From DB Exception");
            }
        }
        /// <summary>
        /// 根据实体名注册计划
        /// </summary>
        /// <typeparam name="TJob"></typeparam>
        /// <param name="entity"></param>
        /// <param name="JobName"></param>
        /// <param name="registry"></param>
        /// <returns></returns>
        private Schedule Schedule<TJob>(TJob entity, string JobName, Registry registry) where TJob : class, IJob
        {
            return registry.Schedule<TJob>().WithName(JobName);
        }
        /// <summary>
@@ -416,7 +430,8 @@
        /// <summary>
        /// 在任务完成后等待或者停止
        /// </summary>
        public void StopAndBlock() {
        public void StopAndBlock()
        {
            JobManager.StopAndBlock();
        }