任务新增执行SQL脚本

This commit is contained in:
不做码农 2022-12-01 17:01:41 +08:00
parent 38d0de26e9
commit c3b7aa9b00
7 changed files with 86 additions and 118 deletions

View File

@ -42,7 +42,7 @@ namespace ZR.Admin.WebApi.Controllers
/// <returns></returns>
[HttpGet("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>();
@ -51,6 +51,7 @@ namespace ZR.Admin.WebApi.Controllers
m => m.Name.Contains(parm.QueryText) ||
m.JobGroup.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);
@ -94,6 +95,15 @@ namespace ZR.Admin.WebApi.Controllers
{
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()))
{
throw new CustomException($"程序集或者类名不能为空");
@ -113,7 +123,7 @@ namespace ZR.Admin.WebApi.Controllers
[HttpPost("update")]
[ActionPermissionFilter(Permission = "monitor:job:edit")]
[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))
@ -138,6 +148,11 @@ namespace ZR.Admin.WebApi.Controllers
parm.AssemblyName = "ZR.Tasks";
parm.ClassName = "TaskScheduler.Job_HttpRequest";
}
if (parm.SqlText.IfNotEmpty() && parm.TaskType == 3)
{
parm.AssemblyName = "ZR.Tasks";
parm.ClassName = "TaskScheduler.Job_SqlExecute";
}
if (tasksQz.IsStart)
{
throw new CustomException($"该任务正在运行中,请先停止在更新");

View File

@ -14,6 +14,8 @@ namespace ZR.Model.System.Dto
/// </summary>
[Display(Name = "查询字符串")]
public string QueryText { get; set; }
public int? TaskType { get; set; }
public int? TriggerType { get; set; }
}
/// <summary>
@ -21,6 +23,15 @@ namespace ZR.Model.System.Dto
/// </summary>
public class TasksCreateDto
{
/// <summary>
/// 描述 : 任务id
/// 空值 : False
/// 默认 :
/// </summary>
[Display(Name = "任务id")]
//[Required(ErrorMessage = "任务不能为空")]
public string ID { get; set; }
/// <summary>
/// 描述 : 任务名称
/// 空值 : False
@ -114,120 +125,9 @@ namespace ZR.Model.System.Dto
public string JobParams { get; set; }
public string ApiUrl { get; set; }
/// <summary>
/// 1、程序集任务 2、apiUrl任务
/// </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任务
/// 1、程序集任务 2、apiUrl任务 3、SQL语句
/// </summary>
public int TaskType { get; set; }
public string SqlText { get; set; }
}
}

View File

@ -161,8 +161,13 @@ namespace ZR.Model.System
/// </summary>
public string ApiUrl { get; set; }
/// <summary>
/// 任务类型 1程序集2网络请求
/// 任务类型 1程序集 2网络请求 3、SQL语句
/// </summary>
public int TaskType { get; set; }
/// <summary>
/// SQL语句
/// </summary>
public string SqlText { get; set; }
}
}

View File

@ -53,6 +53,7 @@ namespace ZR.Service.System
EndTime = parm.EndTime,
TaskType = parm.TaskType,
ApiUrl = parm.ApiUrl,
SqlText = parm.SqlText,
});
}
}

View 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}执行失败,任务不存在");
}
}
}
}

View File

@ -28,6 +28,7 @@ CREATE TABLE `sys_tasks` (
`lastRunTime` datetime(0) NULL DEFAULT NULL COMMENT '最后执行时间',
`apiUrl` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'api执行地址',
`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
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '计划任务' ROW_FORMAT = Dynamic;

View File

@ -26,10 +26,11 @@ CREATE TABLE sys_tasks
update_by varchar(50) NULL DEFAULT NULL , --'更新人编码',
lastRunTime datetime , --
taskType int null , -- 1 2
apiUrl varchar(200) --
apiUrl varchar(200), --
sqlText VARCHAR(1000) --sql语句
)
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
if OBJECT_ID(N'sys_tasks_log',N'U') is not NULL DROP TABLE sys_tasks_log
GO