isInStorage) { $context->expectedNextStep = VoiceMessage::PLEASE_SWIPE_STORAGE_OUT; return false; } // 期望当前读卡器为漂洗 if (!$this->isMatchReaderType($context)) { // 当前步骤是清洗且读卡器不符:说明清洗完了应该刷漂洗 if ($context->currentStep === WashNode::getName()) { $context->expectedNextStep = VoiceMessage::PLEASE_SWIPE_RINSE; } return false; } // 上一个步骤必须是清洗 if (!$this->isRequiredNode($context->currentStep, [WashNode::getName()])) { $context->expectedNextStep = VoiceMessage::PLEASE_SWIPE_WASH; return false; } return true; } /** * 具体处理逻辑 */ protected function doHandle(ProcessContext $context): ProcessContext { // 更新步骤 $context->currentStep = '漂洗'; $context->needDatabaseOperation = true; $context->dbOperation = DbOperationType::INSERT; $context->needWebSocketNotify = true; return $context; } }