using HH.WCS.ZhongCeJinTan.api; using HH.WCS.ZhongCeJinTan.device; using HH.WCS.ZhongCeJinTan.dispatch; using HH.WCS.ZhongCeJinTan.process; using HH.WCS.ZhongCeJinTan.util; using HH.WCS.ZhongCeJinTan.wms; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Threading.Tasks; using System.Web.Services.Description; using Top.Api; using static HH.WCS.ZhongCeJinTan.api.ApiModel; using static HH.WCS.ZhongCeJinTan.util.Settings; namespace HH.WCS.ZhongCeJinTan.core { internal class TaskCore { public static void OperateTaskStatus(AgvTaskState model) { var wmsTask = TaskHelper.GetTask(model.task_no); var db = new SqlHelper().GetInstance(); LogHelper.Info("OperateTaskStatus--任务信息" + JsonConvert.SerializeObject(wmsTask), "API"); LogHelper.Info("OperateTaskStatus--参数信息" + JsonConvert.SerializeObject(model), "API"); if (wmsTask != null) { if (model.state <= 7) { //有任务号请求 switch (model.state) { case 1: TaskHelper.Begin(wmsTask,model.forklift_no); //胎面交互 TaskHelper.TmSafety(wmsTask); break; case 3: TaskHelper.UpdateStatus(wmsTask, "开始取货"); break; case 4: TaskHelper.UpdateStatus(wmsTask, "取货完成"); LocationHelper.UnLockLoc(wmsTask.S_START_LOC); TaskProcess.OperateStatus(wmsTask, 4); break; case 5: TaskHelper.UpdateStatus(wmsTask, "开始卸货"); break; case 6: TaskHelper.UpdateStatus(wmsTask, "卸货完成"); LocationHelper.UnLockLoc(wmsTask.S_END_LOC); TaskProcess.OperateStatus(wmsTask, 6); //如果是二段任务则下发立库任务 var wcsTask = TaskHelper.GetTaskByState("未执行", "wcs", wmsTask.S_OP_CODE,"入库"); if (wcsTask!=null) { LocationHelper.LockLoc(wcsTask.S_START_LOC, "出库锁", 2); WcsTask.WcsTaskEntity(wcsTask); } break; case 2: TaskHelper.End(wmsTask); break; case 7: var wcsTask1 = TaskHelper.GetTaskByWorkNo(wmsTask.S_OP_CODE, "wcs"); if (wcsTask1!=null) { //agv执行通知 wcs取消 WcsTask.WcsCallback(wmsTask, model.state, model.forklift_no); if (!TaskHelper.CheckActionRecordExist(wcsTask1.S_CODE, "6")) { TaskHelper.Fail(wcsTask1); TaskProcess.OperateStatus(wcsTask1, 7); } } TaskHelper.Fail(wmsTask); TaskProcess.OperateStatus(wmsTask, 7); //入库或者回库任务取消删除托盘物料 if (wmsTask.S_TYPE.Contains("入库") || wmsTask.S_TYPE.Contains("回库")) { ContainerHelper.delCntr(wmsTask.S_CNTR_CODE); ContainerHelper.delCntrItem(wmsTask.S_CNTR_CODE); } //出库取消判断接驳位是否有货,有货需要解绑 if (!WcsTask.WcsCvstate(wmsTask)) { LogHelper.Info($"Wcs立库接驳位无货,解绑货位:{wmsTask.S_START_LOC}", "立库"); TaskProcess.OperateStatus(wmsTask, 4); ContainerHelper.delCntr(wmsTask.S_CNTR_CODE); ContainerHelper.delCntrItem(wmsTask.S_CNTR_CODE); } break; } TaskHelper.AddActionRecord(wmsTask.S_CODE, model.state, model.forklift_no, model.ext_data); } else { //安全请求等 TaskProcess.OperateReq(model.task_no, model.state, model.forklift_no, model.ext_data); } } } /// /// agv任务分发 /// internal static void Dispatch() { //查询任务 //获取所有未执行的agv任务 var list = TaskHelper.GetTaskListByState("未执行", "agv"); if (list.Count > 0) { list.ForEach(task => { //任务拦截 if (TaskHelper.Intercept()) { TaskProcess.SendTask(task); } }); } } /// /// 立库任务分发 /// internal static void Dispatch1() { //查询任务 //获取所有未执行的wcs任务 var list = TaskHelper.GetWcsTaskListByState("未执行", "wcs","出库"); if (list.Count > 0) { list.ForEach(task => { WcsTask.WcsTaskEntity(task); }); } } } }