| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- <?php
- namespace app\api\controller\board;
- use crmeb\services\UtilService;
- use app\models\board\UserBoard;
- use \think\facade\Config;
- use tw\command\console;
- use tw\lib\robot\Robots;
- use tw\redis\BoardRds;
- /**
- * 协议见文档 docs/board.md, 协议可能变更
- *
- * 使用 UserBoard Model, 数据表为 store_order_cart_info
- *
- * 策略:定时利用 sql 生成排行榜,缓存 json 到 redis
- *
- * Class UserBoardController
- * @package app\api\controller\board
- */
- class UserBoardController
- {
- /**
- * @api {get} /boards 获取排行榜
- * @apiName GetBoards
- * @apiGroup Public
- *
- * @apiParam {int=1,2} type 1|2 日榜单|周榜单
- *
- * @apiSuccess {string} banner 顶部 banner 图片
- * @apiSuccess {string} name 排行榜名称, 暂未使用
- * @apiSuccess {Object[]} board 排行榜数据
- *
- * @apiSuccessExample
- * {
- * "banner": "http://xxx.png",
- * "name": "daily board",
- * "board": [{
- * "uid": 123,
- * "avatar": "http://2.png",
- * "nickname": "xxx",
- * "level": 1,
- * "value": 23.3,
- * "border": 1,
- * "vip": 2
- * }]
- * }
- */
- public function boards()
- {
- [$type,] = UtilService::getMore([
- ['type', BoardRds::DAILY],
- ], null, true);
- $board = json_decode((new BoardRds)->get($type), true);
- return app('json')->successful('ok', $board);
- }
- /**
- * 讀取数据库中每日榜单的今日榜单
- */
- protected function daily_win_money()
- {
- $board = new UserBoard();
- $res = $board->getDailyWinMoney();
- foreach ($res as &$row) {
- $row['value'] = floatval($row['value']);
- $row['border'] = 0;
- $row['vip'] = 0;
- }
- return [
- 'banner' => Config::get('app.leader_board_banner'),
- 'name' => "日榜",
- 'board' => $res,
- ];
- }
- /**
- * 缓存数据库取得的排行结果,定时调用
- */
- public function cache_board()
- {
- $real_board = $this->daily_win_money();
- $robot_board = Robots::first_n_by_value(30);
- $board = array_merge($robot_board, $real_board['board']);
- usort($board, function ($l, $r) {
- return $r['value'] <=> $l['value'];
- });
-
- $real_board['board'] = $board;
- $res = (new BoardRds)->set(BoardRds::DAILY, json_encode($real_board));
- if (!$res) {
- errlog("cache_board() returned $res");
- }
- }
- }
|