using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using HH.WCS.Mobox3.DSZSH.api;
using HH.WCS.Mobox3.DSZSH.device;
using HH.WCS.Mobox3.DSZSH.models;
using HH.WCS.Mobox3.DSZSH.process;
using HH.WCS.Mobox3.DSZSH.util;
using HH.WCS.Mobox3.DSZSH.wms;
using Newtonsoft.Json;
using Swashbuckle.Swagger;
using static HH.WCS.Mobox3.DSZSH.api.ApiModel;
namespace HH.WCS.Mobox3.DSZSH.core {
public class WCSCore {
public static ReturnResult OperateAgvTaskStatus(AgvTaskState model) {
const string preLog = "AGV:任务状态回报:";
try {
if (model.state > 0) {
// AGV 执行任务的逻辑处理
if (!AgvTaskProcessOk(model)) {
// 执行不OK,说明没有找到任务
return NewReturnResult(1, preLog + $"根据任务号'{model.task_no}'未找到对应的任务!");
}
}
return NewReturnResult(0, "success"); // 不返回详细成功日志,避免NDC以msg=success作为成功判定 (参考国自)
}
catch (Exception ex) {
return NewReturnResult(-1, $"发生了异常:{ex.Message}\n\n{ex.StackTrace}\n");
}
}
///
/// 执行 AGV 任务,查询不到任务返回
///
///
///
private static bool AgvTaskProcessOk(AgvTaskState model) {
var TN_Task = WCSHelper.GetTask(model.task_no); // 根据当前model编号查询任务
if (TN_Task == null) { return false; }
if (model.state > 7) {
//安全请求等
TaskProcess.OperateReq(model.task_no, model.state, model.forklift_no, model.ext_data);
return true;
}
// AGV 任务 134562(7) 状态处理
switch (model.state) {
case 1: // 执行
WCSHelper.Begin(TN_Task, model.forklift_no); // 已推送的任务的状态改成执行
break;
case 3: // 开始取货
WCSHelper.UpdateStatus(TN_Task, "开始取货"); // 任务状态改成开始取货
break;
case 4: // 取货完成
WCSHelper.UpdateStatus(TN_Task, "取货完成"); // 任务状态改成取货完成
TaskProcess.OperateStatus(TN_Task, 4); // 起点容器货位解绑,解锁起点
if (TN_Task.S_TYPE == ETask.C成品胶出库.Name()) {
var nextOutboundTask = Task.Run(() => {
UpdateOutboundTaskState(3);
});
var pickUpReturnErpTask = Task.Run(() => {
PickUpReturnErp(TN_Task);
});
}
break;
case 5: // 开始卸货
WCSHelper.UpdateStatus(TN_Task, "开始卸货"); // 任务状态改成开始卸货
break;
case 6: // 卸货完成
WCSHelper.UpdateStatus(TN_Task, "卸货完成"); // 任务状态改成卸货完成
TaskProcess.OperateStatus(TN_Task, 6); // 终点容器货位绑定,解锁终点
break;
case 2: // 完成
WCSHelper.End(TN_Task); // 任务状态改成结束
//if (TN_Task.S_TYPE == TaskName.抽检_出库) {
// var checkCompleteTask = Task.Run(() => {
// UpdateCheckTaskState(3);
// });
//}
var recordTask = Task.Run(() => {
RecordTaskTable(TN_Task);
});
break;
case 7: // 异常
TaskProcess.OperateStatus(TN_Task, 7); // 异常处理
WCSHelper.Fail(TN_Task); // 任务状态改成错误
break;
}
// 将AGV执行状态,加入TN_Task_Action表中
WCSHelper.AddActionRecord(model.task_no, model.state, model.forklift_no, model.ext_data);
//调用第三方接口 (如果有) TaskProcess.ReportStatus,添加任务动作关系表
return true;
}
private static void RecordTaskTable(TN_Task task) {
var db = new SqlHelper