getItemId(); $instanceId = $data->getItemInstanceId(); $selectIds = iterator_to_array($data->getSelectIds()->getIterator()); $userId = $this->user_id; // 先进行验证,避免不必要的事务开销 $validation = ChestOpenValidation::make([ 'user_id' => $userId, 'item_id' => $itemId, 'instance_id' => $instanceId, 'quantity' => 1 ]); // 验证数据 $validation->validated(); try { // 开始事务 DB::beginTransaction(); // 使用新宝箱服务开启宝箱 $result = ChestService::openChest($userId, $itemId, 1, [ 'select_ids' => $selectIds, 'source_type' => 'app_open_box', 'device_info' => request()->userAgent(), 'ip_address' => request()->ip(), ]); if (!$result || !$result['success']) { throw new LogicException("开启宝箱失败,请检查宝箱是否存在或是否可开启"); } Log::info('用户开启宝箱成功', [ 'user_id' => $userId, 'item_id' => $itemId, 'instance_id' => $instanceId, 'select_ids' => $selectIds, 'result' => $result, 'version' => 'new' ]); DB::commit(); } catch (\Exception $e) { DB::rollBack(); Log::error('开启宝箱操作异常', [ 'user_id' => $userId ?? null, 'item_id' => $itemId ?? null, 'instance_id' => $instanceId ?? null, 'error' => $e->getMessage(), 'trace' => $e->getTraceAsString() ]); throw $e; } // 创建响应对象 $response = new ResponseItemOpenbox(); return $response; } }