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