任务统计提交

This commit is contained in:
2025-12-18 16:30:46 +08:00
parent 3c3c332d05
commit e9eaedd14d
4 changed files with 290 additions and 10 deletions

View File

@@ -481,4 +481,185 @@ class Statistical extends adminApi
];
return V(1,"成功", $return_data);
}
//任务统计
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 =[];
if($search_id){
$where['b.user_code'] = $search_id;
}
if($search_name){
$where['b.nickname'] = ['like', '%'.$search_name.'%'];
}
if($search_task_id){
$where['a.task_id'] = $search_task_id;
}
if($search_task_name){
$where['c.task_name'] = ['like', '%'.$search_task_name.'%'];
}
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,
'total_reward_price' => $this->get_claimed_reward_price($begin_time, $end_time),
'lists' => $data_list,
];
return V(1,"成功", $return_data);
}
//获取已领取任务奖励的总价值
public function get_claimed_reward_price($stime="",$etime=""){
//获取所有已领取的任务奖励礼包
$where = [];
if(!empty($stime)){
$where['createtime'] = ['>=', strtotime($stime)];
}
if(!empty($etime)){
$where['createtime'] = ['<=', strtotime($etime)];
}
$tasks_bag_details = db::name('vs_gift_bag_detail')
->where(['type'=>['in', [1,2]]])
->where('gift_bag_id','>=',18)
->where('gift_bag_id','<=',51)
->where($where)
->select();
$total_reward_price = 0;
foreach ($tasks_bag_details as $detail){
if($detail['type'] == 1){
$total_reward_price += $detail['gold'] * $detail['quantity'];
}else{
$gift_price = db::name('vs_gift')->where('gid',$detail['foreign_id'])->value('gift_price');
$total_reward_price += $gift_price * $detail['quantity'];
}
}
return $total_reward_price;
}
}

View File

@@ -155,9 +155,23 @@ class User extends adminApi
$lists[$key]['special_num'] = "";
}
}
$total_coin = db::name('user')->alias('a')
->join('(SELECT * FROM fa_user_auth WHERE id IN (SELECT MAX(id) FROM fa_user_auth GROUP BY mobile)) b', 'a.mobile = b.mobile', 'LEFT')
->join('user_wallet c', 'a.id = c.user_id','LEFT')
->where($where)
->field($field)
->sum('c.coin');
$total_earnings = db::name('user')->alias('a')
->join('(SELECT * FROM fa_user_auth WHERE id IN (SELECT MAX(id) FROM fa_user_auth GROUP BY mobile)) b', 'a.mobile = b.mobile', 'LEFT')
->join('user_wallet c', 'a.id = c.user_id','LEFT')
->where($where)
->field($field)
->sum('c.earnings');
$return_data = [
'page' =>$page,
'page_limit' => $page_limit,
'total_coin' => $total_coin,
'total_earnings' => $total_earnings,
'count' => $count,
'lists' => $lists
];
@@ -642,32 +656,56 @@ class User extends adminApi
$page_limit = input('page_limit',10);
$where['a.is_tester'] = 1;
if($user_id){
$where['a.user_id'] = $user_id;
$where['b.user_code'] = $user_id;
}
if($gid){
$where['a.gid'] = $gid;
}
$count = db::name('vs_user_gift_pack')->alias('a')->join('user b', 'a.user_id = b.id')->where($where)->count();
$count = db::name('vs_user_gift_pack')
->alias('a')
->join('user b', 'a.user_id = b.id')
->join('vs_gift c', 'a.gid = c.gid')
->where($where)
->where(['a.num'=>['>',0]])
->count();
$list = db::name('vs_user_gift_pack')
->alias('a')
->join('user b', 'a.user_id = b.id')
->join('vs_gift c', 'a.gid = c.gid')
->field('a.*,b.user_code,b.nickname,c.gift_name,c.base_image,c.gift_price')->where($where)->order('a.pid', "desc")->page($page, $page_limit)->select();
->field('a.*,b.user_code,b.nickname,c.gift_name,c.base_image,c.gift_price')
->where($where)
->where(['a.num'=>['>',0]])
->order('a.pid', "desc")
->page($page, $page_limit)
->select();
$gift_total = 0;
$gift_count = 0;
foreach ($list as $key => &$value) {
$value['createtime'] = date('Y-m-d H:i:s',$value['createtime']);
$value['user_id_nickname'] = $value['user_code'].'——'.$value['nickname'];
$value['gift_id_name'] = $value['gid'].'——'.$value['gift_name'];
$value['nickname'] = $value['nickname'].'-'.$value['user_code'];
$value['gift_id_name'] = $value['gift_name'].'-'.$value['gid'];
}
//礼物个数
$gift_count = db::name('vs_user_gift_pack')->alias('a')->join('user b', 'a.user_id = b.id')->where($where)->group('a.gid')->count();
//礼物总金额
$gift_total = db::name('vs_user_gift_pack')->alias('a')->join('user b', 'a.user_id = b.id')
//礼物种类个数
$gift_kinds = db::name('vs_user_gift_pack')->alias('a')->join('user b', 'a.user_id = b.id')->where($where)->where(['num'=>['>',0]])->group('a.gid')->count();
$gift_count = db::name('vs_user_gift_pack')
->alias('a')
->join('user b', 'a.user_id = b.id')
->join('vs_gift c', 'a.gid = c.gid')
->where($where)->sum('c.gift_price');
->where($where)
->where(['a.num'=>['>',0]])
->sum('a.num');
$gift_total = db::name('vs_user_gift_pack')
->alias('a')
->join('user b', 'a.user_id = b.id')
->join('vs_gift c', 'a.gid = c.gid')
->where($where)
->where(['a.num'=>['>',0]])
->sum('c.gift_price');
$return_data = [
'page' =>$page,
'page_limit' => $page_limit,
'count' => $count,
'gift_kinds' => $gift_kinds,
'gift_count' => $gift_count,
'gift_total' => $gift_total,
'lists' => $list

View File

@@ -252,4 +252,29 @@ class Activities extends Model
}
}
//获取礼包总价值
public static function get_gift_bag_total_price($gift_bag_id){
$gift_bag_detail = Db::name('vs_gift_bag_detail')->where(['gift_bag_id'=>$gift_bag_id])->select();
$total_price = 0;
foreach ($gift_bag_detail as $k=>$v){
switch ($v['type']) {
case 1: //金币
$total_price += $v['quantity']*$v['gold'];
break;
case 2: //礼物 方法2添加到用户礼物背包
$gift_price = db::name('vs_gift')->where(['gid'=>$v['foreign_id']])->value('gift_price');
$total_price += $gift_price * $v['quantity'];
break;
case 3: //坐骑 方法3添加到用户装扮
$decorate_price = db::name('vs_decorate_price')->where(['id'=>$v['foreign_id']])->value('price');
$total_price += $decorate_price * $v['quantity'];
break;
case 4: //道具 方法5钻石
$total_price += $v['quantity']*$v['gold'];
break;
}
}
return $total_price;
}
}

