| | |
| | | { |
| | | public static void OperateAgvTaskStatus(AgvTaskState model) |
| | | { |
| | | var TN_Task = WCSHelper.GetTask(model.No); |
| | | if (TN_Task != null) |
| | | { |
| | | if (model.State <= 7) |
| | | { |
| | | if (model == null) return; |
| | | |
| | | //有任务号请求 |
| | | switch (model.State) |
| | | var task = WCSHelper.GetTask(model.No); |
| | | if (task == null) return; |
| | | |
| | | if (model.State > 7) return; |
| | | |
| | | // 状态与操作的映射字典 |
| | | var stateActions = new Dictionary<int, Action> |
| | | { |
| | | 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); |
| | | break; |
| | | case 5: |
| | | WCSHelper.UpdateStatus(TN_Task, "开始卸货"); |
| | | break; |
| | | case 6: |
| | | WCSHelper.UpdateStatus(TN_Task, "卸货完成"); |
| | | TaskProcess.OperateStatus(TN_Task, 6); |
| | | break; |
| | | #endregion |
| | | case 2: |
| | | WCSHelper.End(TN_Task); |
| | | //根据任务类型更新作业状态和终点 |
| | | var taskList = Settings.CompleteTasks; |
| | | if (taskList.taskType.Contains(TN_Task.S_TYPE)) |
| | | [1] = () => WCSHelper.Begin(task), |
| | | [2] = () => HandleTaskCompletion(task), |
| | | [3] = () => WCSHelper.UpdateStatus(task, "开始取货"), |
| | | [4] = () => HandlePickCompletion(task), |
| | | [5] = () => WCSHelper.UpdateStatus(task, "开始卸货"), |
| | | [6] = () => HandleUnloadCompletion(task), |
| | | [7] = () => HandleTaskFailure(task) |
| | | }; |
| | | |
| | | if (stateActions.TryGetValue(model.State, out var action)) |
| | | { |
| | | //完成作业 |
| | | WMSHelper.UpdateWmsTask(TN_Task, 2); |
| | | WMSHelper.UpdateDistributionCntrState(2, 3, TN_Task.S_CNTR_CODE); |
| | | } |
| | | if (new List<string> { "料箱入库", "托盘入库" }.Contains(TN_Task.S_TYPE)) |
| | | { |
| | | ContainerHelper.UpdateCntrItem(TN_Task.S_CNTR_CODE); |
| | | } |
| | | //if (WMSHelper.DeleteChange(TN_Task)) |
| | | //{ |
| | | // WMSHelper.AddChange(TN_Task); |
| | | //} |
| | | break; |
| | | case 7: |
| | | TaskProcess.OperateStatus(TN_Task, 7); |
| | | WCSHelper.Fail(TN_Task); |
| | | break; |
| | | } |
| | | action.Invoke(); |
| | | WCSHelper.AddActionRecord(model.No, model.State, model.ForkliftNo, model.ExtData); |
| | | |
| | | } |
| | | } |
| | | |
| | | // 处理任务完成逻辑 |
| | | private static void HandleTaskCompletion(WCSTask task) |
| | | { |
| | | WCSHelper.End(task); |
| | | |
| | | // 根据任务类型处理不同的完成逻辑 |
| | | if (Settings.CompleteTasks.taskType.Contains(task.S_TYPE)) |
| | | { |
| | | WMSHelper.UpdateWmsTask(task, 2); |
| | | WMSHelper.UpdateDistributionCntrState(2, 3, task.S_CNTR_CODE); |
| | | } |
| | | |
| | | if (new List<string> { "料箱入库", "托盘入库" }.Contains(task.S_TYPE)) |
| | | { |
| | | ContainerHelper.UpdateCntrItem(task.S_CNTR_CODE); |
| | | } |
| | | |
| | | // 处理区域变更 |
| | | HandleAreaChange(task); |
| | | } |
| | | |
| | | // 处理取货完成逻辑 |
| | | private static void HandlePickCompletion(WCSTask task) |
| | | { |
| | | WCSHelper.UpdateStatus(task, "取货完成"); |
| | | TaskProcess.OperateStatus(task, 4); |
| | | } |
| | | |
| | | // 处理卸货完成逻辑 |
| | | private static void HandleUnloadCompletion(WCSTask task) |
| | | { |
| | | WCSHelper.UpdateStatus(task, "卸货完成"); |
| | | TaskProcess.OperateStatus(task, 6); |
| | | } |
| | | |
| | | // 处理任务失败逻辑 |
| | | private static void HandleTaskFailure(WCSTask task) |
| | | { |
| | | TaskProcess.OperateStatus(task, 7); |
| | | WCSHelper.Fail(task); |
| | | } |
| | | |
| | | // 处理区域变更逻辑 |
| | | private static void HandleAreaChange(WCSTask task) |
| | | { |
| | | var areas = new List<string> { "TPLKQ", "LXLKQ" }; |
| | | |
| | | if (areas.Contains(task.S_START_AREA)) |
| | | { |
| | | WMSHelper.DeleteChange(task); |
| | | } |
| | | |
| | | if (areas.Contains(task.S_END_AREA)) |
| | | { |
| | | WMSHelper.AddChange(task); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// 任务分发,根据调度类型发给不同的调度系统 |
| | |
| | | var list = WMSHelper.GetWmsTaskListByState("等待"); |
| | | if (list.Count > 0) |
| | | { |
| | | |
| | | list.ForEach(task => |
| | | list.ForEach(async task => |
| | | { |
| | | //生成入库任务 |
| | | TaskProcess.CreateInTask(task); |
| | | await TaskProcess.CreateInTask(task); |
| | | }); |
| | | } |
| | | //查询任务 |
| | |
| | | { |
| | | exelist.ForEach(task => |
| | | { |
| | | //生成入库任务 |
| | | //生成从分拣暂存区到集货托盘位的任务任务 |
| | | TaskProcess.exeCreateInTask(task); |
| | | }); |
| | | } |