setName('stat_rich_data') ->setDescription('the stat_rich_data command'); } protected function execute(Input $input, Output $output) { $output->writeln("SRD开始统计 === "); $appid = env('app.appid', 'daodao'); $date = date('Y-m-d', strtotime('-1 day')); $cids = CidConfig::where('Appid', $appid) ->where('Inner', 0) ->where('Status', 1) ->order('Cid', 'asc') ->column('Cid'); foreach ($cids as $k => $cid) { $output->writeln($cid . "区开始"); $firstUid = $cid * 100000; $endUid = $firstUid + 99999; $money = UserPayOrder::where('status', 4) ->whereBetween('uid', [$firstUid, $endUid]) ->whereBetween('createTime', [$date, $date . ' 23:59:59']) ->group('uid') ->order('s', 'desc') ->column('SUM(commodityPrice) as s', 'uid'); if (!$money) { continue; } // 充值排名 $data = []; foreach ($money as $uid => $m) { $data[] = [ 'cid' => $cid, 'type' => 1, 'key' => $uid, 'free' => 0, 'pay' => $m, 'consume' => 0, 'logdate' => $date, ]; } Db::connect('log')->table('log_rich_stat')->insertAll($data); // 资源产出 $resources = $this->_createResource($cid, $date); if ($resources) { Db::connect('log')->table('log_rich_stat')->insertAll($resources); } $output->writeln($cid . "区结束"); } $output->writeln("SRD结束统计 === "); } private function _createResource($cid, $date) { $keys = Resources::where('type', 2)->column('key'); $extraKeys = [ 'diamond', 'gold', 'recruitRoll', 'soulStone1', 'soulStone2', 'soulStone3', 'coinMinting1', 'coinMinting2', 'coinMinting3' ]; $keys = array_merge($keys, $extraKeys); $freeStat = Db::connect('game_sdk_log') ->table('resource_log_daodao_' . $cid) ->whereBetween('LogTime', [$date, $date . ' 23:59:59']) ->whereIn('Key', $keys) ->where('Action', 1) ->where('Desc', '<>', 'SendOrderToReward') ->group('Key') ->column('SUM(Val)', 'Key'); $payStat = Db::connect('game_sdk_log') ->table('resource_log_daodao_' . $cid) ->whereBetween('LogTime', [$date, $date . ' 23:59:59']) ->whereIn('Key', $keys) ->where('Action', 1) ->where('Desc', 'SendOrderToReward') ->group('Key') ->column('SUM(Val)', 'Key'); $consumeStat = Db::connect('game_sdk_log') ->table('resource_log_daodao_' . $cid) ->whereBetween('LogTime', [$date, $date . ' 23:59:59']) ->whereIn('Key', $keys) ->where('Action', 2) ->group('Key') ->column('SUM(Val)', 'Key'); $data = []; if ($freeStat) { foreach ($freeStat as $key => $n) { $data[$key] = [ 'cid' => $cid, 'type' => 2, 'key' => $key, 'free' => $n, 'pay' => 0, 'consume' => 0, 'logdate' => $date, ]; } } if ($consumeStat) { foreach ($consumeStat as $key => $n) { if (isset($data[$key])) { $data[$key]['consume'] = $n; } else { $data[$key] = [ 'cid' => $cid, 'type' => 2, 'key' => $key, 'free' => 0, 'pay' => 0, 'consume' => $n, 'logdate' => $date, ]; } } } if ($payStat) { foreach ($payStat as $key => $n) { if (isset($data[$key])) { $data[$key]['pay'] = $n; } else { $data[$key] = [ 'cid' => $cid, 'type' => 2, 'key' => $key, 'free' => 0, 'pay' => $n, 'consume' => 0, 'logdate' => $date, ]; } } } return array_values($data); } }