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 "未知代码"; } } } }