682 lines
32 KiB
PHP
682 lines
32 KiB
PHP
<?php
|
||
|
||
namespace app\api\model;
|
||
use think\Model;
|
||
use think\Session;
|
||
use think\Db;
|
||
|
||
class Tasks extends Model
|
||
{
|
||
|
||
// 开启自动写入时间戳字段
|
||
protected $autoWriteTimestamp = 'int';
|
||
// 定义时间戳字段名
|
||
protected $createTime = 'createtime';
|
||
protected $updateTime = 'updatetime';
|
||
protected $table;
|
||
//任务类型枚举
|
||
public $task_type = [
|
||
'1' => '新手任务',
|
||
'2' => '每日任务',
|
||
'3' => '情侣任务',
|
||
'4' => '师徒任务',
|
||
];
|
||
//每日任务类型枚举
|
||
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;
|
||
$reslut['tasks'][$key-1]['task_list'] = [];
|
||
}
|
||
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_type'] == 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();
|
||
}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']);
|
||
}
|
||
}
|
||
if(in_array($v['task_id'],[21,22,23])){
|
||
$i = 0;
|
||
$sign_student_list = [];
|
||
$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']})分钟";
|
||
}
|
||
$sign_student_list[$i]['task_id'] = $v['task_id'];
|
||
$sign_student_list[$i]['icon'] = "";
|
||
$sign_student_list[$i]['target_quantity'] = $v['target_quantity'];
|
||
$sign_student_list[$i]['task_type'] = $v['task_type'];
|
||
$sign_student_list[$i]['jump_type'] = $v['jump_type'];
|
||
$sign_student_list[$i]['tasks_bag_id'] = $v['tasks_bag_id'];
|
||
$sign_student_list[$i]['student_id'] = $value['student_id'];
|
||
$student_nickname = db::name('user')->where('id',$value['student_id'])->value('nickname');
|
||
$sign_student_list[$i]['task_name'] = '邀请'.$student_nickname."徒弟在{$title},并送给徒弟特殊礼物";
|
||
$sign_student_list[$i]['reward_str'] = $v['reward_str'];
|
||
$sign_student_list[$i]['from_id'] = model('api/Room')->task_jump_room_recommend($v['task_id'],$value['student_id']);
|
||
if($value['status']==0){
|
||
$sign_student_list[$i]['task_status'] = 1;
|
||
$sign_student_list[$i]['task_type_str'] = "去完成";
|
||
}elseif($value['status']==1){
|
||
$sign_student_list[$i]['task_status'] = 2;
|
||
$sign_student_list[$i]['task_type_str'] = "领取奖励";
|
||
}else{
|
||
$sign_student_list[$i]['task_status'] = 3;
|
||
$sign_student_list[$i]['task_type_str'] = "已领取";
|
||
}
|
||
|
||
$i++;
|
||
}
|
||
}
|
||
}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;
|
||
}
|
||
}
|
||
$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']];
|
||
//返回任务列表
|
||
if($v['task_type']!=4){
|
||
$reslut['tasks'][$v['task_type']-1]['task_list'][] = $v;
|
||
}else{
|
||
if(!empty($sign_student_list)){
|
||
foreach ($sign_student_list as $key => $value) {
|
||
$reslut['tasks'][$v['task_type']-1]['task_list'][] = $value;
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|
||
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('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];
|
||
}
|
||
$is_completed = 0;
|
||
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;
|
||
$is_completed = 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;
|
||
$is_completed = 1;
|
||
}
|
||
$task_student_data['is_reward'] = 1;
|
||
}
|
||
$reslut = Db::name('vs_tasks_student')->where('id',$task_student['id'])->update($task_student_data);
|
||
}else{
|
||
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('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_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) {
|
||
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();
|
||
//礼包
|
||
$detail = DB::name('vs_gift_bag_detail')->where(['gift_bag_id'=>18])->select();
|
||
$list= [];
|
||
foreach ($detail as $k=>$v){
|
||
if($v['type'] == 1){
|
||
$list[$k]['gift_name'] = "金币";
|
||
$list[$k]['num'] = $v['gold'];
|
||
$list[$k]['gift_price'] = $v['gold'];
|
||
$list[$k]['type'] = 1;
|
||
$list[$k]['base_image'] = localpath_to_netpath("static/image/icon/gold.png");
|
||
}elseif($v['type'] == 2) {
|
||
$gift = DB::name('vs_gift')->where(['gid'=>$v['foreign_id']])->find();
|
||
$list[$k]['gift_name'] = $gift['gift_name'];
|
||
$list[$k]['num'] = $v['quantity']." 个";
|
||
$list[$k]['gift_price'] = $gift['gift_price'];
|
||
$list[$k]['type'] =2;
|
||
$list[$k]['base_image'] = $gift['base_image'];
|
||
} elseif($v['type'] == 3) {
|
||
$decorate_price = DB::name('vs_decorate_price')->where(['id'=>$v['foreign_id']])->find();
|
||
$gift = DB::name('vs_decorate')->where(['did'=>$decorate_price['did']])->find();
|
||
$list[$k]['gift_name'] = $gift['title']; //装扮名称
|
||
$list[$k]['num'] = $decorate_price['day']." 天"??0; //天数
|
||
$list[$k]['gift_price'] = $decorate_price['price']; //价格
|
||
$list[$k]['type'] =3;
|
||
$list[$k]['base_image'] = $gift['base_image'];
|
||
}elseif($v['type'] == 4) {
|
||
$list[$k]['gift_name'] = "钻石";
|
||
$list[$k]['num'] = $v['quantity'];
|
||
$list[$k]['gift_price'] = $v['gold'];
|
||
$list[$k]['type'] = 4;
|
||
$list[$k]['base_image'] = localpath_to_netpath("static/image/icon/gold.png");
|
||
}
|
||
}
|
||
$result = [];
|
||
$result['gift_bag'] = $list;
|
||
if ($sign_in_info) {
|
||
$result['status'] = 1;
|
||
$result['status_str'] = "已签到";
|
||
}else{
|
||
$result['status'] = 0;
|
||
$result['status_str'] = "未签到";
|
||
}
|
||
return ['code' => 1, 'msg' => '成功','data' => $result];
|
||
}
|
||
|
||
}
|