排行榜
This commit is contained in:
@@ -82,7 +82,7 @@ class GiveGiftBases extends Model
|
|||||||
/**
|
/**
|
||||||
* 房间送礼统计
|
* 房间送礼统计
|
||||||
*/
|
*/
|
||||||
public function getRoomStatistics()
|
public function getRoomStatistics($params)
|
||||||
{
|
{
|
||||||
$fromId = $this->request->param('from_id/d', 0);
|
$fromId = $this->request->param('from_id/d', 0);
|
||||||
$startTime = $this->request->param('start_time/d', strtotime('-7 days'));
|
$startTime = $this->request->param('start_time/d', strtotime('-7 days'));
|
||||||
@@ -144,9 +144,10 @@ class GiveGiftBases extends Model
|
|||||||
/**
|
/**
|
||||||
* 用户送礼统计
|
* 用户送礼统计
|
||||||
*/
|
*/
|
||||||
public function getUserStatistics()
|
public function getUserStatistics($params)
|
||||||
{
|
{
|
||||||
$userId = $this->request->param('user_id/d', 0);
|
$userId = $this->request->param('user_id/d', 0);
|
||||||
|
$userId = $params['user_id'];
|
||||||
$startTime = $this->request->param('start_time/d', strtotime('-30 days'));
|
$startTime = $this->request->param('start_time/d', strtotime('-30 days'));
|
||||||
$endTime = $this->request->param('end_time/d', time());
|
$endTime = $this->request->param('end_time/d', time());
|
||||||
|
|
||||||
@@ -346,4 +347,41 @@ class GiveGiftBases extends Model
|
|||||||
$result = array("total" => $total, "rows" => $data);
|
$result = array("total" => $total, "rows" => $data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取送礼排行
|
||||||
|
*/
|
||||||
|
|
||||||
|
public function getGiftRanking($params)
|
||||||
|
{
|
||||||
|
$where = [];
|
||||||
|
$options = [];
|
||||||
|
|
||||||
|
// 时间范围
|
||||||
|
if (!empty($params['start_time'])) {
|
||||||
|
$options['start_time'] = strtotime($params['start_time']);
|
||||||
|
}
|
||||||
|
if (!empty($params['end_time'])) {
|
||||||
|
$options['end_time'] = strtotime($params['end_time']);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 分页参数
|
||||||
|
$options['page'] = $params['page'] ?? 1;
|
||||||
|
$options['limit'] = min($params['limit'] ?? 20, 100); // 限制最大100条
|
||||||
|
|
||||||
|
|
||||||
|
$options['group_by'] = 'user_id';
|
||||||
|
|
||||||
|
|
||||||
|
// 查询数据
|
||||||
|
$result = $this->giftModel->getGiftStatisticsRanking($where, $options);
|
||||||
|
|
||||||
|
Log::info("查询送礼记录,条件: " . json_encode($where) . ", 结果数: " . count($result['data']));
|
||||||
|
|
||||||
|
// $this->success('获取成功', $result);
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -41,27 +41,23 @@ class Ranking extends Model
|
|||||||
public function ranking($ranking_type)
|
public function ranking($ranking_type)
|
||||||
{
|
{
|
||||||
$where['a.createtime'] = ['between', [$this->begin_time, $this->end_time]];
|
$where['a.createtime'] = ['between', [$this->begin_time, $this->end_time]];
|
||||||
|
|
||||||
$my_ranking = db::name('user')
|
$my_ranking = db::name('user')
|
||||||
->field('user_code,avatar,nickname,id as user_id,user_code,sex')
|
->field('user_code,avatar,nickname,id as user_id,sex')
|
||||||
->where('id',$this->user_id)->find();
|
->where('id',$this->user_id)->find();
|
||||||
$my_ranking['icon'][0] = model('UserData')->user_wealth_icon($my_ranking['user_id']);//财富图标
|
|
||||||
$my_ranking['total'] = 0;
|
$my_ranking['total'] = 0;
|
||||||
$my_ranking['rank'] = -1;
|
$my_ranking['rank'] = -1;
|
||||||
$my_ranking['diff'] = 0;
|
$my_ranking['diff'] = 0;
|
||||||
if($ranking_type == 1){//1财富榜,2魅力榜
|
|
||||||
$lists = db::name('vs_give_gift')->alias('a')
|
|
||||||
->join('user b', 'a.user_id = b.id')
|
|
||||||
->field('a.user_id,b.nickname,b.avatar,b.user_code,sum(a.total_price) * 10 as total')
|
|
||||||
->where($where)
|
|
||||||
->order('total desc')
|
|
||||||
->group('a.user_id')
|
|
||||||
// ->page($this->page, $this->page_limit)
|
|
||||||
->select();
|
|
||||||
|
|
||||||
|
if($ranking_type == 1){//1财富榜,2魅力榜
|
||||||
|
$params['start_time']=$this->begin_time;
|
||||||
|
$params['end_time']=$this->end_time;
|
||||||
|
$lists = model('GiveGiftBases')->getGiftRanking($params);
|
||||||
|
var_dump($lists);exit;
|
||||||
if($lists){
|
if($lists){
|
||||||
foreach ($lists as $key => &$value) {
|
foreach ($lists as $key => &$value) {
|
||||||
$lists[$key]['icon'][0] = model('UserData')->user_wealth_icon($value['user_id']);//财富图标
|
|
||||||
$lists[$key]['icon'][1] = model('UserData')->user_charm_icon($value['user_id']);//魅力图标
|
|
||||||
$lists[$key]['rank'] = $key + 1;
|
$lists[$key]['rank'] = $key + 1;
|
||||||
if ($this->user_id == $value['user_id']) {
|
if ($this->user_id == $value['user_id']) {
|
||||||
$my_ranking = $lists[$key];
|
$my_ranking = $lists[$key];
|
||||||
@@ -78,8 +74,7 @@ class Ranking extends Model
|
|||||||
->where('a.user_id',$this->user_id)
|
->where('a.user_id',$this->user_id)
|
||||||
->page($this->page, $this->page_limit)
|
->page($this->page, $this->page_limit)
|
||||||
->select();
|
->select();
|
||||||
$my_ranking_data['icon'][0] = model('UserData')->user_wealth_icon($my_ranking_data['user_id']);//财富图标
|
|
||||||
$my_ranking_data['icon'][1] = model('UserData')->user_charm_icon($my_ranking_data['user_id']);//魅力图标
|
|
||||||
$lists_last_number = $lists[count($lists) - 1]['total'] ?? 0;
|
$lists_last_number = $lists[count($lists) - 1]['total'] ?? 0;
|
||||||
|
|
||||||
if (!isset($my_ranking_data['user_id']) || !$my_ranking_data['user_id']) {
|
if (!isset($my_ranking_data['user_id']) || !$my_ranking_data['user_id']) {
|
||||||
@@ -110,8 +105,7 @@ class Ranking extends Model
|
|||||||
|
|
||||||
if($lists){
|
if($lists){
|
||||||
foreach ($lists as $key => &$value) {
|
foreach ($lists as $key => &$value) {
|
||||||
$lists[$key]['icon'][0] = model('UserData')->user_wealth_icon($value['user_id']);//财富图标
|
|
||||||
$lists[$key]['icon'][1] = model('UserData')->user_charm_icon($value['user_id']);//魅力图标
|
|
||||||
$lists[$key]['rank'] = $key + 1;
|
$lists[$key]['rank'] = $key + 1;
|
||||||
if ($this->user_id == $value['user_id']) {
|
if ($this->user_id == $value['user_id']) {
|
||||||
$my_ranking = $lists[$key];
|
$my_ranking = $lists[$key];
|
||||||
@@ -128,8 +122,7 @@ class Ranking extends Model
|
|||||||
->where('a.gift_user',$this->user_id)
|
->where('a.gift_user',$this->user_id)
|
||||||
->select();
|
->select();
|
||||||
|
|
||||||
$my_ranking_data['icon'][0] = model('UserData')->user_wealth_icon($my_ranking_data['user_id']);//财富图标
|
|
||||||
$my_ranking_data['icon'][1] = model('UserData')->user_charm_icon($my_ranking_data['user_id']);//魅力图标
|
|
||||||
$lists_last_number = $lists[count($lists) - 1]['total'] ?? 0;
|
$lists_last_number = $lists[count($lists) - 1]['total'] ?? 0;
|
||||||
|
|
||||||
if (!isset($my_ranking_data['user_id']) || !$my_ranking_data['user_id']) {
|
if (!isset($my_ranking_data['user_id']) || !$my_ranking_data['user_id']) {
|
||||||
|
|||||||
@@ -55,6 +55,8 @@ class BaseCom extends Controller
|
|||||||
$this->uid = 0;
|
$this->uid = 0;
|
||||||
//定义一个常量
|
//定义一个常量
|
||||||
define('UID', $this->uid);
|
define('UID', $this->uid);
|
||||||
|
}else{
|
||||||
|
$this->check_login($is_maintenance) ;
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
$this->check_login($is_maintenance) ;
|
$this->check_login($is_maintenance) ;
|
||||||
|
|||||||
@@ -459,4 +459,100 @@ class GiveGiftBase extends Model
|
|||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 统计送礼数据排行
|
||||||
|
* @param array $where 查询条件
|
||||||
|
* @param array $options 统计选项
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getGiftStatisticsRanking($where = [], $options = [])
|
||||||
|
{
|
||||||
|
$defaultOptions = [
|
||||||
|
'group_by' => null, // 分组字段
|
||||||
|
'start_time' => null,
|
||||||
|
'end_time' => null,
|
||||||
|
];
|
||||||
|
|
||||||
|
$options = array_merge($defaultOptions, $options);
|
||||||
|
|
||||||
|
// 获取需要查询的表
|
||||||
|
$tables = GiftTableManager::getTablesByTimeRange(
|
||||||
|
$options['start_time'],
|
||||||
|
$options['end_time']
|
||||||
|
);
|
||||||
|
|
||||||
|
if (empty($tables)) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 构建查询条件
|
||||||
|
$conditions = $this->buildQueryConditions($where);
|
||||||
|
|
||||||
|
$unionSql = '';
|
||||||
|
$params = [];
|
||||||
|
|
||||||
|
// 构建统计SQL
|
||||||
|
$fields = 'SUM(total_price) as total_price';
|
||||||
|
if ($options['group_by']) {
|
||||||
|
$fields .= ", {$options['group_by']}";
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($tables as $table) {
|
||||||
|
$sql = "SELECT {$fields} FROM `{$table}` WHERE 1=1";
|
||||||
|
|
||||||
|
foreach ($conditions as $field => $condition) {
|
||||||
|
if (is_array($condition) && count($condition) == 2) {
|
||||||
|
$operator = $condition[0];
|
||||||
|
$value = $condition[1];
|
||||||
|
$sql .= " AND `{$field}` {$operator} ?";
|
||||||
|
$params[] = $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 时间范围
|
||||||
|
if ($options['start_time']) {
|
||||||
|
$sql .= " AND createtime >= ?";
|
||||||
|
$params[] = $options['start_time'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($options['end_time']) {
|
||||||
|
$sql .= " AND createtime <= ?";
|
||||||
|
$params[] = $options['end_time'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($options['group_by']) {
|
||||||
|
$sql .= " GROUP BY {$options['group_by']}";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($unionSql) {
|
||||||
|
$unionSql .= " UNION ALL ";
|
||||||
|
}
|
||||||
|
$unionSql .= "(" . $sql . ")";
|
||||||
|
}
|
||||||
|
|
||||||
|
// 最终统计
|
||||||
|
if ($options['group_by']) {
|
||||||
|
$finalSql = "SELECT {$options['group_by']},
|
||||||
|
SUM(total_price) as total_price,
|
||||||
|
FROM ({$unionSql}) as tmp
|
||||||
|
GROUP BY {$options['group_by']}
|
||||||
|
ORDER BY total_price";
|
||||||
|
} else {
|
||||||
|
$finalSql = "SELECT SUM(total_number) as total_number,
|
||||||
|
SUM(total_price) as total_price,
|
||||||
|
SUM(total_count) as total_count
|
||||||
|
FROM ({$unionSql}) as tmp";
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$result = Db::query($finalSql, $params);
|
||||||
|
return $options['group_by'] ? $result : ($result[0] ?? []);
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
Log::error("统计送礼数据失败: " . $e->getMessage());
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user