using HH.WCS.Mobox3.ZS7412.dispatch;
using HH.WCS.Mobox3.ZS7412.models;
using HH.WCS.Mobox3.ZS7412.process;
using HH.WCS.Mobox3.ZS7412.wms;
using Newtonsoft.Json;
using S7.Net.Types;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using static HH.WCS.Mobox3.ZS7412.api.ApiModel;
namespace HH.WCS.Mobox3.ZS7412.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 wcsTask = wms.WCSHelper.GetTask(model.No);
if (wcsTask != null)
{
if (model.State <= 7)
{
//有任务号请求
switch (model.State)
{
case 1:
wms.WCSHelper.Begin(wcsTask);
break;
#region MyRegion
case 3:
wms.WCSHelper.UpdateStatus(wcsTask, "开始取货");
break;
case 4:
wms.WCSHelper.UpdateStatus(wcsTask, "取货完成");
TaskProcess.OperateStatus(wcsTask, 4);
break;
case 5:
wms.WCSHelper.UpdateStatus(wcsTask, "开始卸货");
break;
case 6:
wms.WCSHelper.UpdateStatus(wcsTask, "卸货完成");
TaskProcess.OperateStatus(wcsTask, 6);
break;
#endregion
case 2:
wms.WCSHelper.End(wcsTask);
break;
case 7:
//判断是否收到过强制取消,有就不做任何处理
if (!wms.WCSHelper.CheckActionRecordExist(wcsTask.S_CODE, 17))
{
TaskProcess.OperateStatus(wcsTask, 7);
wms.WCSHelper.Fail(wcsTask);
}
break;
}
wms.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 = wms.WCSHelper.GetWaitingTaskList();
if (list.Count > 0)
{
int count2f = 0;
int count3f = 0;
list.ForEach(task =>
{
if (task.S_START_LOC.Contains("2F-ZC-AGV"))
{
if (count2f == 0)
{
//使用自定义任务推送
TaskProcess.SendTask(task);
}
count2f++;
}
else if (task.S_START_LOC.Contains("3F-ZC-AGV"))
{
if (count3f == 0)
{
//使用自定义任务推送
TaskProcess.SendTask(task);
}
count3f++;
}
else {
//使用自定义任务推送
TaskProcess.SendTask(task);
}
});
}
}
///
/// 杭奥堆垛机信号反馈
///
///
internal static void OperateHATaskStatus(HanAo.TaskStateInfoModel model)
{
var wcsTask = wms.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;
wms.WCSHelper.UpdateStatus(wcsTask);
var wmsTask = WMSHelper.GetWmsTask(wcsTask.S_OP_CODE);
if (wmsTask != null)
{
wmsTask.N_B_STATE = 2;
WMSHelper.UpdateTaskState(wmsTask);
}
}
}
}
///
/// 国自AGV信号反馈
/// state 0等待 1执行中 3开始取货 4取货完成 5开始卸货 6卸货完成 2完成 7取消
///
///
internal static void OperateGZTaskStatus(GZAgvTaskState model)
{
int state = 0;
var TN_Task = wms.WCSHelper.GetTaskByEQTaskNo(model.OrderID.ToString());
if (TN_Task != null)
{
if (model.errorCode == 0)
{
if (model.OrderStatus != null && model.OrderStatus != "")
{
switch (model.OrderStatus)
{
case "waiting":
wms.WCSHelper.Begin(TN_Task);
wms.WCSHelper.UpdateStatus(TN_Task, "等待处理");
break;
case "active":
wms.WCSHelper.UpdateStatus(TN_Task, "正在处理");
state = 1; // 执行中
break;
case "dispatched":
wms.WCSHelper.UpdateStatus(TN_Task, "AGV调度中");
state = 3; // 取货中
break;
case "source_finish":
wms.WCSHelper.UpdateStatus(TN_Task, "起点完成");
state = 4; // 取货完成
break;
case "dest_finish":
wms.WCSHelper.UpdateStatus(TN_Task, "卸货完成");
state = 6; // 卸货完成
break;
case "finish":
wms.WCSHelper.End(TN_Task);
TrayStat trayStat = WCSHelper.GetTrayStat(TN_Task.S_END_LOC);
if (trayStat != null)
{
trayStat.TRAY_NUM = 5;
WCSHelper.updateTrayStatNum(trayStat);
}
state = 2; // 完成
break;
case "error":
wms.WCSHelper.Fail(TN_Task);
state = 7; // 取消
break;
case "cancel_finish":
wms.WCSHelper.UpdateStatus(TN_Task, "取消");
state = 7; // 取消
break;
case "manually_finish":
wms.WCSHelper.End(TN_Task);
wms.WCSHelper.UpdateStatus(TN_Task, "手动完成");
state = 2; // 完成
break;
}
wms.WCSHelper.AddActionRecord(TN_Task.S_CODE, state, model.agvIDList.Split(',').ToList().First(), model.extraInfo1);
//调用第三方接口(如果有)TaskProcess.ReportStatus
int avgNo = 0;
if (model.agvIDList != null) {
int.TryParse(model.agvIDList.Split(',').First(), out avgNo);
}
HanAo.TaskReportInfo taskReportInfo = new HanAo.TaskReportInfo
{
taskNo = TN_Task.S_OP_CODE,
state = state,
agvNo = avgNo,
};
if (state != 0) {
if (!HanAo.Taskreport(taskReportInfo))
{
LogHelper.Debug("任务号:" + TN_Task.S_CODE + ",任务状态回报上游失败", "ZS7412");
};
}
}
else
{
LogHelper.Debug("订单状态为空", "国自");
}
}
}
}
public static int safetyInteraction(SafetyInfo model) {
bool result = true;
if (model.station_name != null) {
switch (model.apply_code) {
case 1:
result = HanAo.CanIn(model.station_name);
break;
case 2:
break;
case 4:
result = HanAo.safeWithdraw(model.station_name , model.orderid, 1);
break;
case 5:
result = HanAo.CanOut(model.station_name);
break;
case 6:
break;
case 8:
result = HanAo.safeWithdraw(model.station_name , model.orderid, 2);
break;
}
}
return result?0:1;
}
}
}