Procházet zdrojové kódy

😎优化定时任务持久化及升级Furion v4.9.2.37

zuohuaijun před 1 rokem
rodič
revize
bab80a4b8e

+ 3 - 3
Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj

@@ -20,9 +20,9 @@
     <PackageReference Include="AspNet.Security.OAuth.Weixin" Version="6.0.15" />
     <PackageReference Include="AspNetCoreRateLimit" Version="5.0.0" />
     <PackageReference Include="Elastic.Clients.Elasticsearch" Version="8.13.12" />
-    <PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.2.36" />
-    <PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.2.36" />
-    <PackageReference Include="Furion.Pure" Version="4.9.2.36" />
+    <PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.2.37" />
+    <PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.2.37" />
+    <PackageReference Include="Furion.Pure" Version="4.9.2.37" />
     <PackageReference Include="IPTools.China" Version="1.6.0" />
     <PackageReference Include="IPTools.International" Version="1.6.0" />
     <PackageReference Include="Lazy.Captcha.Core" Version="2.0.6" />

+ 6 - 7
Admin.NET/Admin.NET.Core/Service/Job/DbJobPersistence.cs

@@ -27,14 +27,13 @@ public class DbJobPersistence : IJobPersistence
     public async Task<IEnumerable<SchedulerBuilder>> PreloadAsync(CancellationToken stoppingToken)
     {
         using var scope = _serviceScopeFactory.CreateScope();
-        var jobDetailRep = scope.ServiceProvider.GetRequiredService<SqlSugarRepository<SysJobDetail>>();
-        var jobTriggerRep = scope.ServiceProvider.GetRequiredService<SqlSugarRepository<SysJobTrigger>>();
+        var db = scope.ServiceProvider.GetRequiredService<ISqlSugarClient>();
         var dynamicJobCompiler = scope.ServiceProvider.GetRequiredService<DynamicJobCompiler>();
 
         // 获取所有定义的作业
         var allJobs = App.EffectiveTypes.ScanToBuilders().ToList();
         // 若数据库不存在任何作业,则直接返回
-        if (!jobDetailRep.IsAny(u => true)) return allJobs;
+        if (!db.Queryable<SysJobDetail>().Any(u => true)) return allJobs;
 
         // 遍历所有定义的作业
         foreach (var schedulerBuilder in allJobs)
@@ -43,14 +42,14 @@ public class DbJobPersistence : IJobPersistence
             var jobBuilder = schedulerBuilder.GetJobBuilder();
 
             // 加载数据库数据
-            var dbDetail = await jobDetailRep.GetFirstAsync(u => u.JobId == jobBuilder.JobId);
+            var dbDetail = await db.Queryable<SysJobDetail>().FirstAsync(u => u.JobId == jobBuilder.JobId);
             if (dbDetail == null) continue;
 
             // 同步数据库数据
             jobBuilder.LoadFrom(dbDetail);
 
             // 获取作业的所有数据库的触发器
-            var dbTriggers = await jobTriggerRep.GetListAsync(u => u.JobId == jobBuilder.JobId);
+            var dbTriggers = await db.Queryable<SysJobTrigger>().Where(u => u.JobId == jobBuilder.JobId).ToListAsync();
             // 遍历所有作业触发器
             foreach (var (_, triggerBuilder) in schedulerBuilder.GetEnumerable())
             {
@@ -74,7 +73,7 @@ public class DbJobPersistence : IJobPersistence
         }
 
         // 获取数据库所有通过脚本创建的作业
-        var allDbScriptJobs = await jobDetailRep.GetListAsync(u => u.CreateType != JobCreateTypeEnum.BuiltIn);
+        var allDbScriptJobs = await db.Queryable<SysJobDetail>().Where(u => u.CreateType != JobCreateTypeEnum.BuiltIn).ToListAsync();
         foreach (var dbDetail in allDbScriptJobs)
         {
             // 动态创建作业
@@ -101,7 +100,7 @@ public class DbJobPersistence : IJobPersistence
             jobBuilder.SetIncludeAnnotations(false);
 
             // 获取作业的所有数据库的触发器加入到作业中
-            var dbTriggers = await jobTriggerRep.GetListAsync(u => u.JobId == jobBuilder.JobId);
+            var dbTriggers = await db.Queryable<SysJobTrigger>().Where(u => u.JobId == jobBuilder.JobId).ToListAsync();
             var triggerBuilders = dbTriggers.Select(u => TriggerBuilder.Create(u.TriggerId).LoadFrom(u).Updated());
             var schedulerBuilder = SchedulerBuilder.Create(jobBuilder, triggerBuilders.ToArray());
 

+ 7 - 15
Admin.NET/Admin.NET.Core/Service/Job/JobMonitor.cs

@@ -9,7 +9,7 @@ namespace Admin.NET.Core.Service;
 /// <summary>
 /// 作业执行监视器
 /// </summary>
-public class JobMonitor : IJobMonitor, IDisposable
+public class JobMonitor : IJobMonitor
 {
     private readonly IEventPublisher _eventPublisher;
     private readonly IServiceScope _serviceScope;
@@ -22,26 +22,18 @@ public class JobMonitor : IJobMonitor, IDisposable
         _eventPublisher = _serviceScope.ServiceProvider.GetRequiredService<IEventPublisher>(); ;
     }
 
+    public Task OnExecutingAsync(JobExecutingContext context, CancellationToken stoppingToken)
+    {
+        return Task.CompletedTask;
+    }
+
     public async Task OnExecutedAsync(JobExecutedContext context, CancellationToken stoppingToken)
     {
         // 将异常作业发送到邮件
         if (await _sysConfigService.GetConfigValue<bool>(CommonConst.SysErrorMail) && context.Exception != null)
         {
-            var errorInfo = $"【{context.Trigger.Description}】出现错误:{context.Exception.InnerException}";
+            var errorInfo = $"【{context.Trigger.Description}】定时任务错误:{context.Exception.InnerException}";
             await _eventPublisher.PublishAsync(CommonConst.SendErrorMail, errorInfo);
         }
     }
-
-    public Task OnExecutingAsync(JobExecutingContext context, CancellationToken stoppingToken)
-    {
-        return Task.CompletedTask;
-    }
-
-    /// <summary>
-    /// 释放服务作用域
-    /// </summary>
-    public void Dispose()
-    {
-        _serviceScope.Dispose();
-    }
 }

+ 1 - 1
Admin.NET/Plugins/Admin.NET.Plugin.ReZero/Admin.NET.Plugin.ReZero.csproj

@@ -24,7 +24,7 @@
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="Rezero.Api" Version="1.0.39" />
+    <PackageReference Include="Rezero.Api" Version="1.0.40" />
   </ItemGroup>  
 
   <ItemGroup>

+ 4 - 4
Web/src/views/approvalFlow/index.vue

@@ -41,18 +41,18 @@
 			<el-table :data="state.tableData" style="width: 100%" v-loading="state.loading" row-key="id" border="">
 				<el-table-column type="index" label="序号" width="55" align="center" />
 				<el-table-column prop="code" label="编号" width="140" show-overflow-tooltip="" />
-				<el-table-column prop="name" label="名称" width="120" show-overflow-tooltip="" />
-				<el-table-column prop="formJson" label="表单" align="center" width="120" show-overflow-tooltip="">
+				<el-table-column prop="name" label="名称" show-overflow-tooltip="" />
+				<el-table-column prop="formJson" label="表单" align="center" show-overflow-tooltip="">
 					<template #default="scope">
 						<el-button icon="ele-Edit" size="small" text="" type="primary" @click="openEditFormDialog(scope.row)"> 表单 </el-button>
 					</template>
 				</el-table-column>
-				<el-table-column prop="flowJson" label="流程" align="center" width="120" show-overflow-tooltip="">
+				<el-table-column prop="flowJson" label="流程" align="center" show-overflow-tooltip="">
 					<template #default="scope">
 						<el-button icon="ele-Edit" size="small" text="" type="primary" @click="openEditFlowDialog(scope.row)"> 流程 </el-button>
 					</template>
 				</el-table-column>
-				<el-table-column label="修改记录" align="center" show-overflow-tooltip>
+				<el-table-column label="修改记录" width="100" align="center" show-overflow-tooltip>
 					<template #default="scope">
 						<ModifyRecord :data="scope.row" />
 					</template>