using Microsoft.Extensions.Logging; using SlnMesnac.Model.AirportApiEntity; using SlnMesnac.Model.domain; using SlnMesnac.Repository.service; using SlnMesnac.TouchSocket; using System; using System.Collections.Generic; using System.Text; namespace SlnMesnac.Business.@base { /// /// AGV业务类 /// public class BaseAGVBusiness { private ILogger _logger; private static BaseAGVBusiness instance; private AirPorthttpClient _airPorthttpClient; private IAGVStateService _AGVStateService; private IAGVMapPointService _AGVMapPointService; public BaseAGVBusiness(ILogger logger, AirPorthttpClient airPorthttpClient, IAGVStateService AGVStateService, IAGVMapPointService aGVMapPointService) { _logger = logger; _airPorthttpClient = airPorthttpClient; _AGVStateService = AGVStateService; _AGVMapPointService = aGVMapPointService; } public static BaseAGVBusiness GetInstance(ILogger logger, AirPorthttpClient airPorthttpClient, IAGVStateService AGVStateService, IAGVMapPointService aGVMapPointService) { if (instance == null) { instance = new BaseAGVBusiness(logger, airPorthttpClient, AGVStateService, aGVMapPointService); } return instance; } /// /// 封装任务类 /// /// /// /// /// /// /// /// public AGVRequestAddTaskEntity NewTaskEntity(string AGVGUID, string JobGUID, string PointGUID, string ParamName, string TaskName = "AGVCTask", string RobotType = "S800") { AGVRequestAddTaskEntity aGVRequestAddTaskEntity = new AGVRequestAddTaskEntity() { businessOrderId = TaskName, priority = 0, RobotType = RobotType, robotId = AGVGUID, group = "", taskSource = "agvc", taskType = 0, verifyStatus = 0, enableSplitCar = 0, load = new List() { new LoadsEntity() { jobid = JobGUID, location = PointGUID, param = new List() { new ParamEntity() { paramname = ParamName, paramvalue = PointGUID, } }, robotPort = "" } }, }; return aGVRequestAddTaskEntity; } /// /// 发送封装的任务类 /// /// public string DownloadTask(string AGVGUID, string JobGUID, string PointGUID, string ParamName, string TaskName = "AGVCTask", string RobotType = "S800") { try { var result = _airPorthttpClient.AGVAddTaskRequest(NewTaskEntity(AGVGUID, JobGUID, PointGUID, ParamName, TaskName, RobotType)); if (result.code == 0) { return result.Data.guid; } else { _logger.LogError("错误响应:" + result.message); return string.Empty; } } catch (Exception ex) { _logger.LogError($"接口发生错误:{ex.Message}"); return string.Empty; } } /// /// 结束指定AGV的任务 /// /// AGV小车编号 /// public bool EndAGVTask(string AGVGUID) { var agvState = _AGVStateService.GetAGVState(AGVGUID); if(agvState == null) { return false; } if(agvState.agvworkstate != "待机") { var response = _airPorthttpClient.AGVOperationalTaskRequest(new AGVRequestOperationalTaskEntity() { taskid = agvState.taskno, state = 0, operatingSource = "agvc", operatingUser = "agvc", remark = "agvcEnd" }); if (response.code == 0) { _logger.LogInformation($"AGV {agvState.agvno} 任务 {agvState.taskno} 结束成功"); return true; } else { _logger.LogError($"AGV {agvState.agvno} 任务 {agvState.taskno} 结束失败 ERROR:{response.message}"); return false; } } else if(agvState.agvworkstate == "待机") { _logger.LogError($"AGV {agvState.agvno} 现在无任务"); return false; } else { _logger.LogError($"AGV {agvState.agvno} 终止任务失败!"); return false; } } /// /// 获取活跃地图的点位更新到数据库 /// /// public bool GetActiveMapPoint() { var result = _airPorthttpClient.AGVMapActiveRequest(); if (result == null) { _logger.LogError("AGV活跃地图获取返回Null"); return false; } if (result.code != 0) { _logger.LogError("AGV活跃地图获取错误,内容:" + result.message); return false; } if (result.Data == null) { _logger.LogError("活跃地图获取无数据"); return false; } string mapID = result.Data.guid; var res = _airPorthttpClient.AGVMapPositionRequest(mapID); if (res == null) { _logger.LogError("地图点位获取返回Null"); return false; } if (res.code != 0) { _logger.LogError($"地图点位获取错误,内容:{res.message}"); } if (res.Data == null) { _logger.LogError("地图点位获取无数据"); return false; } List list = new List(); foreach (var a in res.Data) { list.Add(new AGVMapPoint() { MapID = a.mapId, PointGuid = a.guid, PointName = a.name, PointType = a.type.ToString(), MapName = a.name, }); } return _AGVMapPointService.DeleteAndAddAgvMapPoint(list); } /// /// 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 "未知代码"; } } } }