From 31cc8fd2749e920b33d71bd92fe9baf24f8e6232 Mon Sep 17 00:00:00 2001 From: zuohuaijun Date: Sun, 14 Jul 2024 16:42:14 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=98=8E=E8=B0=83=E6=95=B4=E5=AE=9A?= =?UTF-8?q?=E6=97=B6=E4=BB=BB=E5=8A=A1=E6=8C=81=E4=B9=85=E5=8C=96=E7=AD=89?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Job/DbJobPersistence.cs | 94 ++++++++----------- .../Service/Job/JobClusterServer.cs | 2 +- .../Service/Menu/SysMenuService.cs | 2 +- 3 files changed, 42 insertions(+), 56 deletions(-) diff --git a/Admin.NET/Admin.NET.Core/Service/Job/DbJobPersistence.cs b/Admin.NET/Admin.NET.Core/Service/Job/DbJobPersistence.cs index deadcd83..03679de3 100644 --- a/Admin.NET/Admin.NET.Core/Service/Job/DbJobPersistence.cs +++ b/Admin.NET/Admin.NET.Core/Service/Job/DbJobPersistence.cs @@ -42,14 +42,14 @@ public class DbJobPersistence : IJobPersistence var jobBuilder = schedulerBuilder.GetJobBuilder(); // 加载数据库数据 - var dbDetail = await db.Queryable().FirstAsync(u => u.JobId == jobBuilder.JobId); + var dbDetail = await db.Queryable().FirstAsync(u => u.JobId == jobBuilder.JobId, stoppingToken); if (dbDetail == null) continue; // 同步数据库数据 jobBuilder.LoadFrom(dbDetail); // 获取作业的所有数据库的触发器 - var dbTriggers = await db.Queryable().Where(u => u.JobId == jobBuilder.JobId).ToListAsync(); + var dbTriggers = await db.Queryable().Where(u => u.JobId == jobBuilder.JobId).ToListAsync(stoppingToken); // 遍历所有作业触发器 foreach (var (_, triggerBuilder) in schedulerBuilder.GetEnumerable()) { @@ -73,24 +73,16 @@ public class DbJobPersistence : IJobPersistence } // 获取数据库所有通过脚本创建的作业 - var allDbScriptJobs = await db.Queryable().Where(u => u.CreateType != JobCreateTypeEnum.BuiltIn).ToListAsync(); + var allDbScriptJobs = await db.Queryable().Where(u => u.CreateType != JobCreateTypeEnum.BuiltIn).ToListAsync(stoppingToken); foreach (var dbDetail in allDbScriptJobs) { // 动态创建作业 - Type jobType; - switch (dbDetail.CreateType) + Type jobType = dbDetail.CreateType switch { - case JobCreateTypeEnum.Script: - jobType = dynamicJobCompiler.BuildJob(dbDetail.ScriptCode); - break; - - case JobCreateTypeEnum.Http: - jobType = typeof(HttpJob); - break; - - default: - throw new NotSupportedException(); - } + JobCreateTypeEnum.Script => dynamicJobCompiler.BuildJob(dbDetail.ScriptCode), + JobCreateTypeEnum.Http => typeof(HttpJob), + _ => throw new NotSupportedException(), + }; // 动态构建的 jobType 的程序集名称为随机名称,需重新设置 dbDetail.AssemblyName = jobType.Assembly.FullName!.Split(',')[0]; @@ -131,25 +123,23 @@ public class DbJobPersistence : IJobPersistence /// public async Task OnChangedAsync(PersistenceContext context) { - using (var scope = _serviceScopeFactory.CreateScope()) + using var scope = _serviceScopeFactory.CreateScope(); + var db = scope.ServiceProvider.GetRequiredService().CopyNew(); + + var jobDetail = context.JobDetail.Adapt(); + switch (context.Behavior) { - var db = scope.ServiceProvider.GetRequiredService().CopyNew(); + case PersistenceBehavior.Appended: + await db.Insertable(jobDetail).ExecuteCommandAsync(); + break; - var jobDetail = context.JobDetail.Adapt(); - switch (context.Behavior) - { - case PersistenceBehavior.Appended: - await db.Insertable(jobDetail).ExecuteCommandAsync(); - break; + case PersistenceBehavior.Updated: + await db.Updateable(jobDetail).WhereColumns(u => new { u.JobId }).IgnoreColumns(u => new { u.Id, u.CreateType, u.ScriptCode }).ExecuteCommandAsync(); + break; - case PersistenceBehavior.Updated: - await db.Updateable(jobDetail).WhereColumns(u => new { u.JobId }).IgnoreColumns(u => new { u.Id, u.CreateType, u.ScriptCode }).ExecuteCommandAsync(); - break; - - case PersistenceBehavior.Removed: - await db.Deleteable().Where(u => u.JobId == jobDetail.JobId).ExecuteCommandAsync(); - break; - } + case PersistenceBehavior.Removed: + await db.Deleteable().Where(u => u.JobId == jobDetail.JobId).ExecuteCommandAsync(); + break; } } @@ -160,25 +150,23 @@ public class DbJobPersistence : IJobPersistence /// public async Task OnTriggerChangedAsync(PersistenceTriggerContext context) { - using (var scope = _serviceScopeFactory.CreateScope()) + using var scope = _serviceScopeFactory.CreateScope(); + var db = scope.ServiceProvider.GetRequiredService().CopyNew(); + + var jobTrigger = context.Trigger.Adapt(); + switch (context.Behavior) { - var db = scope.ServiceProvider.GetRequiredService().CopyNew(); + case PersistenceBehavior.Appended: + await db.Insertable(jobTrigger).ExecuteCommandAsync(); + break; - var jobTrigger = context.Trigger.Adapt(); - switch (context.Behavior) - { - case PersistenceBehavior.Appended: - await db.Insertable(jobTrigger).ExecuteCommandAsync(); - break; + case PersistenceBehavior.Updated: + await db.Updateable(jobTrigger).WhereColumns(u => new { u.TriggerId, u.JobId }).IgnoreColumns(u => new { u.Id }).ExecuteCommandAsync(); + break; - case PersistenceBehavior.Updated: - await db.Updateable(jobTrigger).WhereColumns(u => new { u.TriggerId, u.JobId }).IgnoreColumns(u => new { u.Id }).ExecuteCommandAsync(); - break; - - case PersistenceBehavior.Removed: - await db.Deleteable().Where(u => u.TriggerId == jobTrigger.TriggerId && u.JobId == jobTrigger.JobId).ExecuteCommandAsync(); - break; - } + case PersistenceBehavior.Removed: + await db.Deleteable().Where(u => u.TriggerId == jobTrigger.TriggerId && u.JobId == jobTrigger.JobId).ExecuteCommandAsync(); + break; } } @@ -189,12 +177,10 @@ public class DbJobPersistence : IJobPersistence /// public async Task OnExecutionRecordAsync(PersistenceExecutionRecordContext context) { - using (var scope = _serviceScopeFactory.CreateScope()) - { - var db = scope.ServiceProvider.GetRequiredService().CopyNew(); + using var scope = _serviceScopeFactory.CreateScope(); + var db = scope.ServiceProvider.GetRequiredService().CopyNew(); - var jobTriggerRecord = context.Timeline.Adapt(); - await db.Insertable(jobTriggerRecord).ExecuteCommandAsync(); - } + var jobTriggerRecord = context.Timeline.Adapt(); + await db.Insertable(jobTriggerRecord).ExecuteCommandAsync(); } } \ No newline at end of file diff --git a/Admin.NET/Admin.NET.Core/Service/Job/JobClusterServer.cs b/Admin.NET/Admin.NET.Core/Service/Job/JobClusterServer.cs index fca54e02..139b2ec6 100644 --- a/Admin.NET/Admin.NET.Core/Service/Job/JobClusterServer.cs +++ b/Admin.NET/Admin.NET.Core/Service/Job/JobClusterServer.cs @@ -1,4 +1,4 @@ -// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。 +// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。 // // 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。 // diff --git a/Admin.NET/Admin.NET.Core/Service/Menu/SysMenuService.cs b/Admin.NET/Admin.NET.Core/Service/Menu/SysMenuService.cs index 4349ef44..dcf3849e 100644 --- a/Admin.NET/Admin.NET.Core/Service/Menu/SysMenuService.cs +++ b/Admin.NET/Admin.NET.Core/Service/Menu/SysMenuService.cs @@ -59,7 +59,7 @@ public class SysMenuService : IDynamicApiController, ITransient /// /// 删除登录菜单树里面的按钮 /// - private void DeleteBtnFromMenuTree(List menuList) + private static void DeleteBtnFromMenuTree(List menuList) { if (menuList == null) return; for (var i = menuList.Count - 1; i >= 0; i--)