2025-11-26 11:36:08 +08:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace app\api\model;
|
|
|
|
|
|
|
|
|
|
use think\Db;
|
|
|
|
|
use think\Model;
|
|
|
|
|
|
|
|
|
|
class Sign extends Model
|
|
|
|
|
{
|
|
|
|
|
/*
|
|
|
|
|
* 开始签约
|
|
|
|
|
* @param int $user_id 用户id
|
|
|
|
|
* @param int $room_id 房间id
|
|
|
|
|
* @param int $sign_user_id 签约麦的用户id
|
|
|
|
|
*/
|
|
|
|
|
public function start_sign($user_id,$room_id){
|
|
|
|
|
//权限判断主持及以上才可操作
|
|
|
|
|
$owner = db::name('vs_room')->where(['id' => $room_id, 'user_id' => $user_id])->field('id')->find();
|
|
|
|
|
$host = db::name('vs_room_host')->where(['room_id' => $room_id, 'user_id' => $user_id,'delete_time' => null])->find();
|
|
|
|
|
if(!$owner && !$host){
|
|
|
|
|
return ['code' => 0, 'msg' => '没有权限操作', 'data' => null];
|
|
|
|
|
}
|
|
|
|
|
//修改房间状态
|
2025-11-27 15:51:58 +08:00
|
|
|
$sign_time = db::name('vs_room_sign')->where('room_id',$room_id)->order('id desc')->value('sign_time') + 1;
|
2025-11-26 11:36:08 +08:00
|
|
|
$result = db::name('vs_room')->where('id',$room_id)->update([
|
|
|
|
|
'sign_type' => 1,
|
2025-11-27 15:51:58 +08:00
|
|
|
// 'sign_time' => $sign_time,
|
2025-11-26 11:36:08 +08:00
|
|
|
'updatetime' => time()
|
|
|
|
|
]);
|
2025-11-27 15:51:58 +08:00
|
|
|
$res = db::name('vs_room_sign')->insertGetId([
|
|
|
|
|
'room_id' => $room_id,
|
|
|
|
|
'sign_type' => 1,
|
|
|
|
|
'sign_time' => $sign_time,
|
|
|
|
|
'end_time' => time() + 60 * 5,//签约时长5分钟
|
|
|
|
|
'createtime' => time()
|
|
|
|
|
]);
|
2025-11-26 11:36:08 +08:00
|
|
|
if($result){
|
|
|
|
|
//给前端推送数据
|
|
|
|
|
$text['text'] = '开始签约';
|
2025-11-27 15:51:58 +08:00
|
|
|
$text['sign_id'] = $res;
|
2025-11-26 11:36:08 +08:00
|
|
|
model('api/Chat')->sendMsg(1090,$room_id,$text);
|
|
|
|
|
|
|
|
|
|
return ['code' => 1, 'msg' => '成功','data' => $sign_time];
|
|
|
|
|
}else{
|
|
|
|
|
return ['code' => 0, 'msg' => '网络错误,请重试','data' => null];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* 签约出价
|
|
|
|
|
* @param int $user_id 用户id
|
|
|
|
|
* @param int $room_id 房间id
|
|
|
|
|
* @param int $sign_user_id 签约麦的用户id
|
|
|
|
|
* @param int $sign_value 出价
|
|
|
|
|
* @param int $sign_time 签约场次
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
public function sign_coin($user_id,$room_id,$sign_user_id,$sign_value,$sign_time){
|
|
|
|
|
//查询用户金币
|
|
|
|
|
$user_coin = db::name('user_wallet')->where('user_id',$user_id)->value('coin');
|
|
|
|
|
if($user_coin < $sign_value){
|
|
|
|
|
return ['code' => 0, 'msg' => '金币不足','data' => null];
|
|
|
|
|
}
|
|
|
|
|
//开启事务
|
|
|
|
|
db::startTrans();
|
|
|
|
|
//扣除用户金币并记录日志
|
|
|
|
|
$wallet_update = model('api/GiveGift') -> change_user_cion_or_earnings_log($user_id,$sign_value,$room_id,1,50,'用户签约关系');
|
|
|
|
|
if(!$wallet_update){
|
|
|
|
|
Db::rollback();
|
|
|
|
|
return ['code' => 0, 'msg' => '扣除用户金币失败', 'data' => null];
|
|
|
|
|
}
|
|
|
|
|
//用户财富等级更新
|
|
|
|
|
$user_level = model('Level')->user_level_data_update($user_id,$sign_value,1,$room_id);
|
|
|
|
|
if(!$user_level){
|
|
|
|
|
Db::rollback();
|
|
|
|
|
return ['code' => 0, 'msg' => '用户等级更新失败', 'data' => null];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//记录签约出价
|
|
|
|
|
$data = [
|
|
|
|
|
'user_id' => $user_id,
|
|
|
|
|
'room_id' => $room_id,
|
|
|
|
|
'sign_time' => $sign_time,
|
|
|
|
|
'sign_user_id' => $sign_user_id,
|
|
|
|
|
'sign_value' => $sign_value,
|
|
|
|
|
'createtime' => time(),
|
|
|
|
|
];
|
|
|
|
|
$result = db::name('vs_user_sign_auction')->insert($data);
|
|
|
|
|
if(!$result){
|
|
|
|
|
db::rollback();
|
|
|
|
|
return ['code' => 0, 'msg' => '网络错误,请重试!','data' => null];
|
|
|
|
|
}
|
|
|
|
|
//记录房间流水及明细
|
|
|
|
|
//收礼记录行为日志
|
|
|
|
|
$give_gift = model('api/GiveGift') -> change_user_give_gift_log($user_id,0,$sign_value,0,0,2,1,$room_id,0);
|
|
|
|
|
if(!$give_gift){
|
|
|
|
|
Db::rollback();
|
|
|
|
|
return ['code' => 0, 'msg' => '出价失败', 'data' => null];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//增加房间火热值hot_value
|
|
|
|
|
$gift_totalaa = $sign_value * get_system_config_value('coin_charm_exp');
|
|
|
|
|
db::name('vs_room')->where(['id' => $room_id])->inc('hot_value', $gift_totalaa)->inc('today_hot_value', $gift_totalaa)->update();
|
|
|
|
|
|
|
|
|
|
//获取出价最高用户
|
|
|
|
|
$sign_user = db::name('vs_user_sign_auction')->where(['room_id' => $room_id,'sign_time' => $sign_time,'type' => 0])->order('sign_value desc')->field('user_id,sign_value')->find();
|
|
|
|
|
//其他的出价退回到用户的钱包
|
|
|
|
|
$refund = db::name('vs_user_sign_auction')->where(['room_id' => $room_id,'sign_time' => $sign_time,'type' => 0])->select();
|
|
|
|
|
if($refund){
|
|
|
|
|
foreach ($refund as $k => $v){
|
|
|
|
|
if($v['id'] != $sign_user['id']){
|
|
|
|
|
//给用户退回签约金额记录行为日志
|
|
|
|
|
$result2[$k] = model('api/GiveGift') -> change_user_cion_or_earnings_log($v['user_id'],$v['sign_value'],$room_id,1,51,'签约失败退款');
|
|
|
|
|
if(!$result2[$k]){
|
|
|
|
|
db::rollback();
|
|
|
|
|
return ['code' => 0, 'msg' => '网络错误,请重试,', 'data' => null];
|
|
|
|
|
}
|
|
|
|
|
$result3[$k] = db::name('vs_user_sign_auction')->where('id',$v['id'])->update(['type' => 2,'refundtime' => time()]);
|
|
|
|
|
if(!$result3[$k]){
|
|
|
|
|
db::rollback();
|
|
|
|
|
return ['code' => 0, 'msg' => '网络错误,请重试。', 'data' => null];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//提交数据
|
|
|
|
|
db::commit();
|
|
|
|
|
//给前端推送数据
|
|
|
|
|
$FromUserInfo = db::name('user')->where('id',$sign_user['user_id'])->field('id as user_id,nickname,avatar,sex')->find();
|
|
|
|
|
$FromUserInfo['icon'][0] = model('api/UserData')->user_wealth_icon($sign_user['user_id']);//财富图标
|
|
|
|
|
$FromUserInfo['icon'][1] = model('api/UserData')->user_charm_icon($sign_user['user_id']);//魅力图标
|
|
|
|
|
//判断是否是歌手 如果是 返回等级图标
|
|
|
|
|
$isSinnger = db::name('vs_singer')->where(['user_id' => $sign_user['user_id'],'status' => 1])->value('level');
|
|
|
|
|
if($isSinnger){
|
|
|
|
|
$FromUserInfo['icon'][2] = db::name('vs_singer_level')->where(['level' => $isSinnger,'deletetime' => 0])->value('image');//等级图标
|
|
|
|
|
}
|
|
|
|
|
$text['text'] = '签约出价最高用户';
|
|
|
|
|
$text['FromUserInfo'] = $FromUserInfo;
|
|
|
|
|
$text['sign_value'] = $sign_user['sign_value'];
|
2025-11-27 15:51:58 +08:00
|
|
|
$text['sign_id'] = $sign_time;
|
2025-11-26 11:36:08 +08:00
|
|
|
model('api/Chat')->sendMsg(1091,$room_id,$text);
|
|
|
|
|
return ['code' => 1, 'msg' => '成功','data' => null];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* 签约结束
|
|
|
|
|
* @param int $user_id 用户id
|
|
|
|
|
* @param int $room_id 房间id
|
|
|
|
|
* @param int $sign_time 签约场次
|
|
|
|
|
* @param int $sign_user_id 签约麦的用户id
|
|
|
|
|
*/
|
|
|
|
|
public function end_sign($user_id,$room_id,$sign_time,$sign_user_id){
|
|
|
|
|
//权限判断主持及以上才可操作
|
|
|
|
|
$owner = db::name('vs_room')->where(['id' => $room_id, 'user_id' => $user_id])->field('id')->find();
|
|
|
|
|
$host = db::name('vs_room_host')->where(['room_id' => $room_id, 'user_id' => $user_id,'delete_time' => null])->find();
|
|
|
|
|
if(!$owner && !$host){
|
|
|
|
|
return ['code' => 0, 'msg' => '没有权限操作', 'data' => null];
|
|
|
|
|
}
|
|
|
|
|
//根据场次判断是否结束
|
2025-11-27 15:51:58 +08:00
|
|
|
$sign = db::name('vs_room_sign')->where( ['id' => $sign_time])->find();
|
|
|
|
|
if($sign['sign_type'] != 1 || $sign['end_time'] < time()){
|
|
|
|
|
return ['code' => 0, 'msg' => '该场次签约已结束', 'data' => null];
|
2025-11-26 11:36:08 +08:00
|
|
|
}
|
|
|
|
|
//查询签约用户的身份 是否是第一次被签 是否当前有签
|
|
|
|
|
$is_first_sign = db::name('vs_user_sign')->where('sign_user_id',$sign_user_id)->count();
|
|
|
|
|
$before_sign_user = null;
|
2025-11-27 11:48:53 +08:00
|
|
|
$is_sign = null;
|
2025-11-26 11:36:08 +08:00
|
|
|
if($is_first_sign < 1){
|
|
|
|
|
//第一次被签平台抽成
|
|
|
|
|
$sign_app_ratio = get_system_config_value('first_sign_app_ratio');
|
|
|
|
|
$sign_user_type = 0;
|
|
|
|
|
}else{
|
|
|
|
|
//不是第一次被签平台抽成
|
|
|
|
|
$sign_app_ratio = get_system_config_value('sign_app_ratio');
|
|
|
|
|
//查找该用户是否在约
|
|
|
|
|
$sign_user_type = 1;
|
2025-11-27 11:48:53 +08:00
|
|
|
$is_sign = db::name('vs_user_sign')->where(['sign_user_id' => $sign_user_id,'end_time' => ['>',time()]])->find();
|
2025-11-26 11:36:08 +08:00
|
|
|
if($is_sign){
|
2025-11-27 11:48:53 +08:00
|
|
|
$sign_user_type = 2;
|
|
|
|
|
$before_sign_user = $is_sign['user_id'];
|
2025-11-26 11:36:08 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//获取签约出价最高的
|
|
|
|
|
$max_sign_user = db::name('vs_user_sign_auction')->where(['room_id' => $room_id,'sign_time' => $sign_time])->order('sign_value desc')->find();
|
|
|
|
|
//开启事务
|
|
|
|
|
db::startTrans();
|
|
|
|
|
//修改他的状态
|
|
|
|
|
$result = db::name('vs_user_sign_auction')->where(['id' => $max_sign_user['id']])->update(['type' => 1,'signtime' => time()]);
|
|
|
|
|
//给fa_vs_user_sign 添加信息
|
|
|
|
|
$data = [
|
|
|
|
|
'parent_user_id' => $max_sign_user['user_id'],
|
|
|
|
|
'sign_user_id' => $max_sign_user['sign_user_id'],
|
|
|
|
|
'sign_user_type' => $sign_user_type,
|
|
|
|
|
'sign_times' => get_system_config_value('sign_times')*24*60*60,
|
|
|
|
|
'end_time' => time() + get_system_config_value('sign_times')*24*60*60,
|
|
|
|
|
'createtime' => time(),
|
|
|
|
|
];
|
|
|
|
|
$result1 = db::name('vs_user_sign')->insert($data);
|
|
|
|
|
if(!$result || !$result1){
|
|
|
|
|
db::rollback();
|
|
|
|
|
return ['code' => 0, 'msg' => '网络错误,请重试', 'data' => null];
|
|
|
|
|
}
|
2025-11-26 17:20:30 +08:00
|
|
|
//查看当前出价用户是否创建家族
|
|
|
|
|
$is_create_family = db::name('vs_family')->where(['user_id' => $max_sign_user['user_id'],'type' => 1])->find();
|
|
|
|
|
if($is_create_family){
|
|
|
|
|
//拉进家族和群聊
|
|
|
|
|
$data2 = [
|
|
|
|
|
'name' => $is_create_family['name'],
|
|
|
|
|
'pid' => $max_sign_user['user_id'],
|
|
|
|
|
'user_id' => $max_sign_user['sign_user_id'],
|
|
|
|
|
'createtime' => time(),
|
|
|
|
|
];
|
|
|
|
|
$result22 = db::name('vs_family')->insert($data2);
|
|
|
|
|
if(!$result22){
|
|
|
|
|
db::rollback();
|
|
|
|
|
return ['code' => 0, 'msg' => '网络错误,请重试!!', 'data' => null];
|
|
|
|
|
}
|
|
|
|
|
//拉入群聊
|
|
|
|
|
model('Tencent')->add_group_member('f'.$is_create_family['id'], $max_sign_user['sign_user_id']);
|
|
|
|
|
}
|
2025-11-26 11:36:08 +08:00
|
|
|
|
|
|
|
|
//其他的出价退回到用户的钱包 这个是为了防止上面并发产生的没退款用户
|
|
|
|
|
$refund = db::name('vs_user_sign_auction')->where(['room_id' => $room_id,'sign_time' => $sign_time,'type' => 0])->select();
|
|
|
|
|
if($refund){
|
|
|
|
|
foreach ($refund as $k => $v){
|
|
|
|
|
if($v['id'] != $max_sign_user['id']){
|
|
|
|
|
//给用户退回签约金额记录行为日志
|
|
|
|
|
$result2[$k] = model('api/GiveGift') -> change_user_cion_or_earnings_log($v['user_id'],$v['sign_value'],$room_id,1,51,'签约失败退款');
|
|
|
|
|
if(!$result2[$k]){
|
|
|
|
|
db::rollback();
|
|
|
|
|
return ['code' => 0, 'msg' => '网络错误,请重试', 'data' => null];
|
|
|
|
|
}
|
|
|
|
|
$result3[$k] = db::name('vs_user_sign_auction')->where('id',$v['id'])->update(['type' => 2,'refundtime' => time()]);
|
|
|
|
|
if(!$result3[$k]){
|
|
|
|
|
db::rollback();
|
|
|
|
|
return ['code' => 0, 'msg' => '网络错误,请重试', 'data' => null];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//根据被签约的用户类型计算给响应用户的金额
|
|
|
|
|
//减去平台抽成 剩余的给相应的人
|
|
|
|
|
$sign_user_cion = $max_sign_user['sign_value'] * (100 - $sign_app_ratio) / 100;//金币数
|
|
|
|
|
//计算收益
|
|
|
|
|
$shouyizs = coin_earning($sign_user_cion,100 - $sign_app_ratio);
|
|
|
|
|
if($sign_user_type == 0){
|
|
|
|
|
//首次签约 给被签约的人
|
|
|
|
|
$result4 = model('api/GiveGift') -> change_user_cion_or_earnings_log($max_sign_user['sign_user_id'],$shouyizs,$room_id,2,52,'被首次签约成功收入');
|
|
|
|
|
if(!$result4){
|
|
|
|
|
db::rollback();
|
|
|
|
|
return ['code' => 0, 'msg' => '网络错误,请重试', 'data' => null];
|
|
|
|
|
}
|
|
|
|
|
}elseif ($sign_user_type == 1){
|
|
|
|
|
//签过 给被签约的人分七天给他
|
|
|
|
|
// 数据插入 循环插入7条数据 day 取值是今天开始连续七天 的每一天的值 到天
|
|
|
|
|
for ($i = 0; $i < 7; $i++){
|
2025-11-26 17:20:30 +08:00
|
|
|
$data1 = [
|
2025-11-26 11:36:08 +08:00
|
|
|
'user_id' => $max_sign_user['sign_user_id'],
|
|
|
|
|
'value' => round($shouyizs/7, 4),
|
|
|
|
|
'day' => date('Y-m-d', strtotime("+$i days")), // 从今天开始连续七天的日期
|
2025-11-26 17:20:30 +08:00
|
|
|
'times' => $i+1,
|
2025-11-26 11:36:08 +08:00
|
|
|
'createtime' => time()
|
|
|
|
|
];
|
|
|
|
|
// 插入数据库
|
2025-11-26 17:20:30 +08:00
|
|
|
$result[$i] = db::name('vs_user_sign_task')->insert($data1);
|
2025-11-26 11:36:08 +08:00
|
|
|
if(!$result[$i]){
|
|
|
|
|
db::rollback();
|
|
|
|
|
return ['code' => 0, 'msg' => '网络错误,请重试', 'data' => null];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}elseif ($sign_user_type == 2){
|
|
|
|
|
//签过没过期 给上任签约者
|
2025-11-26 17:34:14 +08:00
|
|
|
$result4 = model('api/GiveGift') -> change_user_cion_or_earnings_log($before_sign_user,$shouyizs,$room_id,2,54,'解约补偿');
|
2025-11-26 11:36:08 +08:00
|
|
|
if(!$result4){
|
|
|
|
|
db::rollback();
|
|
|
|
|
return ['code' => 0, 'msg' => '网络错误,请重试', 'data' => null];
|
|
|
|
|
}
|
2025-11-27 11:48:53 +08:00
|
|
|
//上任签约信息修改
|
|
|
|
|
if($is_sign){
|
|
|
|
|
$result5 = db::name('vs_user_sign')->where(['id' => $is_sign['id']])
|
|
|
|
|
->update(['end_time' => time(),'type' => 3]);
|
|
|
|
|
if(!$result5){
|
|
|
|
|
db::rollback();
|
|
|
|
|
return ['code' => 0, 'msg' => '网络错误,请重试', 'data' => null];
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-11-26 11:36:08 +08:00
|
|
|
}
|
2025-11-27 15:51:58 +08:00
|
|
|
//修改房间信息
|
|
|
|
|
$res1 = db::name('vs_room')->where('id',$room_id)->update([
|
|
|
|
|
'sign_type' => 0,
|
|
|
|
|
'updatetime' => time()
|
|
|
|
|
]);
|
|
|
|
|
//修改签约信息
|
|
|
|
|
$res2 = db::name('vs_room_sign')->where(['id' => $sign_time])
|
|
|
|
|
->update([
|
|
|
|
|
'type' => 0,
|
|
|
|
|
'end_time' => time()
|
|
|
|
|
]);
|
|
|
|
|
if(!$res1 || !$res2){
|
|
|
|
|
db::rollback();
|
|
|
|
|
return ['code' => 0, 'msg' => '网络错误,请重试.!', 'data' => null];
|
|
|
|
|
}
|
2025-11-26 11:36:08 +08:00
|
|
|
db::commit();
|
|
|
|
|
//给前端推送
|
|
|
|
|
$FromUserInfo = db::name('user')->where('id',$max_sign_user['user_id'])->field('id as user_id,nickname,avatar,sex')->find();
|
|
|
|
|
$FromUserInfo['icon'][0] = model('api/UserData')->user_wealth_icon($max_sign_user['user_id']);//财富图标
|
|
|
|
|
$FromUserInfo['icon'][1] = model('api/UserData')->user_charm_icon($max_sign_user['user_id']);//魅力图标
|
|
|
|
|
//判断是否是歌手 如果是 返回等级图标
|
|
|
|
|
$isSinnger = db::name('vs_singer')->where(['user_id' => $max_sign_user['user_id'],'status' => 1])->value('level');
|
|
|
|
|
if($isSinnger){
|
|
|
|
|
$FromUserInfo['icon'][2] = db::name('vs_singer_level')->where(['level' => $isSinnger,'deletetime' => 0])->value('image');//等级图标
|
|
|
|
|
}
|
|
|
|
|
$ToUserInfo = db::name('user')->where('id',$max_sign_user['sign_user_id'])->field('id as user_id,nickname,avatar,sex')->find();
|
|
|
|
|
$ToUserInfo['icon'][0] = model('api/UserData')->user_wealth_icon($max_sign_user['sign_user_id']);//财富图标
|
|
|
|
|
$ToUserInfo['icon'][1] = model('api/UserData')->user_charm_icon($max_sign_user['sign_user_id']);//魅力图标
|
|
|
|
|
//判断是否是歌手 如果是 返回等级图标
|
|
|
|
|
$isSinnger = db::name('vs_singer')->where(['user_id' => $max_sign_user['sign_user_id'],'status' => 1])->value('level');
|
|
|
|
|
if($isSinnger){
|
|
|
|
|
$ToUserInfo['icon'][2] = db::name('vs_singer_level')->where(['level' => $isSinnger,'deletetime' => 0])->value('image');//等级图标
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$text['text'] = '签约出价最高用户';
|
|
|
|
|
$text['FromUserInfo'] = $FromUserInfo;
|
|
|
|
|
$text['ToUserInfo'] = $ToUserInfo;
|
|
|
|
|
$text['sign_value'] = $max_sign_user['sign_value'];
|
|
|
|
|
model('api/Chat')->sendMsg(1092,$room_id,$text);
|
|
|
|
|
|
|
|
|
|
return ['code' => 1, 'msg' => '操作成功', 'data' => null];
|
|
|
|
|
}
|
|
|
|
|
|
2025-11-27 11:48:53 +08:00
|
|
|
|
2025-11-27 15:51:58 +08:00
|
|
|
/*
|
|
|
|
|
* 签约延时
|
|
|
|
|
* @param $user_id 用户id
|
|
|
|
|
* @param $room_id 房间id
|
|
|
|
|
* @param $sign_id 签约场次id
|
|
|
|
|
*/
|
|
|
|
|
public function sign_delay($user_id,$room_id,$sign_id){
|
|
|
|
|
//权限判断主持及以上才可操作
|
|
|
|
|
$owner = db::name('vs_room')->where(['id' => $room_id, 'user_id' => $user_id])->field('id')->find();
|
|
|
|
|
$host = db::name('vs_room_host')->where(['room_id' => $room_id, 'user_id' => $user_id,'delete_time' => null])->find();
|
|
|
|
|
if(!$owner && !$host){
|
|
|
|
|
return ['code' => 0, 'msg' => '没有权限操作', 'data' => null];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$sign_info = db::name('vs_room_sign')->where(['id' => $sign_id])->find();
|
|
|
|
|
if(!$sign_info || (!empty($sign_info) && $sign_info['type'] != 1)){
|
|
|
|
|
return ['code' => 0, 'msg' => '本场签约结束', 'data' => null];
|
|
|
|
|
}
|
|
|
|
|
$res = db::name('vs_room_sign')->where(['id' => $sign_id])
|
|
|
|
|
->update([
|
|
|
|
|
'end_time' => $sign_info['end_time'] + 300,//延时5分钟
|
|
|
|
|
]);
|
|
|
|
|
if(!$res){
|
|
|
|
|
return ['code' => 0, 'msg' => '网络错误,请重试', 'data' => null];
|
|
|
|
|
}
|
|
|
|
|
//给前端推送
|
|
|
|
|
$text['text'] = '签约延时';
|
|
|
|
|
$text['end_time'] = $sign_info['end_time'] + 300;
|
|
|
|
|
model('api/Chat')->sendMsg(1093,$room_id,$text);
|
|
|
|
|
return ['code' => 1, 'msg' => '操作成功', 'data' => null];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2025-11-27 11:48:53 +08:00
|
|
|
/*
|
|
|
|
|
* 收礼检查是否有被签约和在合约期内 给上级返佣
|
|
|
|
|
* @param $user_id 用户id
|
|
|
|
|
* @param $gift_id 礼物id
|
|
|
|
|
* @param $gift_num 礼物数量
|
|
|
|
|
* @param $gift_price 礼物价格
|
|
|
|
|
* @param $room_id 房间id
|
|
|
|
|
*/
|
|
|
|
|
public function check_sign_gift($user_id,$gift_id,$gift_num,$gift_price,$room_id){
|
|
|
|
|
//获取用户签约信息
|
|
|
|
|
$sign_info = db::name('vs_user_sign')->where(['sign_user_id' => $user_id,'end_time' => ['>',time()]])->find();
|
|
|
|
|
if(!$sign_info){
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
$give_sign_ratio = get_system_config_value('give_sign_ratio');
|
|
|
|
|
$earnings = $gift_price * $give_sign_ratio / 100;
|
|
|
|
|
$data = [
|
|
|
|
|
'user_id' => $sign_info['parent_user_id'],
|
|
|
|
|
'sign_user_id' => $user_id,
|
|
|
|
|
'gift_id' => $gift_id,
|
|
|
|
|
'gift_num' => $gift_num,
|
|
|
|
|
'earnings' => $earnings,
|
|
|
|
|
'createtime' => time()
|
|
|
|
|
];
|
|
|
|
|
$result = db::name('vs_user_sign_earnings')->insert($data);
|
|
|
|
|
if($result){
|
|
|
|
|
$result4 = model('api/GiveGift') -> change_user_cion_or_earnings_log($sign_info['parent_user_id'],$earnings,$room_id,2,55,'签约用户收礼返佣');
|
|
|
|
|
if(!$result4){
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* 免费续签
|
|
|
|
|
* @param $user_id 用户id
|
|
|
|
|
* @param $sign_user_id 签约麦的用户id
|
|
|
|
|
*/
|
|
|
|
|
public function free_re_sign($user_id,$sign_user_id){
|
|
|
|
|
$first_sign_info = db::name('vs_user_sign')
|
|
|
|
|
->where(['sign_user_id' => $sign_user_id])->count();
|
|
|
|
|
if($first_sign_info > 1){
|
|
|
|
|
return ['code' => 0, 'msg' => '该用户已不满足免费续签条件', 'data' => null];
|
|
|
|
|
}
|
|
|
|
|
$sign_info = db::name('vs_user_sign')
|
|
|
|
|
->where(['user_id' => $user_id,'sign_user_id' => $sign_user_id,'end_time' => ['>',time()]])->find();
|
|
|
|
|
if(!$sign_info){
|
|
|
|
|
return ['code' => 0, 'msg' => '您没有签约该用户或该用户已解约', 'data' => null];
|
|
|
|
|
}
|
|
|
|
|
if($sign_info['type'] >= 3){
|
|
|
|
|
return ['code' => 0, 'msg' => '免费续签次数已用完', 'data' => null];
|
|
|
|
|
}
|
|
|
|
|
$end_time = $sign_info['end_time'] + 86400 * get_system_config_value('free_re_sign_day');
|
|
|
|
|
$res = db::name('vs_user_sign')->where(['id' => $sign_info['id']])->update(['type' => $sign_info['type']+1,'end_time' => $end_time]);
|
|
|
|
|
if(!$res){
|
|
|
|
|
return ['code' => 0, 'msg' => '网络错误,请重试', 'data' => null];
|
|
|
|
|
}
|
|
|
|
|
return ['code' => 1, 'msg' => '操作成功', 'data' => null];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* 续签
|
|
|
|
|
* @param $user_id 用户id
|
|
|
|
|
* @param $sign_user_id 签约麦的用户id
|
|
|
|
|
*/
|
|
|
|
|
public function re_sign($user_id,$sign_user_id){
|
|
|
|
|
$sign_info = db::name('vs_user_sign')
|
|
|
|
|
->where(['user_id' => $user_id,'sign_user_id' => $sign_user_id,'end_time' => ['>',time()]])->find();
|
|
|
|
|
if(!$sign_info){
|
|
|
|
|
return ['code' => 0, 'msg' => '您没有签约该用户或该用户已解约', 'data' => null];
|
|
|
|
|
}
|
|
|
|
|
//获取被签约用户当前身价
|
|
|
|
|
$market_value = db::name('user')->where('id',$sign_user_id)->value('market_value');
|
|
|
|
|
//获取系统配置的签约身价百分比
|
|
|
|
|
$sign_market_value = get_system_config_value('sign_user_ratio');
|
|
|
|
|
//获取系统配置非首签签约时长
|
|
|
|
|
$sign_times = get_system_config_value('sign_times');
|
|
|
|
|
|
|
|
|
|
//获取签约者的金币
|
|
|
|
|
$coin = db::name('user_wallet')->where('user_id',$user_id)->value('coin');
|
|
|
|
|
if($coin < $market_value * $sign_market_value){
|
|
|
|
|
return ['code' => 0, 'msg' => '您的金币不足', 'data' => null];
|
|
|
|
|
}
|
|
|
|
|
$end_time = $sign_info['end_time'] + 86400 * $sign_times;
|
|
|
|
|
//开启事务
|
|
|
|
|
db::startTrans();
|
|
|
|
|
$res = db::name('vs_user_sign')->where(['id' => $sign_info['id']])->update(['type' => 1,'end_time' => $end_time]);
|
|
|
|
|
if(!$res){
|
|
|
|
|
db::rollback();
|
|
|
|
|
return ['code' => 0, 'msg' => '网络错误,请重试', 'data' => null];
|
|
|
|
|
}
|
|
|
|
|
$res2 = model('api/GiveGift') -> change_user_cion_or_earnings_log($user_id,$market_value * $sign_market_value,0,2,56,'续约');
|
|
|
|
|
if(!$res2){
|
|
|
|
|
db::rollback();
|
|
|
|
|
return ['code' => 0, 'msg' => '网络错误,请重试', 'data' => null];
|
|
|
|
|
}
|
|
|
|
|
db::commit();
|
|
|
|
|
return ['code' => 1, 'msg' => '操作成功', 'data' => null];
|
|
|
|
|
}
|
|
|
|
|
|
2025-11-26 11:36:08 +08:00
|
|
|
}
|