using Masuit.Tools;
|
using Microsoft.Extensions.Hosting;
|
using Microsoft.Extensions.Logging;
|
using System.Net.Sockets;
|
using System.Net;
|
using System.Text;
|
using WIDESEA_Cache;
|
using WIDESEA_Core.Const;
|
using WIDESEA_DTO.WMS;
|
using WIDESEA_IServices;
|
using WIDESEAWCS_BasicInfoRepository;
|
using OfficeOpenXml.FormulaParsing.Excel.Functions.Numeric;
|
using WIDESEA_StorageSocketServices;
|
using WIDESEA_IStorageSocketServices;
|
using Microsoft.Extensions.Configuration;
|
using WIDESEA_Repository;
|
using Microsoft.Extensions.DependencyInjection;
|
|
namespace WIDESEA_StorageTaskServices
|
{
|
public class MyBackgroundService : BackgroundService, IDisposable
|
{
|
private readonly ILogger<MyBackgroundService> _logger;
|
Connection connection = AppSettings.Configuration.GetSection("Connection").Get<Connection>();
|
public SocketClientService _socket { get; set; }
|
|
private Timer _timer;
|
|
private readonly IServiceProvider _serviceProvider;
|
|
public MyBackgroundService(ILogger<MyBackgroundService> logger, SocketClientService socketClientService, IServiceProvider serviceProvider)
|
{
|
_logger = logger;
|
_socket = socketClientService;
|
_serviceProvider = serviceProvider;
|
}
|
|
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
{
|
while (!stoppingToken.IsCancellationRequested)
|
{
|
// 为每次任务创建新作用域
|
using (var scope = _serviceProvider.CreateScope())
|
{
|
DateTime timeHandLe = DateTime.Now.AddMinutes(-15);
|
if (!_socket.Socketonline())
|
{
|
if (_socket.Time < timeHandLe)
|
{
|
_socket.Time = DateTime.Now;
|
_socket.AddErrorMessage("2000", "Host", "");
|
}
|
_socket.ConnectServer(connection.IP, connection.Port);
|
}
|
|
var hostAll = await SqlSugarHelper.DbWMS.Queryable<Dt_HostLog>().Where(x => true).ToListAsync();
|
|
if (hostAll.Count != 0)
|
{
|
DateTime threshold = DateTime.Now.AddSeconds(-30);
|
DateTime time = DateTime.Now.AddMinutes(-5);
|
DateTime Y = DateTime.Now.AddMinutes(-3);
|
|
var Reissue = hostAll.Where(x => x.CreateDate < threshold || x.ModifyDate < threshold).ToList();
|
|
var hostLogtime = hostAll.Where(x => x.CreateDate < time || x.ModifyDate < time).ToList();
|
|
var Heart = hostAll.Where(x => x.CreateDate < Y || x.ModifyDate < Y && x.CommandID == 910).FirstOrDefault();
|
|
if (Heart != null)
|
{
|
Heart.CreateDate = DateTime.Now;
|
await SqlSugarHelper.DbWMS.Updateable(Heart).ExecuteCommandAsync();
|
|
_socket.AddErrorMessage("2000", "Host", "");
|
_socket.HandleDisconnection();
|
}
|
if (hostLogtime.Count > 0)
|
{
|
await SqlSugarHelper.DbWMS.Updateable(hostLogtime).ExecuteCommandAsync();
|
}
|
foreach (var item in Reissue)
|
{
|
_socket.clientSend(_socket.MakeStringToByteMsg(item.Messgae));
|
Thread.Sleep(1000);
|
}
|
}
|
}
|
|
await Task.Delay(TimeSpan.FromMinutes(1), stoppingToken);
|
}
|
}
|
|
public Task StartAsync(CancellationToken cancellationToken = default)
|
{
|
//TimeSpan.FromMinutes(5)
|
//_timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromMinutes(1));
|
|
return Task.CompletedTask;
|
}
|
|
|
private void DoWork(object state)
|
{
|
DateTime timeHandLe = DateTime.Now.AddMinutes(-15);
|
if (!_socket.Socketonline())
|
{
|
if (_socket.Time < timeHandLe)
|
{
|
_socket.Time = DateTime.Now;
|
_socket.AddErrorMessage("2000", "Host", "");
|
}
|
_socket.ConnectServer(connection.IP, connection.Port);
|
}
|
DateTime threshold = DateTime.Now.AddSeconds(-30);
|
DateTime time = DateTime.Now.AddMinutes(-2);
|
DateTime Y = DateTime.Now.AddMinutes(-3);
|
|
|
//var hostLog = _hostLogRepository.QueryData(x => x.CreateDate < threshold || x.ModifyDate < threshold).ToList();
|
var hostLog = SqlSugarHelper.DbWMS.Queryable<Dt_HostLog>().Where(x => x.CreateDate < threshold || x.ModifyDate < threshold).ToList();
|
var hostLogtime = SqlSugarHelper.DbWMS.Queryable<Dt_HostLog>().Where(x => x.CreateDate < time || x.ModifyDate < time).ToList();
|
//var hostLogtime = _hostLogRepository.QueryData(x => x.CreateDate < time || x.ModifyDate < time).ToList();
|
|
var Heart = SqlSugarHelper.DbWMS.Queryable<Dt_HostLog>().Where(x => x.CreateDate < Y || x.ModifyDate < Y && x.CommandID == 910).First();
|
|
//var Heart = _hostLogRepository.QueryFirst(x => x.CreateDate < Y || x.ModifyDate < Y && x.CommandID == 910);
|
if (Heart != null)
|
{
|
Heart.CreateDate = DateTime.Now;
|
SqlSugarHelper.DbWMS.Updateable(Heart).ExecuteCommand();
|
|
_socket.AddErrorMessage("2000", "Host", "");
|
_socket.HandleDisconnection();
|
return;
|
}
|
if (hostLogtime.Count > 0)
|
{
|
SqlSugarHelper.DbWMS.Updateable(hostLogtime).ExecuteCommand();
|
//_hostLogRepository.DeleteData(hostLogtime);
|
}
|
foreach (var item in hostLog)
|
{
|
_socket.clientSend(_socket.MakeStringToByteMsg(item.Messgae));
|
Thread.Sleep(1000);
|
}
|
}
|
|
public Task StopAsync(CancellationToken cancellationToken)
|
{
|
_logger.LogInformation("MyBackgroundService is stopping.");
|
_timer?.Change(Timeout.Infinite, 0);
|
return Task.CompletedTask;
|
}
|
|
public void Dispose()
|
{
|
_timer?.Dispose();
|
}
|
}
|
}
|