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]; } //查询签约用户是否在麦位上 $accept_user_is_on_pit = db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => 1])->find(); if($accept_user_is_on_pit['user_id'] == 0){ return ['code' => 0, 'msg' => '签约麦位没有用户', 'data' => null]; } $is_first_sign = db::name('vs_user_sign')->where('sign_user_id',$sign_user_id)->count(); if($is_first_sign < 1){ //第一次被签平台抽成 $sign_times = get_system_config_value('first_sign_times'); }else{ //不是第一次被签平台抽成 $sign_times = get_system_config_value('sign_times'); } //修改房间状态 db::name('vs_room')->where('id',$room_id)->update([ 'sign_type' => 1,//签约房状态:0-等待开始,1-进行中 'updatetime' => time() ]); $market_value = db::name('user')->where('id', $sign_user_id)->value('market_value'); $res = db::name('vs_room_sign')->insertGetId([ 'room_id' => $room_id, 'sign_type' => 1, 'end_time' => time() + 60 * 5,//签约时长5分钟 'sign_user_id' => $sign_user_id, 'sign_day' => $sign_times, 'market_value' => $market_value, 'createtime' => time() ]); if($res){ //给前端推送数据 $text['text'] = '开始签约'; $text['sign_id'] = $res; $text['sign_day'] = $sign_times; $text['current_body_value'] = $market_value; $text['end_time'] = time() + 60 * 5;//签约时长5分钟 model('api/Chat')->sendMsg(1090,$room_id,$text); return ['code' => 1, 'msg' => '成功','data' => $res]; }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]; } //记录签约出价 $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,$sign_user_id,2,1,$room_id,0,3); 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('id,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(); //处理麦位 $this->pit_number($room_id,$sign_user['user_id'],1); //给前端推送数据 $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');//等级图标 } //组个列表 $sign_market_value = get_system_config_value('sign_market_value'); $sign_coin_list = []; $first_value = $sign_user['sign_value'] + $sign_market_value; // 第一个值是身价加上sign_market_value for ($i = 0; $i < 8; $i++) { $sign_coin_list[] = (string)($first_value + $i); // 每个值在第一个值的基础上加i(0到7) } $text['text'] = '签约出价最高用户'; $text['FromUserInfo'] = $FromUserInfo; $text['sign_value'] = $sign_user['sign_value']; $text['sign_id'] = $sign_time; $text['sign_coin_list'] = $sign_coin_list; 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,$type = 1){ if($type == 1){ //权限判断主持及以上才可操作 $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 = db::name('vs_room_sign')->where( ['id' => $sign_time])->find(); if($sign['sign_type'] != 1){ return ['code' => 0, 'msg' => '该场次签约已结束', 'data' => null]; } //获取签约出价最高的 $max_sign_user = db::name('vs_user_sign_auction')->where(['room_id' => $room_id,'sign_time' => $sign_time])->order('sign_value desc')->find(); if($max_sign_user){ $before_sign_user = null; $is_sign = null; //查询签约用户的身份 是否是第一次被签 是否当前有签 $is_first_sign = db::name('vs_user_sign')->where('sign_user_id',$sign_user_id)->count(); if($is_first_sign < 1){ //第一次被签平台抽成 $sign_app_ratio = get_system_config_value('first_sign_app_ratio'); $sign_user_type = 0; $sign_times = get_system_config_value('first_sign_times'); }else{ //不是第一次被签平台抽成 $sign_app_ratio = get_system_config_value('sign_app_ratio'); //查找该用户是否在约 $sign_user_type = 1; $is_sign = db::name('vs_user_sign')->where(['sign_user_id' => $sign_user_id,'end_time' => ['>',time()]])->find(); if($is_sign){ $sign_user_type = 2; $before_sign_user = $is_sign['parent_user_id']; } $sign_times = get_system_config_value('sign_times'); } //开启事务 db::startTrans(); //修改他的状态 $result = db::name('vs_user_sign_auction')->where(['id' => $max_sign_user['id']])->update(['type' => 1,'signtime' => time()]); if(!$result){ 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); //签过没过期 if($sign_user_type == 2){ //本次签的还是上次的师傅 if($before_sign_user == $max_sign_user['user_id']){ $resultt = db::name('vs_user_sign') ->where(['id' => $is_sign['id']]) ->update(['end_time' => time() + $sign_times*24*60*60,'sign_user_type' => $sign_user_type]); if(!$resultt){ db::rollback(); return ['code' => 0, 'msg' => '网络错误,请重试', 'data' => null]; } }else{ $result5 = db::name('vs_user_sign')->where(['id' => $is_sign['id']]) ->update(['end_time' => time(),'type' => 4]); if(!$result5){ db::rollback(); return ['code' => 0, 'msg' => '网络错误,请重试', 'data' => null]; } $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' => $sign_times*24*60*60, 'end_time' => time() + $sign_times*24*60*60, 'createtime' => time(), ]; $result11 = db::name('vs_user_sign')->insert($data); if(!$result11){ db::rollback(); return ['code' => 0, 'msg' => '网络错误,请重试', 'data' => null]; } } //签过没过期 给上任签约者 $result4 = model('api/GiveGift') -> change_user_cion_or_earnings_log($before_sign_user,$shouyizs,$room_id,2,54,'解约补偿'); if(!$result4){ db::rollback(); return ['code' => 0, 'msg' => '网络错误,请重试', 'data' => null]; } }else{ $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' => $sign_times*24*60*60, 'end_time' => time() + $sign_times*24*60*60, 'createtime' => time(), ]; $result1 = db::name('vs_user_sign')->insert($data); if(!$result1){ db::rollback(); return ['code' => 0, 'msg' => '网络错误,请重试', 'data' => null]; } 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++){ $data1 = [ 'user_id' => $max_sign_user['sign_user_id'], 'value' => round($shouyizs/7, 4), 'day' => date('Y-m-d', strtotime("+$i days")), // 从今天开始连续七天的日期 'times' => $i+1, 'createtime' => time() ]; // 插入数据库 $result[$i] = db::name('vs_user_sign_task')->insert($data1); if(!$result[$i]){ db::rollback(); return ['code' => 0, 'msg' => '网络错误,请重试', 'data' => null]; } } } } //查看当前出价用户是否创建家族 $is_create_familys = db::name('vs_family')->where(['user_id' => $max_sign_user['user_id'],'type' => 1])->find(); if(!$is_create_familys){ $rres = model('Family')->createFamily($max_sign_user['user_id']); } $is_create_family = db::name('vs_family')->where(['user_id' => $max_sign_user['user_id'],'type' => 1])->find(); if($is_create_family){ //是否已在家族中 $is_in_family = db::name('vs_family') ->where(['pid' => $max_sign_user['user_id'],'user_id' => $max_sign_user['sign_user_id'],'type' => 0,'deletetime' => 0])->find(); if(!$is_in_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']); } } //其他的出价退回到用户的钱包 这个是为了防止上面并发产生的没退款用户 $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]; } } } } //修改房间信息 $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([ 'sign_type' => 0, 'end_time' => time() ]); if(!$res1 || !$res2){ db::rollback(); return ['code' => 0, 'msg' => '网络错误,请重试.!', 'data' => null]; } //用户财富等级更新 $user_level = model('Level')->user_level_data_update($max_sign_user['user_id'],$max_sign_user['sign_value'],1,$room_id); if(!$user_level){ Db::rollback(); return ['code' => 0, 'msg' => '用户等级更新失败', 'data' => null]; } //获取用户签约开始的身价 $market_value = $sign['market_value']; $sign_values = $max_sign_user['sign_value'] - $market_value; //更新用户的身价并且添加记录 此时增长的身价是出价 这个出价就是身价溢价 $dd = model('api/MarketValue')->change($sign_user_id,$sign_values,3); if($dd['code'] != 1){ Db::rollback(); return ['code' => 0, 'msg' => $dd['msg'], 'data' => null]; } 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); }else{ //修改房间信息 db::name('vs_room')->where('id',$room_id)->update([ 'sign_type' => 0, 'updatetime' => time() ]); //修改房间签约信息 db::name('vs_room_sign')->where(['id' => $sign_time]) ->update([ 'sign_type' => 0, 'end_time' => time() ]); $text['text'] = '流拍'; $text['FromUserInfo'] = null; $text['ToUserInfo'] = null; $text['sign_value'] = 0; model('api/Chat')->sendMsg(1092,$room_id,$text); } //处理麦位 $this->pit_number($room_id,0,0); return ['code' => 1, 'msg' => '操作成功', 'data' => null]; } /* * 麦位处理 */ public function pit_number($room_id,$user_id = 0,$type = 0){ if($type == 1){//上麦或者换麦 //获取房间2号位上的用户 $on_pit2_user = db::name('vs_room_pit') ->where(['room_id' => $room_id,'pit_number' => 2])->field('before_pit_number,user_id')->find(); if($on_pit2_user['user_id'] == $user_id){ return true; } //处理2号位 if($on_pit2_user && $on_pit2_user['user_id']){ //2号位有其他用户,需要处理该用户 //获取2号位用户之前的位置上是否有用户 $before_pit_number = db::name('vs_room_pit') ->where(['room_id' => $room_id,'pit_number' => $on_pit2_user['before_pit_number']])->value('user_id'); if($before_pit_number || $on_pit2_user['before_pit_number'] == 0){ //之前位置有人或者之前麦位为空,直接下麦 model('api/RoomPit')->DownPit($on_pit2_user['user_id'], $room_id, 2); } else { //之前位置无人,换麦 db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => $on_pit2_user['before_pit_number']]) ->update(['user_id' => $on_pit2_user['user_id']]); //推送换麦消息 $this->sendPitChangeMessage($on_pit2_user['user_id'], $room_id, 2, $on_pit2_user['before_pit_number']); } } //处理当前用户上2号位 if($user_id){ //查询当前用户是否已在麦上 $user_pit_info = db::name('vs_room_pit') ->where(['room_id' => $room_id, 'user_id' => $user_id]) ->field('pit_number')->find(); if($user_pit_info && $user_pit_info['pit_number']){//用户已在麦上 //移除原麦位上的自己信息 db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => $user_pit_info['pit_number']]) ->update(['user_id' => 0]); //换到2号位,记录原麦位信息 db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => 2]) ->update(['user_id' => $user_id,'before_pit_number' => $user_pit_info['pit_number']]); //推送换麦消息 $this->sendPitChangeMessage($user_id, $room_id, $user_pit_info['pit_number'], 2); } else { //用户不在麦上,直接上2号麦 model('api/RoomPit')->OnPit($user_id, $room_id, 2); } } } else { //下麦 - 在麦位上的用户全部下麦 $on_pit_users = db::name('vs_room_pit') ->where(['room_id' => $room_id, 'user_id' => ['>', 0], 'pit_number' => ['<', 3]]) ->select(); if($on_pit_users){ foreach ($on_pit_users as $pit_user){ model('RoomPit')->DownPit($pit_user['user_id'], $room_id, $pit_user['pit_number']); } } } return true; } /* * 发送麦位变更消息 */ private function sendPitChangeMessage($user_id, $room_id, $from_pit, $to_pit){ $userInfo = db::name('user')->where('id', $user_id)->field('id as user_id,nickname,avatar,sex')->find(); $userInfo['icon'][0] = model('UserData')->user_wealth_icon($user_id);//财富图标 $userInfo['icon'][1] = model('UserData')->user_charm_icon($user_id);//魅力图标 $userInfo['dress'] = model('Decorate')->user_decorate_detail($user_id, 1); $userInfo['charm'] = db::name('vs_room_user_charm')->where(['user_id' => $user_id, 'room_id' => $room_id])->value('charm'); $nobility = model('api/Nobility')->getUserNobilityInfo($user_id); $userInfo['nobility_info'] = $nobility; $userInfo['mic_cycle'] = model('api/Decorate')->user_decorate_detail($user_id, 3); $userInfo['nobility_image'] = $nobility['play_image']; $userInfo['nickname_color'] = $nobility['nick_name_color']; if($to_pit == 1){ $pit_text = '签约麦'; }elseif($to_pit == 2){ $pit_text = '师父麦'; }elseif ($to_pit == 3 || $to_pit == 4 || $to_pit == 5) { $pit_text = '老板麦'; }elseif($to_pit == 9){ $pit_text = '主持麦'; }elseif ($to_pit == 10) { $pit_text = '嘉宾麦'; }else{ $pit_text = $to_pit . '号麦'; } $text['text'] = $userInfo['nickname'].' 换到'.$pit_text; $text['FromUserInfo'] = $userInfo; $text['from_pit_number'] = $from_pit; $text['to_pit_number'] = $to_pit; model('Chat')->sendMsg(1039, $room_id, $text); } /* * 签约延时 * @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['sign_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]; } /* * 收礼检查是否有被签约和在合约期内 给上级返佣 * @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(['parent_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(['parent_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'); $change_coin = ceil($market_value * $sign_market_value / 100); //获取签约者的金币 $coin = db::name('user_wallet')->where('user_id',$user_id)->value('coin'); if($coin < $change_coin){ 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(['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,$change_coin,0,1,56,'续约'); if(!$res2){ db::rollback(); return ['code' => 0, 'msg' => '网络错误,请重试', 'data' => null]; } db::commit(); return ['code' => 1, 'msg' => '操作成功', 'data' => null]; } }