From 172460d37ab252ef1cead966227904e12826ba54 Mon Sep 17 00:00:00 2001 From: anjoy8 <3143422472@qq.com> Date: Fri, 23 Oct 2020 11:24:05 +0800 Subject: [PATCH] add second job,and Fixed #123 Bug --- .../ServiceExtensions/JobSetup.cs | 1 + Blog.Core.IServices/IOperateLogServices.cs | 14 +++ Blog.Core.Services/OperateLogServices.cs | 18 ++++ .../QuartzNet/Jobs/Job_Blogs_Quartz.cs | 2 +- .../QuartzNet/Jobs/Job_OperateLog_Quartz.cs | 102 ++++++++++++++++++ .../QuartzNet/SchedulerCenterServer.cs | 2 + 6 files changed, 138 insertions(+), 1 deletion(-) create mode 100644 Blog.Core.IServices/IOperateLogServices.cs create mode 100644 Blog.Core.Services/OperateLogServices.cs create mode 100644 Blog.Core.Tasks/QuartzNet/Jobs/Job_OperateLog_Quartz.cs diff --git a/Blog.Core.Extensions/ServiceExtensions/JobSetup.cs b/Blog.Core.Extensions/ServiceExtensions/JobSetup.cs index 4fa87ab..2835001 100644 --- a/Blog.Core.Extensions/ServiceExtensions/JobSetup.cs +++ b/Blog.Core.Extensions/ServiceExtensions/JobSetup.cs @@ -19,6 +19,7 @@ namespace Blog.Core.Extensions services.AddSingleton(); services.AddTransient();//Job使用瞬时依赖注入 + services.AddTransient();//Job使用瞬时依赖注入 services.AddSingleton(); } } diff --git a/Blog.Core.IServices/IOperateLogServices.cs b/Blog.Core.IServices/IOperateLogServices.cs new file mode 100644 index 0000000..6f0ef3f --- /dev/null +++ b/Blog.Core.IServices/IOperateLogServices.cs @@ -0,0 +1,14 @@ +using Blog.Core.IServices.BASE; +using Blog.Core.Model.Models; + +namespace Blog.Core.IServices +{ + /// + /// IOperateLogServices + /// + public interface IOperateLogServices : IBaseServices + { + + } +} + \ No newline at end of file diff --git a/Blog.Core.Services/OperateLogServices.cs b/Blog.Core.Services/OperateLogServices.cs new file mode 100644 index 0000000..8715b0d --- /dev/null +++ b/Blog.Core.Services/OperateLogServices.cs @@ -0,0 +1,18 @@ +using Blog.Core.IRepository.Base; +using Blog.Core.IServices; +using Blog.Core.Model.Models; +using Blog.Core.Services.BASE; + +namespace Blog.Core.Services +{ + public partial class OperateLogServices : BaseServices, IOperateLogServices + { + IBaseRepository _dal; + public OperateLogServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + + } +} diff --git a/Blog.Core.Tasks/QuartzNet/Jobs/Job_Blogs_Quartz.cs b/Blog.Core.Tasks/QuartzNet/Jobs/Job_Blogs_Quartz.cs index 92b322c..a489a8f 100644 --- a/Blog.Core.Tasks/QuartzNet/Jobs/Job_Blogs_Quartz.cs +++ b/Blog.Core.Tasks/QuartzNet/Jobs/Job_Blogs_Quartz.cs @@ -54,7 +54,7 @@ namespace Blog.Core.Tasks model.RunTimes += 1; var separator = "
"; model.Remark = - $"【{DateTime.Now}】执行任务【Id:{context.JobDetail.Key.Name},组别:{context.JobDetail.Key.Group}】【执行成功】{separator}" + $"【{DateTime.Now}】执行任务【Id:{context.JobDetail.Key.Name},组别:{context.JobDetail.Key.Group}】【执行成功】:博客数{list.Count}{separator}" + string.Join(separator, StringHelper.GetTopDataBySeparator(model.Remark, separator, 9)); await _tasksQzServices.Update(model); diff --git a/Blog.Core.Tasks/QuartzNet/Jobs/Job_OperateLog_Quartz.cs b/Blog.Core.Tasks/QuartzNet/Jobs/Job_OperateLog_Quartz.cs new file mode 100644 index 0000000..a472ae6 --- /dev/null +++ b/Blog.Core.Tasks/QuartzNet/Jobs/Job_OperateLog_Quartz.cs @@ -0,0 +1,102 @@ +using Blog.Core.Common.Helper; +using Blog.Core.Common.LogHelper; +using Blog.Core.IServices; +using Blog.Core.Model.Models; +using Microsoft.AspNetCore.Hosting; +using Quartz; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +/// +/// 这里要注意下,命名空间和程序集是一样的,不然反射不到 +/// +namespace Blog.Core.Tasks +{ + public class Job_OperateLog_Quartz : JobBase, IJob + { + private readonly IOperateLogServices _operateLogServices; + private readonly ITasksQzServices _tasksQzServices; + private readonly IWebHostEnvironment _environment; + + public Job_OperateLog_Quartz(IOperateLogServices operateLogServices, ITasksQzServices tasksQzServices, IWebHostEnvironment environment) + { + _operateLogServices = operateLogServices; + _tasksQzServices = tasksQzServices; + _environment = environment; + } + public async Task Execute(IJobExecutionContext context) + { + // 可以直接获取 JobDetail 的值 + var jobKey = context.JobDetail.Key; + var jobId = jobKey.Name; + + var executeLog = await ExecuteJob(context, async () => await Run(context, jobId.ObjToInt())); + + // 也可以通过数据库配置,获取传递过来的参数 + JobDataMap data = context.JobDetail.JobDataMap; + } + public async Task Run(IJobExecutionContext context, int jobid) + { + List excLogs = new List(); + var exclogContent = LogLock.ReadLog(Path.Combine(_environment.ContentRootPath, "Log"), $"GlobalExceptionLogs_{DateTime.Now.ToString("yyyMMdd")}.log", Encoding.UTF8); + + if (!string.IsNullOrEmpty(exclogContent)) + { + excLogs = exclogContent.Split("--------------------------------") + .Where(d => !string.IsNullOrEmpty(d) && d != "\n" && d != "\r\n") + .Select(d => new LogInfo + { + Datetime = (d.Split("|")[0]).Split(',')[0].ObjToDate(), + Content = d.Split("|")[1]?.Replace("\r\n", "
"), + LogColor = "EXC", + Import = 9, + }).ToList(); + } + + var filterDatetime = DateTime.Now.AddHours(-1); + excLogs = excLogs.Where(d => d.Datetime >= filterDatetime).ToList(); + + var operateLogs = new List() { }; + excLogs.ForEach(m => + { + operateLogs.Add(new OperateLog() + { + LogTime = m.Datetime, + Description = m.Content, + IPAddress = m.IP, + UserId = 0, + IsDeleted = false, + }); + }); + + + if (operateLogs.Count > 0) + { + var logsIds = await _operateLogServices.Add(operateLogs); + } + + if (jobid > 0) + { + var model = await _tasksQzServices.QueryById(jobid); + if (model != null) + { + var list = await _operateLogServices.Query(d => d.IsDeleted == false); + model.RunTimes += 1; + var separator = "
"; + model.Remark = + $"【{DateTime.Now}】执行任务【Id:{context.JobDetail.Key.Name},组别:{context.JobDetail.Key.Group}】【执行成功】:异常数{list.Count}{separator}" + + string.Join(separator, StringHelper.GetTopDataBySeparator(model.Remark, separator, 9)); + + await _tasksQzServices.Update(model); + } + } + } + } + + + +} diff --git a/Blog.Core.Tasks/QuartzNet/SchedulerCenterServer.cs b/Blog.Core.Tasks/QuartzNet/SchedulerCenterServer.cs index 83dd7b0..2b5e528 100644 --- a/Blog.Core.Tasks/QuartzNet/SchedulerCenterServer.cs +++ b/Blog.Core.Tasks/QuartzNet/SchedulerCenterServer.cs @@ -256,6 +256,8 @@ namespace Blog.Core.Tasks trigger = CreateSimpleTrigger(tasksQz); } + ((CronTriggerImpl)trigger).MisfireInstruction = MisfireInstruction.CronTrigger.DoNothing; + TriggerKey triggerKey = new TriggerKey(tasksQz.Id.ToString(), tasksQz.JobGroup); await _scheduler.Result.RescheduleJob(triggerKey, trigger);