getItemId() ?: null; $direction = $data->getDirection(); $page = $data->getPage(); $userId = $this->user_id; // 解析分页参数 $pageNum = $page ? $page->getPage() : 1; $pageSize = $page ? $page->getPerPage() : 20; // 当per_page为0时使用默认值20(protobuf未传该字段时返回0) if ($pageSize <= 0) { $pageSize = 20; } // 限制分页大小 $pageSize = min($pageSize, 100); $pageNum = max($pageNum, 1); // 调用服务获取用户订单列表 $result = MexOrderService::getUserOrders($userId, $pageNum, $pageSize, $itemId); // 设置分页信息 $responsePage = new ResponsePage(); $responsePage->setCurrentPage($pageNum); $responsePage->setPerPage($pageSize); $responsePage->setTotal($result['total'] ?? 0); $lastPage = ceil(($result['total'] ?? 0) / $pageSize); $responsePage->setLastPage($lastPage); $responsePage->setHasMore($pageNum < $lastPage); $response->setPage($responsePage); // 转换订单数据 $items = []; foreach ($result['orders'] ?? [] as $order) { // 根据筛选条件过滤 if ($itemId && $order['item_id'] != $itemId) { continue; } // 根据方向过滤 $orderType = $order['order_type']; if ($orderType instanceof \App\Module\Mex\Enums\OrderType) { $orderDirection = ($orderType->value === 'SELL') ? MEX_DIRECTION::SELL : MEX_DIRECTION::BUY; } else { $orderDirection = ($orderType === 'SELL') ? MEX_DIRECTION::SELL : MEX_DIRECTION::BUY; } if ($direction && $direction !== MEX_DIRECTION::DIRECTION_NONE && $direction !== $orderDirection) { continue; } $item = new MatchexchangeMyItem(); $item->setId($order['id']); $item->setUserId($order['user_id']); $item->setItemId($order['item_id']); $item->setPrice($order['price']); $item->setNum($order['quantity']); $item->setTimes(strtotime($order['created_at'])); $item->setDirection($orderDirection); // 设置状态 $orderStatus = $order['status']; if ($orderStatus instanceof \App\Module\Mex\Enums\OrderStatus) { $statusValue = $orderStatus->value; } else { $statusValue = $orderStatus; } $status = match($statusValue) { 'PENDING' => MEX_STATUS::MEX_STATUS_PENDING, 'COMPLETED' => MEX_STATUS::MEX_STATUS_FINISHED, 'CANCELLED' => MEX_STATUS::MEX_STATUS_CANCELED, default => MEX_STATUS::MEX_STATUS_NONE }; $item->setStatus($status); $items[] = $item; } $response->setList($items); } catch (\Exception $e) { // 记录错误日志 Log::error('获取我的挂单失败', [ 'user_id' => $this->user_id, 'item_id' => $itemId ?? 0, 'direction' => $direction ?? 0, 'error' => $e->getMessage(), 'trace' => $e->getTraceAsString() ]); // 设置错误响应 $this->response->setCode(RESPONSE_CODE::SERVER_ERROR); $this->response->setMsg('获取我的挂单失败:' . $e->getMessage()); } return $response; } }