using System.Net.Http.Json; using Microsoft.Extensions.Logging; using Seyounth.Hyosung.Core.Agv.HikModels; namespace Seyounth.Hyosung.Core.Agv; public class HikAgv(ILogger logger) { private const string Url = "http://192.168.30.161:8181/rcms/services/rest/hikRpcService/"; private const string CancelTaskUri = "cancelTask"; private const string SchedulingTaskUri = "genAgvSchedulingTask"; private string GetRequestCode() { return $"Syc_{DateTimeOffset.Now.Ticks}"; } /// /// 取消任务 /// /// public async Task CancelTaskAsync(string taskCode) { var url = Url + CancelTaskUri; var input = new { reqCode = GetRequestCode(), taskCode }; var result = await PostAsync(url, input); if (result is null) { logger.LogWarning($"task {taskCode} cancel error: result is null"); return; } if (result.Code != "0") { logger.LogWarning($"task {taskCode} cancel error: code is {result.Code}"); return; } logger.LogInformation($"task {taskCode} cancel succeed."); } public async Task CarryToAsync(AgvPosition start, AgvPosition end, string ctnrType, int priority, string taskType) { var url = Url + SchedulingTaskUri; var input = new { reqCode = GetRequestCode(), ctnrTyp = ctnrType, taskTyp = taskType, priority, agvCode = "4083", positionCodePath = new object[] { new { positionCode = start.PositionCode, type = start.Type }, new { positionCode = end.PositionCode, type = end.Type } } }; var rs = await PostAsync(url, input); if (rs is null) { logger.LogWarning($"{start.PositionCode} carry to {end.PositionCode} error: result is null"); return; } if (rs.Code != "0") { logger.LogWarning($"{start.PositionCode} carry to {end.PositionCode} error: code is {rs.Code}"); return; } logger.LogInformation($"{start.PositionCode} carry to {end.PositionCode} succeed"); } public async Task MovingToAsync(AgvPosition des, string taskType) { var url = Url + SchedulingTaskUri; var input = new { reqCode = GetRequestCode(), taskType, priority = 1, positionCodePath = new object[] { new { positionCode = des.PositionCode, type = des.Type } } }; var rs = await PostAsync(url, input); if (rs is null) { logger.LogWarning($"agv move to {des.PositionCode} error: result is null"); return; } if (rs.Code != "0") { logger.LogWarning($"agv move to {des.PositionCode} error: code is {rs.Code}"); return; } logger.LogInformation($"agv move to {des.PositionCode} succeed"); } public async Task GetAgvStatus(string mapCode, string agvCode) { var url = "http://192.168.30.161:8181/rcms-dps/rest/queryAgvStatus"; var q = new { reqCode = GetRequestCode(), mapCode }; var rs = await PostAsync>(url, q); if (rs is null) { logger.LogWarning($"get agv {agvCode} from map {mapCode} error: result is null"); return null; } if (rs.Code == "0") return rs.Data.First(t => t.RobotCode == agvCode); logger.LogWarning($"get agv {agvCode} from map {mapCode} error: code is {rs.Code}"); return null; } private async Task?> PostAsync(string url, object content) { try { using var client = new HttpClient(); var json = JsonContent.Create(content); var response = await client.PostAsync(url, json); response.EnsureSuccessStatusCode(); return await response.Content.ReadFromJsonAsync>(); } catch (Exception e) { logger.LogError(e, $"post error"); return null; } } }