'新手任务', '2' => '每日任务', '3' => '师徒任务', '4' => '情侣任务', '5' => '签到任务', ]; //每日任务类型枚举 public $processing_type_str = [ 1 => '登录', 2 => '去观看', 3 => '去完成', 4 => '去送礼', 5 => '去邀请', 6 => '去充值', 7 => '去发布', 8 => '签到', 9 => '自动完成', ]; //任务跳转类型: public $jump_type = [ 0 => '不跳转', 1 => '跳转实名', 2 => '跳转我的相册', 3 => '跳转绑定管理', 4 => '跳转房间', 5 => '跳转申请加入公会', 6 => '跳转充值', ]; public function __construct($data = []) { $prefix = config('database.prefix'); $this->table = $prefix . 'vs_tasks'; parent::__construct($data); } //每日任务列表 public function dailyTasksList($user_id=''){ $reslut = []; //用户今日充值金币数量 $user_gold = Db::name('vs_user_money_log')->where(['user_id'=>$user_id,'change_type'=>2,'money_type'=>1]) ->whereTime('createtime', 'today') ->sum('change_value'); $reslut['user_gold'] = $user_gold ? $user_gold : 0; //礼盒列表 $gift_box = Db::name('vs_gift_bag')->where('status',1)->where('activities_id',2)->select(); $reslut['gift_box_list'] = []; foreach ($this->task_type as $key => $value) { $reslut['tasks'][$key-1]['task_type_id'] = $key; $reslut['tasks'][$key-1]['task_type_name'] = $value; } foreach ($gift_box as $key => $val) { $reslut['gift_box_list'][$key]['id'] = $val['id']; $reslut['gift_box_list'][$key]['name'] = $val['name']; $reslut['gift_box_list'][$key]['title'] = $val['title']; $reslut['gift_box_list'][$key]['icon'] = localpath_to_netpath($val['icon']); $ext = json_decode($val['ext'],true); $reslut['gift_box_list'][$key]['highest_gain'] = $ext['highest_gain']; $reslut['gift_box_list'][$key]['meet'] = $ext['meet'] ? $ext['meet'] : 0; //解锁进度 if($ext['meet']){ if($user_gold > $ext['meet']){ $reslut['gift_box_list'][$key]['unlock_progress'] = 1; }else{ $reslut['gift_box_list'][$key]['unlock_progress'] = round(( $user_gold / $ext['meet']),2); } }else{ $reslut['gift_box_list'][$key]['unlock_progress'] = 0; } //今日可抽奖次数 $reslut['gift_box_list'][$key]['all_number'] = $ext['num'] ? $ext['num'] : 0; //今日已抽奖次数 $reslut['gift_box_list'][$key]['taday_number'] = Db::name('vs_gift_bag_receive_log')->where('user_id',$user_id)->where('gift_bag_id',$val['id'])->whereTime('createtime', 'today')->count(); //今日剩余抽奖次数 $reslut['gift_box_list'][$key]['taday_number_left'] = $ext['num'] - $reslut['gift_box_list'][$key]['taday_number']; //状态 if ($user_gold < $ext['meet']) { $reslut['gift_box_list'][$key]['status'] = 0; $reslut['gift_box_list'][$key]['status_str'] = '未解锁'; } else { $reslut['gift_box_list'][$key]['status'] = 1; $reslut['gift_box_list'][$key]['status_str'] = '已解锁('.$reslut['gift_box_list'][$key]['taday_number'].'/'.$ext['num'].')'; } if ($reslut['gift_box_list'][$key]['taday_number']>=$ext['num']) { $reslut['gift_box_list'][$key]['status'] = 2; $reslut['gift_box_list'][$key]['status_str'] = '已用完('.$reslut['gift_box_list'][$key]['taday_number'].'/'.$ext['num'].')'; } } //任务列表 $data = db::name('vs_tasks') ->field('id as task_id,icon,task_name,target_quantity,task_type,jump_type,tasks_bag_id') ->where('delete_time',0) ->where('is_active',1) ->order('sort asc')->select(); foreach ($data as $k => $v) { //完成进度 $v['from_id'] = 0; $v['is_time'] = 0; //奖励详情 $v['reward_str'] = ""; $reward_info = db::name('vs_gift_bag_detail')->where('gift_bag_id',$v['tasks_bag_id'])->select(); foreach ($reward_info as $key => $value) { if($value['type'] == 1){ $reward_name = $value['quantity'].$value['name']; }elseif($value['type'] == 2){ $reward_name = $value['name'].'x'.$value['quantity']; }elseif($value['type'] == 3){ $reward_name = $value['name'].'x'.$value['days'].'天'; }else{ $reward_name = $value['quantity'].$value['name']; } $v['reward_str'] =$v['reward_str'].$reward_name." "; if($v['task_id'] == 24){ $v['reward_str'] = $v['gold_reward']."钻石"; } } if(in_array($v['task_type'],[1,2])){ //今日完成进度 $user_daily_tasks = Db::name('vs_tasks_user_daily') ->where('user_id',$user_id) ->where('task_id',$v['task_id']) ->whereTime('createtime', 'today') ->find(); }elseif(in_array($v['task_id'],[21,22,23])){ $first_sign_student_list = db::name('vs_tasks_student') ->where('user_id',$user_id) ->where('task_id',$v['task_id']) ->where('delete_time', 0) ->select(); if(empty($first_sign_student_list)){ continue; }else{ //徒弟列表 foreach ($first_sign_student_list as $key => $value) { if($v['task_id'] = 21){ $title = "拍卖房停留({$value['value']} / {$v['target_quantity']})分钟"; }elseif($v['task_id'] = 22){ $title = "点唱房点歌({$value['value']} / {$v['target_quantity']})首"; }elseif($v['task_id'] = 23){ $title = "交友房停留({$value['value']} / {$v['target_quantity']})分钟"; } $v['sign_student_list']['task_id'] = $v['task_id']; $v['sign_student_list']['student_id'] = $value['student_id']; $v['sign_student_list']['student_nickname'] = db::name('vs_user')->where('id',$value['student_id'])->value('nickname'); $v['sign_student_list']['task_name'] = '邀请'.$v['sign_student_list']['student_nickname']."徒弟在{$title},并送给徒弟特殊礼物"; $v['sign_student_list']['reward_str'] = $v['reward_str']; } } }elseif($v['task_id'] == 24){ //师徒任务 //师傅签约返还 $user_sign_task = Db::name('vs_user_sign_task')->where(['user_id'=>$user_id,'day'=>date('Y-m-d')])->find(); if(empty($user_sign_task)){ continue; } $v['gold_reward'] = $user_sign_task['value']; $v['target_quantity'] = $v['target_quantity'] * 60; $v['is_time'] = 1; if($user_sign_task['status']==1){ $progress = $user_sign_task['times'] ?? 0; }else{ $progress = $user_sign_task['times']-1 ?? 0; } }else{ $user_daily_tasks = Db::name('vs_tasks_user_daily')->where('user_id',$user_id)->where('task_id',$v['task_id'])->find(); if($v['jump_type']==4){ //跳转的房间路径 $v['from_id'] = model('api/Room')->task_jump_room_recommend($v['task_id']); } } $progress = isset($user_daily_tasks['current_progress']) ? $user_daily_tasks['current_progress'] : 0; $v['is_time'] = 0; $quantity_str = ""; if($v['target_quantity']!=1){ $quantity_str= "({$progress}/{$v['target_quantity']})"; } $v['task_name'] = $v['task_name'].$quantity_str; //处理状态 $v['task_status'] = 1; $v['task_type_str'] = "去完成"; if(isset($user_daily_tasks['is_completed']) && $user_daily_tasks['is_completed'] ==1){ //已完成 $v['task_status'] = 2; $v['task_type_str'] = "领取奖励"; } if(isset($user_daily_tasks['is_claimed']) && $user_daily_tasks['is_claimed'] ==1){ //已完成 $v['task_status'] = 3; $v['task_type_str'] = "已领取"; } if($v['task_id']==1){//每日签到处理 $sign_in_info = Db::name('vs_user_tasks_sign_in')->where(['user_id'=>$user_id,'sign_in_date'=>date('Y-m-d')])->find(); if ($sign_in_info) { $v['task_status'] =3; $v['task_type_str'] = "已签到"; }else{ $v['task_status'] = 1; $v['task_type_str'] = "去签到"; } } $v['jump_type_str'] = $this->jump_type[$v['jump_type']]; //返回任务列表 $reslut['tasks'][$v['task_type']-1]['task_list'][] = $v; } return ['code' => 1, 'msg' => '获取成功', 'data' => $reslut]; } //完成每日任务 public function tasks_complete($user_id,$task_id,$ext_value='',$student_id = 0){ if($task_id ==15){ $current_progress = $ext_value!='' ? $ext_value : 1; }else{ $current_progress =1; } //查询任务 $task_info = Db::name('vs_tasks')->where('task_id',$task_id)->where('delete_time',0)->where('is_active',1)->find(); if(empty($task_info)){ return ['code' => 0, 'msg' => '任务不存在或已删除','data' => null]; } //查询用户每日任务进度表 if($task_info['task_type']==2){ $user_daily_tasks = Db::name('vs_tasks_user_daily')->where('user_id',$user_id)->where('task_id',$task_id)->whereTime('createtime', 'today')->find(); }else{ $user_daily_tasks = Db::name('vs_tasks_user_daily')->where('user_id',$user_id)->where('task_id',$task_id)->find(); } if ($user_daily_tasks && $user_daily_tasks['is_completed'] == 1) { return ['code' => 0, 'msg' => '您已完成该任务','data' => 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(); if(empty($task_student)){ return ['code' => 0, 'msg' => '任务不存在或已删除','data' => null]; } if($ext_value==1){ $current_progress = $task_student['value']+1; if($task_info['target_quantity']==$current_progress && $task_student['is_reward']==1){ $task_student_data['status'] = 1; } $task_student_data['value'] = $current_progress; }else{ $current_progress = $task_student['value']; if($task_info['target_quantity']==$current_progress){ $task_student_data['status'] = 1; } $task_student_data['is_reward'] = 1; } $reslut = Db::name('vs_tasks_student')->where('id',$task_student['id'])->update($task_student_data); }else{ $is_completed = 0; if($task_info['target_quantity']==$current_progress){ $is_completed = 1; } if ($user_daily_tasks) { $current_progress = $user_daily_tasks['current_progress'] +$current_progress; $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, ]); }else{ if($task_info['target_quantity'] == 1){ $is_completed = 1; } $reslut = Db::name('vs_tasks_user_daily')->insert([ 'user_id' => $user_id, 'task_id' => $task_id, 'current_progress' => $current_progress, 'tasks_bag_id' => $task_info['tasks_bag_id'], 'is_completed' => $is_completed, 'ext' => $ext_value, 'createtime' => time(), ]); } } if ($reslut) { if($is_completed==1){ return ['code' => 1, 'msg' => '操作成功','data' => ['is_completed'=>1]]; }else{ return ['code' => 1, 'msg' => '操作成功','data' => ['is_completed'=>0]]; } } else { return ['code' => 0, 'msg' => '操作失败','data' => null]; } } //领取每日任务奖励 public function daily_tasks_receive($user_id,$task_id,$student_id = 0){ //查询是否实名认证 $is_real = model('UserData')->real_name_info($user_id); if($is_real['code']==0){ return ['code' => 0, 'msg' => '请先实名认证','data' => null]; }else{ if($is_real['data']['is_real'] !=1){ return ['code' => 0, 'msg' => '请先实名认证','data' => null]; } } $task_info = Db::name('vs_tasks')->where('task_id',$task_id)->find(); if (!$task_info) { return ['code' => 0, 'msg' => '任务不存在','data' => null]; } if($task_id==24){ //师徒任务 //师傅签约返还 $user_sign_task = Db::name('vs_user_sign_task')->where(['user_id'=>$user_id,'day'=>date('Y-m-d')])->find(); if (!$user_sign_task) { return ['code' => 0, 'msg' => '任务不存在或已结束','data' => null]; } if($user_sign_task['status']==1){ return ['code' => 0, 'msg' => '您已领取该奖励','data' => null]; } }elseif(in_array($task_id,[21,22,23])){ if($student_id){ $task_student = Db::name('vs_tasks_student')->where(['user_id'=>$user_id,'task_id'=>$task_id,'student_id'=>$student_id,'status'=>1,'delete_time'=>0])->find(); if (!$task_student) { return ['code' => 0, 'msg' => '任务不存在或已结束','data' => null]; } }else{ return ['code' => 0, 'msg' => '任务不存在','data' => null]; } }else{ if($task_info['task_type']==2){ $user_daily_tasks = Db::name('vs_user_daily_tasks')->where('user_id',$user_id)->where('task_id',$task_id)->whereTime('createtime', 'today')->find(); }else{ $user_daily_tasks = Db::name('vs_user_daily_tasks')->where('user_id',$user_id)->where('task_id',$task_id)->find(); } if (!$user_daily_tasks) { return ['code' => 0, 'msg' => '请完成该任务','data' => null]; } if ($user_daily_tasks['is_completed'] == 0) { return ['code' => 0, 'msg' => '请完成该任务','data' => null]; } if ($user_daily_tasks['is_claimed'] == 1) { return ['code' => 0, 'msg' => '您已领取该奖励','data' => null]; } } Db::startTrans(); try { if($task_id==24){ //师徒任务 $reslut = Db::name('vs_user_sign_task')->where('id',$user_sign_task['id'])->update([ 'status' => 1 ]); if (!$reslut) { Db::rollback(); return ['code' => 0, 'msg' => '操作失败', 'data' => null]; } }elseif(in_array($task_id,[21,22,23])){ $reslut = Db::name('vs_tasks_student')->where('id',$task_student['id'])->update([ 'status' => 2, 'updatetime' => time(), ]); } else{ $reslut = Db::name('vs_user_daily_tasks')->where('id',$user_daily_tasks['id'])->update([ 'is_claimed' => 1, 'updatetime' => time(), ]); if (!$reslut) { Db::rollback(); return ['code' => 0, 'msg' => '操作失败', 'data' => null]; } } //发放任务礼包 $op_bag_re = $this->open_tasks_bag($user_id,$task_info['tasks_bag_id']); if ($op_bag_re['code'] != 1) { Db::rollback(); return ['code' => 0, 'msg' => '操作失败', 'data' => null]; } // 提交事务 Db::commit(); return ['code' => 1, 'msg' => "领取成功", 'data' => null]; }catch (\Exception $e) { // 回滚事务 Db::rollback(); return ['code' => 0, 'msg' => "请重试", 'data' => null]; } } //任务礼盒发放 public function open_tasks_bag($user_id,$gift_box_id){ $gift_box_info = Db::name('vs_gift_bag')->where('id',$gift_box_id)->find(); if (!$gift_box_info) { return ['code' => 0, 'msg' => '礼包不存在','data' => null]; } //查询礼盒详情 $gift_bag_detail = DB::name('vs_gift_bag_detail')->where(['gift_bag_id'=>$gift_box_id])->select(); if (!$gift_bag_detail) { return ['code' => 0, 'msg' => '礼包未配置','data' => null]; } foreach ($gift_bag_detail as $k=>$v){ switch ($v['type']) { case 1: //金币 方法1:直接添加到用户钱包 $res = model('common/UserWallet')->change_user_money($user_id, $v['quantity'], model('common/UserWallet')::MONEYTYPECOIN, model('common/UserWallet')::DROP_GIFT_REWARD,model('common/UserWallet')::ChangeTypeLable(model('common/UserWallet')::DROP_GIFT_REWARD)); break; case 2: //礼物 方法2:添加到用户礼物背包 $res = model('UserGiftPack')->change_user_gift_pack($user_id,$v['foreign_id'],$v['quantity'],model('UserGiftPack')::DRAW_GIFT,"天降好礼获得礼物"); break; case 3: //坐骑 方法3:添加到用户装扮 $decorate_price_info = db::name('vs_decorate_price')->where(['id'=>$v['foreign_id']])->find(); if(empty($decorate_price_info)){ break; } $res = model('Decorate')->pay_decorate($user_id,$decorate_price_info['did'],$decorate_price_info['day'],6); break; case 4: //道具 方法5:钻石 $res = model('common/UserWallet')->change_user_money($user_id, $v['quantity'], model('common/UserWallet')::MONEYTYPEARNINGS, model('common/UserWallet')::DROP_GIFT_REWARD,model('common/UserWallet')::ChangeTypeLable(model('common/UserWallet')::DROP_GIFT_REWARD)); default: break; } if ($res['code'] != 1) { return ['code' => 0, 'msg' => $res['msg'], 'data' => null]; } // 记录日志 //添加礼盒记录 $reslut = Db::name('vs_gift_bag_receive_log')->insert([ 'user_id' => $user_id, 'gift_bag_id' => $gift_box_id, 'parent_id' => $v['id'], 'gift_id'=> $v['foreign_id'], 'num' => $v['quantity'], 'bag_price' => $gift_box_info['money'], 'gift_price' => $v['gold'], 'createtime' => time(), 'updatetime' => time() ]); if (!$reslut) { return ['code' => 0, 'msg' => '操作失败', 'data' => null]; } } return ['code' => 1, 'msg' => '操作成功','data' => null]; } /* * 开启礼盒 * $user_id 用户id * $gift_box_id 礼盒id */ public function open_gift_box($user_id,$gift_box_id){ $gift_box_info = Db::name('vs_gift_bag')->where('id',$gift_box_id)->find(); if (!$gift_box_info) { return ['code' => 0, 'msg' => '礼盒不存在','data' => null]; } $ext = json_decode($gift_box_info['ext'],true); $gift_bag_receive_num = Db::name('vs_gift_bag_receive_log')->where('user_id',$user_id)->where('gift_bag_id',$gift_box_id)->whereTime('createtime', 'today')->count(); if ($gift_bag_receive_num >= $ext['num']) { return ['code' => 0, 'msg' => '您已领取该礼盒','data' => null]; } //查询礼盒详情 $user_gift_box_details = db::name("vs_gift_bag_detail")->where('gift_bag_id',$gift_box_id)->orderRaw('rand()')->find(); if (!$user_gift_box_details) { return ['code' => 0, 'msg' => '礼盒不存在','data' => null]; } Db::startTrans(); try { switch ($user_gift_box_details['type']) { case 1: //金币 方法1:直接添加到用户钱包 $res = model('common/UserWallet')->change_user_money($user_id, $user_gift_box_details['quantity'], model('common/UserWallet')::MONEYTYPECOIN, model('common/UserWallet')::GIFT_BOX_REWARD,model('common/UserWallet')::ChangeTypeLable(model('common/UserWallet')::GIFT_BOX_REWARD)); $return_data['gift_name']= "恭喜获得".$user_gift_box_details['gold']."金币"; break; case 2: //礼物 方法2:添加到用户礼物背包 $res = model('UserGiftPack')->change_user_gift_pack($user_id,$user_gift_box_details['foreign_id'],$user_gift_box_details['quantity'],model('UserGiftPack')::GIFT_PACK_GET,$gift_box_info['name']); $return_data['gift_name']= "恭喜获得".$user_gift_box_details['quantity']."X".$user_gift_box_details['name']; break; case 3: //坐骑 方法3:添加到用户装扮 $res = model('Decorate')->pay_decorate($user_id,$user_gift_box_details['foreign_id'],$user_gift_box_details['days'],3); $return_data['gift_name']= "恭喜获得".$user_gift_box_details['quantity']."天".$user_gift_box_details['name']; break; default: break; } if ($res['code'] != 1) { Db::rollback(); return ['code' => 0, 'msg' => $res['msg'], 'data' => null]; } //添加礼盒记录 $reslut = Db::name('vs_gift_bag_receive_log')->insert([ 'user_id' => $user_id, 'gift_bag_id' => $gift_box_id, 'parent_id' => $user_gift_box_details['id'], 'gift_id' => $user_gift_box_details['foreign_id'], 'num' => $user_gift_box_details['quantity'], 'gift_price' => $user_gift_box_details['gold'], 'bag_price' => $ext['meet'], 'createtime' => time(), 'updatetime' => time() ]); if ($reslut) { // 提交事务 Db::commit(); return ['code' => 1, 'msg' => '操作成功','data' => $return_data]; } else { Db::rollback(); return ['code' => 0, 'msg' => '操作失败','data' => null]; } }catch (\Exception $e) { // 回滚事务 Db::rollback(); return ['code' => 0, 'msg' => "请重试", 'data' => null]; } } /* * 礼盒记录 * */ public function gift_bag_receive_list($user_id){ //查询每日任务礼盒记录 $gift_bag_receive_list = Db::name('vs_gift_bag_receive_log') ->field('bag.name as gift_bag_name,re.createtime as createtime,de.name as gift_name,de.quantity,de.type,de.foreign_id,de.days,de.gold') ->alias('re') ->join('vs_gift_bag bag', 'bag.id = re.gift_bag_id', 'LEFT') ->join('vs_gift_bag_detail de', 'de.id = re.parent_id', 'LEFT') ->where(['re.user_id'=>$user_id,'bag.activities_id'=>2,'bag.status'=>1]) ->order('re.createtime desc') ->select(); if (!$gift_bag_receive_list) { return ['code' => 0, 'msg' => '没有礼盒记录','data' => null]; } $result = []; foreach ($gift_bag_receive_list as $k=>$v){ $result[$k]['gift_bag_name'] = $v['gift_bag_name']; if($v['type'] == 1){ $result[$k]['gift_name'] = $v['gold'].'金币'; }elseif ($v['type'] == 2){ $result[$k]['gift_name'] = $v['gift_name'].' x '.$v['quantity']; }elseif ($v['type'] == 3){ $result[$k]['gift_name'] = $v['gift_name'].' x '.$v['days'].'天'; } $result[$k]['createtime'] = date('Y-m-d H:i:s',$v['createtime']); } return ['code' => 1, 'msg' => '操作成功','data' => $result]; } /* * 用户签到 */ public function sign_in($user_id){ $sign_in_info = Db::name('vs_user_tasks_sign_in')->where(['user_id'=>$user_id,'sign_in_date'=>date('Y-m-d')])->find(); if ($sign_in_info) { return ['code' => 0, 'msg' => '今天已经签到过了','data' => null]; } Db::startTrans(); try { //每日签到 【完成任务】 $this->tasks_complete($user_id,1); //判断连续签到 $continuous = 1; $sign_in_info = Db::name('vs_user_tasks_sign_in')->where(['user_id'=>$user_id])->order('id desc')->find(); if ($sign_in_info) { if ($sign_in_info['sign_in_date'] == date('Y-m-d',strtotime('-1 day'))) { $continuous = $sign_in_info['continuous'] + 1; } else { $continuous = 1; } } if($continuous>1){ //连续签到任务送金币 //连续签到7天 【完成任务】 $this->tasks_complete($user_id,2); //连续签到任务抽礼包【完成任务】 //连续签到7天 【完成任务】 //$this->tasks_complete($user_id,7); } $reslut = Db::name('vs_user_tasks_sign_in')->insert([ 'user_id' => $user_id, 'sign_in_date' => date('Y-m-d'), 'continuous' => $continuous, 'createtime' => time(), 'updatetime' => time() ]); if ($reslut) { // 提交事务 Db::commit(); return ['code' => 1, 'msg' => '操作成功','data' => null]; } else { Db::rollback(); return ['code' => 0, 'msg' => '操作失败','data' => null]; } } catch (\Exception $e) { // 回滚事务 Db::rollback(); return ['code' => 0, 'msg' => "请重试", 'data' => null]; } } /* * 今日签到状态 */ public function daily_tasks_sign_in_status($user_id){ $sign_in_info = Db::name('vs_user_tasks_sign_in')->where(['user_id'=>$user_id,'sign_in_date'=>date('Y-m-d')])->find(); $result = []; if ($sign_in_info) { $result['status'] = 1; $result['status_str'] = "已签到"; }else{ $result['status'] = 0; $result['status_str'] = "未签到"; } return ['code' => 1, 'msg' => '成功','data' => $result]; } }