Files
yusheng-php/application/api/model/Nobility.php

364 lines
15 KiB
PHP

<?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]['lid'] = $value['lid'];
$return[$key]['name'] = $value['name'];
$return[$key]['image'] = $value['image'];
$return[$key]['pay_price'] = $value['pay_price'];
$return[$key]['day'] = $value['day'];
$power_list = db::name('vs_nobility_power')
->field('id,name,content,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'] = count($power_list)."/".$power_count;
$return[$key]['power']['list'] = $power_list;
}
return ['code' => 1, 'msg' => '成功', 'data' => $return];
}
//爵位详情
public static function getNobilityInfo($user_id){
$user_info = db::name('user')
->field('id as user_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(['end_time'=>['>',time()]])
->where('user_id', $user_id)
->find();
$return = [];
$return['user_info'] = $user_info; //用户信息
$return['nobility_info'] = []; //爵位信息
$return['nobility_info']['status'] = 0; //去开通
$return['nobility_info']['end_time'] = '';
if($user_nobility_info){
$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', $user_nobility_info['lid'])
->find();
$return['nobility_info']['status'] = 1; //去续费
$return['nobility_info']['end_time'] = date('Y-m-d H:i:s', $user_nobility_info['end_time']);
}
$return['nobility_info']['lid'] = $nobility_info['lid'] ?? 0;
$return['nobility_info']['name'] = $nobility_info['name'] ?? '';
$return['nobility_info']['image'] = $nobility_info['image'] ?? '';
$return['nobility_power_list'] = [];
//爵位列表
$nobility_list = db::name('vs_nobility')
->field('lid,name,power_ids,nick_name_color,nick_name_color_name')
->where('delete_time', 0)
->select();
//权限列表
$power_list = db::name('vs_nobility_power')
->field('id,name,image')
->where('delete_time', 0)
->select();
$nobility_list_zw = [
'lid' => 0,
'name' => '特权',
'power_ids' => '',
'nick_name_color' => '无',
'nick_name_color_name' => '无',
];
array_unshift($nobility_list, $nobility_list_zw);
foreach ($nobility_list as $key => &$value) {
$return['nobility_power_list'][$key] = $value;
$power_ids = explode(',', $value['power_ids']);
foreach ($power_list as $k => $v) {
if (in_array($v['id'], $power_ids)) {
$v['status'] = 1; //是
}else{
$v['status'] = 0; //否
}
$v['type'] = 1;
$v['value'] = '';
if($v['id']==2){
$v['type'] = 2;
$v['value'] = $value['nick_name_color_name'];
$v['nick_name_color'] = $value['nick_name_color'];
$v['nick_name_color_name'] = $value['nick_name_color_name'];
}
$return['nobility_power_list'][$key]['nobility_list'][$k] = $v;
}
}
return ['code' => 1, 'msg' => '成功', 'data' => $return];
}
//购买爵位
public function buyNobility($user_id,$lid){
$nobility_info = db::name('vs_nobility')
->field('lid,name,pay_price,pay_coin,day')
->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;
//判断是否可以续费
$end_time_to_day = floor($end_time / 86400);
if($end_time_to_day > $nobility_info['day'] * 2){
return ['code' => 0, 'msg' => '已超过2倍有效期,无序续费'];
}
$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);
//发放装扮
$nobility_decorate = db::name('vs_nobility_decorate')
->field('id,did,dpid,day')
->where('delete_time', 0)
->where('lid', $lid)
->select();
if($nobility_decorate){
foreach ($nobility_decorate as $key => $value) {
model('api/Decorate')->pay_decorate($user_id,$value['did'],$value['day'],9);
}
}
//发放金币
if($is_renew ==0 || $is_renew ==2) {
$pay_coin = $nobility_info['pay_coin'] ?? 0;
}else{
$pay_coin = $nobility_info['renew_coin'] ?? 0;
}
if($pay_coin > 0){
$reslut = model('common/UserWallet')->change_user_money($user_id, $pay_coin, model('common/UserWallet')::MONEYTYPECOIN, model('common/UserWallet')::NOBILITY_PURCHASE_COIN,model('common/UserWallet')::ChangeTypeLable(model('common/UserWallet')::NOBILITY_PURCHASE_COIN));
if (!$reslut) {
return ['code' => 0, 'msg' => '失败'];
}
}
return ['code' => 1, 'msg' => '成功'];
}
//购买爵位价格
public function buyNobilityPrice($user_id,$lid){
$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(['end_time'=>['>',time()]])
->where('user_id', $user_id)
->find();
$price = 0;
if ($user_nobility_info) { //已购买过 续费
if($user_nobility_info['lid'] == $lid){ //续费
$price = $nobility_info['renew_price'];
$end_time = $user_nobility_info['end_time'] + $nobility_info['day'] * 86400;
//判断是否可以续费
$end_time_to_day = floor($end_time / 86400);
if($end_time_to_day > $nobility_info['day'] * 2){
return ['code' => 0, 'msg' => '已超过2倍有效期,无序续费'];
}
}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){
//小时
$surplus_time_hour = floor($surplus_time / 3600); //向下取整
if($nobility_info['pay_price']!=0 && $nobility_info['day']!=0){
$price = $nobility_info['pay_price'] - $surplus_time_hour * (($nobility_info['pay_price'] / $nobility_info['day']) / 24); //一小时的价格算
}
}else{
$price = $nobility_info['pay_price'];
}
$end_time = time() + $nobility_info['day'] * 86400;
}
}else{ //未购买 新购
$price = $nobility_info['pay_price'];
$end_time = time() + $nobility_info['day'] * 86400;
}
$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,
'pay_price' => $nobility_info['pay_price'],
'day' => $nobility_info['day'],
'power_list' => $power_list,
'end_time' => date('Y-m-d H:i:s', $end_time),
];
return ['code' => 1, 'msg' => '成功', 'data' => $return];
}
//获取用户爵位信息
public function getUserNobilityInfo($user_id){
$user_nobility_info = db::name('vs_user_nobility')
->field('id,user_id,lid,end_time')
->where('delete_time', 0)
->where('user_id', $user_id)
->where('end_time', '>=', time())
->find();
if($user_nobility_info){
$nobility_info = db::name('vs_nobility')
->field('lid,name,image,pay_price,renew_price,day,power_ids,nick_name_color,nick_name_color_name,play_image,enter_image')
->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,
'level' => $user_nobility_info['level'] ?? 0,
'nobility_name' => $nobility_info['name'] ?? '',
'nobility_image' => $nobility_info['image'] ?? '',
'nobility_images' => $nobility_info['images'] ?? '',
'nick_name_color' => $nobility_info['nick_name_color'] ?? '',
'nick_name_color_name' => $nobility_info['nick_name_color_name'] ?? '',
'play_image' => $nobility_info['play_image'] ?? '',
'enter_image' => $nobility_info['enter_image'] ?? '',
'end_time' => $user_nobility_info['end_time'] ?? 0,
'power_list' => $power_list ?? [],
];
return $return;
}
}