Files
mier-php/application/api/model/Nobility.php
2025-08-11 10:22:05 +08:00

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];
}
}
}