UserBoardController.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php
  2. namespace app\api\controller\board;
  3. use crmeb\services\UtilService;
  4. use app\models\board\UserBoard;
  5. use \think\facade\Config;
  6. use tw\redis\BoardRds;
  7. /**
  8. * 协议见文档 docs/board.md, 协议可能变更
  9. *
  10. * 使用 UserBoard Model, 数据表为 store_order_cart_info
  11. *
  12. * 策略:定时利用 sql 生成排行榜,缓存 json 到 redis
  13. *
  14. * Class UserBoardController
  15. * @package app\api\controller\board
  16. */
  17. class UserBoardController
  18. {
  19. /**
  20. * @api {get} /boards 获取排行榜
  21. * @apiName GetBoards
  22. * @apiGroup Public
  23. *
  24. * @apiParam {int=1,2} type 1|2 日榜单|周榜单
  25. *
  26. * @apiSuccess {string} banner 顶部 banner 图片
  27. * @apiSuccess {string} name 排行榜名称, 暂未使用
  28. * @apiSuccess {Object[]} board 排行榜数据
  29. *
  30. * @apiSuccessExample
  31. * {
  32. * "banner": "http://xxx.png",
  33. * "name": "daily board",
  34. * "board": [{
  35. * "uid": 123,
  36. * "avatar": "http://2.png",
  37. * "nickname": "xxx",
  38. * "level": 1,
  39. * "value": 23.3,
  40. * "border": 1,
  41. * "vip": 2
  42. * }]
  43. * }
  44. */
  45. public function boards()
  46. {
  47. [$type,] = UtilService::getMore([
  48. ['type', 1],
  49. ], null, true);
  50. $board = json_decode((new BoardRds)->get($type), true);
  51. return app('json')->successful('ok', $board);
  52. }
  53. /**
  54. * 读库
  55. */
  56. protected function daily_win_money()
  57. {
  58. $board = new UserBoard();
  59. $res = $board->getDailyWinMoney();
  60. foreach ($res as &$row) {
  61. $row['value'] = floatval($row['value']);
  62. $row['border'] = 0;
  63. $row['vip'] = 0;
  64. }
  65. return array(
  66. 'banner' => Config::get('app.leader_board_banner'),
  67. 'name' => "日榜",
  68. 'board' => $res,
  69. );
  70. }
  71. /**
  72. * 缓存数据库取得的排行结果,定时调用
  73. */
  74. public function cache_board()
  75. {
  76. $res = (new BoardRds)->set(BoardRds::DAILY, json_encode($this->daily_win_money()));
  77. if (!$res) {
  78. errlog("cache_board() returned $res");
  79. }
  80. }
  81. }