using System;
using System.Collections.Generic;
using System.Linq;
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 static HH.WCS.Mobox3.DSZSH.api.ApiModel;
namespace HH.WCS.Mobox3.DSZSH.core {
public class WCSCore {
public static ReturnResult OperateAgvTaskStatus(AgvTaskState model) {
var result = new ReturnResult();
try {
switch (model.state) {
case 1023:
break;
case 1025:
break;
case 1012:
break;
case 1004:
break;
case 1103:
break;
default:
// AGV 执行任务的逻辑处理
if (!AgvTaskProcessOk(model)) {
// 执行不OK,说明没有找到任务
result.ResultCode = 1;
result.ResultMsg = $"根据Model.No未找到对应的任务,{model.task_no}";
LogHelper.Info(result.ResultMsg, "API");
return result;
}
break;
}
result.ResultCode = 0;
result.ResultMsg = "success";
LogHelper.Info(result.ResultMsg, "API");
return result;
}
catch (Exception ex) {
result.ResultCode = -1;
result.ResultMsg = $"发生了异常:+{ex.Message}";
LogHelper.Info(result.ResultMsg, "Error");
return result;
}
}
///
/// 执行 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 == TaskName.C成品胶出库) {
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