getItemId() ?: null; $direction = $data->getDirection(); $page = $data->getPage(); // 解析分页参数 $pageNum = $page ? $page->getPage() : 1; $pageSize = $page ? $page->getPerPage() : 20; // 确保分页参数有效,防止除零错误 $pageSize = $pageSize > 0 ? $pageSize : 20; $pageNum = $pageNum > 0 ? $pageNum : 1; // 限制分页大小 $pageSize = min($pageSize, 100); $pageNum = max($pageNum, 1); // 调用服务获取成交记录列表 $result = MexTransactionService::getPublicTransactions($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['transactions'] ?? [] as $transaction) { $item = new MatchexchangeItem(); $item->setId($transaction['id']); $item->setUserId($transaction['user_id']); $item->setItemId($transaction['item_id']); $item->setPrice($transaction['price']); $item->setNum($transaction['quantity']); $item->setTimes(strtotime($transaction['created_at'])); // 设置状态(成交记录都是已完成状态) $item->setStatus(MEX_STATUS::MEX_STATUS_FINISHED); // 设置方向(根据交易类型判断) if (isset($transaction['transaction_type'])) { $direction = ($transaction['transaction_type'] === 'USER_SELL') ? MEX_DIRECTION::SELL : MEX_DIRECTION::BUY; $item->setDirection($direction); } else { $item->setDirection(MEX_DIRECTION::DIRECTION_NONE); } $items[] = $item; } $response->setList($items); // 获取价格配置信息(如果指定了商品ID) if ($itemId) { $priceConfig = MexPriceConfigService::getItemPriceConfig($itemId); if ($priceConfig) { $priceInfo = new ResponseMatchexchangePrice(); $priceInfo->setItemId($itemId); $priceInfo->setMinPrice($priceConfig['min_price']); $priceInfo->setMaxPrice($priceConfig['max_price']); // 获取平均价格(从最近成交记录计算) $latestPrice = MexTransactionService::getLatestPrice($itemId); if ($latestPrice) { $priceInfo->setAvgPrice(floatval($latestPrice)); } $response->setPrice($priceInfo); } } return $response; } }