新增任务计划表

master
xiaochanghai 1 year ago
parent f6afce70eb
commit 7715963d3a
  1. 9470
      Model/Tiobon.Web.pdm
  2. 14
      Tiobon.Core.Api/Controllers/TasksQzController.cs
  3. 315
      Tiobon.Core.Api/Tiobon.Core.Model.xml
  4. 4
      Tiobon.Core.Api/Tiobon.Core.xml
  5. 2
      Tiobon.Core.Api/appsettings.json
  6. 8
      Tiobon.Core.Common/Seed/DBSeed.cs
  7. 7
      Tiobon.Core.Extensions/HostedService/QuartzJobHostedService.cs
  8. 4
      Tiobon.Core.IServices/ITasksLogServices.cs
  9. 2
      Tiobon.Core.IServices/ITasksQzServices.cs
  10. 128
      Tiobon.Core.Model/Base/BasePoco.cs
  11. 32
      Tiobon.Core.Model/Models/Ghre/TasksLog.cs
  12. 84
      Tiobon.Core.Model/Models/Ghre/TasksQz.cs
  13. 94
      Tiobon.Core.Model/Models/TasksQz.cs
  14. 22
      Tiobon.Core.Services/TasksLogServices.cs
  15. 2
      Tiobon.Core.Services/TasksQzServices.cs
  16. 14
      Tiobon.Core.Tasks/QuartzNet/ISchedulerCenter.cs
  17. 6
      Tiobon.Core.Tasks/QuartzNet/Jobs/JobBase.cs
  18. 2
      Tiobon.Core.Tasks/QuartzNet/Jobs/Job_Blogs_Quartz.cs
  19. 18
      Tiobon.Core.Tasks/QuartzNet/SchedulerCenterServer.cs

File diff suppressed because it is too large Load Diff

