wanshenmean
3 天以前 b690250002ee04f4309e6a90fd16fbfd9bd959e2
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotSimpleCommandHandler.cs
@@ -1,8 +1,5 @@
using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
using Serilog;
using System.Net;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core.LogHelper;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_Tasks.Workflow.Abstractions;
@@ -108,8 +105,20 @@
                case "homed":
                    state.Homed = "Homed";
                    await _socketClientGateway.SendToClientAsync(state.IPAddress, "Homed");
                    return true;
                    if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
                    {
                        for (int i = 0; i < 5; i++)
                        {
                            QuartzLogHelper.LogDebug(_logger, $"发送回零完成消息,IP: {state.IPAddress},正在重试...", state.RobotCrane?.DeviceName ?? "Unknown");
                            await _socketClientGateway.SendToClientAsync(state.IPAddress, "Homed");
                        }
                        return true;
                    }
                    else
                    {
                        QuartzLogHelper.LogError(_logger, $"发送回零完成消息失败,IP: {state.IPAddress}", state.RobotCrane?.DeviceName ?? "Unknown");
                        return false;
                    }
                // 机器人正在运行
                case "running":
@@ -144,14 +153,42 @@
                // 是否电芯到位
                case "batteryarrived":
                    state.BatteryArrived = true;
                    return true;
                // 是否电芯到位
                    if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
                    {
                        for (int i = 0; i < 5; i++)
                        {
                            QuartzLogHelper.LogDebug(_logger, $"发送电芯到位消息,IP: {state.IPAddress},正在重试...", state.RobotCrane?.DeviceName ?? "Unknown");
                            await _socketClientGateway.SendToClientAsync(state.IPAddress, "batteryarrived");
                        }
                        return true;
                    }
                    else
                    {
                        QuartzLogHelper.LogError(_logger, $"发送电芯未到位消息失败,IP: {state.IPAddress}", state.RobotCrane?.DeviceName ?? "Unknown");
                        return false;
                    }
                // 是否电芯没到位
                case "batteryarrivedno":
                    state.BatteryArrived = false;
                    await _socketClientGateway.SendToClientAsync(state.IPAddress, "batteryarrivedno");
                    return true;
                    if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
                    {
                        for (int i = 0; i < 5; i++)
                        {
                            QuartzLogHelper.LogDebug(_logger, $"发送电芯未到位消息,IP: {state.IPAddress},正在重试...", state.RobotCrane?.DeviceName ?? "Unknown");
                            await _socketClientGateway.SendToClientAsync(state.IPAddress, "batteryarrivedno");
                        }
                        return true;
                    }
                    else
                    {
                        QuartzLogHelper.LogError(_logger, $"发送电芯未到位消息失败,IP: {state.IPAddress}", state.RobotCrane?.DeviceName ?? "Unknown");
                        return false;
                    }
                // ==================== 接收任务反馈 ====================
                // 取货接收
@@ -159,14 +196,42 @@
                    var isResult = UpdateStatus(state, true);
                    if (!isResult)
                        return false;
                    return true;
                    if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
                    {
                        for (int i = 0; i < 5; i++)
                        {
                            QuartzLogHelper.LogDebug(_logger, $"发送取货接收完成,IP: {state.IPAddress},正在重试...", state.RobotCrane?.DeviceName ?? "Unknown");
                            await _socketClientGateway.SendToClientAsync(state.IPAddress, "pickbatteryover");
                        }
                        return true;
                    }
                    else
                    {
                        QuartzLogHelper.LogError(_logger, $"发送取货完成消息失败,IP: {state.IPAddress}", state.RobotCrane?.DeviceName ?? "Unknown");
                        return false;
                    }
                // 放货接收
                case "putbatteryover":
                    isResult = UpdateStatus(state, false);
                    if (!isResult)
                        return false;
                    return true;
                    if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
                    {
                        for (int i = 0; i < 5; i++)
                        {
                            QuartzLogHelper.LogDebug(_logger, $"发送放货接收消息,IP: {state.IPAddress},正在重试...", state.RobotCrane?.DeviceName ?? "Unknown");
                            await _socketClientGateway.SendToClientAsync(state.IPAddress, "putbatteryover");
                        }
                        return true;
                    }
                    else
                    {
                        QuartzLogHelper.LogError(_logger, $"发送放货完成消息失败,IP: {state.IPAddress}", state.RobotCrane?.DeviceName ?? "Unknown");
                        return false;
                    }
                // ==================== 全部完成命令 ====================
