2025-11-05 10:13:54 +08:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace app\api\model;
|
|
|
|
|
use think\Db;
|
|
|
|
|
use think\Model;
|
|
|
|
|
use think\Session;
|
|
|
|
|
|
|
|
|
|
class Nobility extends Model
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
// 开启自动写入时间戳字段
|
|
|
|
|
protected $autoWriteTimestamp = 'int';
|
|
|
|
|
// 定义时间戳字段名
|
|
|
|
|
protected $createTime = 'createtime';
|
|
|
|
|
protected $updateTime = 'updatetime';
|
|
|
|
|
|
|
|
|
|
public static function init()
|
|
|
|
|
{
|
|
|
|
|
self::beforeWrite(function ($row) {
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//爵位列表
|
|
|
|
|
public static function getNobilityList($user_id){
|
|
|
|
|
//爵位列表
|
|
|
|
|
$nobility_list = db::name('vs_nobility')
|
|
|
|
|
->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'];
|
|
|
|
|
$power_list = db::name('vs_nobility_power')
|
|
|
|
|
->field('id,name,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'] = $power_count."/".count($power_list);
|
|
|
|
|
$return[$key]['power']['list'] = $power_list;
|
|
|
|
|
}
|
|
|
|
|
return ['code' => 1, 'msg' => '成功', 'data' => $return];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//爵位详情
|
|
|
|
|
public static function getNobilityInfo($user_id,$lid){
|
|
|
|
|
$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', $lid)
|
|
|
|
|
->find();
|
|
|
|
|
$user_info = db::name('user')
|
|
|
|
|
->field('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('user_id', $user_id)
|
|
|
|
|
->find();
|
|
|
|
|
$return = [];
|
|
|
|
|
$return['user_info'] = $user_info;
|
|
|
|
|
$return['nobility_info']['name'] = $nobility_info['name'];
|
|
|
|
|
$return['nobility_info']['image'] = $nobility_info['image'];
|
|
|
|
|
if ($user_nobility_info) {
|
|
|
|
|
if($user_nobility_info['lid'] == $lid){
|
|
|
|
|
$return['nobility_info']['status'] = 1; //去续费
|
|
|
|
|
}else{
|
|
|
|
|
$return['nobility_info']['status'] = 2; //去升级
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}else{
|
|
|
|
|
$return['nobility_info']['status'] = 0; //去开通
|
|
|
|
|
}
|
|
|
|
|
$return['nobility_info']['end_time'] = $user_nobility_info['end_time']??0;
|
|
|
|
|
$return['nobility_power_list'] = [];
|
|
|
|
|
//爵位列表
|
|
|
|
|
$nobility_list = db::name('vs_nobility')
|
|
|
|
|
->field('lid,name,power_ids')
|
|
|
|
|
->where('delete_time', 0)
|
|
|
|
|
->select();
|
|
|
|
|
//权限列表
|
|
|
|
|
$power_list = db::name('vs_nobility_power')
|
|
|
|
|
->field('id,name,image')
|
|
|
|
|
->where('delete_time', 0)
|
|
|
|
|
->select();
|
|
|
|
|
foreach ($power_list as $key => $value) {
|
|
|
|
|
$return['nobility_power_list'][$key] = $value;
|
|
|
|
|
foreach ($nobility_list as $k => $v) {
|
|
|
|
|
$power_ids = explode(',', $v['power_ids']);
|
|
|
|
|
unset($v['power_ids']);
|
|
|
|
|
if (in_array($value['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];
|
|
|
|
|
}
|
2025-11-05 11:14:08 +08:00
|
|
|
|
|
|
|
|
//购买爵位
|
2025-11-05 15:52:33 +08:00
|
|
|
public function buyNobility($user_id,$lid){
|
2025-11-05 11:14:08 +08:00
|
|
|
$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);
|
2025-11-05 17:03:28 +08:00
|
|
|
//发放装扮
|
|
|
|
|
$nobility_decorate = db::name('vs_nobility_decorate')
|
|
|
|
|
->field('id,did,dpid,day')
|
|
|
|
|
->where('delete_time', 0)
|
|
|
|
|
->where('lid', $lid)
|
|
|
|
|
->select();
|
|
|
|
|
foreach ($nobility_decorate as $key => $value) {
|
|
|
|
|
model('api/Decorate')->pay_decorate($user_id,$value['did'],$value['day'],9);
|
|
|
|
|
}
|
2025-11-05 11:14:08 +08:00
|
|
|
return ['code' => 1, 'msg' => '成功'];
|
|
|
|
|
}
|
2025-11-05 14:43:32 +08:00
|
|
|
|
|
|
|
|
//购买爵位价格
|
2025-11-05 15:52:33 +08:00
|
|
|
public function buyNobilityPrice($user_id,$lid){
|
2025-11-05 14:43:32 +08:00
|
|
|
$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('user_id', $user_id)
|
|
|
|
|
->find();
|
|
|
|
|
$price = 0;
|
|
|
|
|
if ($user_nobility_info) { //已购买过 续费
|
|
|
|
|
if($user_nobility_info['lid'] == $lid){ //续费
|
|
|
|
|
$price = $nobility_info['renew_price'];
|
|
|
|
|
}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){
|
|
|
|
|
$price = $nobility_info['pay_price'] - $surplus_time * $nobility_info['pay_price'] / ($nobility_info['day'] * 86400);
|
|
|
|
|
}else{
|
|
|
|
|
$price = $nobility_info['pay_price'];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}else{ //未购买 新购
|
|
|
|
|
$price = $nobility_info['pay_price'];
|
|
|
|
|
}
|
|
|
|
|
$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,
|
|
|
|
|
'day' => $nobility_info['day'],
|
|
|
|
|
'power_list' => $power_list,
|
|
|
|
|
];
|
|
|
|
|
return ['code' => 1, 'msg' => '成功', 'data' => $return];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//获取用户爵位信息
|
2025-11-05 15:52:33 +08:00
|
|
|
public function getUserNobilityInfo($user_id){
|
2025-11-05 14:43:32 +08:00
|
|
|
$user_nobility_info = db::name('vs_user_nobility')
|
|
|
|
|
->field('id,user_id,lid,end_time')
|
|
|
|
|
->where('delete_time', 0)
|
|
|
|
|
->where('user_id', $user_id)
|
2025-11-06 09:35:33 +08:00
|
|
|
->where('end_time', '>=', time())
|
2025-11-05 14:43:32 +08:00
|
|
|
->find();
|
|
|
|
|
if($user_nobility_info){
|
|
|
|
|
$nobility_info = db::name('vs_nobility')
|
|
|
|
|
->field('lid,name,image,pay_price,renew_price,day,power_ids')
|
|
|
|
|
->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'] ?? '',
|
|
|
|
|
'end_time' => $user_nobility_info['end_time'] ?? 0,
|
|
|
|
|
'power_list' => $power_list ?? [],
|
|
|
|
|
];
|
|
|
|
|
return $return;
|
|
|
|
|
}
|
2025-11-05 10:13:54 +08:00
|
|
|
}
|