优化:Give_Gift 表查询处理
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user