Skip to content

Commit

Permalink
add quartz.net
Browse files Browse the repository at this point in the history
增加 任务调度 quartz.net
  • Loading branch information
anjoy8 committed Mar 22, 2020
1 parent 9a53256 commit 403b30a
Show file tree
Hide file tree
Showing 24 changed files with 1,027 additions and 3 deletions.
3 changes: 3 additions & 0 deletions Blog.Core.Common/Blog.Core.Common.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@
<PackageReference Include="StackExchange.Redis" Version="2.0.601" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="5.6.0" />

<PackageReference Include="Serilog" Version="2.9.0" />
<PackageReference Include="Serilog.AspNetCore" Version="3.2.0" />
<PackageReference Include="Serilog.Sinks.RollingFile" Version="3.3.0" />
</ItemGroup>

</Project>
44 changes: 44 additions & 0 deletions Blog.Core.Common/LogHelper/Seri/SerilogServer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
using Microsoft.Extensions.Logging;
using Serilog;
using Serilog.Events;
using System;
using System.IO;

namespace Blog.Core.Common.LogHelper
{
public class SerilogServer
{
/// <summary>
/// 记录日常日志
/// </summary>
/// <param name="filename"></param>
/// <param name="message"></param>
/// <param name="info"></param>
public static void WriteLog(string filename, string message, string info)
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.MinimumLevel.Override("Microsoft", LogEventLevel.Error)
.WriteTo.File(Path.Combine($"log/Information/{filename}/", ".txt"), rollingInterval: RollingInterval.Day)
.CreateLogger();
Log.Information(message+ info, info);
Log.CloseAndFlush();
}
/// <summary>
/// 记录异常日志
/// </summary>
/// <param name="filename"></param>
/// <param name="message"></param>
/// <param name="ex"></param>
public static void WriteErrorLog(string filename,string message, Exception ex)
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.MinimumLevel.Override("Microsoft", LogEventLevel.Error)
.WriteTo.File(Path.Combine($"log/Error/{filename}/",".txt"),rollingInterval:RollingInterval.Day)
.CreateLogger();
Log.Error(ex, message);
Log.CloseAndFlush();
}
}
}
14 changes: 14 additions & 0 deletions Blog.Core.IRepository/ITasksQzRepository.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@

using Blog.Core.IRepository.Base;
using Blog.Core.Model.Models;

namespace Blog.Core.IRepository
{
/// <summary>
/// ITasksQzRepository
/// </summary>
public interface ITasksQzRepository : IBaseRepository<TasksQz>
{
}
}

16 changes: 16 additions & 0 deletions Blog.Core.IServices/ITasksQzServices.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@

using Blog.Core.IServices.BASE;
using Blog.Core.Model.Models;

namespace Blog.Core.IServices
{
/// <summary>
/// ITasksQzServices
/// </summary>
public interface ITasksQzServices :IBaseServices<TasksQz>
{


}
}

78 changes: 78 additions & 0 deletions Blog.Core.Model/Models/TasksQz.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
using SqlSugar;
using System;

namespace Blog.Core.Model.Models
{
/// <summary>
/// 任务计划表
/// </summary>
public class TasksQz : RootEntity
{
/// <summary>
/// 任务名称
/// </summary>
[SugarColumn(ColumnDataType = "nvarchar", Length = 200, IsNullable = true)]
public string Name { get; set; }
/// <summary>
/// 任务分组
/// </summary>
[SugarColumn(ColumnDataType = "nvarchar", Length = 200, IsNullable = true)]
public string JobGroup { get; set; }
/// <summary>
/// 任务运行时间表达式
/// </summary>
[SugarColumn(ColumnDataType = "nvarchar", Length = 200, IsNullable = true)]
public string Cron { get; set; }
/// <summary>
/// 任务所在DLL对应的程序集名称
/// </summary>
[SugarColumn(ColumnDataType = "nvarchar", Length = 200, IsNullable = true)]
public string AssemblyName { get; set; }
/// <summary>
/// 任务所在类
/// </summary>
[SugarColumn(ColumnDataType = "nvarchar", Length = 200, IsNullable = true)]
public string ClassName { get; set; }
/// <summary>
/// 任务描述
/// </summary>
public string Remark { get; set; }
/// <summary>
/// 执行次数
/// </summary>
public int RunTimes { get; set; }
/// <summary>
/// 开始时间
/// </summary>
public DateTime? BeginTime { get; set; }
/// <summary>
/// 结束时间
/// </summary>
public DateTime? EndTime { get; set; }
/// <summary>
/// 触发器类型(0、simple 1、cron)
/// </summary>
public int TriggerType { get; set; }
/// <summary>
/// 执行间隔时间, 秒为单位
/// </summary>
public int IntervalSecond { get; set; }
/// <summary>
/// 是否启动
/// </summary>
public bool IsStart { get; set; } = false;
/// <summary>
/// 执行传参
/// </summary>
public string JobParams { get; set; }


[SugarColumn(IsNullable = true)]
public bool? IsDeleted { get; set; }
/// <summary>
/// 创建时间
/// </summary>
[SugarColumn(IsNullable = true)]
public DateTime CreateTime { get; set; } = DateTime.Now;
}
}
14 changes: 14 additions & 0 deletions Blog.Core.Model/Seed/DBSeed.cs
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ public static async Task SeedAsync(MyContext myContext, string WebRootPath)
typeof(sysUserInfo),
typeof(Topic),
typeof(TopicDetail),
typeof(TasksQz),
typeof(UserRole));

