1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- using Quartz.Spi;
- using SqlSugar;
- using SqlSugar.IOC;
- using ZR.Model.System;
- using ZR.Tasks;
- namespace ZR.Admin.WebApi.Extensions
- {
- /// <summary>
- /// 定时任务扩展方法
- /// </summary>
- public static class TasksExtension
- {
- /// <summary>
- /// 注册任务
- /// </summary>
- /// <param name="services"></param>
- /// <exception cref="ArgumentNullException"></exception>
- public static void AddTaskSchedulers(this IServiceCollection services)
- {
- if (services == null) throw new ArgumentNullException(nameof(services));
- //添加Quartz服务
- services.AddSingleton<IJobFactory, JobFactory>();
- services.AddTransient<ITaskSchedulerServer, TaskSchedulerServer>();
- }
- /// <summary>
- /// 程序启动后添加任务计划
- /// </summary>
- /// <param name="app"></param>
- /// <returns></returns>
- public static IApplicationBuilder UseAddTaskSchedulers(this IApplicationBuilder app)
- {
- ITaskSchedulerServer _schedulerServer = app.ApplicationServices.GetRequiredService<ITaskSchedulerServer>();
- var tasks = DbScoped.SugarScope.Queryable<SysTasks>()
- .Where(m => m.IsStart == 1).ToListAsync();
- //程序启动后注册所有定时任务
- foreach (var task in tasks.Result)
- {
- var result = _schedulerServer.AddTaskScheduleAsync(task);
- if (result.Result.IsSuccess())
- {
- Console.WriteLine($"注册任务[{task.Name}]ID:{task.ID}成功");
- }
- }
- return app;
- }
- /// <summary>
- /// 初始化字典
- /// </summary>
- /// <param name="app"></param>
- /// <returns></returns>
- public static IApplicationBuilder UseInit(this IApplicationBuilder app)
- {
- var mainDb = App.Configuration["mainDb"];
- //var tenantId = App.GetCurrentTenantId();
- //Console.WriteLine("初始化字典数据...");
- var db = DbScoped.SugarScope.GetConnection(mainDb);
- var types = db.Queryable<SysDictType>()
- .Where(it => it.Status == "0")
- .Select(it => it.DictType)
- .ToList();
- //上面有耗时操作写在Any上面,保证程序启动后只执行一次
- if (!db.ConfigQuery.Any())
- {
- foreach (var type in types)
- {
- db.ConfigQuery.SetTable<SysDictData>(it => SqlFunc.ToString(it.DictValue), it => it.DictLabel, type, it => it.DictType == type);
- }
- }
- return app;
- }
- }
- }
|