init
This commit is contained in:
78
DOAN.Admin.WebApi/Extensions/TasksExtension.cs
Normal file
78
DOAN.Admin.WebApi/Extensions/TasksExtension.cs
Normal file
@@ -0,0 +1,78 @@
|
||||
using Quartz.Spi;
|
||||
using SqlSugar;
|
||||
using SqlSugar.IOC;
|
||||
using DOAN.Model.System;
|
||||
using DOAN.Tasks;
|
||||
|
||||
namespace DOAN.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)
|
||||
{
|
||||
//Console.WriteLine("初始化字典数据...");
|
||||
var db = DbScoped.SugarScope;
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user