| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- <?php
- // +----------------------------------------------------------------------
- // | saiadmin [ saiadmin快速开发框架 ]
- // +----------------------------------------------------------------------
- // | Author: your name
- // +----------------------------------------------------------------------
- namespace app\v1\logic\gameLog;
- use plugin\saiadmin\basic\BaseLogic;
- use plugin\saiadmin\exception\ApiException;
- use plugin\saiadmin\utils\Helper;
- use app\v1\model\gameLog\SdkOrderRank;
- use support\think\Db;
- /**
- * 充值排行逻辑层
- */
- class SdkOrderRankLogic extends BaseLogic
- {
- /**
- * 构造函数
- */
- public function __construct()
- {
- $this->model = new SdkOrderRank();
- }
- public function getList($where): mixed
- {
- $saiType = request()->input('saiType', 'list');
- $page = request()->input('page', 1);
- $limit = request()->input('limit', 10);
- $orderBy = request()->input('orderBy', '');
- $orderType = request()->input('orderType', $this->orderType);
-
- if(empty($orderBy)) {
- $orderBy = 'searchTotalMoney';
- }
- $params = $this->searchByAuth($where);
-
- $where = [];
- if(!empty($params['game_id'])){
- $where[] = ['game_id', 'in', $params['game_id']];
- }
- if(!empty($params['auth_id'])){
- $where[] = ['auth_id', 'in', $params['auth_id']];
- }
- if(!empty($params['agent_id'])){
- $where['agent_id'] = $params['agent_id'];
- }
- if(!empty($params['site_id'])){
- $where['site_id'] = $params['site_id'];
- }
- if(!empty($params['server_id'])){
- $where['server_id'] = $params['server_id'];
- }
- if(!empty($params['user_name'])){
- $where['user_name'] = $params['user_name'];
- }
- if(!empty($params['server_name'])){
- $where['server_name'] = $params['server_name'];
- }
- if(!empty($params['reg_date'])){
- $where['reg_date'] = $params['reg_date'];
- }
- if(!empty($params['pay_date'])){
- $sTime = $params['pay_date'][0] . " 00:00:00";
- $eTime = $params['pay_date'][1] . " 23:59:59";
- $where[] = ['pay_date', 'between', [$sTime, $eTime]];
- }
-
- $rankQuery = Db::connect('db_game_log')->table('sdk_order_success')->where($where);
- $rankQuery->order($orderBy, $orderType);
-
- // 显示指定日期范围内的所有充值记录,不按uid和game_id分组
- $rankQuery->field('user_name,sum(money) as searchTotalMoney,
- orderid,
- game_id,
- media_id,
- agent_id,
- site_id,
- uid,
- pay_channel_id,
- auth_id,
- server_id,
- server_name,
- pay_date,
- reg_date,
- role_name,
- role_id');
- if ($saiType === 'all') {
- return $rankQuery->select()->toArray();
- }
-
- // 先分组,再分页
- $rankQuery->group('uid, game_id,site_id,server_id,media_id,auth_id,agent_id,server_id,auth_id,role_id');
- $data = $rankQuery->paginate($limit, false, ['page' => $page])->toArray();
- print_r($data);
- $data['data'] = $this->trandformListColumn($data['data'], ['game','auth', 'agent', 'pay_channel']);
- // 告警提示,查询最近登录时间,查询最近充值时间,和现在时间对比,如果超过3天,则告警,并提示
- foreach($data['data'] as &$item){
- // 最后登录时间
- $item['login_time'] = Db::connect('db_origin')->table('user_'.$item['uid']%10)->where('uid', $item['uid'])->value('login_time');
- // 最近注册时间
- $item['pay_time'] = Db::connect('db_origin')->table('user_'.$item['uid']%10)->where('uid', $item['uid'])->value('pay_time');
- // 现在时间
- $item['now_time'] = time();
- // 最近登录时间与现在时间对比,如果超过3天,则告警,并提示
- if($item['login_time'] < $item['now_time'] - 3 * 24 * 60 * 60){
- $item['login_alert'] = 1;
- }else{
- $item['login_alert'] = 0;
- }
- // 最近充值时间与现在时间对比,如果超过3天,则告警,并提示
- if($item['pay_time'] < $item['now_time'] - 3 * 24 * 60 * 60){
- $item['pay_alert'] = 1;
- }else{
- $item['pay_alert'] = 0;
- }
- }
-
-
- $totalWhere = array_filter($where, function($item) {
- return $item[0] !== 'pay_date';
- });
- $totalList = Db::connect('db_game_log')->table('sdk_order_success')
- ->where($totalWhere)
- ->field('game_id,uid,sum(money) as totalMoney')
- ->group('uid,game_id,site_id,server_id,media_id,auth_id,agent_id,server_id,auth_id,role_id')
- ->select()->toArray();
-
- // 查询累计充值金额(对每一行数据单独查询历史充值金额)
- $totalMoneyMap = [];
- if (!empty($data['data']) && !empty($totalList)) {
- foreach ($totalList as $totalItem) {
- $key = $totalItem['uid'] . '_' . $totalItem['game_id'];
- $totalMoneyMap[$key] = $totalItem['totalMoney'] ?? 0;
- }
- }
-
- // 为搜索结果添加累计充值金额
- foreach($data['data'] as &$item){
- $key = $item['uid'] . '_' . $item['game_id'];
- $item['totalMoney'] = $totalMoneyMap[$key] ?? 0;
- }
- return $data;
- }
- }
|