1
pengmn
2025-05-29 f2518583da4cc3d3737986e112b92154535aea4d
HH.WCS.Mobox3.HangYang/core/WCSCore.cs
@@ -13,56 +13,91 @@
    {
        public static void OperateAgvTaskStatus(AgvTaskState model)
        {
            var TN_Task = WCSHelper.GetTask(model.No);
            if (TN_Task != null)
            if (model == null) return;
            var task = WCSHelper.GetTask(model.No);
            if (task == null) return;
            if (model.State > 7) return;
            // 状态与操作的映射字典
            var stateActions = new Dictionary<int, Action>
            {
                if (model.State <= 7)
                {
                [1] = () => WCSHelper.Begin(task),
                [2] = () => HandleTaskCompletion(task),
                [3] = () => WCSHelper.UpdateStatus(task, "开始取货"),
                [4] = () => HandlePickCompletion(task),
                [5] = () => WCSHelper.UpdateStatus(task, "开始卸货"),
                [6] = () => HandleUnloadCompletion(task),
                [7] = () => HandleTaskFailure(task)
            };
                    //有任务号请求
                    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);
                            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))
                            {
                                //完成作业
                                WMSHelper.UpdateWmsTask(TN_Task, 3);
                            }
                            break;
                        case 7:
                            TaskProcess.OperateStatus(TN_Task, 7);
                            WCSHelper.Fail(TN_Task);
                            break;
                    }
                    WCSHelper.AddActionRecord(model.No, model.State, model.ForkliftNo, model.ExtData);
                }
            if (stateActions.TryGetValue(model.State, out var action))
            {
                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>
        /// 任务分发,根据调度类型发给不同的调度系统
@@ -93,14 +128,24 @@
            {
                //查询任务
                //获取所有等待的作业
                var list = WMSHelper.GetWmsTaskListByState("等待"); ;
                var list = WMSHelper.GetWmsTaskListByState("等待");
                if (list.Count > 0)
                {
                    list.ForEach(task =>
                    list.ForEach(async task =>
                    {
                        //生成入库任务
                        TaskProcess.CreateInTask(task);
                        await TaskProcess.CreateInTask(task);
                    });
                }
                //查询任务
                //获取所有执行的作业
                var exelist = WMSHelper.GetWmsTaskListByState("执行");
                if (exelist.Count > 0)
                {
                    exelist.ForEach(task =>
                    {
                        //生成从分拣暂存区到集货托盘位的任务任务
                        TaskProcess.exeCreateInTask(task);
                    });
                }
            }
@@ -157,7 +202,7 @@
            try
            {
                //查询已配盘的配盘单
                var list = WMSHelper.GetPickingListByState("配货完成");
                var list = WMSHelper.GetPickingListByState(1);
                if (list.Count > 0)
                {
                    TaskProcess.GenerateFromPicking(list);