using Flurl.Http;
using Newtonsoft.Json;
using Sln.Wcs.HikRoBotSdk.Config;
using Sln.Wcs.HikRoBotSdk.Dto.CancelTask;
using Sln.Wcs.HikRoBotSdk.Dto.ContinueTask;
using Sln.Wcs.HikRoBotSdk.Dto.GbCancelTask;
using Sln.Wcs.HikRoBotSdk.Dto.GbContinueTask;
using Sln.Wcs.HikRoBotSdk.Dto.GbTaskSubmit;
using Sln.Wcs.HikRoBotSdk.Dto.GenAgvSchedulingTask;
using Sln.Wcs.HikRoBotSdk.Dto.TaskGroup;
using Sln.Wcs.HikRoBotSdk.Dto.TaskPriority;
using Sln.Wcs.HikRoBotSdk.Dto.ZonePause;
using Sln.Wcs.HikRoBotSdk.Dto.ZoneHoming;
using Sln.Wcs.HikRoBotSdk.Dto.ZoneBanish;
using Sln.Wcs.HikRoBotSdk.Dto.ZoneBlockade;
using Sln.Wcs.HikRoBotSdk.Dto.CarrierBind;
using Sln.Wcs.HikRoBotSdk.Dto.CarrierUnbind;
using Sln.Wcs.HikRoBotSdk.Dto.SiteBind;
using Sln.Wcs.HikRoBotSdk.Dto.CarrierLock;
using Sln.Wcs.HikRoBotSdk.Dto.SiteLock;
using Sln.Wcs.HikRoBotSdk.Dto.PreTask;
using Sln.Wcs.HikRoBotSdk.Dto.QueryTask;
using Sln.Wcs.HikRoBotSdk.Dto.QueryRobot;
using Sln.Wcs.HikRoBotSdk.Dto.QueryCarrier;
using Sln.Wcs.HikRoBotSdk.Dto.MatLabelBind;
using Sln.Wcs.HikRoBotSdk.Dto.MatLabelUnbind;
using Sln.Wcs.HikRoBotSdk.Dto.EquipmentNotify;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Authentication;
using System.Text;
using System.Threading.Tasks;
#region << 版 本 注 释 >>
/*--------------------------------------------------------------------
* 版权所有 (c) 2026 WenJY 保留所有权利。
* CLR版本:4.0.30319.42000
* 机器名称:T14-GEN3-7895
* 命名空间:Sln.Wcs.HikRoBotSdk
* 唯一标识:17e983b2-0c7e-4b27-ae05-e333d623b85d
*
* 创建者:WenJY
* 电子邮箱:
* 创建时间:2026-02-25 14:40:23
* 版本:V1.0.0
* 描述:
*
*--------------------------------------------------------------------
* 修改人:
* 时间:
* 修改说明:
*
* 版本:V1.0.0
*--------------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
namespace Sln.Wcs.HikRoBotSdk
{
public class HIKRoBotSdk : IHIKRoBotSdk
{
private readonly HikRoBotConfig hikRoBotConfig;
public HIKRoBotSdk(HikRoBotConfig hikRoBotConfig)
{
this.hikRoBotConfig = hikRoBotConfig;
}
///
/// GB标准-任务下发接口
///
/// 业务系统发送任务请求,物流机器人调度系统生成任务执行单并下发执行。
///
///
///
public GbTaskSubmitResultDto GbTaskSubmit(GbTaskSubmitDto gbTaskSubmit)
{
string url = $"{hikRoBotConfig.api}/task/submit";
var request = url
.WithHeader("Content-Type", hikRoBotConfig.contentType)
.WithHeader("User-Agent", hikRoBotConfig.userAgent)
.WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N"))
.WithHeader("X-lr-version", hikRoBotConfig.xlrVersion)
.WithTimeout(TimeSpan.FromSeconds(15));
string json = JsonConvert.SerializeObject(gbTaskSubmit);
Console.WriteLine($"请求报文:{json}");
return request.PostJsonAsync(gbTaskSubmit).Result.GetJsonAsync().Result;
}
///
/// GB标准-任务继续执行接口
///
/// 一个任务包含多个步骤,每个步骤完成后,通过此接口驱动下一个步骤执行。
///
///
///
public GbContinueTaskResultDto GbContinueTask(GbContinueTaskDto gbContinueTask)
{
string url = $"{hikRoBotConfig.api}/task/extend/continue";
var request = url
.WithHeader("Content-Type", hikRoBotConfig.contentType)
.WithHeader("User-Agent", hikRoBotConfig.userAgent)
.WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N"))
.WithHeader("X-lr-version", hikRoBotConfig.xlrVersion)
.WithTimeout(TimeSpan.FromSeconds(15));
return request.PostJsonAsync(gbContinueTask).Result.GetJsonAsync().Result;
}
///
/// GB标准-任务取消接口
///
/// 取消指定任务,支持软取消(回库)和硬取消(直接丢弃)。
///
///
///
public GbCancelTaskResultDto GbCancelTask(GbCancelTaskDto gbCancelTask)
{
string url = $"{hikRoBotConfig.api}/task/cancel";
var request = url
.WithHeader("Content-Type", hikRoBotConfig.contentType)
.WithHeader("User-Agent", hikRoBotConfig.userAgent)
.WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N"))
.WithHeader("X-lr-version", hikRoBotConfig.xlrVersion)
.WithTimeout(TimeSpan.FromSeconds(15));
return request.PostJsonAsync(gbCancelTask).Result.GetJsonAsync().Result;
}
///
/// 任务分组
///
/// 对多个任务进行分组,组内任务按优先级顺序执行。
///
///
///
public TaskGroupResultDto TaskGroup(TaskGroupDto taskGroup)
{
string url = $"{hikRoBotConfig.api}/task/group";
var request = url
.WithHeader("Content-Type", hikRoBotConfig.contentType)
.WithHeader("User-Agent", hikRoBotConfig.userAgent)
.WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N"))
.WithHeader("X-lr-version", hikRoBotConfig.xlrVersion)
.WithTimeout(TimeSpan.FromSeconds(15));
return request.PostJsonAsync(taskGroup).Result.GetJsonAsync().Result;
}
///
/// 设置任务优先级
///
/// 修改指定任务的优先级。
///
///
///
public TaskPriorityResultDto SetTaskPriority(TaskPriorityDto taskPriority)
{
string url = $"{hikRoBotConfig.api}/task/priority";
var request = url
.WithHeader("Content-Type", hikRoBotConfig.contentType)
.WithHeader("User-Agent", hikRoBotConfig.userAgent)
.WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N"))
.WithHeader("X-lr-version", hikRoBotConfig.xlrVersion)
.WithTimeout(TimeSpan.FromSeconds(15));
return request.PostJsonAsync(taskPriority).Result.GetJsonAsync().Result;
}
///
/// 区域暂停
///
/// 暂停指定区域内的所有AGV任务。
///
///
///
public ZonePauseResultDto ZonePause(ZonePauseDto zonePause)
{
string url = $"{hikRoBotConfig.api}/zone/pause";
var request = url
.WithHeader("Content-Type", hikRoBotConfig.contentType)
.WithHeader("User-Agent", hikRoBotConfig.userAgent)
.WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N"))
.WithHeader("X-lr-version", hikRoBotConfig.xlrVersion)
.WithTimeout(TimeSpan.FromSeconds(15));
return request.PostJsonAsync(zonePause).Result.GetJsonAsync().Result;
}
///
/// 区域回库
///
/// 将指定区域内的AGV召回至充电桩/待命点。
///
///
///
public ZoneHomingResultDto ZoneHoming(ZoneHomingDto zoneHoming)
{
string url = $"{hikRoBotConfig.api}/zone/homing";
var request = url
.WithHeader("Content-Type", hikRoBotConfig.contentType)
.WithHeader("User-Agent", hikRoBotConfig.userAgent)
.WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N"))
.WithHeader("X-lr-version", hikRoBotConfig.xlrVersion)
.WithTimeout(TimeSpan.FromSeconds(15));
return request.PostJsonAsync(zoneHoming).Result.GetJsonAsync().Result;
}
///
/// 区域驱赶
///
/// 将指定区域内的AGV驱赶出该区域。
///
///
///
public ZoneBanishResultDto ZoneBanish(ZoneBanishDto zoneBanish)
{
string url = $"{hikRoBotConfig.api}/zone/banish";
var request = url
.WithHeader("Content-Type", hikRoBotConfig.contentType)
.WithHeader("User-Agent", hikRoBotConfig.userAgent)
.WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N"))
.WithHeader("X-lr-version", hikRoBotConfig.xlrVersion)
.WithTimeout(TimeSpan.FromSeconds(15));
return request.PostJsonAsync(zoneBanish).Result.GetJsonAsync().Result;
}
///
/// 区域封锁
///
/// 封锁指定区域,禁止AGV进入该区域。
///
///
///
public ZoneBlockadeResultDto ZoneBlockade(ZoneBlockadeDto zoneBlockade)
{
string url = $"{hikRoBotConfig.api}/zone/blockade";
var request = url
.WithHeader("Content-Type", hikRoBotConfig.contentType)
.WithHeader("User-Agent", hikRoBotConfig.userAgent)
.WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N"))
.WithHeader("X-lr-version", hikRoBotConfig.xlrVersion)
.WithTimeout(TimeSpan.FromSeconds(15));
return request.PostJsonAsync(zoneBlockade).Result.GetJsonAsync().Result;
}
///
/// 载具绑定
///
/// 将载具(货架/料箱等)与指定库位进行绑定。
///
///
///
public CarrierBindResultDto CarrierBind(CarrierBindDto carrierBind)
{
string url = $"{hikRoBotConfig.api}/carrier/bind";
var request = url
.WithHeader("Content-Type", hikRoBotConfig.contentType)
.WithHeader("User-Agent", hikRoBotConfig.userAgent)
.WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N"))
.WithHeader("X-lr-version", hikRoBotConfig.xlrVersion)
.WithTimeout(TimeSpan.FromSeconds(15));
return request.PostJsonAsync(carrierBind).Result.GetJsonAsync().Result;
}
///
/// 载具解绑
///
/// 解除载具(货架/料箱等)与库位的绑定关系。
///
///
///
public CarrierUnbindResultDto CarrierUnbind(CarrierUnbindDto carrierUnbind)
{
string url = $"{hikRoBotConfig.api}/carrier/unbind";
var request = url
.WithHeader("Content-Type", hikRoBotConfig.contentType)
.WithHeader("User-Agent", hikRoBotConfig.userAgent)
.WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N"))
.WithHeader("X-lr-version", hikRoBotConfig.xlrVersion)
.WithTimeout(TimeSpan.FromSeconds(15));
return request.PostJsonAsync(carrierUnbind).Result.GetJsonAsync().Result;
}
///
/// 库位绑定
///
/// 将载具绑定到指定库位。
///
///
///
public SiteBindResultDto SiteBind(SiteBindDto siteBind)
{
string url = $"{hikRoBotConfig.api}/site/bind";
var request = url
.WithHeader("Content-Type", hikRoBotConfig.contentType)
.WithHeader("User-Agent", hikRoBotConfig.userAgent)
.WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N"))
.WithHeader("X-lr-version", hikRoBotConfig.xlrVersion)
.WithTimeout(TimeSpan.FromSeconds(15));
return request.PostJsonAsync(siteBind).Result.GetJsonAsync().Result;
}
///
/// 载具锁定
///
/// 锁定指定载具,禁止AGV操作该载具。
///
///
///
public CarrierLockResultDto CarrierLock(CarrierLockDto carrierLock)
{
string url = $"{hikRoBotConfig.api}/carrier/lock";
var request = url
.WithHeader("Content-Type", hikRoBotConfig.contentType)
.WithHeader("User-Agent", hikRoBotConfig.userAgent)
.WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N"))
.WithHeader("X-lr-version", hikRoBotConfig.xlrVersion)
.WithTimeout(TimeSpan.FromSeconds(15));
return request.PostJsonAsync(carrierLock).Result.GetJsonAsync().Result;
}
///
/// 库位锁定
///
/// 锁定指定库位,禁止AGV访问该库位。
///
///
///
public SiteLockResultDto SiteLock(SiteLockDto siteLock)
{
string url = $"{hikRoBotConfig.api}/site/lock";
var request = url
.WithHeader("Content-Type", hikRoBotConfig.contentType)
.WithHeader("User-Agent", hikRoBotConfig.userAgent)
.WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N"))
.WithHeader("X-lr-version", hikRoBotConfig.xlrVersion)
.WithTimeout(TimeSpan.FromSeconds(15));
return request.PostJsonAsync(siteLock).Result.GetJsonAsync().Result;
}
///
/// 预占任务
///
/// 预占AGV资源,为后续任务执行做准备。
///
///
///
public PreTaskResultDto PreTask(PreTaskDto preTask)
{
string url = $"{hikRoBotConfig.api}/task/pretask";
var request = url
.WithHeader("Content-Type", hikRoBotConfig.contentType)
.WithHeader("User-Agent", hikRoBotConfig.userAgent)
.WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N"))
.WithHeader("X-lr-version", hikRoBotConfig.xlrVersion)
.WithTimeout(TimeSpan.FromSeconds(15));
return request.PostJsonAsync(preTask).Result.GetJsonAsync().Result;
}
///
/// 查询任务状态
///
/// 根据任务编号查询任务的当前执行状态。
///
///
///
public QueryTaskResultDto QueryTaskStatus(QueryTaskDto queryTask)
{
string url = $"{hikRoBotConfig.api}/task/query";
var request = url
.WithHeader("Content-Type", hikRoBotConfig.contentType)
.WithHeader("User-Agent", hikRoBotConfig.userAgent)
.WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N"))
.WithHeader("X-lr-version", hikRoBotConfig.xlrVersion)
.WithTimeout(TimeSpan.FromSeconds(15));
return request.PostJsonAsync(queryTask).Result.GetJsonAsync().Result;
}
///
/// 查询机器人状态
///
/// 查询指定机器人的当前运行状态信息。
///
///
///
public QueryRobotResultDto QueryRobotStatus(QueryRobotDto queryRobot)
{
string url = $"{hikRoBotConfig.api}/robot/query";
var request = url
.WithHeader("Content-Type", hikRoBotConfig.contentType)
.WithHeader("User-Agent", hikRoBotConfig.userAgent)
.WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N"))
.WithHeader("X-lr-version", hikRoBotConfig.xlrVersion)
.WithTimeout(TimeSpan.FromSeconds(15));
return request.PostJsonAsync(queryRobot).Result.GetJsonAsync().Result;
}
///
/// 查询载具状态
///
/// 查询指定载具的当前位置和状态信息。
///
///
///
public QueryCarrierResultDto QueryCarrierStatus(QueryCarrierDto queryCarrier)
{
string url = $"{hikRoBotConfig.api}/carrier/query";
var request = url
.WithHeader("Content-Type", hikRoBotConfig.contentType)
.WithHeader("User-Agent", hikRoBotConfig.userAgent)
.WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N"))
.WithHeader("X-lr-version", hikRoBotConfig.xlrVersion)
.WithTimeout(TimeSpan.FromSeconds(15));
return request.PostJsonAsync(queryCarrier).Result.GetJsonAsync().Result;
}
///
/// 物料标签绑定
///
/// 将物料与标签进行绑定关联。
///
///
///
public MatLabelBindResultDto MatLabelBind(MatLabelBindDto matLabelBind)
{
string url = $"{hikRoBotConfig.api}/matlabel/bind";
var request = url
.WithHeader("Content-Type", hikRoBotConfig.contentType)
.WithHeader("User-Agent", hikRoBotConfig.userAgent)
.WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N"))
.WithHeader("X-lr-version", hikRoBotConfig.xlrVersion)
.WithTimeout(TimeSpan.FromSeconds(15));
return request.PostJsonAsync(matLabelBind).Result.GetJsonAsync().Result;
}
///
/// 物料标签解绑
///
/// 解除物料与标签的绑定关系。
///
///
///
public MatLabelUnbindResultDto MatLabelUnbind(MatLabelUnbindDto matLabelUnbind)
{
string url = $"{hikRoBotConfig.api}/matlabel/unbind";
var request = url
.WithHeader("Content-Type", hikRoBotConfig.contentType)
.WithHeader("User-Agent", hikRoBotConfig.userAgent)
.WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N"))
.WithHeader("X-lr-version", hikRoBotConfig.xlrVersion)
.WithTimeout(TimeSpan.FromSeconds(15));
return request.PostJsonAsync(matLabelUnbind).Result.GetJsonAsync().Result;
}
///
/// 设备状态通知
///
/// 向上层系统通知设备(AGV/载具等)的状态变化。
///
///
///
public EquipmentNotifyResultDto EquipmentNotify(EquipmentNotifyDto equipmentNotify)
{
string url = $"{hikRoBotConfig.api}/spi/wcs/robot/eqpt/notify";
var request = url
.WithHeader("Content-Type", hikRoBotConfig.contentType)
.WithHeader("User-Agent", hikRoBotConfig.userAgent)
.WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N"))
.WithHeader("X-lr-version", hikRoBotConfig.xlrVersion)
.WithTimeout(TimeSpan.FromSeconds(15));
return request.PostJsonAsync(equipmentNotify).Result.GetJsonAsync().Result;
}
///
/// 设备状态通知(国标)
///
/// 以国标格式向上层系统通知设备状态变化。
///
///
///
public EquipmentNotifyResultDto EquipmentNotifyGbt(EquipmentNotifyDto equipmentNotify)
{
string url = $"{hikRoBotConfig.api}/spi/wcs/robot/eqpt/notifyGbt";
var request = url
.WithHeader("Content-Type", hikRoBotConfig.contentType)
.WithHeader("User-Agent", hikRoBotConfig.userAgent)
.WithHeader("X-lr-request-id", System.Guid.NewGuid().ToString("N"))
.WithHeader("X-lr-version", hikRoBotConfig.xlrVersion)
.WithTimeout(TimeSpan.FromSeconds(15));
return request.PostJsonAsync(equipmentNotify).Result.GetJsonAsync().Result;
}
}
}