getItemId(); $instanceId = $data->getItemInstanceId(); $selectIds = iterator_to_array($data->getSelectIds()->getIterator()); $userId = $this->user_id; // 先进行验证,避免不必要的事务开销 $validation = new ChestOpenValidation([ 'user_id' => $userId, 'item_id' => $itemId, 'instance_id' => $instanceId, 'quantity' => 1 ]); // 验证数据 $validation->validated(); // 使用新宝箱服务开启宝箱 $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("开启宝箱失败,请检查宝箱是否存在或是否可开启"); } // 设置响应状态 $this->response->setCode(0); $this->response->setMsg('开启宝箱成功'); Log::info('用户开启宝箱成功', [ 'user_id' => $userId, 'item_id' => $itemId, 'instance_id' => $instanceId, 'select_ids' => $selectIds, 'result' => $result, 'version' => 'new' ]); } catch (\UCore\Exception\ValidateException $e) { // 验证失败 $this->response->setCode(400); $this->response->setMsg($e->getMessage()); Log::warning('宝箱开启验证失败', [ 'user_id' => $userId ?? null, 'item_id' => $itemId ?? null, 'instance_id' => $instanceId ?? null, 'error' => $e->getMessage() ]); } catch (LogicException $e) { // 业务逻辑异常 $this->response->setCode(400); $this->response->setMsg($e->getMessage()); Log::warning('用户开启宝箱失败', [ 'user_id' => $userId ?? null, 'item_id' => $itemId ?? null, 'instance_id' => $instanceId ?? null, 'error' => $e->getMessage() ]); } catch (\Exception $e) { // 系统异常 $this->response->setCode(500); $this->response->setMsg('系统错误,请稍后再试'); Log::error('开启宝箱操作异常', [ 'user_id' => $userId ?? null, 'item_id' => $itemId ?? null, 'instance_id' => $instanceId ?? null, 'error' => $e->getMessage(), 'trace' => $e->getTraceAsString() ]); } return $response; } }