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
{
///
/// AGV状态刷新类
///
public class BaseStateRefreshBusiness
{
private IAGVStateService _AGVStateService;
private IAGVSettingService _aGVSettingService;
private ILogger _logger;
private static BaseStateRefreshBusiness instance;
private AirPorthttpClient _airPorthttpClient;
System.Timers.Timer updateTimer;
public BaseStateRefreshBusiness(ILogger logger, IAGVStateService agvService, AirPorthttpClient airPorthttpClient, IAGVSettingService aGVSettingService)
{
_logger = logger;
_AGVStateService = agvService;
_airPorthttpClient = airPorthttpClient;
_aGVSettingService = aGVSettingService;
updateTimer = new System.Timers.Timer(1000);
updateTimer.Elapsed += async (sender, e) => await TimerUpadteAGVState();
}
public static BaseStateRefreshBusiness GetInstance(ILogger logger, IAGVStateService agvService, AirPorthttpClient airPorthttpClient, IAGVSettingService aGVSettingService)
{
if (instance == null)
{
instance = new BaseStateRefreshBusiness(logger, agvService, airPorthttpClient, aGVSettingService);
}
return instance;
}
///
/// AGV状态查询控制
///
///
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()
{
if (!await UpdateALLAGVStateByResposne())
{
_logger.LogError("AGV状态更新失败");
}
}
///
/// 调用接口更新所有AGV的状态
///
///
public async Task UpdateALLAGVStateByResposne()
{
try
{
var response = _airPorthttpClient.AGVAllStateRequest();
if(response == null)
{
return false;
}
List records = new List();
foreach (var entity in response.Data)
{
AGVState record = new AGVState()
{
agvno = entity.Guid,
agvalarmstate = entity.AgvMoveStatus != 6 ? "正常" : "异常",
agvtype = _aGVSettingService.GetAgvSettingByID(entity.Guid),
agvworkstate = AGVStatusSelect(entity.AgvMoveStatus),
refreshtime = DateTime.Now,
taskno = entity.TaskID,
};
records.Add(record);
}
return await _AGVStateService.UpdateOrAddRecords(records);
}
catch (Exception e)
{
_logger.LogError("AGV状态更新错误 Error:" + e);
return false;
}
}
///
/// AGV运动状态对照
///
///
///
public static string AGVStatusSelect(int no)
{
switch (no)
{
case 0: return "暂无信息";
case 1: return "待机";
case 2: return "执行任务";
case 3: return "充电中";
case 4: return "暂停";
case 5: return "急停";
case 6: return "异常";
case 7: return "建图中";
case 8: return "等待";
case 9: return "调度控制";
case 51: return "同步";
case 52: return "脱机";
default: return "未知代码";
}
}
}
public enum TimerControl
{
Start = 1,
Stop = 2,
Dispose = 3
}
}