Files
midi-php/application/api/model/Level.php
2025-09-24 16:41:47 +08:00

463 lines
20 KiB
PHP

<?php
namespace app\api\model;
use think\Db;
use think\Model;
use think\Session;
class Level extends Model
{
// 开启自动写入时间戳字段
protected $autoWriteTimestamp = 'int';
// 定义时间戳字段名
protected $createTime = 'createtime';
protected $updateTime = 'updatetime';
public static function init()
{
self::beforeWrite(function ($row) {
});
}
/*
* 魅力等级规则说明
*/
public function get_level_rule($uid)
{
//规则
$return['rule_url'] = get_system_config_value('web_site')."/api/Page/page_show?id=10";
$return['coin_charm_exp'] = get_system_config_value('coin_charm_exp');
//用户信息
$user = model('User')->get_user_info($uid);
//用户头像
$return['user']['user_avatar'] = $user['avatar'];
//当前用户等级信息
$user_level = $this->get_charm_level_to_level($user['charm_level']);
// 获取最后等级
$level_last = Db::name('vs_charm_level')
->where('status', 1)
->order('level', 'desc')
->value('level');
//用户当前经验
$return['user']['level'] = $user['charm_level'];
$return['user']['level_str'] = 'Lv.'.$user['charm_level'];
$return['user']['exp'] = $user['charm_exp'];
$return['user']['rights_icon'] = $user_level['rights_icon'];
if($user['charm_level'] ==$level_last ){
//距离下个等级需要的经验
$return['user']['next_level'] = 0;
$return['user']['next_level_str'] = "满级";
$return['user']['next_exp'] = 0;
$return['user']['next_rights_icon'] = "";
}else{
//距离下个等级需要的经验
$return['user']['next_level'] = $user['charm_level']+1;
$return['user']['next_level_str'] = 'Lv.'.$return['user']['next_level'];
$next_exp = $user_level['next_level_exp'] - $user['charm_exp'];
$return['user']['next_exp'] = $next_exp <= 0 ? 0 : $next_exp;
$return['user']['next_rights_icon'] = $user_level['next_rights_icon'];
}
//获取等级
// 获取用户当前等级
$currentUserLevel = $user['charm_level'];
if($currentUserLevel == 1){
$level = Db::name('vs_charm_level')
->where('status', 1)
->order('level', 'asc')
->limit(3)
->select();
}elseif($currentUserLevel == $level_last){
$level = Db::name('vs_charm_level')
->where('status', 1)
->order('level', 'asc')
->limit($level_last-2,3)
->select();
}else{
$level = Db::name('vs_charm_level')
->where('status', 1)
->where('level', 'in', [$currentUserLevel - 1, $currentUserLevel, $currentUserLevel + 1])
->order('level', 'asc')
->select();
}
$return['level'] = [];
if($level) {
foreach ($level as $key => $value) {
$return['level'][$key]['level'] = $value['level'];
$return['level'][$key]['image'] = $value['image'];
$return['level'][$key]['bg_image'] = $value['bg_image'];
$return['level'][$key]['color'] = $value['color'];
$return['level'][$key]['name'] = $value['name'];
$return['level'][$key]['change_value'] = $value['change_value'];
//当前用户距离当前段位的距离
$return['level'][$key]['distance'] = $value['change_value'] - $user['charm_exp'];
$return['level'][$key]['rights_icon'] = $value['rights_icon'];
}
}
$return['privilege'] = Db::name('vs_charm_level')
->where('status', 1)
->order('level', 'asc')
->select();
return ['code' => 1, 'msg' => '登录成功', 'data' => $return];
}
/*
* 财富等级规则说明
*/
public function get_wealth_rule($uid)
{
//规则
$return['rule_url'] = get_system_config_value('web_site')."/api/Page/page_show?id=11";
$return['coin_wealth_exp'] = get_system_config_value('coin_wealth_exp');
//用户信息
$user = model('User')->get_user_info($uid);
//用户头像
$return['user']['user_avatar'] = $user['avatar'];
//当前用户等级信息
$user_level = $this->get_wealth_level_to_level($user['wealth_level']);
//用户当前经验
$return['user']['level'] = $user['wealth_level'];
$return['user']['level_str'] = 'Lv.'.$user['wealth_level'];
$return['user']['exp'] = $user['wealth_exp'];
$return['user']['coins'] = $user_level['coins'];
//是否已领取金币
$return['user']['is_get_coins'] = 0;
$wealth_level_log = Db::name('vs_wealth_level_log')
->where('user_id', $uid)
->where('level', $user['wealth_level'])
->find();
if($wealth_level_log){
$return['user']['is_get_coins'] = 1;
}
// 获取最后等级
$level_last = Db::name('vs_wealth_level')
->where('status', 1)
->order('level', 'desc')
->value('level');
if($user['wealth_level'] ==$level_last ){
//距离下个等级需要的经验
$return['user']['next_level'] = 0;
$return['user']['next_level_str'] = "满级";
$return['user']['next_exp'] = 0;
$return['user']['next_coins'] = "";
}else{
//距离下个等级需要的经验
$return['user']['next_level'] = $user['wealth_level']+1;
$return['user']['next_level_str'] = 'Lv.'.$return['user']['next_level'];
$next_exp = $user_level['next_level_exp'] - $user['wealth_exp'];
$return['user']['next_exp'] = $next_exp <= 0 ? 0 : $next_exp;
$return['user']['next_coins'] = $user_level['next_coins'];
}
//获取等级
// 获取用户当前等级
$currentUserLevel = $user['wealth_level'];
if($currentUserLevel == 1){
$level = Db::name('vs_wealth_level')
->where('status', 1)
->order('level', 'asc')
->limit(3)
->select();
}elseif($currentUserLevel == $level_last){
$level = Db::name('vs_wealth_level')
->where('status', 1)
->order('level', 'asc')
->limit($level_last-2,3)
->select();
}else{
$level = Db::name('vs_wealth_level')
->where('status', 1)
->where('level', 'in', [$currentUserLevel - 1, $currentUserLevel, $currentUserLevel + 1])
->order('level', 'asc')
->select();
}
$return['level'] = [];
$return['privilege'] = [];
if($level) {
foreach ($level as $key => $value) {
$return['level'][$key]['level'] = $value['level'];
$return['level'][$key]['level_str'] = 'Lv.'.$value['level'];
$return['level'][$key]['image'] = $value['image'];
$return['level'][$key]['bg_image'] = $value['bg_image'];
$return['level'][$key]['color'] = $value['color'];
$return['level'][$key]['name'] = $value['name'];
$return['level'][$key]['change_value'] = $value['change_value'];
//当前用户距离当前段位的距离
$return['level'][$key]['distance'] = $value['change_value'] - $user['wealth_exp'];
$return['level'][$key]['coins'] = $value['coins'];
//特权
$privilege = Db::name('vs_wealth_level_rights')->alias('a')
->join('vs_decorate b' , 'a.gift_id = b.did')
->field('a.gift_id,b.title,b.base_image')
->where('a.level_id', $value['id'])
->find();
$return['level'][$key]['privilege'] = '';
if($privilege){
$return['level'][$key]['privilege'] = $privilege['title'];
$privilege['name'] = $value['name'].'解锁';
$return['privilege'][$key] = $privilege;
}
}
}
return ['code' => 1, 'msg' => '成功', 'data' => $return];
}
/*
* 通过等级获取财富等级信息
*/
public function get_wealth_level_to_level($level=0){
$return = [];
$level_data = Db::name('vs_wealth_level')->where('level', $level)->find();
$next_level_data = Db::name('vs_wealth_level')->where('level', $level+1)->find();
if($level_data){
$return['level'] = $level_data['level'];
$return['level_name'] = $level_data['name'];
$return['exp'] = $level_data['change_value'];
$return['level_icon'] = $level_data['image'];
$return['coins'] = $level_data['coins'];
}else{
$return['level'] = 0;
$return['level_name'] = '';
$return['exp'] = 0;
$return['level_icon'] = '';
$return['coins'] = 0;
}
if($next_level_data){
$return['next_level'] = $next_level_data['level'];
$return['next_level_name'] = $next_level_data['name'];
$return['next_level_exp'] = $next_level_data['change_value'];
$return['next_level_icon'] = $next_level_data['image'];
$return['next_coins'] = $next_level_data['coins'];
}else{
$return['next_level'] = $level_data['level'];
$return['next_level_name'] = $level_data['name'];
$return['next_level_exp'] = $level_data['change_value'];
$return['next_level_icon'] = $level_data['image'];
$return['next_coins'] = $level_data['coins'];
}
return $return;
}
/*
* 通过等级获取魅力等级信息
*
*/
public function get_charm_level_to_level($level){
$return = [];
$level_data = Db::name('vs_charm_level')->where('level', $level)->find();
$next_level_data = Db::name('vs_charm_level')->where('level', $level+1)->find();
if($level_data){
$return['level'] = $level_data['level'];
$return['level_name'] = $level_data['name'];
$return['exp'] = $level_data['change_value'];
$return['level_icon'] = $level_data['image'];
$return['rights_icon'] = $level_data['rights_icon'];
}else{
$return['level'] = 0;
$return['level_name'] = '';
$return['exp'] = 0;
$return['level_icon'] = '';
$return['rights_icon'] = "";
}
if($next_level_data){
$return['next_level'] = $next_level_data['level'];
$return['next_level_name'] = $next_level_data['name'];
$return['next_level_exp'] = $next_level_data['change_value'];
$return['next_level_icon'] = $next_level_data['image'];
$return['next_rights_icon'] = $next_level_data['rights_icon'];
}else{
$return['next_level'] = $level_data['level'];
$return['next_level_name'] = $level_data['name'];
$return['next_level_exp'] = $level_data['change_value'];
$return['next_level_icon'] = $level_data['image'];
$return['next_rights_icon'] = $level_data['rights_icon'];
}
return $return;
}
/*
* 用户财富/魅力等级更新
* @param uid 用ID
* @param value 金币数
* @param type 类型 1:财富 2:魅力
*/
public function user_level_data_update($uid,$icon,$type,$room_id=0){
$user = model('User')->get_user_info($uid,['user_level']);
//配置
if($type == 1){//财富
$coin_charm_exp = get_system_config_value('coin_wealth_exp');
$wealth_exp = $icon * $coin_charm_exp;//计算财富增长值
//计算财富等级
$user_wealth_level = $user['wealth_level'];
$user_wealth_exp = $user['wealth_exp'] + $wealth_exp;
//判断是否达到下一级别
$user_wealth = $this->get_wealth_level_to_level_vlue($user_wealth_exp);
// if($user_wealth_level>= $user_wealth['level']){
// $user_wealth_level= $user_wealth['level'];
// }
$user_wealth_level= $user_wealth['level'];
$update_data = [];
$update_data['wealth_level'] = $user_wealth_level;
$update_data['wealth_exp'] = $user_wealth_exp;
//修改用户信息
$return = db('user_data')->where('user_id',$uid)->update($update_data);
if($return){
//发放特权礼物
if($user_wealth_exp>= $user_wealth['exp']){
$wealth_level_rights = db('vs_wealth_level_rights')->where('level_id',$user_wealth_level)->find();
if(isset($wealth_level_rights['type']) && $wealth_level_rights['type'] ==1 ){//发座驾礼物
$log_remark = "财富等级达到".$user_wealth_level."级 发放座驾礼物";
$res = model('Decorate')->pay_decorate($uid,$wealth_level_rights['gift_id'],0,7,"");
if($res['code']!=1){
return ['code' => $res['code'], 'msg' => $res['msg'], 'data' => null];
}
}
}
}else{
return ['code' => 0, 'msg' => "失败", 'data' => null];
}
}else{//魅力 coin_charm_exp
$coin_charm_exp = get_system_config_value('coin_charm_exp');
$charm_exp = $icon * $coin_charm_exp;//魅力增长值
$user_charm_level = $user['charm_level'];
$user_charm_exp = $user['charm_exp'] + $charm_exp;
//判断是否达到下一级别
$user_charm = $this->get_charm_level_to_level_vlue($user_charm_exp);
// if($user_charm_level != $user_charm['level']){
// $user_charm_level = $user_charm['level'];
// }
$user_charm_level = $user_charm['level'];
$update_data = [];
$update_data['charm_level'] = $user_charm_level;
$update_data['charm_exp'] = $user_charm_exp;
//修改用户信息
$return = db('user_data')->where('user_id',$uid)->update($update_data);
if(!$return){
return ['code' => 0, 'msg' => "失败", 'data' => null];
}
}
//操作房间魅力值
if($room_id){
$return_charm = $this->room_user_charm_exp($uid,$room_id,$icon,$type);
if($return_charm['code']==0){
return ['code' => 0, 'msg' => "失败", 'data' => null];
}
}
return ['code' => 1, 'msg' => "成功", 'data' => null];
}
/*
* 房间用户魅力值修改
*/
public function room_user_charm_exp($uid,$room_id,$exp,$type){
//获取房间用户魅力
$room_user_charm_exp = Db::name('vs_room_user_charm')->where(['user_id'=>$uid,'room_id'=>$room_id])->find();
if($room_user_charm_exp){
if($type == 1){
$coin_charm_exp = get_system_config_value('coin_wealth_exp');
$room_user_charm_exp_data['total_wealth'] = $room_user_charm_exp['total_wealth'] + $exp * $coin_charm_exp;
}else{
$coin_charm_exp = get_system_config_value('coin_charm_exp');
$room_user_charm_exp_data['charm'] = $room_user_charm_exp['charm'] + $exp * $coin_charm_exp;
$room_user_charm_exp_data['total_charm'] = $room_user_charm_exp['total_charm'] + $exp * $coin_charm_exp;
}
$room_user_charm_exp_data['updatetime'] = time();
$return = Db::name('vs_room_user_charm')->where(['user_id'=>$uid,'room_id'=>$room_id])->update($room_user_charm_exp_data);
}else{
if($type == 1){
$coin_charm_exp = get_system_config_value('coin_wealth_exp');
$room_user_charm_exp_data['total_wealth'] = $exp * $coin_charm_exp;
}else{
$coin_charm_exp = get_system_config_value('coin_charm_exp');
$room_user_charm_exp_data['charm'] = $exp * $coin_charm_exp;
$room_user_charm_exp_data['total_charm'] = $exp * $coin_charm_exp;
}
$room_user_charm_exp_data['user_id'] = $uid;
$room_user_charm_exp_data['room_id'] = $room_id;
$room_user_charm_exp_data['createtime'] = time();
$room_user_charm_exp_data['updatetime'] = time();
$return = Db::name('vs_room_user_charm')->insert($room_user_charm_exp_data);
}
if($return){
return ['code' => 1, 'msg' => "成功", 'data' => null];
}else{
return ['code' => 0, 'msg' => "失败", 'data' => null];
}
}
/*
* 领取财富等级奖励金币
*/
public function get_wealth_level_reward($uid){
$user_info = model('User')->get_user_info($uid,['user_level']);
$wealth_level = $user_info['wealth_level'];
$wealth_level = db('vs_wealth_level')->where('level',$wealth_level)->find();
if(!$wealth_level){
return ['code' => 0, 'msg' => "失败", 'data' => null];
}
if($wealth_level['coins']<=0){
return ['code' => 0, 'msg' => "失败", 'data' => null];
}
$wealth_level_log = db('vs_wealth_level_log')->where(['user_id'=>$uid,'level'=>$wealth_level['level']])->find();
if($wealth_level_log){
return ['code' => 0, 'msg' => "你已领取该等级的奖励", 'data' => null];
}
//操作用户金币
$res = model('common/UserWallet')->change_user_money($uid, $wealth_level['coins'], model('common/UserWallet')::MONEYTYPECOIN, model('common/UserWallet')::FINANCE_LEVEL_REWARD,model('common/UserWallet')::ChangeTypeLable(model('common/UserWallet')::FINANCE_LEVEL_REWARD));
if($res['code']!=1){
return ['code' => 0, 'msg' => "失败", 'data' => null];
}
$return = db('vs_wealth_level_log')->insert([
'user_id'=>$uid,
'level'=>$wealth_level['level'],
'coins'=>$wealth_level['coins'],
'createtime'=>time()]);
if(!$return){
return ['code' => 0, 'msg' => "失败", 'data' => null];
}
return ['code' => 1, 'msg' => "成功", 'data' => null];
}
/*
* 通过魅力值获取对应等级
*/
public function get_charm_level_to_level_vlue($charm_level){
$return = [];
$level_data = Db::name('vs_charm_level')->where(["change_value"=>['<',$charm_level]])->order('change_value','desc')->find();
if($level_data){
$return['level'] = $level_data['level'];
$return['level_name'] = $level_data['name'];
$return['exp'] = $level_data['change_value'];
$return['level_icon'] = $level_data['image'];
}else{
$return['level'] = 0;
$return['level_name'] = '';
$return['exp'] = 0;
$return['level_icon'] = '';
$return['rights_icon'] = "";
}
return $return;
}
/*
* 通过财富值获取对应等级
*/
public function get_wealth_level_to_level_vlue($wealth_level){
$return = [];
$level_data = Db::name('vs_wealth_level')->where(["change_value"=>['<',$wealth_level]])->order('change_value','desc')->find();
if($level_data){
$return['level'] = $level_data['level'];
$return['level_name'] = $level_data['name'];
$return['exp'] = $level_data['change_value'];
$return['level_icon'] = $level_data['image'];
}else{
$return['level'] = 0;
$return['level_name'] = '';
$return['exp'] = 0;
$return['level_icon'] = '';
$return['rights_icon'] = "";
}
return $return;
}
}