using ServiceCenter.Logs;
using ServiceCenter.Redis;
using ServiceCenter.WebApi;
using WCS.WorkEngineering.WebApi.Models.AGV;
using WCS.WorkEngineering.WebApi.Models.AGV.Request;
using WCS.WorkEngineering.WebApi.Models.AGV.Response;
namespace WCS.WorkEngineering.WebApi.Controllers
{
///
/// AGV接口
///
public static class AgvApi
{
private static string _AgvUrl = null!;
///
/// AGV地址
///
public static string AgvUrl
{
get
{
_AgvUrl ??= RedisHub.Default.Check("AgvUrl");
if (string.IsNullOrEmpty(_AgvUrl))
{
throw new KnownException($"请在Redis配置AgvUrl", LogLevelEnum.High);
}
return _AgvUrl;
}
}
#region 任务单生成
///
/// 满轮入库
///
/// RFID
/// 取货机台
/// WMS任务号
/// 优先级
///
public static GenAgvSchedulingTaskResponse 满轮入库(string ctnrCode, string position, string taskCode, string priority)
{
return GenAgvSchedulingTask("iwms_third", ctnrCode, "4", new List()
{
new positionCodeClass(){ //取货机台
positionCode=position,
type="00"
},
new positionCodeClass(){ //巷道分配点
positionCode="HJLK",
type="00"
},
new positionCodeClass(){ //预分配放货点
positionCode="1015",
type="00"
}
}, priority, taskCode, "ZTGT03", "1");
}
///
/// 机台补空
///
/// 补空机台
/// WMS任务号
/// 优先级
///
public static GenAgvSchedulingTaskResponse 机台补空(string position, string taskCode, string priority)
{
return GenAgvSchedulingTask("iWMS", "", "4", new List()
{
new positionCodeClass(){ //合金库空区域
positionCode="21",
type="04"
},
new positionCodeClass(){ //目标机台
positionCode=position,
type="00"
}
}, priority, taskCode, "ZTGT03", "0");
}
///
/// 缓存架补空
///
/// 任务号
/// 取货地址
///
public static ContinueTaskResponse 缓存架补空(string taskCode, string nextPositionCode)
{
return ContinueTask(taskCode, nextPositionCode);
}
///
/// 机台补满
///
/// RFID
/// 取货站台
/// 放货机台
/// WMS任务号
/// 优先级
///
public static GenAgvSchedulingTaskResponse 机台补满(string ctnrCode, string position1, string position2, string taskCode, string priority)
{
return GenAgvSchedulingTask("iWMS", ctnrCode, "1", new List()
{
new positionCodeClass(){ //取货站台
positionCode=position1,
type="00"
},
new positionCodeClass(){ //放货机台
positionCode=position2,
type="00"
}
}, priority, taskCode, "ZTGT21", "-1");
}
///
/// Agv任务单生成接口
///
/// 客户端编号
/// 容器编号
/// 容器类型
/// 路径
/// 优先级
/// 任务单号
/// 任务类型
/// 合金任务模板
///
///
public static GenAgvSchedulingTaskResponse GenAgvSchedulingTask(string clienCode, string ctnrCode, string ctnrTyp, List positionCodePath, string priority, string taskCode, string taskType, string hjTaskTy)
{
var res = APICaller.CallApi2(AgvUrl + "/rcms/services/rest/hikRpcService/genAgvSchedulingTask", new GenAgvSchedulingTaskRequest
{
clientCode = clienCode,
ctnrCode = ctnrCode,
ctnrTyp = ctnrTyp,
interfaceName = "genAgvSchedulingTask",
positionCodePath = positionCodePath,
priority = priority,
reqCode = Guid.NewGuid().ToString().Replace("-", ""),
taskCode = taskCode,
taskTyp = taskType,
hjTaskTy = hjTaskTy,
tokenCode = "56898661ea976b748f328cefa6960434",
});
if (res.code != AgvResponseCode.Success)
{
throw new KnownException(res.message, LogLevelEnum.High);
}
return res;
}
#endregion 任务单生成
#region 继续执行任务
///
/// 继续执行任务
///
/// AGV任务号
/// 下一个地址
/// 接口返回结果
///
public static ContinueTaskResponse ContinueTask(string taskCode, string nextPositionCode)
{
var res = APICaller.CallApi2(AgvUrl + "/rcms/services/rest/hikRpcService/continueTask", new ContinueTaskRequest
{
reqCode = Guid.NewGuid().ToString().Replace("-", ""),
taskCode = taskCode,
nextPositionCode = new positionCodeClass()
{
positionCode = nextPositionCode,
type = "00"
}
});
if (res.code != AgvResponseCode.Success)
{
throw new KnownException(res.message, LogLevelEnum.High);
}
return res;
}
#endregion
public static GenAgvSchedulingTaskResponse GenAgvSchedulingTask()
{
var res = APICaller.CallApi2(AgvUrl + "/rcms/services/rest/hikRpcService/CancelTaskRequest", new GenAgvSchedulingTaskRequest
{
//clientCode = clienCode,
//ctnrCode = ctnrCode,
//ctnrTyp = ctnrTyp,
//interfaceName = "genAgvSchedulingTask",
//positionCodePath = positionCodePath,
//priority = priority,
//reqCode = Guid.NewGuid().ToString().Replace("-", ""),
//taskCode = taskCode,
//taskTyp = taskType,
//hjTaskTy = hjTaskTy,
//tokenCode = "56898661ea976b748f328cefa6960434",
});
if (res.code != AgvResponseCode.Success)
{
throw new KnownException(res.message, LogLevelEnum.High);
}
return res;
}
}
}