using Autofac.Core;
using Magicodes.IE.Core;
using NetTaste;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.NetworkInformation;
using System.Reflection.Metadata;
using System.Text;
using System.Text.Json;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using WIDESEAWCS_Common;
using WIDESEAWCS_Common.LocationEnum;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Enums;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_DTO;
using WIDESEAWCS_DTO.AGV.HIKROBOT;
using WIDESEAWCS_DTO.RGV.FOURBOT;
using WIDESEAWCS_DTO.WMS;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.DTO;
namespace WIDESEAWCS_TaskInfoService
{
public partial class TaskService
{
#region 更新任务状态
///
/// 更新任务状态
///
///
///
///
///
public WebResponseContent UpdateTaskStatus(object TaskDTO, DeviceTypeEnum deviceTypeEnum)
{
WebResponseContent content = new WebResponseContent();
GALAXISUpdateTaskStatus gALAXIS = new();
RGVReturnInfo Rgv = new();//四向车任务状态通知
HIKROBOTTaskProcessReport hIKROBOT = new();//海康机器人
string deviceName = "";
try
{
if (deviceTypeEnum == DeviceTypeEnum.GALAXIS)
{
deviceName = "凯乐士";
gALAXIS = TaskDTO.Serialize().DeserializeObject();
if (gALAXIS == null) throw new Exception("参数转换失败!");
var task = BaseDal.QueryFirst(x => x.WMSTaskNum == gALAXIS.taskId);
if (task == null) throw new Exception($"未找到任务,任务编号【{gALAXIS.taskId}】");
switch (gALAXIS.taskStatus)
{
case 0:
TaskCompleted(task, deviceTypeEnum);
break;
case 4:
TaskFromCompleted(task, deviceTypeEnum);
break;
default:
task.TaskState = ReturnTaskStatus(gALAXIS.taskStatus, deviceTypeEnum);
if (gALAXIS.taskStatus == 10) TaskFeedback(task, 1);
else BaseDal.UpdateData(task);
break;
}
}
else if (deviceTypeEnum == DeviceTypeEnum.HIKROBOT)
{
deviceName = "海康";
hIKROBOT = TaskDTO.Serialize().DeserializeObject();
if (hIKROBOT == null) throw new Exception("参数转换失败!");
var task = BaseDal.QueryFirst(x => x.WMSTaskNum == hIKROBOT.robotTaskCode);
if (task == null) throw new Exception($"未找到任务,任务编号【{hIKROBOT.robotTaskCode}】");
switch (hIKROBOT.extra.values.method)
{
case "start":
if (task.TaskState == (int)TaskStatusEnum.CallingHKtransportation && task.TaskType == (int)TaskTypeEnum.MOVE)
{
task.TaskState = (int)TaskStatusEnum.HktransportIng;
BaseDal.UpdateData(task);
}
else
{
task.TaskState = (int)TaskStatusEnum.Takeing;
TaskFeedback(task, 1);
}
break;
case "outbin"://离开起点
{
TaskFromCompleted(task, deviceTypeEnum); //任务状体改为3取货完成,更新起点货位状态,并反馈WMS起点完成
}
break;
case "finish"://离开提升机
{
//入提升机
if (task.TaskType == TaskTypeEnum.RK3F.ObjToInt() && task.TaskState == (int)TaskStatusEnum.CheckPalletCodeFinish)
{
var device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "TSJ") as OtherDevice;
if (device == null) task.ExceptionMessage = "未找到提升机信息";
else
{
bool Work = false;
if (device.IsConnected)
{
int i = 0;
while (!Work && i <= 3)
{
i++;
Work = device.SetValue(HoistEnum.Inboundboxon, 1, task.TargetAddress);
Thread.Sleep(500);
}
}
if (!Work)
{
task.ExceptionMessage = $"【{task.TargetAddress}】写入3楼入库箱放到位失败";
task.Remark = $"{device.DeviceCode}_Inboundboxon_{1}_{task.TargetAddress}";
}
}
BaseDal.UpdateData(task);
}
//3 出提升机 之前是AGV_ToExecute
else if (task.TaskType == TaskTypeEnum.CK3F.ObjToInt() && task.TaskState == (int)TaskStatusEnum.TakeFinish)
{
var device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "TSJ") as OtherDevice;
if (device == null) task.ExceptionMessage = "未找到提升机信息";
else
{
bool Work = false;
if (device.IsConnected)
{
int i = 0;
while (!Work && i <= 3)
{
i++;
Work = device.SetValue(HoistEnum.Outboundboxon, 1, task.SourceAddress);//出库完成
Thread.Sleep(500);
}
}
if (!Work)
{
task.ExceptionMessage = $"【{task.SourceAddress}】写入3楼出库箱放到位失败";
task.Remark = $"{device.DeviceCode}_Outboundboxon_{1}_{task.SourceAddress}";
}
}
BaseDal.UpdateData(task);
}
//四楼 出库
else if ((task.TaskType == TaskTypeEnum.CHUKU1.ObjToInt() || task.TaskType == TaskTypeEnum.F04.ObjToInt()) && task.TaskState == (int)TaskStatusEnum.AGV_ToExecute)
{
var device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "TSJ") as OtherDevice;
if (device == null) task.ExceptionMessage = "未找到提升机信息";
else
{
bool Work = false;
if (device.IsConnected)
{
int i = 0;
while (!Work && i <= 3)
{
i++;
Work = device.SetValue(HoistEnum.Emptyboxplacedinposition, 1, task.TargetAddress);
Thread.Sleep(500);
}
}
if (!Work)
{
task.ExceptionMessage = $"【{task.TargetAddress}】写入4楼空箱放到位失败";
task.Remark = $"{device.DeviceCode}_Emptyboxplacedinposition_{1}_{task.TargetAddress}";
}
}
BaseDal.UpdateData(task);
}
// //四楼出提升机 入库 之前是AGV_ToExecute //要写成取货完成状态TakeFinish
else if ((task.TaskType == TaskTypeEnum.Q1TSJ4.ObjToInt() || task.TaskType == TaskTypeEnum.F03.ObjToInt()) && task.TaskState == (int)TaskStatusEnum.TakeFinish)
{
var device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "TSJ") as OtherDevice;
if (device == null) task.ExceptionMessage = "未找到提升机信息";
else
{
bool Work = false;
if (device.IsConnected)
{
int i = 0;
while (!Work && i <= 3)
{
i++;
Work = device.SetValue(HoistEnum.Outboundboxretrievalcompleted, 1, task.SourceAddress);
Thread.Sleep(500);
}
}
if (!Work)
{
task.ExceptionMessage = $"【{task.SourceAddress}】写入4楼出库取箱完成失败";
task.Remark = $"{device.DeviceCode}_Outboundboxretrievalcompleted_{1}_{task.SourceAddress}";
}
}
BaseDal.UpdateData(task);
}
//跨楼层
else if (task.TaskType == TaskTypeEnum.Q3RK.ObjToInt() || task.TaskType == TaskTypeEnum.Q3CK.ObjToInt()/* && task.TaskState == (int)TaskStatusEnum.TakeFinish*/)
{
var device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "F1") as OtherDevice;
if (device == null) task.ExceptionMessage = "未找到质检门信息";
else
{
bool Wok = false;
var Address = task.TaskType == TaskTypeEnum.Q3RK.ObjToInt() ? task.TargetAddress : task.SourceAddress;
if (device.IsConnected)
{
int i = 0;
while (!Wok && i <= 3)
{
i++;
Wok = device.SetValue(QualityInspectionCommandEnum.RequestToEnter, false, Address);
Thread.Sleep(500);
}
}
if (!Wok)
{
task.ExceptionMessage = $"【{Address}】关闭请求进入失败!";
task.Remark = $"{device.DeviceCode}_RequestToEnter_{false}_{Address}";
}
}
BaseDal.UpdateData(task);
}
}
break;
case "into"://申请进入提升机
{
task.TaskState = (int)TaskStatusEnum.AGV_WaitToExecute;
BaseDal.UpdateData(task);
}
break;
case "wait"://扫码等待
{
//要先开启扫码信号
var device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "TSJ") as OtherDevice;
if (device == null) task.ExceptionMessage = "未找到提升机信息";
else
{
bool Wok = false;
if (device.IsConnected)
{
int i = 0;
while (!Wok && i <= 3)
{
i++;
Wok = device.SetValue(HoistEnum.Codereadingtriggered, 1, "TSJR3F");
Thread.Sleep(500);
}
}
if (!Wok)
{
task.ExceptionMessage = $"【TSJR3F】3楼读码触发失败!";
task.Remark = $"{device.DeviceCode}_Codereadingtriggered_{1}_TSJR3F";
}
}
task.TaskState = (int)TaskStatusEnum.CheckPalletCodeing;
BaseDal.UpdateData(task);
}
break;
case "end"://任务完成通知
{
if (task.TaskType == (int)TaskTypeEnum.MOVE)
{
task.TaskState = TaskStatusEnum.Finish.ObjToInt();
BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.自动完成);
var Task = BaseDal.QueryFirst(x => task.WMSTaskNum.Contains(x.WMSTaskNum));
Task.TaskState = TaskStatusEnum.HkTransportCompleted.ObjToInt();
BaseDal.UpdateData(Task);
}
else
{
TaskCompleted(task, deviceTypeEnum);
}
}
break;
case "intolift": //进入电梯
{
//六楼到一楼的入库任务
if (task.TaskType == (int)TaskTypeEnum.Q3RK || task.TaskType == (int)TaskTypeEnum.MOVE || task.TaskType == (int)TaskTypeEnum.F01 || task.TaskType == (int)TaskTypeEnum.Q3CK)
{
task.TaskState = TaskStatusEnum.Hkintolift.ObjToInt();
BaseDal.UpdateData(task);
}
}
break;
case "leavelift": //离开电梯
{
if (task.TaskType == (int)TaskTypeEnum.Q3RK || task.TaskType == (int)TaskTypeEnum.MOVE || task.TaskType == (int)TaskTypeEnum.F01|| task.TaskType == (int)TaskTypeEnum.Q3CK)
{
task.TaskState = TaskStatusEnum.HKleavelift.ObjToInt();
BaseDal.UpdateData(task);
}
}
break;
default:
throw new Exception("未定义的方法名!");
//task.TaskState = ReturnTaskStatus(hIKROBOT.extra.values.method, deviceTypeEnum);
//BaseDal.UpdateData(task);
//break;
}
}
else //四向车
{
deviceName = "四向车";
Rgv = TaskDTO.Serialize().DeserializeObject();
if (Rgv == null) throw new Exception("参数转换失败!");
//var task = BaseDal.QueryFirst(x => x.RGVTaskId == Rgv.content.taskID);
var task = BaseDal.QueryFirst(x => x.PalletCode == Rgv.content.podID);
if (task == null) throw new Exception($"未找到任务,任务编号【{Rgv.content.taskID}】");
//移库
if (task.TaskType == TaskTypeEnum.CPMoveInventory.ObjToInt() && Rgv.messageType == 10 && Rgv.content.status == 4)
{
deviceName += "移库";
WMSMoveLocationFeedback wMSMoveLocationFeedback = new WMSMoveLocationFeedback()
{
containerCode = task.PalletCode,
fromStationCode = task.SourceAddress,
toLocationCode = task.TargetAddress
};
Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(WMSMoveLocationFeedback));
WMSReturn agvContent = null;
if (apiInfo == null) task.ExceptionMessage = "未找到移库完成反馈WMS接口配置信息!请检查接口配置";
else
{
task.TaskState = TaskStatusEnum.Finish.ObjToInt();
string response = HttpHelper.Post(apiInfo.ApiAddress, wMSMoveLocationFeedback.Serialize());
agvContent = response.DeserializeObject();
content.OK(data: agvContent);
if (agvContent.code != 200)
{
task.ExceptionMessage = agvContent.message;
content.Error(agvContent.message);
}
UpdateLocationStatus(task.TargetAddress, task.PalletCode, deviceTypeEnum, LocationStatusEnum.InStock);
BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.自动完成);
}
}
else
{
//站台到质检台
if (Rgv.messageType == 72)//小车顶起货物
{
if (task.TaskType == (int)TaskTypeEnum.CPInbound && task.TaskState == (int)TaskStatusEnum.Execut)
{
task.TaskState = (int)TaskStatusEnum.WaiCheckShape;
//BaseDal.UpdateData(task);//给质检门写入启动信号
var device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "F1") as OtherDevice;
if (device == null) task.ExceptionMessage = "未找到1楼质检门设备信息";
else
{
if (device.IsConnected)
device.SetValue(QualityInspectionCommandEnum.StartqualityInspection, true, task.SourceAddress);
else
task.ExceptionMessage = "1楼质检门设备连接失败";
}
TaskFeedback(task, 4);
}
else
{
//这里出库,这个接口中也返回给了wms状态
TaskFromCompleted(task, deviceTypeEnum);
}
}
else if (Rgv.messageType == 10)//质检台到目标货位
{
if (Rgv.content.status == 2) TaskFeedback(task, 1);
if (Rgv.content.status == 4)
{
if (task.TaskType == (int)TaskTypeEnum.CPInbound && task.TaskState == (int)TaskStatusEnum.TakeFinish)
{
if (!string.IsNullOrEmpty(task.ExceptionMessage)) task.TaskState = TaskStatusEnum.CheckShapeingNG.ObjToInt();
else task.TaskState = (int)TaskStatusEnum.CheckShapeing;
BaseDal.UpdateData(task);
}
else if (task.TaskType == (int)TaskTypeEnum.CPInbound && task.TaskState == (int)TaskStatusEnum.Puting)
{
if (!string.IsNullOrEmpty(task.ExceptionMessage) && !task.ExceptionMessage.Contains("由于目标计算机积极拒绝,无法连接"))
ErrorTaskFeedback(task, true/*!task.ExceptionMessage.Contains("外检失败")*/);
else
TaskCompleted(task, deviceTypeEnum);
}
else if (task.TaskType == (int)TaskTypeEnum.CPOutbound)//出库完成
{
TaskCompleted(task, deviceTypeEnum);
}
}
if (Rgv.content.status == 5)
{
task.ExceptionMessage = Rgv.content.errorReason;
var Error = _taskErrorMessageService.Repository.QueryFirst(x => x.ErrorCode == Rgv.content.errorCode && x.DeviceType == (int)deviceTypeEnum);
if (Error != null)
{
task.ExceptionMessage = Error.ExceptionMessage;
MatchCollection matches = Regex.Matches(Rgv.content.errorReason, @"\(([^)]+)\)");
if (matches.Count > 0)
task.ExceptionMessage = ReplacePlaceholders(Rgv.content.errorReason, Error.ExceptionMessage);
ErrorTaskFeedback(task, true, Error.ErrorCode.ToString());
}
else
ErrorTaskFeedback(task, true);
}
}
}
}
content.OK();
}
catch (Exception ex)
{
content.Error(ex.Message);
}
finally
{
_trackloginfoService.AddTrackLog(TaskDTO, content, $"{deviceName}任务状态反馈", "", "");
}
return content;
}
#endregion
#region 异常信息转换
///
/// 异常信息()内容转换
///
///
///
///
public string ReplacePlaceholders(string source, string targetTemplate)
{
// 提取源字符串中的所有括号值
var values = Regex.Matches(source, @"\(([^)]+)\)")
.Cast()
.Select(m => m.Groups[1].Value)
.ToList();
// 替换目标模板中的所有 (%v)
int idx = 0;
string result = Regex.Replace(targetTemplate, @"\(\%v\)", _ =>
idx < values.Count ? values[idx++] : "");
return result;
}
#endregion
#region 任务状态转换
public int ReturnTaskStatus(object status, DeviceTypeEnum deviceTypeEnum)
{
try
{
if (deviceTypeEnum == DeviceTypeEnum.GALAXIS)
{
TaskStatusEnum taskStatus = status switch
{
1 => TaskStatusEnum.FromOutOfStock,
2 => TaskStatusEnum.ToaddInStock,
3 => TaskStatusEnum.TaskNumRepetition,
5 => TaskStatusEnum.RCSDataError,
6 => TaskStatusEnum.TaskTypeError,
7 => TaskStatusEnum.ParameterError,
8 => TaskStatusEnum.RCSError,
10 => TaskStatusEnum.Takeing,
13 => TaskStatusEnum.Cancel,
_ => throw new ArgumentOutOfRangeException(
nameof(status),
status,
$"未知的任务状态码: {status}"
)
};
return (int)taskStatus;
}
else if (deviceTypeEnum == DeviceTypeEnum.HIKROBOT)
{
return 0;
}
else
{
return 0;
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
#endregion
#region 任务起点完成
///
/// 任务起点完成
///
///
///
///
public WebResponseContent TaskFromCompleted(Dt_Task dt_Task, DeviceTypeEnum deviceTypeEnum)
{
try
{
dt_Task.TaskState = TaskStatusEnum.TakeFinish.ObjToInt();
TaskFeedback(dt_Task, 4);
//Db.Ado.BeginTran();
UpdateLocationStatus(dt_Task.SourceAddress, dt_Task.PalletCode, deviceTypeEnum, LocationStatusEnum.Free);
//BaseDal.UpdateData(dt_Task);
//Db.Ado.CommitTran();
return WebResponseContent.Instance.OK();
}
catch (Exception ex)
{
Db.Ado.RollbackTran();
throw new Exception(ex.Message);
}
}
#endregion
#region 任务完成
///
/// 任务完成
///
///
///
///
public WebResponseContent TaskCompleted(Dt_Task dt_Task, DeviceTypeEnum deviceTypeEnum)
{
try
{
dt_Task.TaskState = TaskStatusEnum.Finish.ObjToInt();
TaskFeedback(dt_Task, 2, string.IsNullOrEmpty(dt_Task.Remark));
//Db.Ado.BeginTran();
UpdateLocationStatus(dt_Task.TargetAddress, dt_Task.PalletCode, deviceTypeEnum, LocationStatusEnum.InStock);
//Db.Ado.CommitTran();
return WebResponseContent.Instance.OK();
}
catch (Exception ex)
{
//Db.Ado.RollbackTran();
throw new Exception(ex.Message);
}
}
#endregion
#region 更新货位状态
///
/// 更新货位状态
///
///
///
///
///
public WebResponseContent UpdateLocationStatus(string locationCode, string palletCode, DeviceTypeEnum deviceTypeEnum, LocationStatusEnum locationStatusEnum)
{
try
{
if (deviceTypeEnum == DeviceTypeEnum.GALAXIS)
{
Dt_KLSLocationInfo? dt_KLSLocationInfo = _kLSLocationInfoService.Repository.QueryFirst(x => x.LocationCode == locationCode);
if (dt_KLSLocationInfo != null)
{
if (locationStatusEnum == LocationStatusEnum.Free) //如果起点完成就给货位赋值托盘号
{
dt_KLSLocationInfo.PalletCode = "";
}
else
{
dt_KLSLocationInfo.PalletCode = palletCode;
}
dt_KLSLocationInfo.LocationStatus = locationStatusEnum.ObjToInt();
_kLSLocationInfoService.Repository.UpdateData(dt_KLSLocationInfo);
}
}
else if (deviceTypeEnum == DeviceTypeEnum.HIKROBOT)
{
Dt_HKLocationInfo? dt_HKLocationInfo = _hKLocationInfoService.Repository.QueryFirst(x => x.LocationCode == locationCode);
if (dt_HKLocationInfo != null)
{
if (locationStatusEnum == LocationStatusEnum.Free) //如果起点完成就给货位赋值托盘号
{
dt_HKLocationInfo.PalletCode = "";
}
else
{
dt_HKLocationInfo.PalletCode = palletCode;
}
dt_HKLocationInfo.LocationStatus = locationStatusEnum.ObjToInt();
_hKLocationInfoService.Repository.UpdateData(dt_HKLocationInfo);
}
Dt_StationInfo? stationInfo = _stationInfo.Repository.QueryFirst(x => x.StationCode == locationCode);
if (stationInfo != null)
{
if (locationStatusEnum == LocationStatusEnum.Free) //如果起点完成就给货位赋值托盘号
{
stationInfo.PalletCode = "";
}
else
{
stationInfo.PalletCode = palletCode;
}
stationInfo.StationStatus = locationStatusEnum.ObjToInt();
_stationInfo.UpdateData(stationInfo);
}
Dt_StationManger stationManger = _stationMangerService.Repository.QueryFirst(x => x.StationCode == locationCode);
if (stationManger != null)
{
if (locationStatusEnum == LocationStatusEnum.Free) //如果起点完成就给货位赋值托盘号
{
stationManger.Remark = "";
stationManger.IsOccupied = LocationStatusEnum.Free.ObjToInt();
}
else
{
stationManger.Remark = palletCode;
stationManger.IsOccupied = LocationStatusEnum.Lock.ObjToInt();
}
_stationMangerService.UpdateData(stationManger);
}
}
else if (deviceTypeEnum == DeviceTypeEnum.YuanLiJuHe)
{
Dt_RGVLocationInfo dt_RGVLocationInfo = _rGVLocationInfoService.Repository.QueryFirst(x => x.LocationCode == locationCode);
//这里将任务的托盘号给货位表中的PalletCode字段。
if (dt_RGVLocationInfo != null)
{
if (locationStatusEnum == LocationStatusEnum.Free) //如果起点完成就给货位赋值托盘号
{
dt_RGVLocationInfo.PalletCode = "";
}
else
{
dt_RGVLocationInfo.PalletCode = palletCode;
}
dt_RGVLocationInfo.LocationStatus = locationStatusEnum.ObjToInt();
_rGVLocationInfoService.Repository.UpdateData(dt_RGVLocationInfo);
}
}
else//平库库位
{
}
return WebResponseContent.Instance.OK();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
#endregion
#region 更新一楼站台状态
public WebResponseContent UpdateStandStatus(Dt_Task task, string stationCode, LocationStatusEnum locationStatusEnum)
{
try
{
Dt_StationManger? stationManger = _stationMangerService.Repository.QueryFirst(x => x.StationCode == task.TargetAddress);
//stationManger.IsOccupied = LocationStatusEnum.Lock.ObjToInt();
if (stationManger != null)
{
if (locationStatusEnum == LocationStatusEnum.Free) //如果起点完成就给货位赋值托盘号
{
stationManger.IsOccupied = LocationStatusEnum.Lock.ObjToInt();
}
else
{
stationManger.IsOccupied = LocationStatusEnum.Free.ObjToInt();
}
_stationMangerService.UpdateData(stationManger);
}
return WebResponseContent.Instance.OK();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
#endregion
#region 上报WMS
public WebResponseContent TaskFeedback(Dt_Task dt_Task, int Status, bool Del = false)
{
WebResponseContent content = new WebResponseContent();
WMSInOutBoundCompleteFeedback boundCompleteFeedback = new WMSInOutBoundCompleteFeedback();
WMSReturn agvContent = null;
try
{
Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(WMSInOutBoundCompleteFeedback));
if (apiInfo == null) dt_Task.ExceptionMessage = "未找到出入库完成反馈WMS接口配置信息!请检查接口配置";
else
{
boundCompleteFeedback.taskCode = dt_Task.WMSTaskNum;
boundCompleteFeedback.containerCode = dt_Task.PalletCode;
boundCompleteFeedback.fromStationCode = dt_Task.SourceAddress;
boundCompleteFeedback.toLocationCode = dt_Task.TargetAddress;
boundCompleteFeedback.status = Status;
boundCompleteFeedback.custStatus = "";
string response = HttpHelper.Post(apiInfo.ApiAddress, boundCompleteFeedback.Serialize());
agvContent = response.DeserializeObject();
content.OK(data: agvContent);
if (agvContent.code != 200)
{
dt_Task.ExceptionMessage = agvContent.message;
content.Error(agvContent.message);
}
}
}
catch (Exception ex)
{
dt_Task.ExceptionMessage = ex.Message;
}
finally
{
_trackloginfoService.AddTrackLog(boundCompleteFeedback, content, "出入库任务状态反馈WMS", "", "");
if (agvContent != null && agvContent.code == 200 && Del)
BaseDal.DeleteAndMoveIntoHty(dt_Task, OperateTypeEnum.自动完成);
else
BaseDal.UpdateData(dt_Task);
}
return WebResponseContent.Instance.OK();
}
#endregion
#region 失败任务上报WMS并删除任务
public WebResponseContent ErrorTaskFeedback(Dt_Task dt_Task, bool Del = false, string ErrorCode = "")
{
WebResponseContent content = new WebResponseContent();
WMSInOutBoundCompleteFeedback boundCompleteFeedback = new WMSInOutBoundCompleteFeedback();
WMSReturn agvContent = null;
try
{
Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(WMSInOutBoundCompleteFeedback));
if (apiInfo == null) dt_Task.ExceptionMessage = "未找到出入库完成反馈WMS接口配置信息!请检查接口配置";
else
{
boundCompleteFeedback.taskCode = dt_Task.WMSTaskNum;
boundCompleteFeedback.containerCode = dt_Task.PalletCode;
boundCompleteFeedback.fromStationCode = dt_Task.SourceAddress;
boundCompleteFeedback.toLocationCode = dt_Task.TargetAddress;
boundCompleteFeedback.status = 3;
boundCompleteFeedback.custStatus = ErrorCode;
boundCompleteFeedback.memo = dt_Task.ExceptionMessage;
string response = HttpHelper.Post(apiInfo.ApiAddress, boundCompleteFeedback.Serialize());
agvContent = response.DeserializeObject();
content.OK(data: agvContent);
content.Message = dt_Task.ExceptionMessage;
if (agvContent.code != 200)
{
dt_Task.ExceptionMessage = agvContent.message;
content.Error(agvContent.message);
}
}
}
catch (Exception ex)
{
dt_Task.ExceptionMessage = ex.Message;
content.Error(ex.Message);
}
finally
{
_trackloginfoService.AddTrackLog(boundCompleteFeedback, content, "出入库任务状态反馈WMS", "", "");
if (agvContent != null && agvContent.code == 200 && Del)
BaseDal.DeleteAndMoveIntoHty(dt_Task, OperateTypeEnum.自动删除);
else BaseDal.UpdateData(dt_Task);
}
return content;
}
#endregion
}
}