| | |
| | | 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; |
| | | |
| | |
| | | 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": |
| | |
| | | // 是否电芯到位 |
| | | 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; |
| | | } |
| | | |
| | | // ==================== 接收任务反馈 ==================== |
| | | |
| | | // 取货接收 |
| | |
| | | if (!isResult) |
| | | return false; |
| | | |
| | | await _socketClientGateway.SendToClientAsync(state.IPAddress, "pickbatteryover"); |
| | | 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": |
| | |
| | | if (!isResult) |
| | | return false; |
| | | |
| | | await _socketClientGateway.SendToClientAsync(state.IPAddress, "putbatteryover"); |
| | | 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; |
| | | } |
| | | |
| | | // ==================== 全部完成命令 ==================== |
| | | |
| | |
| | | // 换盘任务:根据阶段区分处理 |
| | | if (robotTaskType == RobotTaskTypeEnum.ChangePallet) |
| | | { |
| | | // 调用批量拆盘确认接口 |
| | | var sourcePallet = state.CurrentTask.RobotSourceAddressPalletCode; |
| | | var confirmResult = _taskProcessor.PostSplitPalletConfirmAsync(sourcePallet, state.RobotCrane?.DeviceName); |
| | | if (!confirmResult.IsSuccess && !confirmResult.Data.Status) |
| | | { |
| | | QuartzLogHelper.LogError(_logger, $"批量拆盘确认失败: {confirmResult.ErrorMessage}", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | return false; |
| | | } |
| | | |
| | | if (state.ChangePalletPhase == 5) |
| | | { |
| | | // FlowB 最终阶段:假电芯取完,源空托盘回库 HCSC1 |
| | |
| | | return false; |
| | | } |
| | | |
| | | await _socketClientGateway.SendToClientAsync(state.IPAddress, $"Group,diskFinished"); |
| | | QuartzLogHelper.LogInfo(_logger, $"发送消息:【Group,diskFinished】", state.RobotCrane.DeviceName); |
| | | |
| | | state.CurrentTask = null; |
| | | state.CurrentTaskNum = null; |
| | | state.RobotTaskTotalNum = 0; |
| | |
| | | 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) |
| | | { |
| | |
| | | // return false; |
| | | //} |
| | | |
| | | await _socketClientGateway.SendToClientAsync(state.IPAddress, $"Group,diskFinished"); |
| | | QuartzLogHelper.LogInfo(_logger, $"发送消息:【Group,diskFinished】", state.RobotCrane.DeviceName); |
| | | |
| | | 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; |
| | | } |
| | | } |
| | | |
| | | // 拆盘任务:直接处理入库 |
| | |
| | | return false; |
| | | } |
| | | |
| | | 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; |
| | | } |
| | |
| | | // 换盘任务:根据阶段区分处理 |
| | | 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); |
| | |
| | | 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); |
| | | |
| | | 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) |
| | | { |
| | |
| | | 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); |
| | | |
| | | 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; |
| | | } |
| | | } |
| | | |
| | | // 组盘任务:直接处理入库 |
| | |
| | | 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; |
| | | } |