@@ -190,15 +255,6 @@
                        // 换盘任务:根据阶段区分处理
                        if (robotTaskType == RobotTaskTypeEnum.ChangePallet)
                        {
                            // 调用批量拆盘确认接口
                            var sourcePallet = state.CurrentTask.RobotSourceAddressPalletCode;
                            var confirmResult = _taskProcessor.PostSplitPalletConfirmAsync(sourcePallet, state.RobotCrane?.DeviceName);
                            if (!confirmResult.IsSuccess)
                            {
                                QuartzLogHelper.LogError(_logger, $"批量拆盘确认失败: {confirmResult.ErrorMessage}", state.RobotCrane?.DeviceName ?? "Unknown");
                                return false;
                            }
                            if (state.ChangePalletPhase == 5)
                            {
                                // FlowB 最终阶段:假电芯取完,源空托盘回库 HCSC1
@@ -213,16 +269,25 @@
                                    return false;
                                }
                                await _socketClientGateway.SendToClientAsync(state.IPAddress, $"Swap,diskFinished");
                                QuartzLogHelper.LogInfo(_logger, $"发送消息:【Swap,diskFinished】", state.RobotCrane.DeviceName);
                                state.CurrentTask = null;
                                state.CurrentTaskNum = null;
                                state.RobotTaskTotalNum = 0;
                                state.CellBarcode = new List<string>();
                                state.CurrentBatchBarcodes = new List<string>();
                                state.ChangePalletPhase = 0;
                                state.CurrentBatchIndex = 1;
                                state.IsInFakeBatteryMode = false;
                                return true;
                                if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
                                {
                                    await _socketClientGateway.SendToClientAsync(state.IPAddress, $"Group,diskFinished");
                                    QuartzLogHelper.LogInfo(_logger, $"发送消息:【Group,diskFinished】", state.RobotCrane.DeviceName);
                                    return true;
                                }
                                else
                                {
                                    return false;
                                }
                            }
                            else if (state.ChangePalletPhase != 0)
                            {
@@ -242,19 +307,25 @@
                                return false;
                            }
                            if (_taskProcessor.DeleteTask(currentTask.RobotTaskId) != true)
                            {
                                QuartzLogHelper.LogError(_logger, $"allpickfinished:删除任务记录失败,任务号: {currentTask.RobotTaskNum}", state.RobotCrane?.DeviceName ?? "Unknown");
                                return false;
                            }
                            await _socketClientGateway.SendToClientAsync(state.IPAddress, $"Swap,diskFinished");
                            QuartzLogHelper.LogInfo(_logger, $"发送消息:【Swap,diskFinished】", state.RobotCrane.DeviceName);
                            //if (_taskProcessor.DeleteTask(currentTask.RobotTaskId) != true)
                            //{
                            //    QuartzLogHelper.LogError(_logger, $"allpickfinished:删除任务记录失败,任务号: {currentTask.RobotTaskNum}", state.RobotCrane?.DeviceName ?? "Unknown");
                            //    return false;
                            //}
                            state.ChangePalletPhase = 0;
                            state.CurrentBatchIndex = 1;
                            state.IsInFakeBatteryMode = false;
                            return true;
                            if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
                            {
                                await _socketClientGateway.SendToClientAsync(state.IPAddress, $"Group,diskFinished");
                                QuartzLogHelper.LogInfo(_logger, $"发送消息:【Group,diskFinished】", state.RobotCrane.DeviceName);
                                return true;
                            }
                            else
                            {
                                return false;
                            }
                        }
                        // 拆盘任务:直接处理入库
@@ -281,9 +352,16 @@
                                return false;
                            }
                            await _socketClientGateway.SendToClientAsync(state.IPAddress, $"Swap,diskFinished");
                            QuartzLogHelper.LogInfo(_logger, $"发送消息:【Swap,diskFinished】", state.RobotCrane.DeviceName);
                            return true;
                            if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
                            {
                                await _socketClientGateway.SendToClientAsync(state.IPAddress, $"Group,diskFinished");
                                QuartzLogHelper.LogInfo(_logger, $"发送消息:【Group,diskFinished】", state.RobotCrane.DeviceName);
                                return true;
                            }
                            else
                            {
                                return false;
                            }
                        }
                        return false;
                    }
