优化:Give_Gift 表查询处理

This commit is contained in:
2026-01-12 18:51:03 +08:00
parent 0b687e6712
commit 29f7626fc8
2 changed files with 121 additions and 8 deletions

View File

@@ -4,6 +4,7 @@ namespace app\adminapi\controller;
ini_set('memory_limit', '512M'); // 临时增加到512MB
use app\common\controller\adminApi;
use think\Db;
use think\Log;
class GiveGift extends adminApi
{
@@ -27,9 +28,13 @@ class GiveGift extends adminApi
$from_id = input('from_id', '');//礼物来源id
$gift_id = input('gift_id', '');//礼物id
$from = input('from', '');// 来源类型1聊天送礼物 2房间语聊送礼 3直播送礼 4动态打赏 5系统任务 6-cp房间送礼
$start_time = input('start_time', '');
$end_time = input('end_time', '');
//获取当前月份的开始时间和结束时间
$firstDay = date('Y-m-01');
$lastDay = date('Y-m-t 23:59:59');
$start_time = input('start_time', $firstDay);
$end_time = input('end_time', $lastDay);
$search_time = [];
$search_time = [strtotime($start_time), strtotime($end_time)];
$where=[];
$gwhere = [];
if($send_user != ''){
@@ -73,20 +78,27 @@ class GiveGift extends adminApi
$gwhere['gg.createtime'] = ['<=', strtotime($end_time)];
}
}
$page_array = [];
$page_array = [
'page' => !empty($page)?$page:1,
'page_limit' => !empty($page_limit)?$page_limit:10,
];
$gift_list = model('Gift')->getGiftRecords($search_time,$where,$page_array);
//礼物总数
$gift_num = db::name('vs_give_gift')->where($where)->sum('number');
$gift_num = $gift_list['number'];
//总金额
$total_price = db::name('vs_give_gift')->where($where)->sum('total_price');
$total_price = $gift_list['total_price'];
//平台收益
$app_earning = 0;
//接收人收益
$receive_earning = 0;
//房主收益
$room_owner_earning = 0;
// 获取所有送礼记录
$lists = db::name('vs_give_gift')->where($where)->order('id', 'desc')->page($page, $page_limit)->select();
$count = db::name('vs_give_gift')->where($where)->count();
$lists = $gift_list['lists'];
$count = $gift_list['count'];
// $lists = db::name('vs_give_gift')->where($where)->order('id', 'desc')->page($page, $page_limit)->select();
// $count = db::name('vs_give_gift')->where($where)->count();
$earning_list = [];
if(!empty($where)){
$earning_list = db::name('vs_give_gift_ratio_log')
@@ -231,4 +243,5 @@ class GiveGift extends adminApi
$start = ($page - 1) * $limit;
return array_slice($array, $start, $limit);
}
}

View File

@@ -2,6 +2,8 @@
namespace app\adminapi\model;
use app\common\library\GiftTableManager;
use think\Log;
use think\Model;
use think\Session;
use think\Db;
@@ -78,4 +80,102 @@ class Gift extends Model
}
return $res;
}
/**
* 获取送礼记录
*/
public function getGiftRecords($search_time,$where,$page_array)
{
// 获取需要查询的表
$tables = GiftTableManager::getTablesByTimeRange(
$search_time[0],
$search_time[1]
);
//数组排序fa_vs_give_gift_202601 表明数字大的排在前面
arsort($tables);
$gift_count = 0;
$gift_total_price = 0;
$gift_number = 0;
$all_lists = []; // 存储所有查询结果
$remaining_page_offset = ($page_array['page'] - 1) * $page_array['page_limit']; // 需要跳过的记录数
$collected_count = 0; // 已收集的记录数
if($tables){
foreach ($tables as $table) {
$table_name = substr($table, 3);//截取可查询的表名
// 获取当前表的总记录数
$count = db::name($table_name)->where($where)->count();
if($count > 0){
// 如果还需要跳过记录
if($remaining_page_offset > 0){
// 如果当前表的记录数大于需要跳过的记录数
if($count > $remaining_page_offset){
// 从当前表中获取所需数据,跳过前面的记录
$table_lists = db::name($table_name)
->where($where)
->order('createtime', 'desc')
->limit($remaining_page_offset, $page_array['page_limit'])
->select();
// 添加到结果中
foreach($table_lists as $item){
if($collected_count < $page_array['page_limit']){
$all_lists[] = $item;
$collected_count++;
} else {
break;
}
}
$remaining_page_offset = 0; // 已经跳过所需的记录
} else {
// 当前表的所有记录都需要跳过
$remaining_page_offset -= $count;
}
} else if($collected_count < $page_array['page_limit']) {
// 如果不需要跳过记录,且还没有收集足够的数据
$remaining_needed = $page_array['page_limit'] - $collected_count;
// 从当前表获取剩余所需的数据
$table_lists = db::name($table_name)
->where($where)
->order('createtime', 'desc')
->limit($remaining_needed)
->select();
// 添加到结果中
foreach($table_lists as $item){
if($collected_count < $page_array['page_limit']){
$all_lists[] = $item;
$collected_count++;
} else {
break;
}
}
}
$total_price = db::name($table_name)->where($where)->sum('total_price');
$number = db::name($table_name)->where($where)->sum('number');
$gift_count += $count;
$gift_total_price += $total_price;
$gift_number += $number;
// 如果已经收集到足够数据,跳出循环
if($collected_count >= $page_array['page_limit']){
break;
}
}
}
}
$result = [
'lists' => $all_lists,
'count' => $gift_count,
'total_price' => $gift_total_price,
'number' => $gift_number,
];
return $result;
}
}