using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Options;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Utility.Tools;
using Wms.Tools;
using WMS.BLL.BllSoServer;
using WMS.BLL.BllTransServer;
using WMS.BLL.DataServer;
using WMS.IBLL.IDataServer;
namespace Wms
{
public class DailyTaskService : IHostedService, IDisposable
{
private Timer _timer;
private Timer _timer2;
private Timer _timer3;
private string _wcsUrl;
private string _agvUrl;
private string _agvBindUrl;
private Timer _periodicReport;
public DailyTaskService(string wcsUrl,string agvUrl,string agvBindUrl)
{
_wcsUrl = wcsUrl;
_agvUrl = agvUrl;
_agvBindUrl = agvBindUrl;
}
//创建定时任务
public Task StartAsync(CancellationToken cancellationToken)
{
TimeSpan delay = TimeSpan.FromMinutes(2);
// 创建定时器,并设置回调函数
_timer = new Timer(ExecuteDailyTask, null, delay, TimeSpan.FromMinutes(5));
return Task.CompletedTask;
}
///
/// 在应用程序关闭时被调用,用于执行清理操作和释放资源。在 ASP.NET Core 应用程序中,
/// 当主机关闭时,StopAsync 方法会被调用来停止后台服务,以确保服务能够正确地停止并释放它所占用的资源,比如关闭定时器、释放数据库连接等。
///
///
///
public Task StopAsync(CancellationToken cancellationToken)
{
// 停止定时器
_timer?.Change(Timeout.Infinite, 0);
_periodicReport?.Change(Timeout.Infinite, 0);
return Task.CompletedTask;
}
//执行任务逻辑
private void ExecuteDailyTask(object state)
{
try
{
HopperTransportServer _stockDetail = new HopperTransportServer();
//任务逻辑
_stockDetail.TransferBackTimer(_agvUrl,_agvBindUrl);
}
catch (Exception ex)
{
var logStr = $@".\log\WMS\WMS定时任务" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
LogFile.SaveLogToFile($"WMS定时任务异常:( {ex.Message} ),", logStr);
}
}
///
/// 在服务结束运行时,定时器得到正确地清理和释放
///
public void Dispose()
{
//释放资源
_timer?.Dispose();
_timer2?.Dispose();
_timer3?.Dispose();
_periodicReport?.Dispose();
}
}
}