@@ -307,10 +385,19 @@
                        // 换盘任务:根据阶段区分处理
                        if (robotTaskType == RobotTaskTypeEnum.ChangePallet)
                        {
                            // 调用批量拆盘确认接口
                            var sourcePallet = state.CurrentTask.RobotSourceAddressPalletCode;
                            var splitConfirmResult = _taskProcessor.PostSplitPalletConfirmAsync(sourcePallet, state.RobotCrane?.DeviceName);
                            if (!splitConfirmResult.IsSuccess && !splitConfirmResult.Data.Status)
                            {
                                QuartzLogHelper.LogError(_logger, $"批量拆盘确认失败: {splitConfirmResult.ErrorMessage}", state.RobotCrane?.DeviceName ?? "Unknown");
                                return false;
                            }
                            // 调用批量组盘确认接口
                            var targetPallet = state.CurrentTask.RobotTargetAddressPalletCode;
                            var confirmResult = _taskProcessor.PostGroupPalletConfirmAsync(targetPallet, state.RobotCrane?.DeviceName);
                            if (!confirmResult.IsSuccess)
                            if (!confirmResult.IsSuccess && !confirmResult.Data.Status)
                            {
                                QuartzLogHelper.LogError(_logger, $"批量组盘确认失败: {confirmResult.ErrorMessage}", state.RobotCrane?.DeviceName ?? "Unknown");
                                return false;
@@ -331,16 +418,24 @@
                                }
                                state.CurrentTask = null;
                                state.CurrentTaskNum = null;
                                state.RobotTaskTotalNum = 0;
                                state.CellBarcode = new List<string>();
                                await _socketClientGateway.SendToClientAsync(state.IPAddress, $"Swap,diskFinished");
                                QuartzLogHelper.LogInfo(_logger, $"发送消息:【Swap,diskFinished】", state.RobotCrane.DeviceName);
                                state.CurrentBatchBarcodes = new List<string>();
                                state.ChangePalletPhase = 0;
                                state.CurrentBatchIndex = 1;
                                state.IsInFakeBatteryMode = false;
                                return true;
                                if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
                                {
                                    await _socketClientGateway.SendToClientAsync(state.IPAddress, $"Group,diskFinished");
                                    QuartzLogHelper.LogInfo(_logger, $"发送消息:【Group,diskFinished】", state.RobotCrane.DeviceName);
                                    return true;
                                }
                                else
                                {
                                    return false;
                                }
                            }
                            else if (state.ChangePalletPhase != 0)
                            {
@@ -367,16 +462,24 @@
                            }
                            state.CurrentTask = null;
                            state.CurrentTaskNum = null;
                            state.RobotTaskTotalNum = 0;
                            state.CellBarcode = new List<string>();
                            await _socketClientGateway.SendToClientAsync(state.IPAddress, $"Swap,diskFinished");
                            QuartzLogHelper.LogInfo(_logger, $"发送消息:【Swap,diskFinished】", state.RobotCrane.DeviceName);
                            state.CurrentBatchBarcodes = new List<string>();
                            state.ChangePalletPhase = 0;
                            state.CurrentBatchIndex = 1;
                            state.IsInFakeBatteryMode = false;
                            return true;
                            if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
                            {
                                await _socketClientGateway.SendToClientAsync(state.IPAddress, $"Group,diskFinished");
                                QuartzLogHelper.LogInfo(_logger, $"发送消息:【Group,diskFinished】", state.RobotCrane.DeviceName);
                                return true;
                            }
                            else
                            {
                                return false;
                            }
                        }
                        // 组盘任务:直接处理入库
@@ -407,12 +510,21 @@
                            // 清理状态,为下一个任务做准备
                            state.CurrentTask = null;           // 清除当前任务
                            state.CurrentTaskNum = null;        // 清除当前任务编号
                            state.RobotTaskTotalNum = 0;        // 重置任务计数
                            state.CellBarcode = new List<string>();  // 清空条码列表
                            state.CurrentBatchBarcodes = new List<string>();  // 清空当前批次条码
                            await _socketClientGateway.SendToClientAsync(state.IPAddress, $"Group,diskFinished");
                            QuartzLogHelper.LogInfo(_logger, $"发送消息:【Group,diskFinished】", state.RobotCrane.DeviceName);
                            return true;
                            if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
                            {
                                await _socketClientGateway.SendToClientAsync(state.IPAddress, $"Group,diskFinished");
                                QuartzLogHelper.LogInfo(_logger, $"发送消息:【Group,diskFinished】", state.RobotCrane.DeviceName);
                                return true;
                            }
                            else
                            {
                                return false;
                            }
                        }
                        return false;
                    }
@@ -461,14 +573,14 @@
        public bool UpdateStatus(RobotSocketState state, bool isPick)
        {
            var task = _taskProcessor.GetTask(state?.RobotCrane);
            var task = _taskProcessor.GetRobotTask(state?.RobotCrane);
            if (task == null)
            {
                QuartzLogHelper.LogError(_logger, $"取货接收失败: 未找到【{state?.RobotCrane}】的任务", state.RobotCrane?.DeviceName ?? "Unknown");
                return false;
            }
            task.RobotTaskState = (int)TaskRobotStatusEnum.RobotExecuting;
            _taskProcessor.UpdateRobotTask(task);
            return true;
            return _taskProcessor.UpdateRobotTask(task);
        }
    }
}