Files
yusheng-php/application/adminapi/model/Gift.php

184 lines
6.3 KiB
PHP
Raw Normal View History

2025-08-07 20:21:47 +08:00
<?php
namespace app\adminapi\model;
2026-01-12 18:51:03 +08:00
use app\common\library\GiftTableManager;
use think\Log;
2025-08-07 20:21:47 +08:00
use think\Model;
use think\Session;
use think\Db;
class Gift extends Model
{
// 开启自动写入时间戳字段
protected $autoWriteTimestamp = 'int';
// 定义时间戳字段名
protected $createTime = 'createtime';
protected $updateTime = 'updatetime';
protected $name = 'vs_gift';
//礼物类型 1普通 2盲盒 3礼包礼物
public $giftType = [
1 => '普通礼物',
2 => '盲盒礼物',
2026-01-04 11:38:38 +08:00
3 => '礼包礼物',
2026-01-09 14:38:07 +08:00
6 => '酒吧房礼物'
2025-08-07 20:21:47 +08:00
];
//送礼流水来源1聊天送礼物 2房间语聊送礼 3直播送礼 4动态打赏
public $GiveGiftFromStr = [
1 => '聊天送礼',
2 => '房间语聊送礼',
3 => '直播送礼',
2026-01-04 11:38:38 +08:00
4 => '动态打赏',
5 => '房心愿礼物',
6 => '酒吧房自定义礼物',
7 => '酒吧房普通礼物',
8 => '酒吧房小黑屋礼物'
2025-08-07 20:21:47 +08:00
];
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;
}
2026-01-12 18:51:03 +08:00
/**
* 获取送礼记录
*/
public function getGiftRecords($search_time,$where,$page_array)
{
// 获取需要查询的表
$tables = GiftTableManager::getTablesByTimeRange(
$search_time[0],
$search_time[1]
);
//数组排序fa_vs_give_gift_202601 表明数字大的排在前面
arsort($tables);
2026-01-12 19:56:04 +08:00
if(empty($tables)){
$tables[0] = "vs_give_gift";
}
2026-01-12 18:51:03 +08:00
$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;
}
2025-08-07 20:21:47 +08:00
}