You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
176 lines
5.6 KiB
PHP
176 lines
5.6 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace app\command;
|
|
|
|
use think\console\Command;
|
|
use think\console\Input;
|
|
use think\console\input\Argument;
|
|
use think\console\input\Option;
|
|
use think\console\Output;
|
|
use app\common\model\game\Heroes;
|
|
use app\common\model\game\UserRoles;
|
|
use app\common\model\game\UserTroops;
|
|
use app\common\model\game\UserAccount;
|
|
use app\common\model\log\UserPayOrder;
|
|
use app\common\model\config\CidConfig;
|
|
use app\common\model\config\Resources;
|
|
use think\facade\Db;
|
|
use PhpOffice\PhpSpreadsheet\IOFactory;
|
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|
use PhpOffice\PhpSpreadsheet\Style\Border;
|
|
use PhpOffice\PhpSpreadsheet\Style\Fill;
|
|
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
|
|
use PHPMailer\PHPMailer\PHPMailer;
|
|
use PHPMailer\PHPMailer\Exception;
|
|
|
|
class StatRichData extends Command
|
|
{
|
|
protected function configure()
|
|
{
|
|
// 指令配置
|
|
$this->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);
|
|
}
|
|
}
|