'普通礼物', 2 => '盲盒礼物', 3 => '礼包礼物', 6 => '酒吧房礼物' ]; //送礼流水来源:1聊天送礼物 2房间语聊送礼 3直播送礼 4动态打赏 public $GiveGiftFromStr = [ 1 => '聊天送礼', 2 => '房间语聊送礼', 3 => '直播送礼', 4 => '动态打赏', 5 => '房心愿礼物', 6 => '酒吧房自定义礼物', 7 => '酒吧房普通礼物', 8 => '酒吧房小黑屋礼物' ]; public function getList($where = [], $page = 1, $limit = 10) { $where['delete_time'] = 0; $list = $this->where($where)->page($page, $limit)->select(); $list = collection($list)->toArray(); return $list; } public function getCount($where = []) { $where['delete_time'] = 0; return $this->where($where)->count(); } public function getOne($where = []) { $one = $this->where($where)->find(); return $one; } public function add($data) { $res = $this->save($data); if (!$res) { return false; } $guild_id = $this->id; return $guild_id; } public function edit($where = [], $data = []) { $res = $this->where($where)->update($data); return $res; } public function del($where = []) { $res = $this->where($where)->delete(); return $res; } //软删除 public function setDel($where = []){ $res = $this->where($where)->setField('delete_time',time()); if(!$res){ return false; } 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; } }