storageSingleReader; // 非单读卡器模式不处理 if (!$singleReaderMode) { return false; } // 读卡器类型必须是'内镜放入'或'内镜取出' if (!in_array($context->readerType, ['内镜放入', '内镜取出'])) { return false; } $isInStorage = $context->isInStorage ?? false; if ($isInStorage) { // 内镜已在库中,执行出库 $validSteps = ['内镜放入', '结束']; if (!in_array($context->currentStep, $validSteps)) { Logger::debug('[StorageNode] 当前步骤 {} 不符合出库条件', [$context->currentStep]); return false; } } else { // 内镜不在库中,执行入库 $validSteps = ['', '结束', '内镜取出', '测漏正常', '测漏异常']; if (!in_array($context->currentStep, $validSteps)) { Logger::debug('[StorageNode] 当前步骤 {} 不符合入库条件', [$context->currentStep]); return false; } } return true; } /** * 具体处理逻辑 * 根据 isInStorage 状态判断执行入库还是出库 */ protected function doHandle(ProcessContext $context): ProcessContext { // 设置流程类型为存储 $context->processType = '存储'; // 根据当前状态判断执行入库还是出库(canHandle 已经验证过状态) if (!$context->isInStorage) { // 入库操作 $context->currentStep = '内镜放入'; $context->isInStorage = true; $context->storageInTime = date('Y-m-d H:i:s'); Logger::debug('[StorageNode] 内镜入库成功 endoscope={}', [$context->endoscopeName]); } else { // 出库操作 $context->currentStep = '内镜取出'; $context->isInStorage = false; Logger::debug('[StorageNode] 内镜出库成功 endoscope={}', [$context->endoscopeName]); } // 设置数据库操作 $context->needDatabaseOperation = true; $context->dbOperation = DbOperationType::INSERT; $context->needWebSocketNotify = true; return $context; } }