// 后期单独处理某些表
Expand Down Expand Up @@ -214,6 +215,19 @@ public static async Task SeedAsync(MyContext myContext, string WebRootPath)
}
#endregion


#region TasksQz
if (!await myContext.Db.Queryable<TasksQz>().AnyAsync())
{
myContext.GetEntityDB<TasksQz>().InsertRange(JsonHelper.ParseFormByJson<List<TasksQz>>(FileHelper.ReadFile(string.Format(SeedDataFolder, "TasksQz"), Encoding.UTF8)));
Console.WriteLine("Table:TasksQz created success!");
}
else
{
Console.WriteLine("Table:TasksQz already exists...");
}
#endregion

Console.WriteLine("Done seeding database.");
}

Expand Down
1 change: 0 additions & 1 deletion Blog.Core.Repository/Blog.Core.Repository.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@

<ItemGroup>
<ProjectReference Include="..\Blog.Core.IRepository\Blog.Core.IRepository.csproj" />
<ProjectReference Include="..\Blog.Core.Model\Blog.Core.Model.csproj" />
</ItemGroup>

</Project>
19 changes: 19 additions & 0 deletions Blog.Core.Repository/TasksQzRepository.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@

using Blog.Core.IRepository;
using Blog.Core.IRepository.UnitOfWork;
using Blog.Core.Model.Models;
using Blog.Core.Repository.Base;

namespace Blog.Core.Repository
{
/// <summary>
/// TasksQzRepository
/// </summary>
public class TasksQzRepository : BaseRepository<TasksQz>, ITasksQzRepository
{
public TasksQzRepository(IUnitOfWork unitOfWork) : base(unitOfWork)
{
}
}
}

1 change: 0 additions & 1 deletion Blog.Core.Services/Blog.Core.Services.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
<ItemGroup>
<ProjectReference Include="..\Blog.Core.IRepository\Blog.Core.IRepository.csproj" />
<ProjectReference Include="..\Blog.Core.IServices\Blog.Core.IServices.csproj" />
<ProjectReference Include="..\Blog.Core.Model\Blog.Core.Model.csproj" />
</ItemGroup>

</Project>
20 changes: 20 additions & 0 deletions Blog.Core.Services/TasksQzServices.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@

using Blog.Core.IRepository;
using Blog.Core.IServices;
using Blog.Core.Model.Models;
using Blog.Core.Services.BASE;

namespace Blog.Core.Services
{
public partial class TasksQzServices : BaseServices<TasksQz>, ITasksQzServices
{
ITasksQzRepository _dal;
public TasksQzServices(ITasksQzRepository dal)
{
this._dal = dal;
base.BaseDal = dal;
}

}
}

4 changes: 4 additions & 0 deletions Blog.Core.Tasks/Blog.Core.Tasks.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Quartz" Version="3.0.7" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\Blog.Core.IServices\Blog.Core.IServices.csproj" />
</ItemGroup>
Expand Down
File renamed without changes.
File renamed without changes.
44 changes: 44 additions & 0 deletions Blog.Core.Tasks/QuartzNet/ISchedulerCenter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
using Blog.Core.Model;
using Blog.Core.Model.Models;
using System.Threading.Tasks;

namespace Blog.Core.Tasks
{
/// <summary>
/// 服务调度接口
/// </summary>
public interface ISchedulerCenter
{

/// <summary>
/// 开启任务调度
/// </summary>
/// <returns></returns>
Task<MessageModel<string>> StartScheduleAsync();
/// <summary>
/// 停止任务调度
/// </summary>
/// <returns></returns>
Task<MessageModel<string>> StopScheduleAsync();
/// <summary>
///
/// </summary>
/// <param name="sysSchedule"></param>
/// <returns></returns>
Task<MessageModel<string>> AddScheduleJobAsync(TasksQz sysSchedule);
/// <summary>
/// 停止一个任务
/// </summary>
/// <param name="sysSchedule"></param>
/// <returns></returns>
Task<MessageModel<string>> StopScheduleJobAsync(TasksQz sysSchedule);
/// <summary>
/// 恢复一个任务
/// </summary>
/// <param name="sysSchedule"></param>
/// <returns></returns>
Task<MessageModel<string>> ResumeJob(TasksQz sysSchedule);

}

}
50 changes: 50 additions & 0 deletions Blog.Core.Tasks/QuartzNet/JobFactory.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
using Microsoft.Extensions.DependencyInjection;
using Quartz;
using Quartz.Spi;
using System;

namespace Blog.Core.Tasks
{
public class JobFactory : IJobFactory
{
/// <summary>
/// 注入反射获取依赖对象
/// </summary>
private readonly IServiceProvider _serviceProvider;
public JobFactory(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
/// <summary>
/// 实现接口Job
/// </summary>
/// <param name="bundle"></param>
/// <param name="scheduler"></param>
/// <returns></returns>
public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
{
try
{
var serviceScope = _serviceProvider.CreateScope();
var job = serviceScope.ServiceProvider.GetService(bundle.JobDetail.JobType) as IJob;
return job;

}
catch (Exception e)
{
throw e;
}
}

public void ReturnJob(IJob job)
{
var disposable = job as IDisposable;
if (disposable != null)
{
disposable.Dispose();
}

}
}

}
Loading

0 comments on commit 403b30a

Please sign in to comment.