You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

127 lines
4.2 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using Microsoft.Extensions.Logging;
using SlnMesnac.Model.AirportApiEntity;
using SlnMesnac.Repository;
using SlnMesnac.Repository.service;
using SlnMesnac.TouchSocket;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
namespace SlnMesnac.Business.@base
{
public class BaseStateRefreshBusiness
{
private IAGVStateService _AGVStateService;
private IAGVSettingService _aGVSettingService;
private ILogger<BaseStateRefreshBusiness> _logger;
private static BaseStateRefreshBusiness instance;
private AirPorthttpClient _airPorthttpClient;
System.Timers.Timer updateTimer;
public BaseStateRefreshBusiness(ILogger<BaseStateRefreshBusiness> logger, IAGVStateService agvService, AirPorthttpClient airPorthttpClient, IAGVSettingService aGVSettingService)
{
_logger = logger;
_AGVStateService = agvService;
_airPorthttpClient = airPorthttpClient;
_aGVSettingService = aGVSettingService;
updateTimer = new System.Timers.Timer(2000);
updateTimer.Elapsed += async (sender, e) => await TimerUpadteAGVState();
}
public static BaseStateRefreshBusiness GetInstance(ILogger<BaseStateRefreshBusiness> logger, IAGVStateService agvService, AirPorthttpClient airPorthttpClient, IAGVSettingService aGVSettingService)
{
if (instance == null)
{
instance = new BaseStateRefreshBusiness(logger, agvService, airPorthttpClient, aGVSettingService);
}
return instance;
}
/// <summary>
/// AGV状态查询控制
/// </summary>
/// <param name="state"></param>
public void AGVStateUpdateTimerOperation(TimerControl state)
{
try
{
switch (state)
{
case TimerControl.Start:
updateTimer.Start();
break;
case TimerControl.Stop:
updateTimer.Stop();
break;
case TimerControl.Dispose:
updateTimer.Dispose();
break;
default:
_logger.LogError("未知状态");
break;
}
}
catch (Exception ex)
{
_logger.LogError("AGV状态操作失败" + ex.Message);
}
}
public async Task TimerUpadteAGVState()
{
bool result;
result = await UpdateALLAGVStateByResposne();
if (!result)
{
_logger.LogError("AGV状态更新失败");
}
}
/// <summary>
/// 调用接口更新所有AGV的状态
/// </summary>
/// <returns></returns>
public async Task<bool> UpdateALLAGVStateByResposne()
{
try
{
var response = _airPorthttpClient.AGVAllStateRequest();
if(response == null)
{
return false;
}
List<AGVState> records = new List<AGVState>();
foreach (var entity in response.Data)
{
AGVState record = new AGVState()
{
agvno = entity.Guid,
agvalarmstate = entity.AgvMoveStatus != 6 ? "正常" : "异常",
agvtype = _aGVSettingService.GetAgvSettingByID(entity.Guid),
agvworkstate = entity.AgvMoveStatus == 1 ? "空闲" : "忙碌",
refreshtime = DateTime.Now,
taskno = entity.TaskID,
};
records.Add(record);
}
return await _AGVStateService.UpdateOrAddRecords(records);
}
catch (Exception e)
{
_logger.LogError("AGV状态更新错误 Error:" + e);
return false;
}
}
}
public enum TimerControl
{
Start = 1,
Stop = 2,
Dispose = 3
}
}