| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- <?php
- namespace App\Module\AppGame\Handler\Matchexchange;
- use App\Module\AppGame\Handler\BaseHandler;
- use App\Module\Mex\Services\MexTransactionService;
- use App\Module\Mex\Services\MexPriceConfigService;
- use App\Module\User\Services\Online;
- use Google\Protobuf\Internal\Message;
- use Uraus\Kku\Request\RequestMatchexchangeList;
- use Uraus\Kku\Response\ResponseMatchexchangeList;
- use Uraus\Kku\Response\MatchexchangeItem;
- use Uraus\Kku\Response\ResponseMatchexchangePrice;
- use Uraus\Kku\Common\ResponsePage;
- use Uraus\Kku\Common\MEX_DIRECTION;
- use Uraus\Kku\Common\MEX_STATUS;
- use Uraus\Kku\Common\RESPONSE_CODE;
- use Illuminate\Support\Facades\Log;
- /**
- * 处理获取成交列表请求(交易大厅)
- */
- class ListHandler extends BaseHandler
- {
- /**
- * 是否需要登录
- *
- * @var bool
- */
- protected bool $need_login = true;
- /**
- * 处理获取成交列表请求
- *
- * @param RequestMatchexchangeList $data 获取成交列表请求数据
- * @return ResponseMatchexchangeList 获取成交列表响应
- */
- public function handle(Message $data): Message
- {
- // 创建响应对象
- $response = new ResponseMatchexchangeList();
- // 获取请求参数
- $itemId = $data->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;
- }
- }
|