field('lid,name,image,images,pay_price,renew_price,pay_coin,renew_coin,day,power_ids') ->where('delete_time', 0) ->select(); //爵位特权 $power_count = db::name('vs_nobility_power') ->field('id,name,image') ->where('delete_time', 0) ->count(); $return = []; foreach ($nobility_list as $key => $value) { $power_ids = explode(',', $value['power_ids']); $return[$key]['name'] = $value['name']; $return[$key]['image'] = $value['image']; $return[$key]['pay_price'] = $value['pay_price']; $return[$key]['day'] = $value['day']; $power_list = db::name('vs_nobility_power') ->field('id,name,content,image') ->whereIn('id', $power_ids) ->where('delete_time', 0) ->select(); $return[$key]['power']['power_count'] = $power_count; $return[$key]['power']['this_power_count'] = count($power_list); $return[$key]['power']['count_str'] = count($power_list)."/".$power_count; $return[$key]['power']['list'] = $power_list; } return ['code' => 1, 'msg' => '成功', 'data' => $return]; } //爵位详情 public static function getNobilityInfo($user_id){ $user_info = db::name('user') ->field('id as user_id,nickname,avatar') ->where('delete_time', 0) ->where('id', $user_id) ->find(); $user_nobility_info = db::name('vs_user_nobility') ->field('id,user_id,lid,end_time') ->where('delete_time', 0) ->where(['end_time'=>['>',time()]]) ->where('user_id', $user_id) ->find(); $return = []; $return['user_info'] = $user_info; //用户信息 $return['nobility_info'] = []; //爵位信息 $return['nobility_info']['status'] = 0; //去开通 $return['nobility_info']['end_time'] = ''; if($user_nobility_info){ $nobility_info = db::name('vs_nobility') ->field('lid,name,image,images,pay_price,renew_price,pay_coin,renew_coin,day,power_ids') ->where('delete_time', 0) ->where('lid', $user_nobility_info['lid']) ->find(); $return['nobility_info']['status'] = 1; //去续费 $return['nobility_info']['end_time'] = date('Y-m-d H:i:s', $user_nobility_info['end_time']); } $return['nobility_info']['lid'] = $nobility_info['lid'] ?? 0; $return['nobility_info']['name'] = $nobility_info['name'] ?? ''; $return['nobility_info']['image'] = $nobility_info['image'] ?? ''; $return['nobility_power_list'] = []; //爵位列表 $nobility_list = db::name('vs_nobility') ->field('lid,name,power_ids,nick_name_color,nick_name_color_name') ->where('delete_time', 0) ->select(); //权限列表 $power_list = db::name('vs_nobility_power') ->field('id,name,image') ->where('delete_time', 0) ->select(); $nobility_list_zw = [ 'lid' => 0, 'name' => '特权', 'power_ids' => '', 'nick_name_color' => '无', 'nick_name_color_name' => '无', ]; array_unshift($nobility_list, $nobility_list_zw); foreach ($nobility_list as $key => &$value) { $return['nobility_power_list'][$key] = $value; $power_ids = explode(',', $value['power_ids']); foreach ($power_list as $k => $v) { if (in_array($v['id'], $power_ids)) { $v['status'] = 1; //是 }else{ $v['status'] = 0; //否 } $return['nobility_power_list'][$key]['nobility_list'][$k] = $v; } } return ['code' => 1, 'msg' => '成功', 'data' => $return]; } //购买爵位 public function buyNobility($user_id,$lid){ $nobility_info = db::name('vs_nobility') ->field('lid,name,pay_price,pay_coin') ->where('delete_time', 0) ->where('lid', $lid) ->find(); if (!$nobility_info) { return ['code' => 0, 'msg' => '爵位不存在']; } $user_info = db::name('user') ->field('id,nickname,avatar') ->where('delete_time', 0) ->where('id', $user_id) ->find(); if (!$user_info) { return ['code' => 0, 'msg' => '用户不存在']; } $user_nobility_info = db::name('vs_user_nobility') ->field('id,user_id,lid,end_time') ->where('delete_time', 0) ->where('user_id', $user_id) ->find(); if ($user_nobility_info) { //已购买过 续费 if($user_nobility_info['lid'] == $lid){//续费 $is_renew = 1; if($user_nobility_info['end_time'] > time()){ $old_end_time = $user_nobility_info['end_time']; }else{ $old_end_time = time(); } $end_time = $old_end_time + $nobility_info['day'] * 86400; $data = [ 'end_time' => $end_time, 'updatetime' => time(), ]; $re = db::name('vs_user_nobility')->where('id', $user_nobility_info['id'])->update($data); if (!$re) { return ['code' => 0, 'msg' => '失败']; } }else{ //升级 $is_renew = 2; if($user_nobility_info['end_time'] > time()){ $old_end_time = $user_nobility_info['end_time']; }else{ $old_end_time = time(); } $end_time = $old_end_time + $nobility_info['day'] * 86400; $data = [ 'lid' => $lid, 'user_id' => $user_id, 'end_time' => $end_time, 'createtime' => time(), ]; db::name('vs_user_nobility')->where('id', $user_nobility_info['id'])->update(['delete_time'=>time()]); $re = db::name('vs_user_nobility')->insert($data); if (!$re) { return ['code' => 0, 'msg' => '失败']; } } }else{ //未购买 新购 $is_renew = 0; $end_time = time() + $nobility_info['day'] * 86400; $data = [ 'user_id' => $user_id, 'lid' => $lid, 'end_time' => $end_time, 'createtime' => time(), ]; $re = db::name('vs_user_nobility')->insert($data); if (!$re) { return ['code' => 0, 'msg' => '失败']; } } //记录日志 $log_data = [ 'user_id' => $user_id, 'lid' => $lid, 'day' => $nobility_info['day'], 'end_time' => $end_time, 'is_renew' => $is_renew, 'createtime' => time(), ]; db::name('vs_user_nobility_log')->insert($log_data); //发放装扮 $nobility_decorate = db::name('vs_nobility_decorate') ->field('id,did,dpid,day') ->where('delete_time', 0) ->where('lid', $lid) ->select(); if($nobility_decorate){ foreach ($nobility_decorate as $key => $value) { model('api/Decorate')->pay_decorate($user_id,$value['did'],$value['day'],9); } } //发放金币 if($is_renew ==0 || $is_renew ==2) { $pay_coin = $nobility_info['pay_coin']; }else{ $pay_coin = $nobility_info['renew_coin']; } if($pay_coin > 0){ $reslut = model('common/UserWallet')->change_user_money($user_id, $pay_coin, model('common/UserWallet')::MONEYTYPECOIN, model('common/UserWallet')::NOBILITY_PURCHASE_COIN,model('common/UserWallet')::ChangeTypeLable(model('common/UserWallet')::NOBILITY_PURCHASE_COIN)); if (!$reslut) { return ['code' => 0, 'msg' => '失败']; } } return ['code' => 1, 'msg' => '成功']; } //购买爵位价格 public function buyNobilityPrice($user_id,$lid){ $nobility_info = db::name('vs_nobility') ->field('lid,name,image,pay_price,renew_price,day,power_ids') ->where('delete_time', 0) ->where('lid', $lid) ->find(); if (!$nobility_info) { return ['code' => 0, 'msg' => '爵位不存在']; } $user_info = db::name('user') ->field('id,nickname,avatar') ->where('delete_time', 0) ->where('id', $user_id) ->find(); if (!$user_info) { return ['code' => 0, 'msg' => '用户不存在']; } $user_nobility_info = db::name('vs_user_nobility') ->field('id,user_id,lid,end_time') ->where('delete_time', 0) ->where(['end_time'=>['>',time()]]) ->where('user_id', $user_id) ->find(); $price = 0; if ($user_nobility_info) { //已购买过 续费 if($user_nobility_info['lid'] == $lid){ //续费 $price = $nobility_info['renew_price']; $end_time = $user_nobility_info['end_time'] + $nobility_info['day'] * 86400; }else{ //升级 $old_nobility_info = db::name('vs_nobility') ->field('lid,name,pay_price,pay_coin') ->where('delete_time', 0) ->where('lid', $user_nobility_info['lid']) ->find(); $old_end_time = $user_nobility_info['end_time']; //剩余时间 $surplus_time = $old_end_time - time(); if($surplus_time > 0){ //小时 $surplus_time_hour = floor($surplus_time / 3600); //向下取整 $price = $nobility_info['pay_price'] - $surplus_time_hour * (($nobility_info['pay_price'] / $nobility_info['day']) / 24); //一小时的价格算 }else{ $price = $nobility_info['pay_price']; } $end_time = time() + $nobility_info['day'] * 86400; } }else{ //未购买 新购 $price = $nobility_info['pay_price']; $end_time = time() + $nobility_info['day'] * 86400; } $power_ids = explode(',', $nobility_info['power_ids']); $power_list = db::name('vs_nobility_power') ->field('id,content') ->where('delete_time', 0) ->where('id', 'in', $power_ids) ->select(); $return = [ 'lid' => $nobility_info['lid'], 'nobility_name' => $nobility_info['name'], 'nobility_image' => $nobility_info['image'], 'price' => $price, 'pay_price' => $nobility_info['pay_price'], 'day' => $nobility_info['day'], 'power_list' => $power_list, 'end_time' => date('Y-m-d H:i:s', $end_time), ]; return ['code' => 1, 'msg' => '成功', 'data' => $return]; } //获取用户爵位信息 public function getUserNobilityInfo($user_id){ $user_nobility_info = db::name('vs_user_nobility') ->field('id,user_id,lid,end_time') ->where('delete_time', 0) ->where('user_id', $user_id) ->where('end_time', '>=', time()) ->find(); if($user_nobility_info){ $nobility_info = db::name('vs_nobility') ->field('lid,name,image,pay_price,renew_price,day,power_ids,nick_name_color,nick_name_color_name,play_image') ->where('delete_time', 0) ->where('lid', $user_nobility_info['lid']) ->find(); //权限 $power_ids = []; if($nobility_info){ $power_ids = explode(',', $nobility_info['power_ids']); } $power_list = db::name('vs_nobility_power') ->field('id,name,content') ->where('delete_time', 0) ->where('id', 'in', $power_ids) ->select(); } $return = [ 'lid' => $user_nobility_info['lid'] ?? 0, 'nobility_name' => $nobility_info['name'] ?? '', 'nobility_image' => $nobility_info['image'] ?? '', 'nick_name_color' => $nobility_info['nick_name_color'] ?? '', 'nick_name_color_name' => $nobility_info['nick_name_color_name'] ?? '', 'play_image' => $nobility_info['play_image'] ?? '', 'end_time' => $user_nobility_info['end_time'] ?? 0, 'power_list' => $power_list ?? [], ]; return $return; } }