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 } }