@ -30,7 +30,7 @@ namespace Tiobon.Core.Controllers
/// <returns></returns> /// <returns></returns>
// GET: api/Buttons/5 // GET: api/Buttons/5
[HttpGet] [HttpGet]
public async Task<ServiceResult<PageModel<TasksQz>>> Get(int page = 1, string key = "") public async Task<ServiceResult<PageModel<Ghre_TasksQz>>> Get(int page = 1, string key = "")
{ {
if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key)) if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key))
{ {
@ -38,7 +38,7 @@ namespace Tiobon.Core.Controllers
} }
int intPageSize = 50; int intPageSize = 50;
Expression<Func<TasksQz, bool>> whereExpression = a => a.IsDeleted != true && (a.Name != null && a.Name.Contains(key)); Expression<Func<Ghre_TasksQz, bool>> whereExpression = a => a.IsEnable == 1 && (a.Name != null && a.Name.Contains(key));
var data = await _tasksQzServices.QueryPage(whereExpression, page, intPageSize, " Id desc "); var data = await _tasksQzServices.QueryPage(whereExpression, page, intPageSize, " Id desc ");
if (data.dataCount > 0) if (data.dataCount > 0)
@ -48,7 +48,7 @@ namespace Tiobon.Core.Controllers
item.Triggers = await _schedulerCenter.GetTaskStaus(item); item.Triggers = await _schedulerCenter.GetTaskStaus(item);
} }
} }
return ServiceResult<PageModel<TasksQz>>.OprateSuccess(data.dataCount >= 0, "获取成功", data); return ServiceResult<PageModel<Ghre_TasksQz>>.OprateSuccess(data.dataCount >= 0, "获取成功", data);
} }
/// <summary> /// <summary>
@ -57,7 +57,7 @@ namespace Tiobon.Core.Controllers
/// <param name="tasksQz"></param> /// <param name="tasksQz"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public async Task<ServiceResult<string>> Post([FromBody] TasksQz tasksQz) public async Task<ServiceResult<string>> Post([FromBody] Ghre_TasksQz tasksQz)
{ {
var data = new ServiceResult<string>(); var data = new ServiceResult<string>();
_unitOfWorkManage.BeginTran(); _unitOfWorkManage.BeginTran();
@ -112,7 +112,7 @@ namespace Tiobon.Core.Controllers
/// <param name="tasksQz"></param> /// <param name="tasksQz"></param>
/// <returns></returns> /// <returns></returns>
[HttpPut] [HttpPut]
public async Task<ServiceResult<string>> Put([FromBody] TasksQz tasksQz) public async Task<ServiceResult<string>> Put([FromBody] Ghre_TasksQz tasksQz)
{ {
var data = new ServiceResult<string>(); var data = new ServiceResult<string>();
if (tasksQz != null && tasksQz.Id > 0) if (tasksQz != null && tasksQz.Id > 0)
@ -519,10 +519,10 @@ namespace Tiobon.Core.Controllers
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[HttpGet] [HttpGet]
public async Task<ServiceResult<PageModel<TasksLog>>> GetTaskLogs(long jobId, int page = 1, int pageSize = 10, DateTime? runTimeStart = null, DateTime? runTimeEnd = null) public async Task<ServiceResult<PageModel<Ghre_TasksLog>>> GetTaskLogs(long jobId, int page = 1, int pageSize = 10, DateTime? runTimeStart = null, DateTime? runTimeEnd = null)
{ {
var model = await _tasksLogServices.GetTaskLogs(jobId, page, pageSize, runTimeStart, runTimeEnd); var model = await _tasksLogServices.GetTaskLogs(jobId, page, pageSize, runTimeStart, runTimeEnd);
return ServiceResult<PageModel<TasksLog>>.OprateSuccess(model.dataCount >= 0, "获取成功", model); return ServiceResult<PageModel<Ghre_TasksLog>>.OprateSuccess(model.dataCount >= 0, "获取成功", model);
} }
/// <summary> /// <summary>
/// 任务概况 /// 任务概况

@ -1158,6 +1158,146 @@
预留字段12 预留字段12
</summary> </summary>
</member> </member>
<member name="T:Tiobon.Core.Model.Models.Ghre_TasksLog">
<summary>
任务日志表
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_TasksLog.JobId">
<summary>
任务ID
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_TasksLog.TotalTime">
<summary>
任务耗时
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_TasksLog.RunResult">
<summary>
执行结果(0-失败 1-成功)
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_TasksLog.RunTime">
<summary>
运行时间
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_TasksLog.EndTime">
<summary>
结束时间
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_TasksLog.RunPars">
<summary>
执行参数
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_TasksLog.ErrMessage">
<summary>
异常信息
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_TasksLog.ErrStackTrace">
<summary>
异常堆栈
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_TasksLog.Name">
<summary>
任务名称
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_TasksLog.JobGroup">
<summary>
任务分组
</summary>
</member>
<member name="T:Tiobon.Core.Model.Models.Ghre_TasksQz">
<summary>
任务计划表
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_TasksQz.Name">
<summary>
任务名称
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_TasksQz.JobGroup">
<summary>
任务分组
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_TasksQz.Cron">
<summary>
任务运行时间表达式
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_TasksQz.AssemblyName">
<summary>
任务所在DLL对应的程序集名称
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_TasksQz.ClassName">
<summary>
任务所在类
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_TasksQz.Remark">
<summary>
任务描述
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_TasksQz.RunTimes">
<summary>
执行次数
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_TasksQz.BeginTime">
<summary>
开始时间
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_TasksQz.EndTime">
<summary>
结束时间
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_TasksQz.TriggerType">
<summary>
触发器类型(0、simple 1、cron)
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_TasksQz.IntervalSecond">
<summary>
执行间隔时间, 秒为单位
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_TasksQz.CycleRunTimes">
<summary>
循环执行次数
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_TasksQz.CycleHasRunTimes">
<summary>
已循环次数
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_TasksQz.IsStart">
<summary>
是否启动
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_TasksQz.JobParams">
<summary>
执行传参
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_TasksQz.Triggers">
<summary>
任务内存中的状态
</summary>
</member>
<member name="T:Tiobon.Core.Model.Models.Ghrs_User"> <member name="T:Tiobon.Core.Model.Models.Ghrs_User">
<summary> <summary>
系统用户 (Model) 系统用户 (Model)
@ -1909,181 +2049,6 @@
租户Id 租户Id
</summary> </summary>
</member> </member>
<member name="T:Tiobon.Core.Model.Models.TasksLog">
<summary>
任务日志表
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.TasksLog.JobId">
<summary>
任务ID
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.TasksLog.TotalTime">
<summary>
任务耗时
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.TasksLog.RunResult">
<summary>
执行结果(0-失败 1-成功)
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.TasksLog.RunTime">
<summary>
运行时间
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.TasksLog.EndTime">
<summary>
结束时间
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.TasksLog.RunPars">
<summary>
执行参数
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.TasksLog.ErrMessage">
<summary>
异常信息
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.TasksLog.ErrStackTrace">
<summary>
异常堆栈
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.TasksLog.CreateId">
<summary>
创建ID
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.TasksLog.CreateBy">
<summary>
创建者
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.TasksLog.CreateTime">
<summary>
创建时间
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.TasksLog.ModifyId">
<summary>
修改ID
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.TasksLog.ModifyBy">
<summary>
修改者
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.TasksLog.ModifyTime">
<summary>
修改时间
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.TasksLog.Name">
<summary>
任务名称
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.TasksLog.JobGroup">
<summary>
任务分组
</summary>
</member>
<member name="T:Tiobon.Core.Model.Models.TasksQz">
<summary>
任务计划表
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.TasksQz.Name">
<summary>
任务名称
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.TasksQz.JobGroup">
<summary>
任务分组
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.TasksQz.Cron">
<summary>
任务运行时间表达式
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.TasksQz.AssemblyName">
<summary>
任务所在DLL对应的程序集名称
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.TasksQz.ClassName">
<summary>
任务所在类
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.TasksQz.Remark">
<summary>
任务描述
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.TasksQz.RunTimes">
<summary>
执行次数
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.TasksQz.BeginTime">
<summary>
开始时间
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.TasksQz.EndTime">
<summary>
结束时间
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.TasksQz.TriggerType">
<summary>
触发器类型(0、simple 1、cron)
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.TasksQz.IntervalSecond">
<summary>
执行间隔时间, 秒为单位
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.TasksQz.CycleRunTimes">
<summary>
循环执行次数
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.TasksQz.CycleHasRunTimes">
<summary>
已循环次数
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.TasksQz.IsStart">
<summary>
是否启动
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.TasksQz.JobParams">
<summary>
执行传参
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.TasksQz.CreateTime">
<summary>
创建时间
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.TasksQz.Triggers">
<summary>
任务内存中的状态
</summary>
</member>
<member name="T:Tiobon.Core.Model.Models.BusinessTable"> <member name="T:Tiobon.Core.Model.Models.BusinessTable">
<summary> <summary>
业务数据 <br/> 业务数据 <br/>

@ -404,14 +404,14 @@
<param name="key"></param> <param name="key"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Tiobon.Core.Controllers.TasksQzController.Post(Tiobon.Core.Model.Models.TasksQz)"> <member name="M:Tiobon.Core.Controllers.TasksQzController.Post(Tiobon.Core.Model.Models.Ghre_TasksQz)">
<summary> <summary>
添加计划任务 添加计划任务
</summary> </summary>
<param name="tasksQz"></param> <param name="tasksQz"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Tiobon.Core.Controllers.TasksQzController.Put(Tiobon.Core.Model.Models.TasksQz)"> <member name="M:Tiobon.Core.Controllers.TasksQzController.Put(Tiobon.Core.Model.Models.Ghre_TasksQz)">
<summary> <summary>
修改计划任务 修改计划任务
</summary> </summary>

@ -268,7 +268,7 @@
"Enabled": false "Enabled": false
}, },
"QuartzNetJob": { "QuartzNetJob": {
"Enabled": false "Enabled": true
}, },
"Consul": { "Consul": {
"Enabled": false "Enabled": false

@ -295,12 +295,12 @@ namespace Tiobon.Core.Common.Seed
#region TasksQz #region TasksQz
if (!await myContext.Db.Queryable<TasksQz>().AnyAsync()) if (!await myContext.Db.Queryable<Ghre_TasksQz>().AnyAsync())
{ {
var data = JsonConvert.DeserializeObject<List<TasksQz>>( var data = JsonConvert.DeserializeObject<List<Ghre_TasksQz>>(
FileHelper.ReadFile(string.Format(SeedDataFolder, "TasksQz"), Encoding.UTF8), setting); FileHelper.ReadFile(string.Format(SeedDataFolder, "TasksQz"), Encoding.UTF8), setting);
myContext.GetEntityDB<TasksQz>().InsertRange(data); myContext.GetEntityDB<Ghre_TasksQz>().InsertRange(data);
Console.WriteLine("Table:TasksQz created success!"); Console.WriteLine("Table:TasksQz created success!");
} }
else else
@ -312,7 +312,7 @@ namespace Tiobon.Core.Common.Seed
#region TasksLog #region TasksLog
if (!await myContext.Db.Queryable<TasksLog>().AnyAsync()) if (!await myContext.Db.Queryable<Ghre_TasksLog>().AnyAsync())
{ {
Console.WriteLine("Table:TasksLog created success!"); Console.WriteLine("Table:TasksLog created success!");
} }

@ -1,11 +1,8 @@
using System; using Microsoft.Extensions.Hosting;
using System.Threading; using Microsoft.Extensions.Logging;
using System.Threading.Tasks;
using Tiobon.Core.Common; using Tiobon.Core.Common;
using Tiobon.Core.IServices; using Tiobon.Core.IServices;
using Tiobon.Core.Tasks; using Tiobon.Core.Tasks;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace Tiobon.Core.Extensions.HostedService; namespace Tiobon.Core.Extensions.HostedService;

@ -10,9 +10,9 @@ namespace Tiobon.Core.IServices
/// <summary> /// <summary>
/// ITasksLogServices /// ITasksLogServices
/// </summary> /// </summary>
public interface ITasksLogServices :IBaseServices<TasksLog> public interface ITasksLogServices :IBaseServices<Ghre_TasksLog>
{ {
public Task<PageModel<TasksLog>> GetTaskLogs(long jobId, int page, int intPageSize,DateTime? runTime,DateTime? endTime); public Task<PageModel<Ghre_TasksLog>> GetTaskLogs(long jobId, int page, int intPageSize,DateTime? runTime,DateTime? endTime);
public Task<object> GetTaskOverview(long jobId, DateTime? runTime, DateTime? endTime, string type); public Task<object> GetTaskOverview(long jobId, DateTime? runTime, DateTime? endTime, string type);
} }
} }

@ -7,7 +7,7 @@ namespace Tiobon.Core.IServices
/// <summary> /// <summary>
/// ITasksQzServices /// ITasksQzServices
/// </summary> /// </summary>
public interface ITasksQzServices :IBaseServices<TasksQz> public interface ITasksQzServices :IBaseServices<Ghre_TasksQz>
{ {

@ -1,82 +1,80 @@
using System.ComponentModel; using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations;
using SqlSugar; using SqlSugar;
using Tiobon.Core.Model.Models.RootTkey.Interface; using Tiobon.Core.Model.Models.RootTkey.Interface;
namespace Tiobon.Core.Model namespace Tiobon.Core.Model;
public class BasePoco : BasePoco1
{ {
public class BasePoco : BasePoco1
{
/// <summary> /// <summary>
/// 表主键 /// 表主键
/// </summary> /// </summary>
//public long Id { get; set; } //public long Id { get; set; }
[SugarColumn(IsNullable = false, IsPrimaryKey = true, IsIdentity = false), Display(Name = "表主键")] [SugarColumn(IsNullable = false, IsPrimaryKey = true, IsIdentity = false), Display(Name = "表主键")]
public long Id { get; set; } public long Id { get; set; }
} }
public class BasePoco1 : IBaseDeleteFilter public class BasePoco1 : IBaseDeleteFilter
{ {
/// <summary> /// <summary>
/// 1:有效,0:未生效 /// 1:有效,0:未生效
/// </summary> /// </summary>
[Display(Name = "1:有效,0:未生效")] [Display(Name = "1:有效,0:未生效")]
public int IsEnable { get; set; } = 1; public int IsEnable { get; set; } = 1;
/// <summary> /// <summary>
/// 操作日志ID /// 操作日志ID
/// </summary> /// </summary>
[Display(Name = "操作日志ID")] [Display(Name = "操作日志ID")]
public long? OperateLogID { get; set; } public long? OperateLogID { get; set; }
/// <summary> /// <summary>
/// 创建人 /// 创建人
/// </summary> /// </summary>
[Display(Name = "创建人"), SugarColumn(IsOnlyIgnoreUpdate = true)] [Display(Name = "创建人"), SugarColumn(IsOnlyIgnoreUpdate = true)]
public long? CreateBy { get; set; } public long? CreateBy { get; set; }
/// <summary> /// <summary>
/// 创建时间 /// 创建时间
/// </summary> /// </summary>
[Display(Name = "创建时间"), SugarColumn(IsOnlyIgnoreUpdate = true)] [Display(Name = "创建时间"), SugarColumn(IsOnlyIgnoreUpdate = true)]
public DateTime? CreateTime { get; set; } public DateTime? CreateTime { get; set; }
/// <summary> /// <summary>
/// 创建程序 /// 创建程序
/// </summary> /// </summary>
[Display(Name = "创建程序"), SugarColumn(IsOnlyIgnoreUpdate = true)] [Display(Name = "创建程序"), SugarColumn(IsOnlyIgnoreUpdate = true)]
public string CreateProg { get; set; } public string CreateProg { get; set; }
/// <summary> /// <summary>
/// 创建IP /// 创建IP
/// </summary> /// </summary>
[Display(Name = "创建IP"), SugarColumn(IsOnlyIgnoreUpdate = true)] [Display(Name = "创建IP"), SugarColumn(IsOnlyIgnoreUpdate = true)]
public string CreateIP { get; set; } public string CreateIP { get; set; }
/// <summary> /// <summary>
/// 最后修改人 /// 最后修改人
/// </summary> /// </summary>
[Display(Name = "最后修改人")] [Display(Name = "最后修改人")]
public int? UpdateBy { get; set; } public int? UpdateBy { get; set; }
/// <summary> /// <summary>
/// 最后修改时间 /// 最后修改时间
/// </summary> /// </summary>
[Display(Name = "最后修改时间")] [Display(Name = "最后修改时间")]
public DateTime? UpdateTime { get; set; } public DateTime? UpdateTime { get; set; }
/// <summary> /// <summary>
/// 最后修改程序 /// 最后修改程序
/// </summary> /// </summary>
[Display(Name = "最后修改程序")] [Display(Name = "最后修改程序")]
public string UpdateProg { get; set; } public string UpdateProg { get; set; }
/// <summary> /// <summary>
/// 最后修改IP /// 最后修改IP
/// </summary> /// </summary>
[Display(Name = "最后修改IP")] [Display(Name = "最后修改IP")]
public string UpdateIP { get; set; } public string UpdateIP { get; set; }
}
} }

@ -6,7 +6,7 @@ namespace Tiobon.Core.Model.Models
/// <summary> /// <summary>
/// 任务日志表 /// 任务日志表
/// </summary> /// </summary>
public class TasksLog : RootEntityTkey<long> public class Ghre_TasksLog : BasePoco
{ {
/// <summary> /// <summary>
/// 任务ID /// 任务ID
@ -44,36 +44,6 @@ namespace Tiobon.Core.Model.Models
[SugarColumn(Length = 2000, IsNullable = true)] [SugarColumn(Length = 2000, IsNullable = true)]
public string ErrStackTrace { get; set; } public string ErrStackTrace { get; set; }
/// <summary> /// <summary>
/// 创建ID
/// </summary>
[SugarColumn(IsNullable = true)]
public int? CreateId { get; set; }
/// <summary>
/// 创建者
/// </summary>
[SugarColumn(Length = 50, IsNullable = true)]
public string CreateBy { get; set; }
/// <summary>
/// 创建时间
/// </summary>
[SugarColumn(IsNullable = true)]
public DateTime CreateTime { get; set; } = DateTime.Now;
/// <summary>
/// 修改ID
/// </summary>
[SugarColumn(IsNullable = true)]
public int? ModifyId { get; set; }
/// <summary>
/// 修改者
/// </summary>
[SugarColumn(Length = 100, IsNullable = true)]
public string ModifyBy { get; set; }
/// <summary>
/// 修改时间
/// </summary>
[SugarColumn(IsNullable = true)]
public DateTime? ModifyTime { get; set; } = DateTime.Now;
/// <summary>
/// 任务名称 /// 任务名称
/// </summary> /// </summary>
[SugarColumn(IsIgnore = true)] [SugarColumn(IsIgnore = true)]

@ -0,0 +1,84 @@
using SqlSugar;
using Tiobon.Core.Model.ViewModels;
namespace Tiobon.Core.Model.Models;
/// <summary>
/// 任务计划表
/// </summary>
[SugarTable("Ghre_TasksQz", "Ghre_TasksQz"), Entity(TableCnName = "任务计划表", TableName = "Ghre_TasksQz")]
public class Ghre_TasksQz : BasePoco
{
/// <summary>
/// 任务名称
/// </summary>
[SugarColumn(Length = 200, IsNullable = true)]
public string Name { get; set; }
/// <summary>
/// 任务分组
/// </summary>
[SugarColumn(Length = 200, IsNullable = true)]
public string JobGroup { get; set; }
/// <summary>
/// 任务运行时间表达式
/// </summary>
[SugarColumn(Length = 200, IsNullable = true)]
public string Cron { get; set; }
/// <summary>
/// 任务所在DLL对应的程序集名称
/// </summary>
[SugarColumn(Length = 200, IsNullable = true)]
public string AssemblyName { get; set; }
/// <summary>
/// 任务所在类
/// </summary>
[SugarColumn(Length = 200, IsNullable = true)]
public string ClassName { get; set; }
/// <summary>
/// 任务描述
/// </summary>
[SugarColumn(Length = 1000, IsNullable = true)]
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 int CycleRunTimes { get; set; }
/// <summary>
/// 已循环次数
/// </summary>
public int CycleHasRunTimes { get; set; }
/// <summary>
/// 是否启动
/// </summary>
public bool IsStart { get; set; } = false;
/// <summary>
/// 执行传参
/// </summary>
public string JobParams { get; set; }
/// <summary>
/// 任务内存中的状态
/// </summary>
[SugarColumn(IsIgnore = true)]
public List<TaskInfoDto> Triggers { get; set; }
}

@ -1,94 +0,0 @@
using Tiobon.Core.Model.ViewModels;
using SqlSugar;
using System;
using System.Collections.Generic;
namespace Tiobon.Core.Model.Models
{
/// <summary>
/// 任务计划表
/// </summary>
public class TasksQz : RootEntityTkey<long>
{
/// <summary>
/// 任务名称
/// </summary>
[SugarColumn(Length = 200, IsNullable = true)]
public string Name { get; set; }
/// <summary>
/// 任务分组
/// </summary>
[SugarColumn(Length = 200, IsNullable = true)]
public string JobGroup { get; set; }
/// <summary>
/// 任务运行时间表达式
/// </summary>
[SugarColumn(Length = 200, IsNullable = true)]
public string Cron { get; set; }
/// <summary>
/// 任务所在DLL对应的程序集名称
/// </summary>
[SugarColumn(Length = 200, IsNullable = true)]
public string AssemblyName { get; set; }
/// <summary>
/// 任务所在类
/// </summary>
[SugarColumn(Length = 200, IsNullable = true)]
public string ClassName { get; set; }
/// <summary>
/// 任务描述
/// </summary>
[SugarColumn(Length = 1000, IsNullable = true)]
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 int CycleRunTimes { get; set; }
/// <summary>
/// 已循环次数
/// </summary>
public int CycleHasRunTimes { 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;
/// <summary>
/// 任务内存中的状态
/// </summary>
[SugarColumn(IsIgnore = true)]
public List<TaskInfoDto> Triggers { get; set; }
}
}

@ -12,20 +12,20 @@ using System.Linq;
namespace Tiobon.Core.Services namespace Tiobon.Core.Services
{ {
public partial class TasksLogServices : BaseServices<TasksLog>, ITasksLogServices public partial class TasksLogServices : BaseServices<Ghre_TasksLog>, ITasksLogServices
{ {
public async Task<PageModel<TasksLog>> GetTaskLogs(long jobId, int page, int intPageSize, DateTime? runTime, DateTime? endTime) public async Task<PageModel<Ghre_TasksLog>> GetTaskLogs(long jobId, int page, int intPageSize, DateTime? runTime, DateTime? endTime)
{ {
RefAsync<int> totalCount = 0; RefAsync<int> totalCount = 0;
Expression<Func<TasksLog, bool>> whereExpression = log => true; Expression<Func<Ghre_TasksLog, bool>> whereExpression = log => true;
if (jobId > 0) whereExpression = whereExpression.And(log => log.JobId == jobId); if (jobId > 0) whereExpression = whereExpression.And(log => log.JobId == jobId);
var data = await this.Db.Queryable<TasksLog>() var data = await this.Db.Queryable<Ghre_TasksLog>()
.LeftJoin<TasksQz>((log, qz) => log.JobId == qz.Id) .LeftJoin<Ghre_TasksQz>((log, qz) => log.JobId == qz.Id)
.OrderByDescending((log) => log.RunTime) .OrderByDescending((log) => log.RunTime)
.WhereIF(jobId > 0, (log) => log.JobId == jobId) .WhereIF(jobId > 0, (log) => log.JobId == jobId)
.WhereIF(runTime != null, (log) => log.RunTime >= runTime.Value) .WhereIF(runTime != null, (log) => log.RunTime >= runTime.Value)
.WhereIF(endTime != null, (log) => log.RunTime <= endTime.Value) .WhereIF(endTime != null, (log) => log.RunTime <= endTime.Value)
.Select((log, qz) => new TasksLog .Select((log, qz) => new Ghre_TasksLog
{ {
RunPars = log.RunPars, RunPars = log.RunPars,
RunResult = log.RunResult, RunResult = log.RunResult,
@ -39,7 +39,7 @@ namespace Tiobon.Core.Services
}) })
.ToPageListAsync(page, intPageSize, totalCount); .ToPageListAsync(page, intPageSize, totalCount);
return new PageModel<TasksLog>(page, totalCount, intPageSize, data); return new PageModel<Ghre_TasksLog>(page, totalCount, intPageSize, data);
} }
public async Task<object> GetTaskOverview(long jobId, DateTime? runTime, DateTime? endTime, string type) public async Task<object> GetTaskOverview(long jobId, DateTime? runTime, DateTime? endTime, string type)
{ {
@ -55,7 +55,7 @@ namespace Tiobon.Core.Services
days--; days--;
} }
var queryableLeft = this.Db.Reportable(dayArray).ToQueryable<DateTime>(); var queryableLeft = this.Db.Reportable(dayArray).ToQueryable<DateTime>();
var queryableRight = this.Db.Queryable<TasksLog>().Where((x) => x.RunTime.Year >= runTime.Value.Year && x.RunTime.Year <= endTime.Value.Year); ; ; //声名表 var queryableRight = this.Db.Queryable<Ghre_TasksLog>().Where((x) => x.RunTime.Year >= runTime.Value.Year && x.RunTime.Year <= endTime.Value.Year); ; ; //声名表
var list = this.Db.Queryable(queryableLeft, queryableRight, JoinType.Left, var list = this.Db.Queryable(queryableLeft, queryableRight, JoinType.Left,
(x1, x2) => x1.ColumnName.Year == x2.RunTime.Year) (x1, x2) => x1.ColumnName.Year == x2.RunTime.Year)
@ -71,7 +71,7 @@ namespace Tiobon.Core.Services
{ {
//按月 //按月
var queryableLeft = this.Db.Reportable(ReportableDateType.MonthsInLast1years).ToQueryable<DateTime>(); //生成月份 //ReportableDateType.MonthsInLast1yea 表式近一年月份 并且queryable之后还能在where过滤 var queryableLeft = this.Db.Reportable(ReportableDateType.MonthsInLast1years).ToQueryable<DateTime>(); //生成月份 //ReportableDateType.MonthsInLast1yea 表式近一年月份 并且queryable之后还能在where过滤
var queryableRight = this.Db.Queryable<TasksLog>().Where((x) => x.RunTime.Year == runTime.Value.Year); //声名表 var queryableRight = this.Db.Queryable<Ghre_TasksLog>().Where((x) => x.RunTime.Year == runTime.Value.Year); //声名表
//月份和表JOIN //月份和表JOIN
var list = queryableLeft var list = queryableLeft
@ -97,7 +97,7 @@ namespace Tiobon.Core.Services
var queryableLeft = this.Db.Reportable(dayArray).ToQueryable<DateTime>(); var queryableLeft = this.Db.Reportable(dayArray).ToQueryable<DateTime>();
var star = Convert.ToDateTime(runTime.Value.ToString("yyyy-MM-01 00:00:00")); var star = Convert.ToDateTime(runTime.Value.ToString("yyyy-MM-01 00:00:00"));
var end = Convert.ToDateTime(runTime.Value.ToString($"yyyy-MM-{days} 23:59:59")); var end = Convert.ToDateTime(runTime.Value.ToString($"yyyy-MM-{days} 23:59:59"));
var queryableRight = this.Db.Queryable<TasksLog>().Where((x) => x.RunTime >= star && x.RunTime <= end); ; ; //声名表 var queryableRight = this.Db.Queryable<Ghre_TasksLog>().Where((x) => x.RunTime >= star && x.RunTime <= end); ; ; //声名表
var list = this.Db.Queryable(queryableLeft, queryableRight, JoinType.Left, var list = this.Db.Queryable(queryableLeft, queryableRight, JoinType.Left,
(x1, x2) => x1.ColumnName.Date == x2.RunTime.Date) (x1, x2) => x1.ColumnName.Date == x2.RunTime.Date)
@ -117,7 +117,7 @@ namespace Tiobon.Core.Services
var days = 24; var days = 24;
var dayArray = Enumerable.Range(0, days).Select(it => Convert.ToDateTime(time.ToString($"yyyy-MM-dd {it.ToString().PadLeft(2, '0')}:00:00"))).ToList();//转成时间数组 var dayArray = Enumerable.Range(0, days).Select(it => Convert.ToDateTime(time.ToString($"yyyy-MM-dd {it.ToString().PadLeft(2, '0')}:00:00"))).ToList();//转成时间数组
var queryableLeft = this.Db.Reportable(dayArray).ToQueryable<DateTime>(); var queryableLeft = this.Db.Reportable(dayArray).ToQueryable<DateTime>();
var queryableRight = this.Db.Queryable<TasksLog>().Where((x) => x.RunTime >= runTime.Value.Date && x.RunTime <= runTime.Value.Date.AddDays(1).AddMilliseconds(-1)); //声名表 var queryableRight = this.Db.Queryable<Ghre_TasksLog>().Where((x) => x.RunTime >= runTime.Value.Date && x.RunTime <= runTime.Value.Date.AddDays(1).AddMilliseconds(-1)); //声名表
var list = this.Db.Queryable(queryableLeft, queryableRight, JoinType.Left, var list = this.Db.Queryable(queryableLeft, queryableRight, JoinType.Left,
(x1, x2) => x1.ColumnName.Hour == x2.RunTime.Hour) (x1, x2) => x1.ColumnName.Hour == x2.RunTime.Hour)

@ -5,7 +5,7 @@ using Tiobon.Core.Services.BASE;
namespace Tiobon.Core.Services namespace Tiobon.Core.Services
{ {
public partial class TasksQzServices : BaseServices<TasksQz>, ITasksQzServices public partial class TasksQzServices : BaseServices<Ghre_TasksQz>, ITasksQzServices
{ {
} }

@ -27,38 +27,38 @@ namespace Tiobon.Core.Tasks
/// </summary> /// </summary>
/// <param name="sysSchedule"></param> /// <param name="sysSchedule"></param>
/// <returns></returns> /// <returns></returns>
Task<ServiceResult<string>> AddScheduleJobAsync(TasksQz sysSchedule); Task<ServiceResult<string>> AddScheduleJobAsync(Ghre_TasksQz sysSchedule);
/// <summary> /// <summary>
/// 停止一个任务 /// 停止一个任务
/// </summary> /// </summary>
/// <param name="sysSchedule"></param> /// <param name="sysSchedule"></param>
/// <returns></returns> /// <returns></returns>
Task<ServiceResult<string>> StopScheduleJobAsync(TasksQz sysSchedule); Task<ServiceResult<string>> StopScheduleJobAsync(Ghre_TasksQz sysSchedule);
/// <summary> /// <summary>
/// 检测任务是否存在 /// 检测任务是否存在
/// </summary> /// </summary>
/// <param name="sysSchedule"></param> /// <param name="sysSchedule"></param>
/// <returns></returns> /// <returns></returns>
Task<bool> IsExistScheduleJobAsync(TasksQz sysSchedule); Task<bool> IsExistScheduleJobAsync(Ghre_TasksQz sysSchedule);
/// <summary> /// <summary>
/// 暂停指定的计划任务 /// 暂停指定的计划任务
/// </summary> /// </summary>
/// <param name="sysSchedule"></param> /// <param name="sysSchedule"></param>
/// <returns></returns> /// <returns></returns>
Task<ServiceResult<string>> PauseJob(TasksQz sysSchedule); Task<ServiceResult<string>> PauseJob(Ghre_TasksQz sysSchedule);
/// <summary> /// <summary>
/// 恢复一个任务 /// 恢复一个任务
/// </summary> /// </summary>
/// <param name="sysSchedule"></param> /// <param name="sysSchedule"></param>
/// <returns></returns> /// <returns></returns>
Task<ServiceResult<string>> ResumeJob(TasksQz sysSchedule); Task<ServiceResult<string>> ResumeJob(Ghre_TasksQz sysSchedule);
/// <summary> /// <summary>
/// 获取任务触发器状态 /// 获取任务触发器状态
/// </summary> /// </summary>
/// <param name="sysSchedule"></param> /// <param name="sysSchedule"></param>
/// <returns></returns> /// <returns></returns>
Task<List<TaskInfoDto>> GetTaskStaus(TasksQz sysSchedule); Task<List<TaskInfoDto>> GetTaskStaus(Ghre_TasksQz sysSchedule);
/// <summary> /// <summary>
/// 获取触发器标识 /// 获取触发器标识
/// </summary> /// </summary>
@ -71,7 +71,7 @@ namespace Tiobon.Core.Tasks
/// </summary> /// </summary>
/// <param name="tasksQz"></param> /// <param name="tasksQz"></param>
/// <returns></returns> /// <returns></returns>
Task<ServiceResult<string>> ExecuteJobAsync(TasksQz tasksQz); Task<ServiceResult<string>> ExecuteJobAsync(Ghre_TasksQz tasksQz);
} }

@ -25,7 +25,7 @@ namespace Tiobon.Core.Tasks
public async Task<string> ExecuteJob(IJobExecutionContext context, Func<Task> func) public async Task<string> ExecuteJob(IJobExecutionContext context, Func<Task> func)
{ {
//记录Job //记录Job
TasksLog tasksLog = new TasksLog(); Ghre_TasksLog tasksLog = new Ghre_TasksLog();
//JOBID //JOBID
int jobid = context.JobDetail.Key.Name.ObjToInt(); int jobid = context.JobDetail.Key.Name.ObjToInt();
//JOB组名 //JOB组名
@ -57,14 +57,14 @@ namespace Tiobon.Core.Tasks
} }
finally finally
{ {
tasksLog.TotalTime = Math.Round((tasksLog.EndTime - tasksLog.RunTime).TotalSeconds,3); tasksLog.TotalTime = Math.Round((tasksLog.EndTime - tasksLog.RunTime).TotalSeconds, 3);
jobHistory += $"(耗时:{tasksLog.TotalTime}秒)"; jobHistory += $"(耗时:{tasksLog.TotalTime}秒)";
if (_tasksQzServices != null) if (_tasksQzServices != null)
{ {
var model = await _tasksQzServices.QueryById(jobid); var model = await _tasksQzServices.QueryById(jobid);
if (model != null) if (model != null)
{ {
if(_tasksLogServices != null) await _tasksLogServices.Add(tasksLog); if (_tasksLogServices != null) await _tasksLogServices.Add(tasksLog);
model.RunTimes += 1; model.RunTimes += 1;
if (model.TriggerType == 0) model.CycleHasRunTimes += 1; if (model.TriggerType == 0) model.CycleHasRunTimes += 1;
if (model.TriggerType == 0 && model.CycleRunTimes != 0 && model.CycleHasRunTimes >= model.CycleRunTimes) model.IsStart = false;//循环完善,当循环任务完成后,停止该任务,防止下次启动再次执行 if (model.TriggerType == 0 && model.CycleRunTimes != 0 && model.CycleHasRunTimes >= model.CycleRunTimes) model.IsStart = false;//循环完善,当循环任务完成后,停止该任务,防止下次启动再次执行

@ -24,7 +24,7 @@ namespace Tiobon.Core.Tasks
public async Task Run(IJobExecutionContext context) public async Task Run(IJobExecutionContext context)
{ {
System.Console.WriteLine($"Job_Tiobons_Quartz 执行 {DateTime.Now.ToShortTimeString()}"); System.Console.WriteLine($"Job_Tiobons_Quartz 执行 {DateTime.Now.ToShortTimeString()}");
var list = await _TiobonArticleServices.Query(); //var list = await _TiobonArticleServices.Query();
// 也可以通过数据库配置,获取传递过来的参数 // 也可以通过数据库配置,获取传递过来的参数
JobDataMap data = context.JobDetail.JobDataMap; JobDataMap data = context.JobDetail.JobDataMap;
//int jobId = data.GetInt("JobParam"); //int jobId = data.GetInt("JobParam");

@ -110,7 +110,7 @@ namespace Tiobon.Core.Tasks
/// <typeparam name="T"></typeparam> /// <typeparam name="T"></typeparam>
/// <param name="tasksQz"></param> /// <param name="tasksQz"></param>
/// <returns></returns> /// <returns></returns>
public async Task<ServiceResult<string>> AddScheduleJobAsync(TasksQz tasksQz) public async Task<ServiceResult<string>> AddScheduleJobAsync(Ghre_TasksQz tasksQz)
{ {
var result = new ServiceResult<string>(); var result = new ServiceResult<string>();
@ -208,7 +208,7 @@ namespace Tiobon.Core.Tasks
/// 任务是否存在? /// 任务是否存在?
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
public async Task<bool> IsExistScheduleJobAsync(TasksQz sysSchedule) public async Task<bool> IsExistScheduleJobAsync(Ghre_TasksQz sysSchedule)
{ {
JobKey jobKey = new JobKey(sysSchedule.Id.ToString(), sysSchedule.JobGroup); JobKey jobKey = new JobKey(sysSchedule.Id.ToString(), sysSchedule.JobGroup);
if (await _scheduler.Result.CheckExists(jobKey)) if (await _scheduler.Result.CheckExists(jobKey))
@ -224,7 +224,7 @@ namespace Tiobon.Core.Tasks
/// 暂停一个指定的计划任务 /// 暂停一个指定的计划任务
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
public async Task<ServiceResult<string>> StopScheduleJobAsync(TasksQz sysSchedule) public async Task<ServiceResult<string>> StopScheduleJobAsync(Ghre_TasksQz sysSchedule)
{ {
var result = new ServiceResult<string>(); var result = new ServiceResult<string>();
try try
@ -255,7 +255,7 @@ namespace Tiobon.Core.Tasks
/// </summary> /// </summary>
/// <param name="sysSchedule"></param> /// <param name="sysSchedule"></param>
/// <returns></returns> /// <returns></returns>
public async Task<ServiceResult<string>> ResumeJob(TasksQz sysSchedule) public async Task<ServiceResult<string>> ResumeJob(Ghre_TasksQz sysSchedule)
{ {
var result = new ServiceResult<string>(); var result = new ServiceResult<string>();
try try
@ -282,7 +282,7 @@ namespace Tiobon.Core.Tasks
/// </summary> /// </summary>
/// <param name="sysSchedule"></param> /// <param name="sysSchedule"></param>
/// <returns></returns> /// <returns></returns>
public async Task<ServiceResult<string>> PauseJob(TasksQz sysSchedule) public async Task<ServiceResult<string>> PauseJob(Ghre_TasksQz sysSchedule)
{ {
var result = new ServiceResult<string>(); var result = new ServiceResult<string>();
try try
@ -305,7 +305,7 @@ namespace Tiobon.Core.Tasks
} }
} }
#region 状态状态帮助方法 #region 状态状态帮助方法
public async Task<List<TaskInfoDto>> GetTaskStaus(TasksQz sysSchedule) public async Task<List<TaskInfoDto>> GetTaskStaus(Ghre_TasksQz sysSchedule)
{ {
var ls = new List<TaskInfoDto>(); var ls = new List<TaskInfoDto>();
@ -401,7 +401,7 @@ namespace Tiobon.Core.Tasks
/// <param name="starRunTime"></param> /// <param name="starRunTime"></param>
/// <param name="endRunTime"></param> /// <param name="endRunTime"></param>
/// <returns></returns> /// <returns></returns>
private ITrigger CreateSimpleTrigger(TasksQz sysSchedule) private ITrigger CreateSimpleTrigger(Ghre_TasksQz sysSchedule)
{ {
if (sysSchedule.CycleRunTimes > 0) if (sysSchedule.CycleRunTimes > 0)
{ {
@ -436,7 +436,7 @@ namespace Tiobon.Core.Tasks
/// </summary> /// </summary>
/// <param name="m"></param> /// <param name="m"></param>
/// <returns></returns> /// <returns></returns>
private ITrigger CreateCronTrigger(TasksQz sysSchedule) private ITrigger CreateCronTrigger(Ghre_TasksQz sysSchedule)
{ {
// 作业触发器 // 作业触发器
return TriggerBuilder.Create() return TriggerBuilder.Create()
@ -455,7 +455,7 @@ namespace Tiobon.Core.Tasks
/// </summary> /// </summary>
/// <param name="tasksQz"></param> /// <param name="tasksQz"></param>
/// <returns></returns> /// <returns></returns>
public async Task<ServiceResult<string>> ExecuteJobAsync(TasksQz tasksQz) public async Task<ServiceResult<string>> ExecuteJobAsync(Ghre_TasksQz tasksQz)
{ {
var result = new ServiceResult<string>(); var result = new ServiceResult<string>();
try try

Loading…
Cancel
Save