change - 添加定时执行任务

master
wenjy 1 month ago
parent 408beda7db
commit 5247950e91

@ -85,7 +85,7 @@ namespace SlnMesnac.Business
while (isFlag) while (isFlag)
{ {
_log.Info($"自动模式初始化成功"); _log.Info($"自动模式初始化成功");
this.AutoModelEvent(null, null); this.AutoModelEvent();
if (isFlag) if (isFlag)
{ {
@ -128,7 +128,7 @@ namespace SlnMesnac.Business
/// <summary> /// <summary>
/// 自动巡检 /// 自动巡检
/// </summary> /// </summary>
private void AutoModelEvent(object source, System.Timers.ElapsedEventArgs e) public void AutoModelEvent()
{ {
try try
{ {

@ -111,7 +111,7 @@ namespace SlnMesnac.Business
_log.Info($"巡检模式关闭成功"); _log.Info($"巡检模式关闭成功");
} }
private void InspModeEvent() public void InspModeEvent()
{ {
try try
{ {

@ -0,0 +1,31 @@
using Quartz;
using SlnMesnac.Business;
using SlnMesnac.Serilog;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
namespace SlnMesnac.Quartz.Job
{
public class AutoModeJob : IJob
{
public readonly SerilogHelper _logger;
public readonly AutoModeBusiness _autoModeBusiness;
public AutoModeJob(SerilogHelper logger, AutoModeBusiness autoModeBusiness)
{
_logger = logger;
_autoModeBusiness = autoModeBusiness;
}
public Task Execute(IJobExecutionContext context)
{
_logger.Info($"执行自动巡检任务:{DateTime.Now.ToString("HH:mm:ss")}");
_autoModeBusiness.AutoModelEvent();
return Task.CompletedTask;
}
}
}

@ -0,0 +1,29 @@
using Quartz;
using SlnMesnac.Business;
using SlnMesnac.Serilog;
using System;
using System.Threading.Tasks;
namespace SlnMesnac.Quartz.Job
{
public class InspModeJob : IJob
{
public readonly SerilogHelper _logger;
public readonly InspModeBusiness _inspModeBusiness;
public InspModeJob(SerilogHelper logger, InspModeBusiness inspModeBusiness)
{
_logger = logger;
_inspModeBusiness = inspModeBusiness;
}
public Task Execute(IJobExecutionContext context)
{
_logger.Info($"执行快速巡检任务:{DateTime.Now.ToString("HH:mm:ss")}");
_inspModeBusiness.InspModeEvent();
return Task.CompletedTask;
}
}
}

@ -2,6 +2,7 @@
using Quartz; using Quartz;
using SlnMesnac.Quartz.Job; using SlnMesnac.Quartz.Job;
using System; using System;
using System.Threading;
#region << 版 本 注 释 >> #region << 版 本 注 释 >>
/*-------------------------------------------------------------------- /*--------------------------------------------------------------------
@ -36,18 +37,31 @@ namespace SlnMesnac.Quartz
{ {
q.UseMicrosoftDependencyInjectionJobFactory(); q.UseMicrosoftDependencyInjectionJobFactory();
q.ScheduleJob<MyJob>(trigger => q.ScheduleJob<AutoModeJob>(trigger =>
trigger.WithCronSchedule("*/3 * * * * ?").WithIdentity("MyJob", "MyJobGroup") // 示例每3s执行一次 trigger.WithCronSchedule("0 0 * * * ? *").WithIdentity("AutoModeJob", "AutoModeJobGroup")
); );
//q.ScheduleJob<Job2>(trigger => q.ScheduleJob<InspModeJob>(trigger =>
// trigger.WithCronSchedule("*/5 * * * * ?").WithIdentity("Job2", "Job2Group") // 示例每5s执行一次 trigger.WithCronSchedule("0 0 * * * ? *").WithIdentity("InspModeJob", "InspModeJobGroup")
//); );
//q.SetProperty("quartz.scheduler.instanceName", "MyScheduler");
//q.SetProperty("quartz.scheduler.instanceId", "Auto");
//q.SetProperty("quartz.scheduler.startSchedulerOnStart", "false");
}); });
services.AddQuartzHostedService(options => options.WaitForJobsToComplete = true); services.AddQuartzHostedService(options =>
{
options.StartDelay = Timeout.InfiniteTimeSpan;
options.WaitForJobsToComplete = true;
});
services.AddSingleton<IScheduler>(provider => provider.GetRequiredService<ISchedulerFactory>().GetScheduler().Result); services.AddSingleton<IScheduler>(provider => {
var provide = provider.GetRequiredService<ISchedulerFactory>().GetScheduler().Result;
provide.PauseAll();
return provide;
});
} }
} }

@ -11,6 +11,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\SlnMesnac.Business\SlnMesnac.Business.csproj" />
<ProjectReference Include="..\SlnMesnac.Serilog\SlnMesnac.Serilog.csproj" /> <ProjectReference Include="..\SlnMesnac.Serilog\SlnMesnac.Serilog.csproj" />
</ItemGroup> </ItemGroup>

