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

<?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);
}
}