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 _logger; Connection connection = AppSettings.Configuration.GetSection("Connection").Get(); public SocketClientService _socket { get; set; } private Timer _timer; private readonly IServiceProvider _serviceProvider; public MyBackgroundService(ILogger 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().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().Where(x => x.CreateDate < threshold || x.ModifyDate < threshold).ToList(); var hostLogtime = SqlSugarHelper.DbWMS.Queryable().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().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(); } } }