|
|
|
@ -8,112 +8,131 @@ class SpendRepository {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private function assembleDayRecords($items, $dayList, $valueColumn, $dayColumn = 'day')
|
|
|
|
|
private function assembleRecords($items, $keys, $valueColumn, $keyColumn = 'day')
|
|
|
|
|
{
|
|
|
|
|
$records = [];
|
|
|
|
|
foreach ($dayList as $day) {
|
|
|
|
|
$dayValue = 0;
|
|
|
|
|
foreach ($keys as $key) {
|
|
|
|
|
$value = 0;
|
|
|
|
|
foreach ($items as $item) {
|
|
|
|
|
if ($item[$dayColumn] == $day) {
|
|
|
|
|
$dayValue = $item[$valueColumn];
|
|
|
|
|
if ($item[$keyColumn] == $key) {
|
|
|
|
|
$value = $item[$valueColumn];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
$records[$day] = $dayValue;
|
|
|
|
|
$records[$key] = $value;
|
|
|
|
|
}
|
|
|
|
|
return $records;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 付费游戏数
|
|
|
|
|
*/
|
|
|
|
|
public function getPayGameCountByDay($params) {
|
|
|
|
|
private function getGameGroupConditions($params)
|
|
|
|
|
{
|
|
|
|
|
$beginTime = $params['begin_time'] ?? 0;
|
|
|
|
|
$endTime = $params['end_time'] ?? 0;
|
|
|
|
|
$ids = $params['promote_ids'] ?? [];
|
|
|
|
|
$isBan = $params['is_ban'] ?? false;
|
|
|
|
|
$gameIds = $params['game_ids'] ?? [];
|
|
|
|
|
|
|
|
|
|
$conditions = [];
|
|
|
|
|
$conditions['pay_status'] = 1;
|
|
|
|
|
$conditions['promote_id'] = ['in', $ids];
|
|
|
|
|
$conditions['pay_time'] = ['between', [$beginTime, $endTime]];
|
|
|
|
|
$conditions['game_id'] = ['in', $gameIds];
|
|
|
|
|
$conditions['pay_way'] = $isBan ? ['neq', '-10'] : ['neq', '-1'];
|
|
|
|
|
return $conditions;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private function getDayGroupConditions($params)
|
|
|
|
|
{
|
|
|
|
|
$beginTime = $params['begin_time'] ?? 0;
|
|
|
|
|
$endTime = $params['end_time'] ?? 0;
|
|
|
|
|
$gameId = $params['game_id'] ?? 0;
|
|
|
|
|
$serverId = $params['server_id'] ?? 0;
|
|
|
|
|
$ids = $params['promote_id'] ?? [];
|
|
|
|
|
$isBan = $params['is_ban'] ?? false;
|
|
|
|
|
$dayList = $params['dayList'] ?? [];
|
|
|
|
|
|
|
|
|
|
$map = [];
|
|
|
|
|
$map['pay_status'] = 1;
|
|
|
|
|
$map['promote_id'] = ['in', $ids];
|
|
|
|
|
$map['pay_time'] = ['between', [$beginTime, $endTime]];
|
|
|
|
|
$map['game_id'] = $gameId > 0 ? $gameId : ['gt', 0];
|
|
|
|
|
$map['pay_way'] = $isBan ? ['neq', '-10'] : ['neq', '-1'];
|
|
|
|
|
$conditions = [];
|
|
|
|
|
$conditions['pay_status'] = 1;
|
|
|
|
|
$conditions['promote_id'] = ['in', $ids];
|
|
|
|
|
$conditions['pay_time'] = ['between', [$beginTime, $endTime]];
|
|
|
|
|
$conditions['game_id'] = $gameId > 0 ? $gameId : ['gt', 0];
|
|
|
|
|
$conditions['pay_way'] = $isBan ? ['neq', '-10'] : ['neq', '-1'];
|
|
|
|
|
|
|
|
|
|
$field = 'FROM_UNIXTIME(pay_time,"%Y-%m-%d") as day, count(DISTINCT game_id) count';
|
|
|
|
|
$items = M('spend', 'tab_')->field($field)->where($map)->group('day')->select();
|
|
|
|
|
return $this->assembleDayRecords($items, $dayList, 'count');
|
|
|
|
|
return $conditions;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 按天统计付款总额
|
|
|
|
|
* 付费游戏数
|
|
|
|
|
*/
|
|
|
|
|
public function getPayAmountByDay($params) {
|
|
|
|
|
$beginTime = $params['begin_time'] ?? 0;
|
|
|
|
|
$endTime = $params['end_time'] ?? 0;
|
|
|
|
|
$gameId = $params['game_id'] ?? 0;
|
|
|
|
|
$serverId = $params['server_id'] ?? 0;
|
|
|
|
|
$ids = $params['promote_id'] ?? [];
|
|
|
|
|
$isBan = $params['is_ban'] ?? false;
|
|
|
|
|
public function getPayGameCountGroupByDay($params)
|
|
|
|
|
{
|
|
|
|
|
$dayList = $params['dayList'] ?? [];
|
|
|
|
|
$conditions = $this->getDayGroupConditions($params);
|
|
|
|
|
$field = 'FROM_UNIXTIME(pay_time,"%Y-%m-%d") as day, count(DISTINCT game_id) count';
|
|
|
|
|
$items = M('spend', 'tab_')->field($field)->where($conditions)->group('day')->select();
|
|
|
|
|
return $this->assembleRecords($items, $dayList, 'count');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$map['pay_status'] = 1;
|
|
|
|
|
$map['pay_time'] = ['between', [$beginTime, $endTime]];
|
|
|
|
|
$map['game_id'] = $gameId > 0 ? $gameId : ['gt', 0];
|
|
|
|
|
$map['promote_id'] = ['in', $ids];
|
|
|
|
|
$map['pay_way'] = $isBan ? ['neq', '-10'] : ['neq', '-1'];
|
|
|
|
|
/**
|
|
|
|
|
* 付费游戏数
|
|
|
|
|
*/
|
|
|
|
|
public function getPayGameCountGroupByGame($params)
|
|
|
|
|
{
|
|
|
|
|
$gameIds = $params['game_ids'] ?? [];
|
|
|
|
|
$conditions = $this->getGameGroupConditions($params);
|
|
|
|
|
$field = 'game_id, count(*) count';
|
|
|
|
|
$items = M('spend', 'tab_')->field($field)->where($conditions)->group('game_id')->select();
|
|
|
|
|
return $this->assembleRecords($items, $gameIds, 'count', 'game_id');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 按天统计付款总额
|
|
|
|
|
*/
|
|
|
|
|
public function getPayAmountGroupByDay($params) {
|
|
|
|
|
$dayList = $params['dayList'] ?? [];
|
|
|
|
|
$conditions = $this->getDayGroupConditions($params);
|
|
|
|
|
$field = 'FROM_UNIXTIME(pay_time,"%Y-%m-%d") as day, sum(pay_amount) as amount';
|
|
|
|
|
$items = M('spend', 'tab_')->field($field)->where($map)->group('day')->select();
|
|
|
|
|
return $this->assembleDayRecords($items, $dayList, 'amount');
|
|
|
|
|
$items = M('spend', 'tab_')->field($field)->where($conditions)->group('day')->select();
|
|
|
|
|
return $this->assembleRecords($items, $dayList, 'amount');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 按游戏统计付款总额
|
|
|
|
|
*/
|
|
|
|
|
public function getPayAmountGroupByGame($params) {
|
|
|
|
|
$gameIds = $params['game_ids'] ?? [];
|
|
|
|
|
$conditions = $this->getGameGroupConditions($params);
|
|
|
|
|
$field = 'game_id, sum(pay_amount) as amount';
|
|
|
|
|
$items = M('spend', 'tab_')->field($field)->where($conditions)->group('game_id')->select();
|
|
|
|
|
return $this->assembleRecords($items, $gameIds, 'amount', 'game_id');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 按天统计付款用户数
|
|
|
|
|
*/
|
|
|
|
|
public function getPayUserCountByDay($params) {
|
|
|
|
|
$beginTime = $params['begin_time'] ?? 0;
|
|
|
|
|
$endTime = $params['end_time'] ?? 0;
|
|
|
|
|
$gameId = $params['game_id'] ?? 0;
|
|
|
|
|
$serverId = $params['server_id'] ?? 0;
|
|
|
|
|
$ids = $params['promote_id'] ?? [];
|
|
|
|
|
$isBan = $params['is_ban'] ?? false;
|
|
|
|
|
public function getPayUserCountGroupByDay($params) {
|
|
|
|
|
$dayList = $params['dayList'] ?? [];
|
|
|
|
|
|
|
|
|
|
$map['pay_status'] = 1;
|
|
|
|
|
$map['pay_time'] = ['between', [$beginTime, $endTime]];
|
|
|
|
|
$map['game_id'] = $gameId > 0 ? $gameId : ['gt', 0];
|
|
|
|
|
$map['promote_id'] = ['in', $ids];
|
|
|
|
|
$map['pay_way'] = $isBan ? ['neq', '-10'] : ['neq', '-1'];
|
|
|
|
|
|
|
|
|
|
$conditions = $this->getDayGroupConditions($params);
|
|
|
|
|
$field = 'FROM_UNIXTIME(pay_time,"%Y-%m-%d") as day, count(distinct user_id) count';
|
|
|
|
|
$items = M('spend', 'tab_')->field($field)->where($conditions)->group('day')->select();
|
|
|
|
|
return $this->assembleRecords($items, $dayList, 'count');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$items = M('spend', 'tab_')->field($field)->where($map)->group('day')->select();
|
|
|
|
|
return $this->assembleDayRecords($items, $dayList, 'count');
|
|
|
|
|
/**
|
|
|
|
|
* 游戏统计付款用户数
|
|
|
|
|
*/
|
|
|
|
|
public function getPayUserCountGroupByGame($params) {
|
|
|
|
|
$gameIds = $params['game_ids'] ?? [];
|
|
|
|
|
$conditions = $this->getGameGroupConditions($params);
|
|
|
|
|
$field = 'game_id, count(distinct user_id) count';
|
|
|
|
|
$items = M('spend', 'tab_')->field($field)->where($conditions)->group('game_id')->select();
|
|
|
|
|
return $this->assembleRecords($items, $dayList, 'count', 'game_id');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 按照时间分组统计新增付费用户数
|
|
|
|
|
*/
|
|
|
|
|
public function getNewPayUserCountByDay($params) {
|
|
|
|
|
public function getNewPayUserCountGroupByDay($params) {
|
|
|
|
|
$dayList = $params['dayList'] ?? [];
|
|
|
|
|
$gameId = $params['game_id'] ?? 0;
|
|
|
|
|
$serverId = $params['server_id'] ?? 0;
|
|
|
|
|
$ids = $params['promote_id'] ?? [];
|
|
|
|
|
$isBan = $params['is_ban'] ?? false;
|
|
|
|
|
|
|
|
|
|
$map = [];
|
|
|
|
|
$map['pay_status']=1;
|
|
|
|
|
if ($gameId > 0) {
|
|
|
|
|
$map['game_id'] = $gameId;
|
|
|
|
|
}
|
|
|
|
|
if ($serverId > 0) {
|
|
|
|
|
$map['server_id'] = $serverId;
|
|
|
|
|
}
|
|
|
|
|
$map['promote_id'] = ['in', $ids];
|
|
|
|
|
$map['pay_way'] = $isBan ? ['neq', '-10'] : ['neq', '-1'];
|
|
|
|
|
$conditions = $this->getDayGroupConditions($params);
|
|
|
|
|
$oldMap = $map;
|
|
|
|
|
|
|
|
|
|
$records = [];
|
|
|
|
@ -129,26 +148,27 @@ class SpendRepository {
|
|
|
|
|
return $records;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 按照时间分组统计新增付费用户数
|
|
|
|
|
*/
|
|
|
|
|
public function getNewPayUserCountGroupByGame($params) {
|
|
|
|
|
$beginTime = $params['begin_time'] ?? 0;
|
|
|
|
|
$gameIds = $params['game_ids'] ?? [];
|
|
|
|
|
$conditions = $this->getGameGroupConditions($params);
|
|
|
|
|
$oldConditions = $conditions;
|
|
|
|
|
$oldConditions['pay_time'] = ['lt', $beginTime];
|
|
|
|
|
$oldQuery = M('spend', 'tab_')->field('user_id')->where($oldConditions)->group('user_id')->buildSql();
|
|
|
|
|
$map['user_id'] = ['exp', ' not in (' . $oldQuery . ')'];
|
|
|
|
|
$items = M('spend', 'tab_')->field('count(distinct user_id) count, game_id')->where($conditions)->group('game_id')->find();
|
|
|
|
|
return $this->assembleRecords($items, $gameIds, 'amount', 'game_id');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 按照时间分组统计新增付费用户付费金额
|
|
|
|
|
*/
|
|
|
|
|
public function getNewPayAmountByDay($params) {
|
|
|
|
|
public function getNewPayAmountGroupByDay($params) {
|
|
|
|
|
$dayList = $params['dayList'] ?? [];
|
|
|
|
|
$gameId = $params['game_id'] ?? 0;
|
|
|
|
|
$serverId = $params['server_id'] ?? 0;
|
|
|
|
|
$ids = $params['promote_id'] ?? [];
|
|
|
|
|
$isBan = $params['is_ban'] ?? false;
|
|
|
|
|
|
|
|
|
|
$map = [];
|
|
|
|
|
$map['pay_status']=1;
|
|
|
|
|
if ($gameId > 0) {
|
|
|
|
|
$map['game_id'] = $gameId;
|
|
|
|
|
}
|
|
|
|
|
if ($serverId > 0) {
|
|
|
|
|
$map['server_id'] = $serverId;
|
|
|
|
|
}
|
|
|
|
|
$map['promote_id'] = ['in', $ids];
|
|
|
|
|
$map['pay_way'] = $isBan ? ['neq', '-10'] : ['neq', '-1'];
|
|
|
|
|
$conditions = $this->getDayGroupConditions($params);
|
|
|
|
|
$oldMap = $map;
|
|
|
|
|
|
|
|
|
|
$records = [];
|
|
|
|
@ -165,26 +185,28 @@ class SpendRepository {
|
|
|
|
|
return $records;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
/**
|
|
|
|
|
* 按照游戏统计新增付费用户付费金额
|
|
|
|
|
*/
|
|
|
|
|
public function getNewPayAmountGroupByGame($params) {
|
|
|
|
|
$beginTime = $params['begin_time'] ?? 0;
|
|
|
|
|
$gameIds = $params['game_ids'] ?? [];
|
|
|
|
|
$conditions = $this->getGameGroupConditions($params);
|
|
|
|
|
$oldConditions = $conditions;
|
|
|
|
|
$oldConditions['pay_time'] = ['lt', $beginTime];
|
|
|
|
|
$oldQuery = M('spend', 'tab_')->field('user_id')->where($oldConditions)->group('user_id')->buildSql();
|
|
|
|
|
$map['user_id'] = ['exp', ' not in (' . $oldQuery . ')'];
|
|
|
|
|
$items = M('spend', 'tab_')->field('sum(pay_amount) amount, game_id')->where($conditions)->group('game_id')->find();
|
|
|
|
|
return $this->assembleRecords($items, $gameIds, 'amount', 'game_id');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 统计给定时间前的付费玩家总数
|
|
|
|
|
*/
|
|
|
|
|
public function getHistoryPayCountByDay($params) {
|
|
|
|
|
public function getHistoryPayCountGroupByDay($params)
|
|
|
|
|
{
|
|
|
|
|
$dayList = $params['dayList'] ?? [];
|
|
|
|
|
$gameId = $params['game_id'] ?? 0;
|
|
|
|
|
$serverId = $params['server_id'] ?? 0;
|
|
|
|
|
$ids = $params['promote_id'] ?? [];
|
|
|
|
|
$isBan = $params['is_ban'] ?? false;
|
|
|
|
|
|
|
|
|
|
$map = [];
|
|
|
|
|
$map['pay_status']=1;
|
|
|
|
|
if ($gameId > 0) {
|
|
|
|
|
$map['game_id'] = $gameId;
|
|
|
|
|
}
|
|
|
|
|
if ($serverId > 0) {
|
|
|
|
|
$map['server_id'] = $serverId;
|
|
|
|
|
}
|
|
|
|
|
$map['promote_id'] = ['in', $ids];
|
|
|
|
|
$map['pay_way'] = $isBan ? ['neq', '-10'] : ['neq', '-1'];
|
|
|
|
|
$conditions = $this->getDayGroupConditions($params);
|
|
|
|
|
|
|
|
|
|
$records = [];
|
|
|
|
|
foreach ($dayList as $day) {
|
|
|
|
@ -195,4 +217,16 @@ class SpendRepository {
|
|
|
|
|
}
|
|
|
|
|
return $records;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 统计给定时间前的付费玩家总数
|
|
|
|
|
*/
|
|
|
|
|
public function getHistoryPayCountGroupByGame($params)
|
|
|
|
|
{
|
|
|
|
|
$beginTime = $params['begin_time'] ?? 0;
|
|
|
|
|
$conditions = $this->getGameGroupConditions($params);
|
|
|
|
|
$conditions['pay_time'] = ['elt', $beginTime];
|
|
|
|
|
$items = M('spend', 'tab_')->field('count(DISTINCT user_id) as count, game_id')->where($conditions)->group('game_id')->find();
|
|
|
|
|
return $this->assembleRecords($items, $gameIds, 'count', 'game_id');
|
|
|
|
|
}
|
|
|
|
|
}
|