getStorage()->isInStorage) { return CanHandleResult::cannotHandle(VoiceMessage::PLEASE_SWIPE_STORAGE_OUT); } // 需要晨洗但未完成:提示先进行晨洗 if ($context->getMorningWash()->needMorningWash && !$context->getMorningWash()->morningWashed) { return CanHandleResult::cannotHandle(VoiceMessage::PLEASE_SWIPE_MORNING_WASH); } $validCurrentSteps = ['', '结束', '内镜取出', '内镜放入', '测漏正常', '晨洗']; if (!$this->isRequiredNode($context->getCurrentStep(), $validCurrentSteps)) { // 读卡器是清洗但步骤不对(如终末漂洗时刷清洗),提示应该先刷结束 return CanHandleResult::cannotHandle(); } // 读卡器不是本节点,不处理 if (!$this->isMatchReaderType($context)) { return CanHandleResult::cannotHandle(VoiceMessage::PLEASE_SWIPE_WASH); } return CanHandleResult::canHandle(); } /** * 具体处理逻辑 */ protected function doHandle(ProcessContext $context): ProcessContext { $builder = $context->createModifyBuilder(); // 设置流程类型 if (empty($context->getProcessType()) || $context->getProcessType() === '晨洗') { $builder->setProcessType('手工洗'); } return $builder ->setCurrentStep(self::getName()) ->setNeedDatabaseOperation() ->setDbOperation(DbOperationType::INSERT) ->setNeedWebSocketNotify() ->build(); } }