优化: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

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