using Microsoft.Extensions.Logging;
using SlnMesnac.Business.util;
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);
}
}
///
/// Timer刷新方法
///
///
public async Task TimerUpadteAGVState()
{
if (!await UpdateALLAGVStateByResposne())
{
_logger.LogError("AGV状态更新失败");
}
}
///
/// 调用接口更新所有AGV的状态
///
///
public async Task UpdateALLAGVStateByResposne()
{
try
{
var response = _airPorthttpClient.AGVAllStateRequest();
if(response == null)
{
_logger.LogError($"AgvStateResponse返回空值!");
return false;
}
if(response.code == 0 || response.Data == null)
{
_logger.LogError($"返回错误信息:{response.message}");
return false;
}
List records = new List();
foreach (var entity in response.Data)
{
var taskStateRespose = _airPorthttpClient.AGVGetTaskStateDetailRequest(new AGVRequestTaskStateDetailEntity()
{
taskId = entity.TaskID
});
if (taskStateRespose == null)
{
_logger.LogError($"taskStateRespose返回空值!");
return false;
}
if (taskStateRespose.code == 0 || taskStateRespose.Data == null)
{
_logger.LogError($"返回错误信息:{taskStateRespose.message}");
return false;
}
AGVState record = new AGVState()
{
agvno = entity.Guid,
agvalarmstate = entity.AgvMoveStatus != 6 ? "正常" : "异常",
agvtype = _aGVSettingService.GetAgvTypeByAGVGuid(entity.Guid),
agvworkstate = AGVStatusSelect(entity.AgvMoveStatus),
refreshtime = DateTime.Now,
taskno = entity.TaskID,
taskstate = AGVTaskStatusSelect(taskStateRespose.Data.state)
};
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 "未知代码";
}
}
///
/// AGV任务状态代码匹配
///
///
///
public static string AGVTaskStatusSelect(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 "核验中";
default: return "未知代码";
}
}
}
}