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; } } }