using Microsoft.Extensions.Logging; using SlnMesnac.Repository.service; using System; using System.Collections.Generic; using SlnMesnac.Repository; using SlnMesnac.Repository.service.Impl; using TouchSocket.Sockets; using SlnMesnac.Model.domain; using SlnMesnac.TouchSocket; using System.Timers; namespace SlnMesnac.Business.@base { public class BaseTaskInfoBusiness { public Action _Taskaction; private static BaseTaskInfoBusiness instance; private ILogger _logger; private IAirportTaskService _Taskservice; private IAGVStateService _AGVStateService; public BaseTaskInfoBusiness(ILogger logger, IAirportTaskService Taskservice, IAGVStateService agvService) { _logger = logger; _Taskservice = Taskservice; _AGVStateService = agvService; InitClearTimer(); } public static BaseTaskInfoBusiness GetInstance(ILogger logger, IAirportTaskService Taskservice, IAGVStateService agvService) { if (instance == null) { instance = new BaseTaskInfoBusiness(logger, Taskservice,agvService); } return instance; } private void InitClearTimer() { System.Timers.Timer timer = new System.Timers.Timer { Interval = 1000, // 每天执行一次 AutoReset = false, }; timer.Elapsed += GetAGVTaskInfo; timer.Start(); } /// /// 获取任务列表 /// private void GetAGVTaskInfo(object source, ElapsedEventArgs e) { try { List Task = _Taskservice.GetAGVTaskInfos(); if (Task.Count > 0 && Task != null) { foreach (var TaskItem in Task) { _logger.LogInformation($"获取任务信息列表"); //查询AGV设备状态及AMR设备状态 //这里要看AGV是否会立刻更新状态 List State = GetAgvState(); if (State != null && State.Count > 0) { foreach (var AgvItem in State) { //根据规则筛选最优AGV if (AgvItem.agvworkstate == "任务空闲") { _logger.LogInformation($"获取空闲AGV列表"); //调用派发任务接口,向任务状态为任务空闲的AGV派发任务 AgvItem.taskno = TaskItem.taskno; AgvItem.agvworkstate = "任务执行中"; AgvItem.refreshtime = DateTime.Now; _AGVStateService.UpdateAsync(AgvItem); //更新任务信息表状态为执行中 TaskItem.agvno = AgvItem.agvno; TaskItem.taskstate = "执行中"; _Taskservice.UpdateAsync(TaskItem); _Taskaction?.Invoke(TaskItem); } } } } } } catch (Exception ex) { } } private List GetAgvState() { List State = null; try { State = _AGVStateService.GetAgvState(); return State; } catch (Exception ex) { return State; } } } }