using JSMachine.WMS.Common;
using JSMachine.WMS.Infrastructure.Helper;
using JSMachine.WMS.RPC.ErpRPC.Dto.Out;
using JSMachine.WMS.RPC.RcsRPC.Dto;
using JSMachine.WMS.RPC.RcsRPC.Dto.In;
using JSMachine.WMS.RPC.RcsRPC.IService;
using Newtonsoft.Json;
using RestSharp;
namespace JSMachine.WMS.RPC.RcsRPC.Service
{
///
/// RCS HTTP RPC 客户端,封装任务创建和取消接口调用及统一错误转换。
///
public class RcsService: IRcsService
{
private static readonly string rcsUrl = Global.AppSettings.RcsConfig.RcsUrl;
private static readonly string createTaskUrl = Global.AppSettings.RcsConfig.CreateTaskUrl;
private static readonly string cancelTaskUrl = Global.AppSettings.RcsConfig.CancelTaskUrl;
///
/// 创建任务
///
///
///
/// 外部接口返回码为 1000 时转换为本地成功码 200。
public async Task> CreateTask(CreateTaskParam createTaskParam)
{
var result = new ApiReturnResult();
try
{
var url = rcsUrl + createTaskUrl;
var jsonParam = new CreateTaskParam
{
modelProcessCode = createTaskParam.modelProcessCode,
priority = createTaskParam.priority,
fromSystem = createTaskParam.fromSystem,
orderId = createTaskParam.orderId,
};
jsonParam.taskOrderDetail = new TaskOrderDetailDto
{
taskPath = createTaskParam.taskOrderDetail.taskPath,
shelfNumber = createTaskParam.taskOrderDetail.shelfNumber,
};
string resStr = await HttpRequestHelper.RequestByJson(url, Method.POST, JsonConvert.SerializeObject(jsonParam));
if (string.IsNullOrEmpty(resStr))
{
var msg = $"调用Rcs创建任务接口失败(CreateTask)";
LogHelper.Error(msg);
result.ErrorMsg = msg;
return result;
}
var apiResult = JsonConvert.DeserializeObject(resStr);
if (apiResult.code != 1000)
{
var msg = $"创建任务失败(CreateTask): {apiResult.desc}";
LogHelper.Error(msg);
result.ErrorMsg = msg;
return result;
}
result.ResultCode = "200";
}
catch (Exception ex)
{
var msg = $"创建任务异常(CreateTask):: {ex.Message} \n {ex.StackTrace}";
LogHelper.Error(msg);
result.ErrorMsg = msg;
}
return result;
}
///
/// 向 RCS 批量提交任务取消请求。
///
/// 待取消的 RCS 任务参数。
/// 外部接口成功时返回本地成功码,否则携带错误信息。
public async Task> CancelTask(List cancelTaskParams)
{
var result = new ApiReturnResult();
try
{
var url = rcsUrl + cancelTaskUrl;
var jsonParam = new List();
foreach (var item in cancelTaskParams)
{
jsonParam.Add(item);
}
string resStr = await HttpRequestHelper.RequestByJson(url, Method.POST, JsonConvert.SerializeObject(jsonParam));
if (string.IsNullOrEmpty(resStr))
{
var msg = $"调用Rcs取消任务接口失败(CancelTask)";
LogHelper.Error(msg);
result.ErrorMsg = msg;
return result;
}
var apiResult = JsonConvert.DeserializeObject(resStr);
if (apiResult.code != 1000)
{
var msg = $"取消任务失败(CancelTask): {apiResult.desc}";
LogHelper.Error(msg);
result.ErrorMsg = msg;
return result;
}
result.ResultCode = "200";
}
catch (Exception ex)
{
var msg = $"取消任务异常(CancelTask):: {ex.Message} \n {ex.StackTrace}";
LogHelper.Error(msg);
result.ErrorMsg = msg;
}
return result;
}
}
}