using HH.WCS.DaYang.dispatch;
using HH.WCS.DaYang.process;
using HH.WCS.DaYang.wms;
using System;
using System.Collections.Generic;
using System.Linq;
using static HH.WCS.DaYang.api.ApiModel;
namespace HH.WCS.DaYang.core
{
internal class WCSCore
{
public static void OperateAgvTaskStatus(AgvTaskState model)
{
if (string.IsNullOrEmpty(model.No))
{
//无任务号请求(交管)
DeviceProcess.Traffic(model.ForkliftNo, model.LockNo, model.State == 1023);
}
else
{
var TN_Task = WCSHelper.GetTask(model.No);
if (TN_Task != null)
{
if (model.State <= 7)
{
//有任务号请求
switch (model.State)
{
case 1:
WCSHelper.Begin(TN_Task);
break;
#region MyRegion
case 3:
WCSHelper.UpdateStatus(TN_Task, "开始取货");
break;
case 4:
WCSHelper.UpdateStatus(TN_Task, "取货完成");
TaskProcess.OperateStatus(TN_Task, 4);
//if (TN_Task.S_TYPE == "出库")
//{
// WMSHelper.DeletetWHInventory(TN_Task);
//}
// WMSHelper.DeleteAZLInventory(TN_Task);
break;
case 5:
WCSHelper.UpdateStatus(TN_Task, "开始卸货");
break;
case 6:
WCSHelper.UpdateStatus(TN_Task, "卸货完成");
TaskProcess.OperateStatus(TN_Task, 6);
//if (TN_Task.S_TYPE == "入库")
//{
// WMSHelper.AddWHInventory(TN_Task);
//}
// WMSHelper.AddAZLInventory(TN_Task);
break;
#endregion
case 2:
WCSHelper.End(TN_Task);
break;
case 7:
TaskProcess.OperateStatus(TN_Task, 7);
WCSHelper.Fail(TN_Task);
break;
}
WCSHelper.AddActionRecord(model.No, model.State, model.ForkliftNo, model.ExtData);
//调用第三方接口(如果有)TaskProcess.ReportStatus
}
else
{
//安全请求等
TaskProcess.OperateReq(model.No, model.State, model.ForkliftNo, model.ExtData);
}
}
}
}
///
/// 任务分发,根据调度类型发给不同的调度系统
///
internal static void Dispatch()
{
//查询任务
//获取所有等待的任务
var list = WCSHelper.GetTaskListByState("等待");
if (list.Count > 0)
{
list.ForEach(task =>
{
if (!TaskProcess.Intercept(task))
{
//使用自定义任务推送
TaskProcess.SendTask(task);
}
});
}
}
///
/// 杭奥堆垛机信号反馈
///
///
internal static void OperateHATaskStatus(HanAo.TaskStateInfoModel model)
{
var wcsTask = WCSHelper.GetTask(model.requestPk);
if (wcsTask != null)
{
if (model.code == "0")
{
//
if (wcsTask.S_TYPE == "堆垛机入库")
{
//终点托盘绑定
if (LocationHelper.BindingLoc(wcsTask.S_END_LOC, new List { wcsTask.S_CNTR_CODE }))
{
//修改托盘状态为可用,增加库存量表,后面分拣出可以计算到
ContainerHelper.Enable(wcsTask.S_CNTR_CODE, wcsTask.S_END_LOC);
}
}
else if (wcsTask.S_TYPE == "堆垛机出库")
{
//起点托盘解绑
LocationHelper.UnBindingLoc(wcsTask.S_START_LOC, new List { wcsTask.S_CNTR_CODE });
}
//标记任务完成
//标记作业完成
wcsTask.N_B_STATE = 3;
WCSHelper.UpdateStatus(wcsTask);
var wmsTask = WMSHelper.GetWmsTask(wcsTask.S_OP_CODE);
if (wmsTask != null)
{
wmsTask.N_B_STATE = 2;
WMSHelper.UpdateTaskState(wmsTask);
}
}
}
}
}
}