Переглянути джерело

update: 完善排行榜协议

yll 4 роки тому
батько
коміт
1bcb91a5a1

+ 20 - 7
app/api/controller/board/UserBoardController.php

@@ -3,10 +3,12 @@ namespace app\api\controller\board;
 
 use crmeb\services\UtilService;
 use app\models\board\UserBoard;
+use \think\facade\Config;
+use crmeb\utils\Redis;
 /**
  * 协议见文档 docs/board.md, 协议可能变更
  *
- * 使用 UserBoardModel, 数据表为 eb_user_reward_order
+ * 使用 UserBoard Model, 数据表为 store_order_cart_info
  *
  *
  * Class UserBoardController
@@ -14,16 +16,15 @@ use app\models\board\UserBoard;
  */
 class UserBoardController {
     protected static $DAILY_WIN_MONEY = 1;
+    public static $RDS_BOARD_KEY = 'tmp:board';
 
     public function boards() {
        [$type,] = UtilService::getMore([
            ['type', 1],
        ], null, true);
-
-       switch ($type) {
-           case UserBoardController::$DAILY_WIN_MONEY:
-               return app('json')->successful('ok', $this->daily_win_money());
-       }
+       $s = $this->get_cached_board();
+       $board = json_decode($s, true);
+       return app('json')->successful('ok', $board);
     }
 
     protected function daily_win_money() {
@@ -34,6 +35,18 @@ class UserBoardController {
             $row['border'] = 0;
             $row['vip'] = 0;
         }
-        return $res;
+        return array(
+            'banner' => Config::get('app.leader_board_banner'),
+            'name' => "日榜",
+            'board' => $res,
+        );
+    }
+
+    public function cache_board() {
+        Redis::set(self::$RDS_BOARD_KEY, json_encode($this->daily_win_money()));
+    }
+
+    protected function get_cached_board() {
+        return Redis::get(self::$RDS_BOARD_KEY);
     }
 }

+ 4 - 4
app/api/controller/coin/UserCoinController.php

@@ -16,7 +16,7 @@ class UserCoinController {
      * 启动
      */
     public function boot(Request $request) {
-        $uid = 1000; //TODO
+        $uid = $request->uid();
         // 是否开启活动
         $symbol = Config::get('app.mining_symbo');
         if (!$symbol) {
@@ -79,7 +79,7 @@ class UserCoinController {
             ['page', 1],
             ['limit', 20],
         ], $request, true);
-        $uid = 1000; // TODO
+        $uid = $request->uid();
         $rows = UserCoinTransfer::getUserTransferred($uid, $page, $limit);
         return app('json')->successful($rows);
     }
@@ -99,7 +99,7 @@ class UserCoinController {
             return app('json')->fail('未找到目标');
         }
 
-        $uid = 1000; //TODO $request->uid();
+        $uid = $request->uid();
         $suc = UserCoin::upsertAddr($uid, $symbol, $addr);
         if (!$suc) {
             return app('json')->fail('执行失败');
@@ -127,7 +127,7 @@ class UserCoinController {
         if ($amount < $meta['min_withdrawal']){
             return app('json')->fail('未达到最低限额');
         }
-        $uid = 1000; // TODO $request->uid();
+        $uid = $request->uid();
         $userCoin = UserCoin::where(['uid'=>$uid, 'symbol'=>$symbol])->find();
         if (!$userCoin) {
             return app('json')->fail('不适用的用户');

+ 1 - 1
app/api/controller/user/UserNotificationController.php

@@ -29,7 +29,7 @@ class UserNotificationController {
      * @param Request $request
      */
     public function snapshot(Request $request) {
-        $uid = 1;
+        $uid = $request->uid();
         // 未读消息
         $unread = UserHash::unread_get($uid);
 

+ 1 - 1
app/models/redis/UserHash.php

@@ -46,7 +46,7 @@ class UserHash {
 
     public static function mining_set($uid, $mining) {
         if (!isset($mining['ts']) || !isset($mining['symbol']) ||
-        !isset($mining['progress']) || !isset($mining['order_id'])) {
+            !isset($mining['progress']) || !isset($mining['order_id'])) {
             Log::error('invalid mining value');
             return false;
         }

+ 3 - 0
config/app.php

@@ -58,4 +58,7 @@ return [
     // 每 @mining_sec_unit 挖币 @mining_num_per_unit
     'mining_sec_unit' => 5,
     'mining_num_per_unit' => 0.01,
+
+    // 排行榜 banner 750 x 142
+    'leader_board_banner' => 'http://b.png',
 ];

+ 17 - 2
crmeb/subscribes/TimerSubscribe.php

@@ -3,6 +3,7 @@
 namespace crmeb\subscribes;
 
 use app\admin\model\system\SystemAttachment;
+use app\api\controller\board\UserBoardController;
 use app\models\store\StoreBargainUser;
 use app\models\store\StoreOrder;
 use app\models\store\StorePink;
@@ -12,6 +13,7 @@ use crmeb\services\async\LuckyCalc;
 use think\facade\Db;
 use think\facade\Log;
 use crmeb\services\async\WechatNotify;
+use app\admin\model\system\SystemLog;
 
 /**
  * 定时任务类
@@ -88,14 +90,27 @@ class TimerSubscribe
     public function onTimer_60()
     {
         $tm = localtime(time(), true);
-        if ($tm['tm_min'] == 0 && $tm['tm_sec'] == 0) {
+
+        // 缓存排行榜
+        if ($tm['tm_min'] % 5 == 0) {
+            $ctl = new UserBoardController();
+            $ctl->cache_board();
+            Log::warning("board updated.");
+        }
+
+        if ($tm['tm_min'] == 0) {
             // 整点做活动
             $activities = [new ClearanceCalc(), new LuckyCalc()];
             foreach($activities as $activity) {
                 $activity->calc();
             }
+            Log::warning('onTimer_60() activities calculated.');
+            // 每日 24
+            if ($tm['tm_hour'] == 0) {
+                SystemLog::deleteLog();
+                Log::warning('onTimer_60() remove outdated admin logs');
+            }
         }
-        Log::warning('onTimer_60()');
     }
 
     /**

+ 4 - 0
docs/TODO

@@ -0,0 +1,4 @@
+# mariadb 增加 binlog. 前期增加 slow query
+# automatic backup data
+
+# 优化排行榜为 5m 刷新一次 ,存入redis