任务新增执行SQL脚本
This commit is contained in:
parent
38d0de26e9
commit
c3b7aa9b00
@ -42,7 +42,7 @@ namespace ZR.Admin.WebApi.Controllers
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpGet("list")]
|
[HttpGet("list")]
|
||||||
[ActionPermissionFilter(Permission = "monitor:job:list")]
|
[ActionPermissionFilter(Permission = "monitor:job:list")]
|
||||||
public IActionResult Query([FromQuery] TasksQueryDto parm, [FromQuery] PagerInfo pager)
|
public IActionResult ListTask([FromQuery] TasksQueryDto parm, [FromQuery] PagerInfo pager)
|
||||||
{
|
{
|
||||||
//开始拼装查询条件
|
//开始拼装查询条件
|
||||||
var predicate = Expressionable.Create<SysTasks>();
|
var predicate = Expressionable.Create<SysTasks>();
|
||||||
@ -51,6 +51,7 @@ namespace ZR.Admin.WebApi.Controllers
|
|||||||
m => m.Name.Contains(parm.QueryText) ||
|
m => m.Name.Contains(parm.QueryText) ||
|
||||||
m.JobGroup.Contains(parm.QueryText) ||
|
m.JobGroup.Contains(parm.QueryText) ||
|
||||||
m.AssemblyName.Contains(parm.QueryText));
|
m.AssemblyName.Contains(parm.QueryText));
|
||||||
|
predicate.AndIF(parm.TaskType != null, m => m.TaskType == parm.TaskType);
|
||||||
|
|
||||||
var response = _tasksQzService.GetPages(predicate.ToExpression(), pager, f => f.IsStart, OrderByType.Desc);
|
var response = _tasksQzService.GetPages(predicate.ToExpression(), pager, f => f.IsStart, OrderByType.Desc);
|
||||||
|
|
||||||
@ -94,6 +95,15 @@ namespace ZR.Admin.WebApi.Controllers
|
|||||||
{
|
{
|
||||||
throw new CustomException($"地址不能为空");
|
throw new CustomException($"地址不能为空");
|
||||||
}
|
}
|
||||||
|
if (string.IsNullOrEmpty(parm.SqlText) && parm.TaskType == 3)
|
||||||
|
{
|
||||||
|
throw new CustomException($"sql语句不能为空");
|
||||||
|
}
|
||||||
|
if (parm.SqlText.IfNotEmpty() && parm.TaskType == 3)
|
||||||
|
{
|
||||||
|
parm.AssemblyName = "ZR.Tasks";
|
||||||
|
parm.ClassName = "TaskScheduler.Job_SqlExecute";
|
||||||
|
}
|
||||||
if (parm.TaskType == 1 && (parm.AssemblyName.IsEmpty() || parm.ClassName.IsEmpty()))
|
if (parm.TaskType == 1 && (parm.AssemblyName.IsEmpty() || parm.ClassName.IsEmpty()))
|
||||||
{
|
{
|
||||||
throw new CustomException($"程序集或者类名不能为空");
|
throw new CustomException($"程序集或者类名不能为空");
|
||||||
@ -113,7 +123,7 @@ namespace ZR.Admin.WebApi.Controllers
|
|||||||
[HttpPost("update")]
|
[HttpPost("update")]
|
||||||
[ActionPermissionFilter(Permission = "monitor:job:edit")]
|
[ActionPermissionFilter(Permission = "monitor:job:edit")]
|
||||||
[Log(Title = "修改任务", BusinessType = BusinessType.UPDATE)]
|
[Log(Title = "修改任务", BusinessType = BusinessType.UPDATE)]
|
||||||
public async Task<IActionResult> Update([FromBody] TasksUpdateDto parm)
|
public async Task<IActionResult> Update([FromBody] TasksCreateDto parm)
|
||||||
{
|
{
|
||||||
//判断是否已经存在
|
//判断是否已经存在
|
||||||
if (_tasksQzService.Any(m => m.Name == parm.Name && m.ID != parm.ID))
|
if (_tasksQzService.Any(m => m.Name == parm.Name && m.ID != parm.ID))
|
||||||
@ -138,6 +148,11 @@ namespace ZR.Admin.WebApi.Controllers
|
|||||||
parm.AssemblyName = "ZR.Tasks";
|
parm.AssemblyName = "ZR.Tasks";
|
||||||
parm.ClassName = "TaskScheduler.Job_HttpRequest";
|
parm.ClassName = "TaskScheduler.Job_HttpRequest";
|
||||||
}
|
}
|
||||||
|
if (parm.SqlText.IfNotEmpty() && parm.TaskType == 3)
|
||||||
|
{
|
||||||
|
parm.AssemblyName = "ZR.Tasks";
|
||||||
|
parm.ClassName = "TaskScheduler.Job_SqlExecute";
|
||||||
|
}
|
||||||
if (tasksQz.IsStart)
|
if (tasksQz.IsStart)
|
||||||
{
|
{
|
||||||
throw new CustomException($"该任务正在运行中,请先停止在更新");
|
throw new CustomException($"该任务正在运行中,请先停止在更新");
|
||||||
|
|||||||
@ -14,6 +14,8 @@ namespace ZR.Model.System.Dto
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
[Display(Name = "查询字符串")]
|
[Display(Name = "查询字符串")]
|
||||||
public string QueryText { get; set; }
|
public string QueryText { get; set; }
|
||||||
|
public int? TaskType { get; set; }
|
||||||
|
public int? TriggerType { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -21,6 +23,15 @@ namespace ZR.Model.System.Dto
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class TasksCreateDto
|
public class TasksCreateDto
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 任务id
|
||||||
|
/// 空值 : False
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "任务id")]
|
||||||
|
//[Required(ErrorMessage = "任务不能为空")]
|
||||||
|
public string ID { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 描述 : 任务名称
|
/// 描述 : 任务名称
|
||||||
/// 空值 : False
|
/// 空值 : False
|
||||||
@ -114,120 +125,9 @@ namespace ZR.Model.System.Dto
|
|||||||
public string JobParams { get; set; }
|
public string JobParams { get; set; }
|
||||||
public string ApiUrl { get; set; }
|
public string ApiUrl { get; set; }
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 1、程序集任务 2、apiUrl任务
|
/// 1、程序集任务 2、apiUrl任务 3、SQL语句
|
||||||
/// </summary>
|
|
||||||
public int TaskType { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 更新任务
|
|
||||||
/// </summary>
|
|
||||||
public class TasksUpdateDto
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 描述 : 任务id
|
|
||||||
/// 空值 : False
|
|
||||||
/// 默认 :
|
|
||||||
/// </summary>
|
|
||||||
[Display(Name = "任务id")]
|
|
||||||
[Required(ErrorMessage = "任务不能为空")]
|
|
||||||
public string ID { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 描述 : 任务名称
|
|
||||||
/// 空值 : False
|
|
||||||
/// 默认 :
|
|
||||||
/// </summary>
|
|
||||||
[Display(Name = "任务名称")]
|
|
||||||
[Required(ErrorMessage = "任务名称不能为空")]
|
|
||||||
public string Name { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 描述 : 任务分组
|
|
||||||
/// 空值 : False
|
|
||||||
/// 默认 :
|
|
||||||
/// </summary>
|
|
||||||
[Display(Name = "任务分组")]
|
|
||||||
[Required(ErrorMessage = "任务分组不能为空")]
|
|
||||||
public string JobGroup { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 描述 : 运行时间表达式
|
|
||||||
/// 空值 : False
|
|
||||||
/// 默认 :
|
|
||||||
/// </summary>
|
|
||||||
[Display(Name = "运行时间表达式")]
|
|
||||||
public string Cron { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 描述 : 程序集名称
|
|
||||||
/// 空值 : False
|
|
||||||
/// 默认 :
|
|
||||||
/// </summary>
|
|
||||||
[Display(Name = "程序集名称")]
|
|
||||||
[Required(ErrorMessage = "程序集名称不能为空")]
|
|
||||||
public string AssemblyName { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 描述 : 任务所在类
|
|
||||||
/// 空值 : False
|
|
||||||
/// 默认 :
|
|
||||||
/// </summary>
|
|
||||||
[Display(Name = "任务所在类")]
|
|
||||||
[Required(ErrorMessage = "任务所在类不能为空")]
|
|
||||||
public string ClassName { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 描述 : 任务描述
|
|
||||||
/// 空值 : True
|
|
||||||
/// 默认 :
|
|
||||||
/// </summary>
|
|
||||||
[Display(Name = "任务描述")]
|
|
||||||
public string Remark { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 描述 : 开始时间
|
|
||||||
/// 空值 : True
|
|
||||||
/// 默认 :
|
|
||||||
/// </summary>
|
|
||||||
[Display(Name = "开始时间")]
|
|
||||||
public DateTime? BeginTime { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 描述 : 结束时间
|
|
||||||
/// 空值 : True
|
|
||||||
/// 默认 :
|
|
||||||
/// </summary>
|
|
||||||
[Display(Name = "结束时间")]
|
|
||||||
public DateTime? EndTime { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 描述 : 触发器类型(0、simple 1、cron)
|
|
||||||
/// 空值 : False
|
|
||||||
/// 默认 :
|
|
||||||
/// </summary>
|
|
||||||
[Display(Name = "触发器类型(0、simple 1、cron)")]
|
|
||||||
public int TriggerType { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 描述 : 执行间隔时间(单位:秒)
|
|
||||||
/// 空值 : False
|
|
||||||
/// 默认 : 0
|
|
||||||
/// </summary>
|
|
||||||
[Display(Name = "执行间隔时间(单位:秒)")]
|
|
||||||
public int IntervalSecond { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 描述 : 传入参数
|
|
||||||
/// 空值 : True
|
|
||||||
/// 默认 :
|
|
||||||
/// </summary>
|
|
||||||
[Display(Name = "传入参数")]
|
|
||||||
public string JobParams { get; set; }
|
|
||||||
public string ApiUrl { get; set; }
|
|
||||||
/// <summary>
|
|
||||||
/// 1、程序集任务 2、apiUrl任务
|
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int TaskType { get; set; }
|
public int TaskType { get; set; }
|
||||||
|
public string SqlText { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -161,8 +161,13 @@ namespace ZR.Model.System
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string ApiUrl { get; set; }
|
public string ApiUrl { get; set; }
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 任务类型 1程序集2网络请求
|
/// 任务类型 1、程序集 2、网络请求 3、SQL语句
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int TaskType { get; set; }
|
public int TaskType { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// SQL语句
|
||||||
|
/// </summary>
|
||||||
|
public string SqlText { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -53,6 +53,7 @@ namespace ZR.Service.System
|
|||||||
EndTime = parm.EndTime,
|
EndTime = parm.EndTime,
|
||||||
TaskType = parm.TaskType,
|
TaskType = parm.TaskType,
|
||||||
ApiUrl = parm.ApiUrl,
|
ApiUrl = parm.ApiUrl,
|
||||||
|
SqlText = parm.SqlText,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
45
ZR.Tasks/TaskScheduler/Job_SqlExecute.cs
Normal file
45
ZR.Tasks/TaskScheduler/Job_SqlExecute.cs
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
using Infrastructure;
|
||||||
|
using Infrastructure.Attribute;
|
||||||
|
using Infrastructure.Extensions;
|
||||||
|
using Quartz;
|
||||||
|
using Quartz.Impl;
|
||||||
|
using Quartz.Impl.Triggers;
|
||||||
|
using SqlSugar.IOC;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using ZR.Service.System.IService;
|
||||||
|
|
||||||
|
namespace ZR.Tasks.TaskScheduler
|
||||||
|
{
|
||||||
|
[AppService(ServiceType = typeof(Job_SqlExecute), ServiceLifetime = LifeTime.Scoped)]
|
||||||
|
public class Job_SqlExecute : JobBase, IJob
|
||||||
|
{
|
||||||
|
private readonly ISysTasksQzService tasksQzService;
|
||||||
|
private readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
|
||||||
|
|
||||||
|
public Job_SqlExecute(ISysTasksQzService tasksQzService)
|
||||||
|
{
|
||||||
|
this.tasksQzService = tasksQzService;
|
||||||
|
}
|
||||||
|
public async Task Execute(IJobExecutionContext context)
|
||||||
|
{
|
||||||
|
await ExecuteJob(context, async () => await Run(context));
|
||||||
|
}
|
||||||
|
public async Task Run(IJobExecutionContext context)
|
||||||
|
{
|
||||||
|
AbstractTrigger trigger = (context as JobExecutionContextImpl).Trigger as AbstractTrigger;
|
||||||
|
|
||||||
|
var info = await tasksQzService.GetByIdAsync(trigger.JobName);
|
||||||
|
|
||||||
|
if (info != null && info.SqlText.IsNotEmpty())
|
||||||
|
{
|
||||||
|
var result = DbScoped.SugarScope.Ado.ExecuteCommandWithGo(info.SqlText);
|
||||||
|
logger.Info($"任务【{info.Name}】sql请求执行结果=" + result);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new CustomException($"任务{trigger?.JobName}执行失败,任务不存在");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -28,6 +28,7 @@ CREATE TABLE `sys_tasks` (
|
|||||||
`lastRunTime` datetime(0) NULL DEFAULT NULL COMMENT '最后执行时间',
|
`lastRunTime` datetime(0) NULL DEFAULT NULL COMMENT '最后执行时间',
|
||||||
`apiUrl` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'api执行地址',
|
`apiUrl` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'api执行地址',
|
||||||
`taskType` int(4) NULL DEFAULT 1 COMMENT '任务类型1程序集任务 2网络请求',
|
`taskType` int(4) NULL DEFAULT 1 COMMENT '任务类型1程序集任务 2网络请求',
|
||||||
|
`sqlText` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'SQL语句',
|
||||||
PRIMARY KEY (`ID`) USING BTREE
|
PRIMARY KEY (`ID`) USING BTREE
|
||||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '计划任务' ROW_FORMAT = Dynamic;
|
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '计划任务' ROW_FORMAT = Dynamic;
|
||||||
|
|
||||||
|
|||||||
@ -26,10 +26,11 @@ CREATE TABLE sys_tasks
|
|||||||
update_by varchar(50) NULL DEFAULT NULL , --'更新人编码',
|
update_by varchar(50) NULL DEFAULT NULL , --'更新人编码',
|
||||||
lastRunTime datetime , --最后执行时间
|
lastRunTime datetime , --最后执行时间
|
||||||
taskType int null , --任务类型 1程序集 2网络请求
|
taskType int null , --任务类型 1程序集 2网络请求
|
||||||
apiUrl varchar(200) --网络请求地址
|
apiUrl varchar(200), --网络请求地址
|
||||||
|
sqlText VARCHAR(1000) --sql语句
|
||||||
)
|
)
|
||||||
GO
|
GO
|
||||||
INSERT INTO sys_tasks VALUES ('1410905433996136448', '测试任务', 'SYSTEM', '0 0/10 * * * ? ', 'ZR.Tasks', 'TaskScheduler.Job_SyncTest', NULL, 0, '2021-07-02 18:17:31', '9999-12-31 00:00:00', 1, 1, 1, NULL, '2021-07-02 18:17:23', '2021-07-02 18:17:31', 'admin', NULL, NULL, 1, '');
|
INSERT INTO sys_tasks VALUES ('1410905433996136448', '测试任务', 'SYSTEM', '0 0/10 * * * ? ', 'ZR.Tasks', 'TaskScheduler.Job_SyncTest', NULL, 0, '2021-07-02 18:17:31', '9999-12-31 00:00:00', 1, 1, 1, NULL, '2021-07-02 18:17:23', '2021-07-02 18:17:31', 'admin', NULL, NULL, 1, '', '');
|
||||||
GO
|
GO
|
||||||
if OBJECT_ID(N'sys_tasks_log',N'U') is not NULL DROP TABLE sys_tasks_log
|
if OBJECT_ID(N'sys_tasks_log',N'U') is not NULL DROP TABLE sys_tasks_log
|
||||||
GO
|
GO
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user