365 lines
14 KiB
PHP
365 lines
14 KiB
PHP
<?php
|
|
|
|
namespace app\api\model;
|
|
|
|
use think\Db;
|
|
use think\Model;
|
|
|
|
class Nobility extends Model
|
|
{
|
|
//爵位列表
|
|
public function get_nobility_list()
|
|
{
|
|
$list = db::name('nobility')->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];
|
|
}
|
|
|
|
}
|
|
|
|
}
|