@ -41,7 +41,7 @@ namespace SlnMesnac.WPF
//注册PLC工厂 //注册PLC工厂
services.AddPlcFactorySetup(); services.AddPlcFactorySetup();
//services.AddQuartzSetUp(); services.AddQuartzSetUp();
} }
/// <summary> /// <summary>

@ -3,6 +3,7 @@ using CommunityToolkit.Mvvm.Input;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
using NVelocity.Util.Introspection; using NVelocity.Util.Introspection;
using Quartz;
using SlnMesnac.Business; using SlnMesnac.Business;
using SlnMesnac.Business.@base; using SlnMesnac.Business.@base;
using SlnMesnac.Config; using SlnMesnac.Config;
@ -70,6 +71,8 @@ namespace SlnMesnac.WPF.ViewModel
//private const string DVRUserName = "admin"; //设备登录用户名 User name to login //private const string DVRUserName = "admin"; //设备登录用户名 User name to login
//private const string DVRPassword = "haiwei@2024"; //设备登录密码 Password to login //private const string DVRPassword = "haiwei@2024"; //设备登录密码 Password to login
private readonly IScheduler _scheduler;
public IndexControlViewModel() public IndexControlViewModel()
{ {
try try
@ -84,6 +87,8 @@ namespace SlnMesnac.WPF.ViewModel
webSocketBusiness = App.ServiceProvider.GetService<WebSocketBusiness>(); webSocketBusiness = App.ServiceProvider.GetService<WebSocketBusiness>();
cabinetInfoBusiness = App.ServiceProvider.GetService<CabinetInfoBusiness>(); cabinetInfoBusiness = App.ServiceProvider.GetService<CabinetInfoBusiness>();
_scheduler = App.ServiceProvider.GetService<IScheduler>();
autoModeBusiness.CaptureAlarmPictureEvent += CapturePicture; autoModeBusiness.CaptureAlarmPictureEvent += CapturePicture;
autoModeBusiness.GimbaRotationControlEvent += GimbaRotationControl; autoModeBusiness.GimbaRotationControlEvent += GimbaRotationControl;
@ -663,17 +668,24 @@ namespace SlnMesnac.WPF.ViewModel
/// <summary> /// <summary>
/// 开启自动模式 /// 开启自动模式
/// </summary> /// </summary>
public void Start_AutoMode() public async void Start_AutoMode()
{ {
autoModeBusiness.Start(); //autoModeBusiness.Start();
if (!_scheduler.IsStarted)
{
await _scheduler.Start();
}
var myJobKey = new JobKey("AutoModeJob", "AutoModeJobGroup");
await _scheduler.ResumeJob(myJobKey);
} }
/// <summary> /// <summary>
/// 关闭自动模式 /// 关闭自动模式
/// </summary> /// </summary>
public void Stop_AutoMode() public async void Stop_AutoMode()
{ {
autoModeBusiness.Stop(); var myJobKey = new JobKey("AutoModeJob", "AutoModeJobGroup");
await _scheduler.PauseJob(myJobKey);
autoModeBusiness.ClearPlcMode(); autoModeBusiness.ClearPlcMode();
} }
@ -681,20 +693,28 @@ namespace SlnMesnac.WPF.ViewModel
/// <summary> /// <summary>
/// 开启巡检模式 /// 开启巡检模式
/// </summary> /// </summary>
public void Start_InspMode() public async void Start_InspMode()
{ {
string taskCode = DateTime.Now.ToString("yyyyMMddHHmmssffff"); //string taskCode = DateTime.Now.ToString("yyyyMMddHHmmssffff");
string fileName = $"{taskCode}.mp4"; //string fileName = $"{taskCode}.mp4";
inspModeBusiness.Start(taskCode, fileName); //inspModeBusiness.Start(taskCode, fileName);
if (!_scheduler.IsStarted)
{
await _scheduler.Start();
}
var myJobKey = new JobKey("InspModeJob", "InspModeJobGroup");
await _scheduler.ResumeJob(myJobKey);
} }
/// <summary> /// <summary>
/// 关闭巡检模式 /// 关闭巡检模式
/// </summary> /// </summary>
public void Stop_InspMode() public async void Stop_InspMode()
{ {
inspModeBusiness.Stop(); var myJobKey = new JobKey("InspModeJob", "InspModeJobGroup");
await _scheduler.PauseJob(myJobKey);
autoModeBusiness.ClearPlcMode(); autoModeBusiness.ClearPlcMode();
} }

@ -29,8 +29,8 @@
{ {
"configId": 1, "configId": 1,
"plcType": "SiemensPlc", "plcType": "SiemensPlc",
//"plcIp": "127.0.0.1", "plcIp": "127.0.0.1",
"plcIp": "192.168.2.1", //"plcIp": "192.168.2.1",
"plcPort": 102, "plcPort": 102,
"plcKey": "iot", "plcKey": "iot",
"isFlage": "true" "isFlage": "true"

Loading…
Cancel
Save