field('lid,name,image,change_value')->order('level asc')->select(); foreach ($list as $k => &$v) { $v['image'] = localpath_to_netpath($v['image']); } return ['code' => 200, 'msg' => '获取成功', 'data' => $list]; } //爵位详情 public function get_nobility_info($uid, $lid){ $user_info = db::name('user')->find($uid); if(!$user_info){ return ['code' => 201, 'msg' => '参数错误', 'data' => null]; } $nobility_info = db::name('nobility')->field('lid,name,image,pay_price,renew_price,pay_coin,renew_coin,day_num')->find($lid); if(!$nobility_info){ return ['code' => 201, 'msg' => '参数错误', 'data' => null]; } $nobility_info['image'] = localpath_to_netpath($nobility_info['image']); $nobility_info['pay_coin'] = intval($nobility_info['pay_coin']); $nobility_info['renew_coin'] = intval($nobility_info['renew_coin']); $now_time = time(); $is_nobility = 2; $nobility_type = $user_info['nobility_id']; $user_nobility_id = 0; $is_renew = 2; //该用户是否已开通 if($user_info['nobility_id'] > 0 && $user_info['nobility_id'] >= $lid) { $is_nobility = 1; $nobility_type = $user_info['nobility_id']; $user_nobility_id = 0; } $map = []; $map[] = ['uid', '=', $uid]; $map[] = ['lid', '=', $lid]; $nobility_end_time = Db::name('user_nobility')->where($map)->value('end_time'); if($nobility_end_time < time()) { $nobility_end_time = 0; } $nobility_power_list = $this->nobility_power_list($lid); $data = []; $data['nobility_info'] = $nobility_info; $data['user_nobility']['is_nobility'] = $is_nobility; $data['user_nobility']['nobility_type'] = $nobility_type; $data['user_nobility_end_time'] = $nobility_end_time; $data['nobility_power_list'] = $nobility_power_list; return ['code' => 200, 'msg' => '获取成功', 'data' => $data]; } //爵位权限详情 public function nobility_power_list($lid){ $nobility_info = db::name('nobility')->find($lid); if(!$nobility_info){ return ['code' => 201, 'msg' => '参数错误', 'data' => null]; } $nobility_power_list = db::name('nobility_power')->field('id,name,content,image,images')->order('sort asc')->select(); foreach ($nobility_power_list as $k => &$v){ if($v['id'] == 1){//专属铭牌 if($nobility_info['is_special_label'] == 1){ $v['is_power'] = 1; }else{ $v['is_power'] = 2; } }else if($v['id'] == 2){//专属表情 if($nobility_info['is_special_emoji'] == 1){ $v['is_power'] = 1; }else{ $v['is_power'] = 2; } }else if($v['id'] == 3){//专属麦位光圈 if($nobility_info['is_special_halo'] == 1){ $v['is_power'] = 1; }else{ $v['is_power'] = 2; } }else if($v['id'] == 4){//专属昵称颜色 if($nobility_info['is_name_color'] == 1){ $v['is_power'] = 1; }else{ $v['is_power'] = 2; } }else if($v['id'] == 5){//专属礼物特效 if($nobility_info['is_special_gift'] == 1){ $v['is_power'] = 1; }else{ $v['is_power'] = 2; } }else if($v['id'] == 6){//专属坐骑 if($nobility_info['is_special_mount'] == 1){ $v['is_power'] = 1; }else{ $v['is_power'] = 2; } }else if($v['id'] == 7){//进厅隐身 if($nobility_info['is_room_hinding'] == 1){ $v['is_power'] = 1; }else{ $v['is_power'] = 2; } }else if($v['id'] == 8){//厅内防踢 if($nobility_info['is_kick_out'] == 1){ $v['is_power'] = 1; }else{ $v['is_power'] = 2; } }else if($v['id'] == 9){//防禁言 if($nobility_info['is_shutup'] == 1){ $v['is_power'] = 1; }else{ $v['is_power'] = 2; } } $v['image'] = localpath_to_netpath($v['image']); $v['images'] = localpath_to_netpath($v['images']); } return $nobility_power_list; } //用户消费升级爵位 public function user_gain_nobility_value($uid, $change_value){ $user_info = db::name('user')->find($uid); if(!$user_info){ return ['code' => 201, 'msg' => '参数错误', 'data' => null]; } if($change_value < 0){ return ['code' => 201, 'msg' => '数值不能小于0', 'data' => null]; } $new_nobility_value = $user_info['nobility_value'] + $change_value; $nobility_list = db::name('nobility')->order('lid asc')->select(); $now_nobility_id = $user_info['nobility_id']; $nick_name_color = $user_info['nick_name_color']; foreach ($nobility_list as $k => $v){ if($new_nobility_value < $v['change_value']){ break; } $now_nobility_id = $v['lid']; $nick_name_color = $v['nick_name_color']; } Db::startTrans(); try { $update = []; $update['update_time'] = time(); if($now_nobility_id != $user_info['nobility_id']){ $update['nobility_id'] = $now_nobility_id; $update['nick_name_color'] = $nick_name_color; } $reslut = db::name('user')->where('uid', $uid)->inc('nobility_value', $change_value)->update($update); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => "失败1", 'data' => null]; } //升级则获取装扮 if($now_nobility_id != $user_info['nobility_id']){ $nobility_decorate = db::name('nobility_decorate')->where('lid', $now_nobility_id)->where('is_delete', 1)->select(); if(!empty($nobility_decorate)){ foreach ($nobility_decorate as $k => $v){ $reslut = model('Decorate')->draw_user_decorate($uid, $v['did'], 1500, '爵位升级赠送', 1); if($reslut['code'] != 200){ Db::rollback(); return ['code' => 201, 'msg' => "失败2", 'data' => null]; } } } //更新用户爵位信息 $user_nobility_info = db::name('user_nobility')->where('uid', $uid)->find(); if($user_nobility_info){//有就更新没有新增 $reslut = db::name('user_nobility')->where('id', $user_nobility_info['id'])->update(['lid' => $now_nobility_id, 'update_time' => time()]); }else{ $insert = []; $insert['uid'] = $uid; $insert['lid'] = $now_nobility_id; $insert['add_time'] = time(); $reslut = db::name('user_nobility')->insert($insert); } if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => "失败3", 'data' => null]; } //记录 $insert_data = []; $insert_data['uid'] = $uid; $insert_data['lid'] = $now_nobility_id; $insert_data['add_time'] = time(); $reslut = db::name('user_nobility_log')->insert($insert_data); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => "失败4", 'data' => null]; } } // 提交事务 Db::commit(); return ['code' => 200, 'msg' => "成功", 'data' => null]; } catch (\Exception $e) { dump($e); // 回滚事务 Db::rollback(); return ['code' => 201, 'msg' => "失败5", 'data' => null]; } } //用户消费升级爵位 public function user_pay_nobility_value($uid, $type_params){ $user_info = db::name('user')->find($uid); if(!$user_info){ return ['code' => 201, 'msg' => '参数错误', 'data' => null]; } $lid = $type_params['lid']; $nobility_info = Db::name('nobility')->find($lid); $now_nobility_id = $lid; $nick_name_color = $nobility_info['nick_name_color']; Db::startTrans(); try { $update = []; $update['update_time'] = time(); if($now_nobility_id != $user_info['nobility_id']){ $update['nobility_id'] = $now_nobility_id; $update['nick_name_color'] = $nick_name_color; } Db::name('user')->where('uid', $uid)->update($update); //升级则获取装扮 // if($now_nobility_id != $user_info['nobility_id']){ $nobility_decorate = db::name('nobility_decorate')->where('lid', $now_nobility_id)->where('is_delete', 1)->select(); if(!empty($nobility_decorate)){ foreach ($nobility_decorate as $k => $v){ $reslut = model('Decorate')->draw_user_decorate($uid, $v['did'], $nobility_info['day_num'], '购买爵位赠送'); if($reslut['code'] != 200){ Db::rollback(); return ['code' => 201, 'msg' => "失败2", 'data' => null]; } } } //更新用户爵位信息 $map = []; $map[] = ['uid', '=', $uid]; $map[] = ['lid', '=', $lid]; $user_nobility_info = db::name('user_nobility')->where($map)->find(); if($user_nobility_info){//有就更新没有新增 $end_time = $user_nobility_info['end_time']; if($end_time < time()) { $end_time = time(); } $end_time = $end_time + ($type_params['day_num'] * 86400); $reslut = db::name('user_nobility')->where('id', $user_nobility_info['id']) ->update(['end_time' => $end_time, 'update_time' => time(), 'status' => 1]); }else{ $insert = []; $insert['uid'] = $uid; $insert['lid'] = $now_nobility_id; $insert['end_time'] = time() + ($type_params['day_num'] * 86400); $insert['add_time'] = time(); $reslut = db::name('user_nobility')->insert($insert); } if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => "失败3", 'data' => null]; } //记录 $insert_data = []; $insert_data['uid'] = $uid; $insert_data['lid'] = $now_nobility_id; $insert_data['add_time'] = time(); $insert_data['day_num'] = $type_params['day_num']; $insert_data['is_renew'] = $type_params['is_renew']; $reslut = db::name('user_nobility_log')->insert($insert_data); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => "失败4", 'data' => null]; } // } // 提交事务 Db::commit(); return ['code' => 200, 'msg' => "成功", 'data' => null]; } catch (\Exception $e) { dump($e); // 回滚事务 Db::rollback(); return ['code' => 201, 'msg' => "失败5", 'data' => null]; } } //爵位到期取消 public function user_nobility_over_time() { $map = []; $map[] = ['status', '=', 1]; $map[] = ['end_time', '<', time()]; $list = Db::name('user_nobility')->where($map)->select(); $id_arr = []; Db::startTrans(); try { foreach($list as $v) { $id_arr[] = $v['id']; $uid = $v['uid']; $map = []; $map[] = ['uid', '=', $uid]; $map[] = ['nobility_id', '=', $v['lid']]; $user_info = Db::name('user')->where($map)->field('uid,nobility_id')->find(); if($user_info) { $map = []; $map[] = ['uid', '=', $v['uid']]; $map[] = ['status', '=', 1]; $map[] = ['end_time', '>=', time()]; $info = Db::name('user_nobility')->where($map)->order('lid', 'desc')->find(); $update_lid = 0; if($info) { $update_lid = $info['lid']; } Db::name('user')->where('uid', $uid)->update(['nobility_id' => $update_lid]); } } Db::name('user_nobility')->whereIn('id', $id_arr)->update(['status' => 2, 'update_time' => time()]); // 提交事务 Db::commit(); return ['code' => 200, 'msg' => "成功", 'data' => null]; } catch (\Exception $e) { dump($e); // 回滚事务 Db::rollback(); return ['code' => 201, 'msg' => "失败5", 'data' => null]; } } }