View File

@@ -305,6 +305,7 @@ class Tasks extends Model
return ['code' => 0, 'msg' => '您已完成该任务','data' => null];
}
$is_completed = 0;
$completion_time = null;
if(in_array($task_id,[21,22,23])){
$task_student_data =[];
$task_student = Db::name('vs_tasks_student')->where(['user_id'=>$user_id,'task_id'=>$task_id,'student_id'=>$student_id,'status'=>0,'delete_time'=>0])->find();
@@ -341,15 +342,18 @@ class Tasks extends Model
}
if($task_info['target_quantity']==$current_progress){
$is_completed = 1;
$completion_time = time();
}
$reslut = Db::name('vs_tasks_user_daily')->where('id',$user_daily_tasks['id'])->update([
'current_progress' => $current_progress,
'is_completed'=> $is_completed,
'ext' => $ext_value,
'completion_time' => $completion_time,
]);
}else{
if($task_info['target_quantity'] == 1){
$is_completed = 1;
$completion_time = time();
}
$reslut = Db::name('vs_tasks_user_daily')->insert([
'user_id' => $user_id,
@@ -359,6 +363,7 @@ class Tasks extends Model
'is_completed' => $is_completed,
'ext' => $ext_value,
'createtime' => time(),
'completion_time' => $completion_time,
]);
}
}
@@ -454,18 +459,49 @@ class Tasks extends Model
Db::rollback();
return ['code' => 0, 'msg' => '操作失败', 'data' => null];
}
Db::name('vs_tasks_user_daily')->insert([
'user_id' => $user_id,
'task_id' => $task_id,
'tasks_bag_id' => $task_info['tasks_bag_id'],
'is_completed' => 1,
'is_claimed' => 1,
'createtime' => time(),
'completion_time' => $user_sign_task['createtime'],
'collection_time' => time(),
]);
}elseif(in_array($task_id,[21,22,23])) {
$reslut = Db::name('vs_tasks_student')->where('id', $task_student['id'])->update([
'status' => 2,
'updatetime' => time(),
]);
Db::name('vs_tasks_user_daily')->insert([
'user_id' => $user_id,
'task_id' => $task_id,
'tasks_bag_id' => $task_info['tasks_bag_id'],
'is_completed' => 1,
'is_claimed' => 1,
'createtime' => time(),
'completion_time' => $task_student['createtime'],
'collection_time' => time(),
]);
}elseif(in_array($task_id,[26,27,28,29,30,31,32])){
$reslut = Db::name('vs_user_cp_task')->where(['id'=>$user_couple_task['id']])->update([
'status' => 2
]);
Db::name('vs_tasks_user_daily')->insert([
'user_id' => $user_id,
'task_id' => $task_id,
'tasks_bag_id' => $task_info['tasks_bag_id'],
'is_completed' => 1,
'is_claimed' => 1,
'createtime' => time(),
'completion_time' => $user_couple_task['createtime'],
'collection_time' => time(),
]);
} else{
$reslut = Db::name('vs_tasks_user_daily')->where('id',$user_daily_tasks['id'])->update([
'is_claimed' => 1,
'collection_time' => time(),
]);
if (!$reslut) {
Db::rollback();