146 lines
4.3 KiB
C#
Raw Normal View History

2025-03-16 03:17:36 +08:00
using System.Net.Http.Json;
using Microsoft.Extensions.Logging;
using Seyounth.Hyosung.Core.Agv.HikModels;
namespace Seyounth.Hyosung.Core.Agv;
public class HikAgv(ILogger<HikAgv> 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}";
}
/// <summary>
/// 取消任务
/// </summary>
/// <param name="taskCode"></param>
public async Task CancelTaskAsync(string taskCode)
{
var url = Url + CancelTaskUri;
var input = new
{
reqCode = GetRequestCode(),
taskCode
};
var result = await PostAsync<string>(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(),
ctnrType,
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<string>(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<string>(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<AgvStatusInfo?> 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<List<AgvStatusInfo>>(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<HikApiResult<T>?> PostAsync<T>(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<HikApiResult<T>>();
}
catch (Exception e)
{
logger.LogError(e, $"post error");
return null;
}
}
}