Files
yusheng-php/application/adminapi/controller/Statistical.php

759 lines
32 KiB
PHP
Raw Normal View History

2025-08-07 20:21:47 +08:00
<?php
namespace app\adminapi\controller;
use app\common\controller\adminApi;
use think\Db;
use Yzh\YunPay;
class Statistical extends adminApi
{
//初始化
public function _initialize()
{
2026-01-05 11:22:05 +08:00
set_time_limit(0);
2025-08-07 20:21:47 +08:00
parent::_initialize();
}
//充值排行统计
public function get_recharge_ranking()
{
$page = input('page', 1);
$page_limit = input('page_limit', 30);
$search_uid = input('search_uid', '');
$begin_time = input('begin_time', '');
$end_time = input('end_time', '');
$where=[];
//标签名称
if($search_uid !== ''){
$user_id = db::name('user')->where('user_code', $search_uid)->value('id');
$where['user_id'] = $user_id;
}
$username = input('username', '');
if($username !== ''){
$user_id = db::name('user')->where('nickname', $username)->value('id');
$where['user_id'] = $user_id;
}
if($begin_time !== ''){
$where['createtime'] = ['>=', strtotime($begin_time)];
}
if($end_time !== ''){
2025-10-20 09:59:39 +08:00
$where['createtime'] = ['<=', strtotime($end_time)];
2025-08-07 20:21:47 +08:00
}
if(!empty($begin_time) && !empty($end_time)){
2025-10-20 09:59:39 +08:00
$where['createtime'] = ['between',[strtotime($begin_time),strtotime($end_time)]];
2025-08-07 20:21:47 +08:00
}
$where['pay_status'] = 2;//1待支付,2已支付
$where['order_type'] = 1;//订单类型:1 充值
$count = db::name('vs_user_recharge')
->where($where)
->group('user_id')
->count();
$lists = db::name('vs_user_recharge')
->field('rid,createtime,user_id,sum(money) as money,sum(coin) as coin')
->where($where)
->group('user_id')
->order('money desc')
->page($page, $page_limit)
->select();
foreach ($lists as $key => $value) {
$lists[$key]['createtime'] = date('Y-m-d H:i:s', $value['createtime']);
$lists[$key]['user_name'] = db::name('user')->where('id', $value['user_id'])->value('nickname').'-'.
db::name('user')->where('id', $value['user_id'])->value('user_code');
$lists[$key]['avatar'] = db::name('user')->where('id', $value['user_id'])->value('avatar');
}
$return_data = [
'page' =>$page,
'page_limit' => $page_limit,
'count' => $count,
'lists' => $lists,
'total' =>[
'total_price' => db::name('vs_user_recharge')->where($where)->sum('money'),
'total_gold' => db::name('vs_user_recharge')->where($where)->sum('coin')
]
];
return V(1,"成功", $return_data);
}
//送礼、收礼排行
public function get_gift_ranking()
{
$page = input('page', 1);
$page_limit = input('page_limit', 30);
$type = input('type', 1);//1送礼2收礼
$search_uid = input('search_uid', '');
$begin_time = input('begin_time', '');
$end_time = input('end_time', '');
$where=[];
$group = 'user_id';
if($type == 2){
$group = 'gift_user';
}
//标签名称
if($search_uid !== ''){
$user_id = db::name('user')->where('user_code', $search_uid)->value('id');
if($type == 1){
$where['user_id'] = $user_id;
}else{
$where['gift_user'] = $user_id;
}
}
$username = input('username', '');
if($username !== ''){
$user_id = db::name('user')->where('nickname', $username)->value('id');
if($type == 1){
$where['user_id'] = $user_id;
}else{
$where['gift_user'] = $user_id;
}
}
if($begin_time !== ''){
$where['createtime'] = ['>=', strtotime($begin_time)];
}
if($end_time !== ''){
2025-10-20 09:59:39 +08:00
$where['createtime'] = ['<=', strtotime($end_time)];
2025-08-07 20:21:47 +08:00
}
if(!empty($begin_time) && !empty($end_time)){
2025-10-20 09:59:39 +08:00
$where['createtime'] = ['between',[strtotime($begin_time),strtotime($end_time)]];
2025-08-07 20:21:47 +08:00
}
$count = db::name('vs_give_gift')
->where($where)
->group($group)
->count();
$lists = db::name('vs_give_gift')
->field('id,createtime,user_id,gift_user,sum(total_price) as total_price,sum(number) as number')
->where($where)
->group($group)
->order('total_price desc')
->page($page, $page_limit)
->select();
foreach ($lists as $key => $value) {
$lists[$key]['createtime'] = date('Y-m-d H:i:s', $value['createtime']);
if($type == 1){
$lists[$key]['user_name'] = db::name('user')->where('id', $value['user_id'])->value('nickname').'-'.
db::name('user')->where('id', $value['user_id'])->value('user_code');
$lists[$key]['avatar'] = db::name('user')->where('id', $value['user_id'])->value('avatar');
}else{
$lists[$key]['user_name'] = db::name('user')->where('id', $value['gift_user'])->value('nickname').'-'.
db::name('user')->where('id', $value['gift_user'])->value('user_code');
$lists[$key]['avatar'] = db::name('user')->where('id', $value['gift_user'])->value('avatar');
}
}
$return_data = [
'page' =>$page,
'page_limit' => $page_limit,
'count' => $count,
'lists' => $lists,
'total' =>[
'total_price' => db::name('vs_give_gift')->where($where)->sum('total_price'),
'total_num' => db::name('vs_give_gift')->where($where)->sum('number')
]
];
return V(1,"成功", $return_data);
}
//消费排行
public function get_consumption_ranking()
{
$page = input('page', 1);
$page_limit = input('page_limit', 30);
$search_uid = input('search_uid', '');
$begin_time = input('begin_time', '');
$end_time = input('end_time', '');
$where=[];
//标签名称
if($search_uid !== ''){
$user_id = db::name('user')->where('user_code', $search_uid)->value('id');
$where['user_id'] = $user_id;
}
$username = input('username', '');
if($username !== ''){
$user_id = db::name('user')->where('nickname', $username)->value('id');
$where['user_id'] = $user_id;
}
if($begin_time !== ''){
$where['createtime'] = ['>=', strtotime($begin_time)];
}
if($end_time !== ''){
2025-10-20 09:59:39 +08:00
$where['createtime'] = ['<=', strtotime($end_time)];
2025-08-07 20:21:47 +08:00
}
if(!empty($begin_time) && !empty($end_time)){
2025-10-20 09:59:39 +08:00
$where['createtime'] = ['between',[strtotime($begin_time),strtotime($end_time)]];
2025-08-07 20:21:47 +08:00
}
// 1.系统调节 2.充值 3.提现 4.金币转增(送出) 5.每日任务奖励 6.充值返利 7.购买装扮
// 8.礼盒奖励 9.房间补贴 10.购买礼物 11.收礼增加收益 12.工会补贴 13.转赠金币(接收) 14.收益兑换
// 15.首充 16.天降好礼充值 17.退出工会扣款 18.房主收益 19.主持人收益 20.抢头条 21.公会长收益
$where['change_type'] = ['in', [4,7,10,17,20]];
$count = db::name('vs_user_money_log')
->where($where)
->group('user_id')
->count();
$lists = db::name('vs_user_money_log')
->field('log_id,createtime,user_id,sum(change_value) as change_value')
->where($where)
->group('user_id')
->order('change_value desc')
->page($page, $page_limit)
->select();
foreach ($lists as $key => $value) {
$lists[$key]['createtime'] = date('Y-m-d H:i:s', $value['createtime']);
$lists[$key]['user_name'] = db::name('user')->where('id', $value['user_id'])->value('nickname').'-'.
db::name('user')->where('id', $value['user_id'])->value('user_code');
$lists[$key]['avatar'] = db::name('user')->where('id', $value['user_id'])->value('avatar');
}
$return_data = [
'page' =>$page,
'page_limit' => $page_limit,
'count' => $count,
'lists' => $lists,
'total' =>[
'total_price' => db::name('vs_user_money_log')->where($where)->sum('change_value')
]
];
return V(1,"成功", $return_data);
}
//房间流水统计
public function get_room_flow_statistics()
{
$page = input('page', 1);
$page_limit = input('page_limit', 30);
$search_room_id = input('search_room_id', '');
$begin_time = input('begin_time', '');
$end_time = input('end_time', '');
$where=[];
//标签名称
$where['from_id'] = ['>' , 0];
if($search_room_id !== ''){
$room_id = db::name('vs_room')->where('room_number', $search_room_id)->value('id');
$where['from_id'] = $room_id;
}
$room_name = input('room_name', '');
if($room_name !== ''){
$room_id = db::name('vs_room')->where('room_name', $room_name)->value('id');
$where['from_id'] = $room_id;
}
if($begin_time !== ''){
$where['createtime'] = ['>=', strtotime($begin_time)];
}
if($end_time !== ''){
2025-10-20 09:59:39 +08:00
$where['createtime'] = ['<=', strtotime($end_time)];
2025-08-07 20:21:47 +08:00
}
if(!empty($begin_time) && !empty($end_time)){
2025-10-20 09:59:39 +08:00
$where['createtime'] = ['between',[strtotime($begin_time),strtotime($end_time)]];
2025-08-07 20:21:47 +08:00
}
//不为空
$where['from'] = 2;
$count = db::name('vs_give_gift')
->where($where)
->group('from_id')
->count();
$lists = db::name('vs_give_gift')
->field('id,createtime,user_id,gift_user,sum(total_price) as total_price,sum(number) as number,from_id')
->where($where)
->group('from_id')
->order('total_price desc')
->page($page, $page_limit)
->select();
foreach ($lists as $key => $value) {
$room = db::name('vs_room')->where('id', $value['from_id'])->find();
2025-10-20 09:59:39 +08:00
if($room){
$lists[$key]['room_name'] = $room['room_name'].'-'.$room['room_number'];
$lists[$key]['room_number'] = $room['room_number'];
}else{
$lists[$key]['room_name'] = "--";
$lists[$key]['room_number'] = "--";
}
2025-08-07 20:21:47 +08:00
$lists[$key]['createtime'] = date('Y-m-d H:i:s', $value['createtime']);
$lists[$key]['room_cover'] = db::name('vs_room')->where('id', $value['from_id'])->value('room_cover');
$label = db::name('vs_room')->where('id', $value['from_id'])->value('label_id');
$lists[$key]['label'] = db::name('vs_room_label')->where('id', $label)->value('label_name');
2025-12-22 09:44:34 +08:00
//幸运币统计
2025-12-22 10:00:36 +08:00
$where_lucky = [];
2025-12-22 09:44:34 +08:00
if($begin_time !== ''){
$where_lucky['createtime'] = ['>=', strtotime($begin_time)];
}
if($end_time !== ''){
$where_lucky['createtime'] = ['<=', strtotime($end_time)];
}
if(!empty($begin_time) && !empty($end_time)){
$where_lucky['createtime'] = ['between',[strtotime($begin_time),strtotime($end_time)]];
}
$lists[$key]['lucky_coin'] = db::name('vs_room_luck_value')->where('room_id',$value['from_id'])->where($where_lucky)->sum('luck_value');
2025-08-07 20:21:47 +08:00
}
2025-12-22 09:44:34 +08:00
$where_lucky = [];
if($search_room_id !== '' || $room_name !== ''){
2025-12-22 09:44:34 +08:00
$where_lucky['room_id'] = $room_id;
}
if($begin_time !== ''){
$where_lucky['createtime'] = ['>=', strtotime($begin_time)];
}
if($end_time !== ''){
$where_lucky['createtime'] = ['<=', strtotime($end_time)];
}
if(!empty($begin_time) && !empty($end_time)){
$where_lucky['createtime'] = ['between',[strtotime($begin_time),strtotime($end_time)]];
}
2025-08-07 20:21:47 +08:00
$return_data = [
'page' =>$page,
'page_limit' => $page_limit,
'count' => $count,
'lists' => $lists,
'total' =>[
2025-12-22 09:44:34 +08:00
'total_price' => db::name('vs_give_gift')->where($where)->sum('total_price'),
'total_lucky_coin' => db::name('vs_room_luck_value')->where($where_lucky)->sum('luck_value'),
2025-08-07 20:21:47 +08:00
]
];
return V(1,"成功", $return_data);
}
//充值列表
public function get_recharge_list()
{
$page = input('page', 1);
$page_limit = input('page_limit', 30);
$search_uid = input('search_uid', '');
$pay_stime = input('pay_stime', '');
$pay_etime = input('pay_etime', '');
$pay_status = input('pay_status', '');//1.待支付 2.支付成功
$order_sn = input('order_sn', '');
$pay_type = input('pay_type', '');//1.微信 2.支付宝
$money = input('money', '');
$where=[];
//标签名称
if($search_uid !== ''){
$user_id = db::name('user')->where('user_code', $search_uid)->value('id');
$where['user_id'] = $user_id;
}
if($pay_stime !== ''){
$where['createtime'] = ['>=', strtotime($pay_stime)];
}
if($pay_etime !== ''){
2025-10-20 09:59:39 +08:00
$where['createtime'] = ['<=', strtotime($pay_etime)];
2025-08-07 20:21:47 +08:00
}
if(!empty($pay_stime) && !empty($pay_etime)){
2025-10-20 09:59:39 +08:00
$where['createtime'] = ['between',[strtotime($pay_stime),strtotime($pay_etime)]];
2025-08-07 20:21:47 +08:00
}
if($pay_status !== ''){
$where['pay_status'] = $pay_status;
}
if($order_sn !== ''){
$where['order_sn'] = $order_sn;
}
if($pay_type !== ''){
if($pay_type == 1){
$where['pay_type'] = ['in', [1,4]];
}elseif ($pay_type == 2){
$where['pay_type'] = ['in', [2,3]];
}
}
if($money !== ''){
$where['money'] = $money;
}
$count = db::name('vs_user_recharge')->where($where)->count();
2025-10-20 09:59:39 +08:00
$lists = db::name('vs_user_recharge')->where($where)->order('rid desc')->page($page, $page_limit)->select();
2025-08-07 20:21:47 +08:00
foreach ($lists as $key => $value) {
$lists[$key]['createtime'] = date('Y-m-d H:i:s', $value['createtime']);
$lists[$key]['user_name'] = db::name('user')->where('id', $value['user_id'])->value('nickname').'-'.
db::name('user')->where('id', $value['user_id'])->value('user_code');
if($value['pay_type'] == 1 || $value['pay_type'] == 4){
$lists[$key]['pay_type_name'] = '微信支付';
}elseif ($value['pay_type'] == 2 || $value['pay_type'] == 3){
$lists[$key]['pay_type_name'] = '支付宝支付';
}
$lists[$key]['pay_status_str'] = $value['pay_status'] == 1 ? '待支付' : '已支付';
$lists[$key]['pay_time'] = $value['pay_time'] == 0 ? '' : date('Y-m-d H:i:s', $value['pay_time']);
}
$return_data = [
'page' =>$page,
'page_limit' => $page_limit,
'count' => $count,
'lists' => $lists
];
//总收入
$wherew=[];
2025-10-20 09:59:39 +08:00
unset($where['pay_status']);
unset($where['pay_type']);
$return_data['total_money'] = db::name('vs_user_recharge')->where($where)->sum('money');
2025-08-07 20:21:47 +08:00
//未支付
2025-10-20 09:59:39 +08:00
$return_data['unpaid_money'] = db::name('vs_user_recharge')->where($where)->where('pay_status',1)->sum('money');
2025-08-07 20:21:47 +08:00
//已支付
2025-10-20 09:59:39 +08:00
$return_data['paid_money'] = db::name('vs_user_recharge')->where($where)->where('pay_status',2)->sum('money');
2025-08-07 20:21:47 +08:00
//微信支付
$wherew['pay_type'] = ['in', [1,4]];
2025-10-20 09:59:39 +08:00
$return_data['wx_money'] = db::name('vs_user_recharge')->where($where)->where('pay_status',2)->where($wherew)->sum('money');
2025-08-07 20:21:47 +08:00
//支付宝支付
$wherez['pay_type'] = ['in', [2,3]];
2025-10-20 09:59:39 +08:00
$return_data['ali_money'] = db::name('vs_user_recharge')->where($where)->where('pay_status',2)->where($wherez)->sum('money');
2025-08-07 20:21:47 +08:00
//金币数量
2025-10-20 09:59:39 +08:00
$return_data['gold_num'] = db::name('vs_user_recharge')->where($where)->where('pay_status',2)->sum('coin');
2025-08-07 20:21:47 +08:00
return V(1,"成功", $return_data);
}
//兑换列表
public function get_exchange_list()
{
$page = input('page', 1);
$page_limit = input('page_limit', 30);
$search_uid = input('search_uid', '');
$where=[];
if($search_uid !== ''){
if(is_numeric($search_uid)){
$where['b.user_code'] = $search_uid;
}else{
$where['b.nickname'] = ['like', '%'.$search_uid.'%'];
}
}
//时间筛选
$start_time = input('start_time', '');
$end_time = input('end_time', '');
if($start_time !== ''){
$where['a.createtime'] = ['>=', strtotime($start_time)];
}
if($end_time !== ''){
2025-10-20 09:59:39 +08:00
$where['a.createtime'] = ['<=', strtotime($end_time)];
2025-08-07 20:21:47 +08:00
}
if($start_time !== '' && $end_time !== ''){
2025-10-20 09:59:39 +08:00
$where['a.createtime'] = ['between', [strtotime($start_time), strtotime($end_time)]];
2025-08-07 20:21:47 +08:00
}
$count = db::name('user_exchange')->where($where)->alias('a')->join('user b', 'a.user_id = b.id')->count();
$lists = db::name('user_exchange')->where($where)->alias('a')->join('user b', 'a.user_id = b.id')
->field('a.*,b.nickname,b.user_code')
2025-10-20 09:59:39 +08:00
->order('a.id desc')
2025-08-07 20:21:47 +08:00
->page($page, $page_limit)->select();
foreach ($lists as $key => $value) {
$lists[$key]['user_name'] = $value['nickname'].'-'.$value['user_code'];
$lists[$key]['createtime'] = date('Y-m-d H:i:s', $value['createtime']);
}
$return_data = [
'page' =>$page,
'page_limit' => $page_limit,
'count' => $count,
'lists' => $lists,
'total' =>[
'total_coin_num' => db::name('user_exchange')->where($where)->alias('a')->join('user b', 'a.user_id = b.id')->sum('earnings_num'),
'total_earnings_num' => db::name('user_exchange')->where($where)->alias('a')->join('user b', 'a.user_id = b.id')->sum('coin_num'),
]
];
return V(1,"成功", $return_data);
}
//后台手动充值列表
public function admin_recharge_list(){
$page = input('page', 1);
$page_limit = input('page_limit', 10);
$where =[];
$search_id = input('search_id', '');
$search_name = input('search_name', '');
if($search_id){
$where['b.user_code'] = $search_id;
}
if($search_name){
$where['b.username'] = ['like', '%'.$search_name.'%'];
}
$start_time = input('start_time', '');
$end_time = input('end_time', '');
if($start_time !== ''){
$where['a.createtime'] = ['>=', strtotime($start_time)];
}
if($end_time !== ''){
2025-10-20 09:59:39 +08:00
$where['a.createtime'] = ['<=', strtotime($end_time)];
2025-08-07 20:21:47 +08:00
}
if($start_time !== '' && $end_time !== ''){
2025-10-20 09:59:39 +08:00
$where['a.createtime'] = ['between', [strtotime($start_time), strtotime($end_time)]];
2025-08-07 20:21:47 +08:00
}
$count = db::name('vs_admin_recharge_log')
->alias('a')->join('user b', 'a.user_id = b.id')
->where($where)
->count();
$lists = db::name('vs_admin_recharge_log')
->alias('a')->join('user b', 'a.user_id = b.id')
->where($where)
->field('a.*,b.nickname')
->order('a.arid desc')
->page($page, $page_limit)
->select();
foreach ($lists as &$list){
$user_code = model('api/Decorate')->user_decorate_detail($list['user_id'],6);
$list['nickname'] = $user_code."-".$list['nickname'];
$list['admin_name'] = db::name('admin')->where('id', $list['admin_id'])->value('username');
$list['type_str'] = model('common/UserWallet')::getMoneyType($list['type']);
$list['createtime'] = date('Y-m-d H:i:s', $list['createtime']);
}
//总充值(金币)
$total_coin = db::name('vs_admin_recharge_log')->where(['type'=>1])->sum('change_value');
//总充值(收益)
$total_earnings = db::name('vs_admin_recharge_log')->where(['type'=>2])->sum('change_value');
//今日充值(金币)
$today_coin =db::name('vs_admin_recharge_log')->where(['type'=>1])->whereTime('createtime', 'today')->sum('change_value');
//今日充值(收益)
$today_earnings = db::name('vs_admin_recharge_log')->where(['type'=>2])->whereTime('createtime', 'today')->sum('change_value');
$return_data = [
'page' =>$page,
'page_limit' => $page_limit,
'count' => $count,
'lists' => $lists,
'total_data' => [
'total_coin' => $total_coin,
'total_earnings' => $total_earnings,
'today_coin' => $today_coin,
'today_earnings' => $today_earnings
]
];
return V(1,"成功", $return_data);
}
2025-12-18 16:30:46 +08:00
//任务统计
public function task_statistics(){
$page = input('page', 1);
$page_limit = input('page_limit', 10);
$search_id = input('search_uid', '');
$search_name = input('search_name', '');
$search_task_id = input('search_task_id', '');
$search_task_name = input('search_task_name', '');
$begin_time = input('begin_time', '');
$end_time = input('end_time', '');
$where =[];
2025-12-18 19:17:32 +08:00
$search_user_id = 0;
$search_gift_bag_id = 0;
2025-12-18 16:30:46 +08:00
if($search_id){
2025-12-18 19:17:32 +08:00
$search_user_id= db::name('user')->where('user_code', $search_id)->value('id');
2025-12-18 16:30:46 +08:00
$where['b.user_code'] = $search_id;
}
if($search_name){
$where['b.nickname'] = ['like', '%'.$search_name.'%'];
2025-12-18 19:17:32 +08:00
$search_user_id= db::name('user')->where('nickname', $search_name)->value('id');
2025-12-18 16:30:46 +08:00
}
if($search_task_id){
$where['a.task_id'] = $search_task_id;
2025-12-18 19:17:32 +08:00
$search_gift_bag_id = db::name('vs_tasks')->where('id', $search_task_id)->value('tasks_bag_id');
2025-12-18 16:30:46 +08:00
}
if($search_task_name){
$where['c.task_name'] = ['like', '%'.$search_task_name.'%'];
2025-12-18 19:17:32 +08:00
$search_gift_bag_id = db::name('vs_tasks')->where('task_name', $search_task_name)->value('tasks_bag_id');
2025-12-18 16:30:46 +08:00
}
if($begin_time !== ''){
$where['a.collection_time'] = ['>=', strtotime($begin_time)];
}
if($end_time !== ''){
$where['a.collection_time'] = ['<=', strtotime($end_time)];
}
// 添加条件:只统计已领取的任务奖励
// $where['a.is_claimed'] = 1;
$count = db::name('vs_tasks_user_daily')
->alias('a')
->join('user b', 'a.user_id = b.id')
->join('vs_tasks c', 'a.task_id = c.id')
->where($where)
->count();
$lists = db::name('vs_tasks_user_daily')
->alias('a')
->join('user b', 'a.user_id = b.id')
->join('vs_tasks c', 'a.task_id = c.id')
->where($where)
->field('a.*,c.task_name,b.nickname,b.user_code,c.tasks_bag_id')
->order('a.id desc')
->page($page, $page_limit)
->select();
// 收集所有需要的用户ID和任务包ID以批量获取数据
$user_ids = array_column($lists, 'user_id');
$bag_ids = array_unique(array_filter(array_column($lists, 'tasks_bag_id')));
// 批量获取用户装饰详情
$user_decorates = [];
if (!empty($user_ids)) {
foreach ($user_ids as $user_id) {
$user_decorates[$user_id] = model('api/Decorate')->user_decorate_detail($user_id, 6);
}
}
// 批量获取奖励包详情
$bag_details = [];
if (!empty($bag_ids)) {
$details = db::name('vs_gift_bag_detail')
->where('gift_bag_id', 'in', $bag_ids)
->select();
foreach ($details as $detail) {
$bag_details[$detail['gift_bag_id']][] = $detail;
}
}
// 获取所有相关礼品的价格信息
$gift_ids = [];
$decorate_ids = [];
foreach ($bag_details as $details) {
foreach ($details as $detail) {
if ($detail['type'] == 2) {
$gift_ids[] = $detail['foreign_id'];
} elseif ($detail['type'] == 3) {
$decorate_ids[] = $detail['foreign_id'];
}
}
}
// 批量获取礼品价格
$gift_prices = [];
if (!empty($gift_ids)) {
$gifts = db::name('vs_gift')
->where('gid', 'in', array_unique($gift_ids))
->column('gift_price', 'gid');
$gift_prices = $gifts;
}
// 批量获取装饰价格
$decorate_prices = [];
if (!empty($decorate_ids)) {
$decorates = db::name('vs_decorate_price')
->where('id', 'in', array_unique($decorate_ids))
->column('price', 'id');
$decorate_prices = $decorates;
}
$data_list = [];
$total_reward_price = 0;
foreach ($lists as $listkey=>$list){
$user_code = isset($user_decorates[$list['user_id']]) ? $user_decorates[$list['user_id']] : '';
$data_list[$listkey]['user_code'] = $user_code;
$data_list[$listkey]['nickname'] = $list['nickname']."-".$user_code;
$data_list[$listkey]['task_name'] = $list['task_name'];
$data_list[$listkey]['createtime'] = date('Y-m-d H:i:s', $list['createtime']);
$data_list[$listkey]['is_completed'] = $list['is_completed'];//是否已完成
$data_list[$listkey]['is_completed_str'] = $list['is_completed']==1 ?"":"";
//领取状态
$data_list[$listkey]['is_claimed'] = $list['is_claimed']; //奖励是否已领取
$data_list[$listkey]['is_claimed_str'] = $list['is_claimed']==1 ?"":"";
//奖品内容
$data_list[$listkey]['reward_str'] = "";
//奖品价值
$data_list[$listkey]['reward_price'] = 0;
// 计算奖励信息
if (isset($bag_details[$list['tasks_bag_id']])) {
$reward_info = $bag_details[$list['tasks_bag_id']];
foreach ($reward_info as $value) {
//价格
$reward_price = 0;
if($value['type'] == 1){
$reward_name = $value['quantity'].$value['name'];
$reward_price = $value['gold'] * $value['quantity'];
}elseif($value['type'] == 2){
$reward_name = $value['name'].'x'.$value['quantity'];
$gift_price = isset($gift_prices[$value['foreign_id']]) ? $gift_prices[$value['foreign_id']] : 0;
$reward_price = $gift_price * $value['quantity'];
}elseif($value['type'] == 3){
$reward_name = $value['name'].'x'.$value['days'].'天';
//$reward_price = isset($decorate_prices[$value['foreign_id']]) ? $decorate_prices[$value['foreign_id']] : 0;
}else{
$reward_name = $value['quantity'].$value['name'];
//$reward_price = $value['gold'] * $value['quantity'];
}
$data_list[$listkey]['reward_str'] .= $reward_name." ";
$data_list[$listkey]['reward_price'] += $reward_price;
}
}
}
$return_data = [
'page' =>$page,
'page_limit' => $page_limit,
'count' => $count,
2026-01-05 11:22:05 +08:00
'total_reward_price' => 0,//$this->get_claimed_reward_price($begin_time, $end_time,$search_user_id,$search_gift_bag_id),
2025-12-18 16:30:46 +08:00
'lists' => $data_list,
];
return V(1,"成功", $return_data);
}
2026-01-05 11:22:05 +08:00
//每日任务领取金币统计
public function get_claimed_reward_price_show(){
$search_id = input('search_uid', '');
$search_name = input('search_name', '');
$search_task_id = input('search_task_id', '');
$search_task_name = input('search_task_name', '');
$begin_time = input('begin_time', '');
$end_time = input('end_time', '');
$search_user_id = 0;
if($search_id){
$search_user_id= db::name('user')->where('user_code', $search_id)->value('id');
}
if($search_name){
$search_user_id= db::name('user')->where('nickname', $search_name)->value('id');
}
$search_gift_bag_id = 0;
if($search_task_name){
$search_gift_bag_id = db::name('vs_tasks')->where('task_name', $search_task_name)->value('tasks_bag_id');
}
if($search_task_id){
$search_gift_bag_id = db::name('vs_tasks')->where('id', $search_task_id)->value('tasks_bag_id');
}
$total_reward_price = $this->get_claimed_reward_price($begin_time, $end_time,$search_user_id,$search_gift_bag_id);
return V(1,"成功", ['total_reward_price' => $total_reward_price]);
}
2025-12-18 16:30:46 +08:00
//获取已领取任务奖励的总价值
2025-12-18 19:17:32 +08:00
public function get_claimed_reward_price($stime="",$etime="",$search_user_id=0,$search_gift_bag_id=0){
2025-12-18 16:30:46 +08:00
//获取所有已领取的任务奖励礼包
$where = [];
if(!empty($stime)){
2025-12-18 19:17:32 +08:00
$where['a.createtime'] = ['>=', strtotime($stime)];
2025-12-18 16:30:46 +08:00
}
if(!empty($etime)){
2025-12-18 19:17:32 +08:00
$where['a.createtime'] = ['<=', strtotime($etime)];
2025-12-18 16:30:46 +08:00
}
2025-12-30 19:57:54 +08:00
if(!empty($stime) && !empty($etime)){
$where['a.createtime'] = ['between', [strtotime($stime), strtotime($etime)]];
}
2025-12-18 19:17:32 +08:00
if($search_user_id > 0){
$where['a.user_id'] = $search_user_id;
}
if($search_gift_bag_id > 0){
$where['a.gift_bag_id'] = $search_gift_bag_id;
}
if(!empty($etime) && strtotime($etime)<="1767038400"){//2025-12-30 04:00:00
2025-12-30 19:57:54 +08:00
$tasks_bag_details = db::name('vs_gift_bag_receive_log')
->alias('a')
->join('vs_gift_bag_detail b', 'a.parent_id=b.id', 'INNER')
2025-12-30 19:57:54 +08:00
->field('a.createtime,b.type,b.foreign_id,b.quantity,b.gold')
->where(['b.type'=>['in', [1,2]]])
->whereBetween('a.gift_bag_id', [18, 51])
2025-12-30 19:57:54 +08:00
->where($where)
->select();
}else{
$tasks_bag_details = db::name('vs_gift_bag_receive_tasks_log')
->alias('a')
->join('vs_gift_bag_detail b', 'a.parent_id=b.id', 'INNER')
2025-12-30 19:57:54 +08:00
->field('a.createtime,b.type,b.foreign_id,b.quantity,b.gold')
->where(['b.type'=>['in', [1,2]]])
->whereBetween('a.gift_bag_id', [18, 51])
2025-12-30 19:57:54 +08:00
->where($where)
->select();
}
2025-12-18 16:30:46 +08:00
$total_reward_price = 0;
// 批量获取礼物价格以减少数据库查询
$gift_ids = [];
foreach ($tasks_bag_details as $detail) {
if($detail['type'] == 2) {
$gift_ids[] = $detail['foreign_id'];
}
}
$gift_prices = [];
if (!empty($gift_ids)) {
$gifts = db::name('vs_gift')->where('gid', 'in', array_unique($gift_ids))->column('gift_price', 'gid');
$gift_prices = $gifts ?: [];
}
2025-12-18 16:30:46 +08:00
foreach ($tasks_bag_details as $detail){
if($detail['type'] == 1){
$total_reward_price += $detail['gold'] * $detail['quantity'];
}else{
$gift_price = isset($gift_prices[$detail['foreign_id']]) ? $gift_prices[$detail['foreign_id']] : 0;
2025-12-18 16:30:46 +08:00
$total_reward_price += $gift_price * $detail['quantity'];
}
}
return $total_reward_price;
}
2025-08-07 20:21:47 +08:00
}