diff --git a/DOAN.Tasks/TaskScheduler/Job_Device_Execute.cs b/DOAN.Tasks/TaskScheduler/Job_Device_Execute.cs
new file mode 100644
index 0000000..e2b3794
--- /dev/null
+++ b/DOAN.Tasks/TaskScheduler/Job_Device_Execute.cs
@@ -0,0 +1,53 @@
+using Infrastructure;
+using Infrastructure.Attribute;
+using Microsoft.Extensions.DependencyInjection;
+using Quartz;
+using Quartz.Impl.Triggers;
+using Quartz.Impl;
+using SqlSugar.IOC;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using DOAN.Model.System;
+using DOAN.Model.MES.dev;
+using DOAN.Model.MES.dev.Dto;
+using DOAN.Service.MES.dev.IService;
+
+namespace DOAN.Tasks.TaskScheduler
+{
+ ///
+ /// 设备管理 调度每日的巡检
+ ///
+ [AppService(ServiceType = typeof(Job_Device_Execute), ServiceLifetime = LifeTime.Scoped)]
+ public class Job_Device_Execute : JobBase, IJob
+ {
+ private readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
+
+ private IDeviceTaskExecuteService deviceTaskExecute;
+ public Job_Device_Execute(IDeviceTaskExecuteService deviceTaskExecute)
+ {
+ this.deviceTaskExecute = deviceTaskExecute;
+ }
+ 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.CopyNew().GetByIdAsync(trigger.JobName);
+ // CopyNew 在多线程环境中,为每个线程或任务创建新的 SugarScope 实例以避免线程安全问题
+ var info = await DbScoped.SugarScope.CopyNew().Queryable().FirstAsync(f => f.ID == trigger.JobName);
+ if (info == null)
+ {
+ throw new CustomException($"任务{trigger?.JobName}设备管理调度请求执行失败,任务不存在");
+ }
+
+ int result = deviceTaskExecute.ScanEveryTask();
+ logger.Info($"(job)任务【{info.Name}】设备管理调度请求执行结果=" + result);
+
+ }
+ }
+}