field('uid')->find($uid); if(!$user_info){ return ['code' => 201, 'msg' => '参数错误', 'data' => null]; } $room_info = db::name('room')->find($rid); if(!$room_info){ return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null]; } //是否有权限 if($uid != $room_info['room_host_uid'] && $uid != $room_info['room_owner_uid']){ return ['code' => 201, 'msg' => '您无权限进行该操作', 'data' => null]; } //当前是否已有未结束的拍卖 $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['is_stop', '=', 2]; $map[] = ['is_delete', '=', 1]; $room_auction_info = db::name('room_new_auction_log')->where($map)->find(); if($room_auction_info){ return ['code' => 201, 'msg' => '当前尚有进行中的拍卖', 'data' => null]; } //是否有新人在拍卖位上 $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['micro_id', '=', 1]; $room_micro_info = db::name('room_micro')->where($map)->find(); if($room_micro_info && $room_micro_info['uid'] <= 0){ return ['code' => 201, 'msg' => '当前尚未有人在麦上,无法开启', 'data' => null]; } //该用户是否已被签约 $map = []; $map[] = ['sign_uid', '=', $room_micro_info['uid']]; $map[] = ['is_delete', '=', 1]; $user_contract = db::name('user_sign_contract')->where($map)->find(); if($user_contract){ return ['code' => 201, 'msg' => '该用户已被签约', 'data' => null]; } //新人信息 $new_user_info = db::name('user')->where('uid', $room_micro_info['uid'])->find(); Db::startTrans(); try { //开始拍卖 $insert = []; $insert['rid'] = $rid; $insert['uid'] = $room_micro_info['uid']; $insert['auction_uid'] = 0; if($new_user_info['social'] < 1){ $insert['start_value'] = $config['initial_user_social']; }else{ $insert['start_value'] = $new_user_info['social']; } $insert['add_time'] = time(); $reslut = db::name('room_new_auction_log')->insert($insert); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '开启失败', 'data' => null]; } Db::commit(); model('api/room')->push_room_micro_data($rid); return ['code' => 200, 'msg' => '开启成功', 'data' => null]; } catch (\Exception $e) { // 回滚事务 dump($e); Db::rollback(); return ['code' => 201, 'msg' => '开启失败', 'data' => null]; } } //当前拍卖前三名 public function get_room_new_auction_rank($rid){ $room_info = db::name('room')->find($rid); if(!$room_info){ return ['code' => 201, 'msg' => '该房间信息不存在', 'data' => null]; } //当前房间是否有拍卖 $room_new_auction_log = db::name('room_new_auction_log')->where('rid', $rid)->where('is_stop', 2)->where('is_delete', 1)->find(); if(!$room_new_auction_log){ $data = []; $data['list'] = []; return ['code' => 200, 'msg' => '获取成功', 'data' => $data]; } //前三 $room_new_auction_price_list = db::name('room_new_auction_price')->alias('a')->join('yy_user b', 'a.auction_uid = b.uid')->field('a.id, b.uid, b.nick_name, b.base64_nick_name, b.head_pic, a.price')->where('a.nid', $room_new_auction_log['id'])->order('a.price desc')->limit(3)->select(); foreach ($room_new_auction_price_list as $k => &$v){ $v['nick_name'] = mb_convert_encoding(base64_decode($v['base64_nick_name']), 'UTF-8', 'UTF-8'); $v['head_pic'] = localpath_to_netpath($v['head_pic']); } $data = []; $data['list'] = $room_new_auction_price_list; return ['code' => 200, 'msg' => '获取成功', 'data' => $data]; } //出价列表 public function get_room_auction_price_list(){ $list = db::name('auction_price')->where('is_delete', 1)->field('price')->order('price asc')->select(); return ['code' => 200, 'msg' => '成功', 'data' => $list]; } //用户出价 public function user_auction_price($uid, $rid, $price){ $user_info = db::name('user')->find($uid); if(!$user_info){ return ['code' => 201, 'msg' => '参数错误', 'data' => null]; } $room_info = db::name('room')->find($rid); if(!$room_info){ return ['code' => 201, 'msg' => '该房间信息不存在', 'data' => null]; } //该价位是否存在 $auction_price = db::name('auction_price')->where('price', $price)->where('is_delete', 1)->find(); if(!$auction_price){ return ['code' => 201, 'msg' => '该加价信息不存在', 'data' => null]; } //当前房间拍卖信息 $room_auction_info = db::name('room_new_auction_log')->where('rid', $rid)->where('is_stop', 2)->where('is_delete', 1)->find(); if(!$room_auction_info){ return ['code' => 201, 'msg' => '当前房间尚未开启拍卖', 'data' => null]; } if($uid == $room_auction_info['uid']){ return ['code' => 201, 'msg' => '自己不能竞拍自己', 'data' => null]; } Db::startTrans(); try { //当前竞拍价 $new_auction_price = db::name('room_new_auction_log')->where('id', $room_auction_info['id'])->value('start_value'); //当前用户金额是否可以加价 $user_auction_price = model('NewRoom')->get_user_auction_price($uid); if($user_info['integral'] < ($user_auction_price + $price + $new_auction_price)){ return ['code' => 201, 'msg' => '您当前的金币不足以加价', 'data' => null]; } //用户加价信息 $room_auction_price = db::name('room_new_auction_price')->where('auction_uid', $uid)->where('nid', $room_auction_info['id'])->find(); if($room_auction_price){ $update = []; $update['price'] = $new_auction_price + $price; $update['update_time'] = time(); $reslut = db::name('room_new_auction_price')->where('id', $room_auction_price['id'])->update($update); }else{ $insert = []; $insert['rid'] = $rid; $insert['nid'] = $room_auction_info['id']; $insert['uid'] = $room_auction_info['uid']; $insert['auction_uid'] = $uid; $insert['price'] = $new_auction_price + $price; $insert['add_time'] = time(); $insert['update_time'] = time(); $reslut = db::name('room_new_auction_price')->insert($insert); } if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '开启失败', 'data' => null]; } //用户加价记录 $insert_data = []; $insert_data['nid'] = $room_auction_info['id']; $insert_data['rid'] = $rid; $insert_data['auction_uid'] = $uid; $insert_data['uid'] = $room_auction_info['uid']; $insert_data['change_value'] = $new_auction_price; $insert_data['add_value'] = $price; $insert_data['add_time'] = time(); $reslut = db::name('user_room_new_aution_log')->insert($insert_data); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '开启失败', 'data' => null]; } //修改当前用户基础起拍价 $update = []; $update['update_time'] = time(); $reslut = db::name('room_new_auction_log')->where('id', $room_auction_info['id'])->inc('start_value', $price)->update($update); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '开启失败', 'data' => null]; } Db::commit(); model('api/room')->push_room_micro_data($rid); $push_data = []; $push_data['code'] = 3001; $push_data['msg'] = "竞拍前三名信息"; $data = $this->get_room_new_auction_rank($rid); $push_data['data'] = $data['data']; model('api/WebSocketPush')->send_to_group($rid, $push_data); return ['code' => 200, 'msg' => '加价成功', 'data' => null]; } catch (\Exception $e) { // 回滚事务 dump($e); Db::rollback(); return ['code' => 201, 'msg' => '加价失败', 'data' => null]; } } //用户当前加价未支付的总金额 public function get_user_auction_price($uid){ $user_auction_price = 0; //新人厅出价 $map = []; $map[] = ['auction_uid', '=', $uid]; $map[] = ['is_delete', '=', 1]; $room_new_auction_price = db::name('room_new_auction_price')->where($map)->select(); if(!empty($room_new_auction_price)){ $new_auction_price = db::name('room_new_auction_price')->where($map)->sum('price'); $user_auction_price += $new_auction_price; } //K歌厅出价 $map = []; $map[] = ['auction_uid', '=', $uid]; $map[] = ['is_delete', '=', 1]; $room_new_auction_price = db::name('user_room_song_auction')->where($map)->select(); if(!empty($room_new_auction_price)){ $song_auction_price = 0; foreach ($room_new_auction_price as $k => $v){ $room_user_song_log = db::name('room_song_user_log')->where('rsid', $v['rsid'])->where('uid', $v['uid'])->find(); if($room_user_song_log){ if($room_user_song_log['is_delete'] == 1){ $song_auction_price += $v['price']; } } } // $song_auction_price = db::name('user_room_song_auction')->where($map)->sum('price'); $user_auction_price += $song_auction_price; } return $user_auction_price; } //结束拍卖 public function finish_auction($uid, $rid){ $config = get_uncache_system_config(); $user_info = db::name('user')->find($uid); if(!$user_info){ return ['code' => 201, 'msg' => '参数错误', 'data' => null]; } $room_info = db::name('room')->find($rid); if(!$room_info){ return ['code' => 201, 'msg' => '该房间信息不存在', 'data' => null]; } //是否有权限结束 if($room_info['room_host_uid'] != $uid){ return ['code' => 201, 'msg' => '当前麦上主持才可结束', 'data' => null]; } //当前房间是否正在进行的拍卖 $room_auction_info = db::name('room_new_auction_log')->where('rid', $rid)->where('is_stop', 2)->where('is_delete', 1)->find(); if(!$room_auction_info){ return ['code' => 201, 'msg' => '当前房间尚未开启拍卖', 'data' => null]; } // Db::startTrans(); try { $now_time = time(); //是否有最高出价 $room_auction_price_info = db::name('room_new_auction_price')->where('nid', $room_auction_info['id'])->order('price desc')->limit(1)->find(); if(empty($room_auction_price_info)){//流拍 //当前拍卖结束 $reslut = db::name('room_new_auction_log')->where('id', $room_auction_info['id'])->update(['is_stop' => 1, 'is_delete' => 2, 'update_time' => time()]); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '结束失败', 'data' => null]; } $is_push = 2; }else{//签约 $insert = []; $insert['uid'] = $room_auction_price_info['auction_uid']; $insert['sign_uid'] = $room_auction_price_info['uid']; $insert['price'] = $room_auction_price_info['price']; $insert['add_time'] = $now_time; $insert['end_time'] = $now_time + (60*60*24*7); $reslut = db::name('user_sign_contract')->insert($insert); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '结束失败', 'data' => null]; } //修改用户身价及是否签约 $reslut = db::name('user')->where('uid', $room_auction_price_info['uid'])->update(['social' => $room_auction_price_info['price'], 'is_sign' => 1, 'update_time' => time()]); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '结束失败', 'data' => null]; } //修改用户制作人身份 $reslut = db::name('user')->where('uid', $room_auction_price_info['auction_uid'])->update(['is_producer' => 1, 'update_time' => time()]); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '结束失败', 'data' => null]; } //新手签约奖励 $user_is_song_award = 2; $user_song_money = 1; $user_award_num = db::name('user_new_award_log')->where('uid', $room_auction_price_info['uid'])->find(); if($user_award_num){ if($user_award_num < 3){ $reslut = model('admin/User')->change_user_money_by_uid($room_auction_price_info['uid'], $user_song_money, 1, 43, "新手签约奖励", $room_auction_price_info['uid'], 0, $rid); if ($reslut['code'] == 201) { Db::rollback(); return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null]; } $reslut = db::name('user_new_award_log')->where('id', $user_award_num['id'])->inc('num', 1)->update(); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '请重试', 'data' => null]; } $user_is_song_award = 1; } }else{ $reslut = model('admin/User')->change_user_money_by_uid($room_auction_price_info['uid'], $user_song_money, 1, 43, "新手签约奖励", $room_auction_price_info['uid'], 0, $rid); if ($reslut['code'] == 201) { Db::rollback(); return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null]; } $insert = []; $insert['uid'] = $room_auction_price_info['uid']; $insert['num'] = 1; $insert['add_time'] = time(); $reslut = db::name('user_new_award_log')->insert($insert); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '请重试', 'data' => null]; } $user_is_song_award = 1; } //主持获得签约成功的金币 $host_is_award = 2; $money = 2; //主持当天是否达到100个艺人 $room_host_num = db::name('user_new_host_award_log')->where('uid', $room_info['room_host_uid'])->whereTime('add_time', 'today')->find(); if($room_host_num){ if($room_host_num['num'] < 100){ $reslut = model('admin/User')->change_user_money_by_uid($room_info['room_host_uid'], $money, 2, 23, "签约成功主持获得金币", $room_info['room_host_uid'], 0, $rid); if ($reslut['code'] == 201) { Db::rollback(); return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null]; } $reslut = db::name('user_new_host_award_log')->where('id', $room_host_num['id'])->inc('num', 1)->update(); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '请重试', 'data' => null]; } $host_is_award = 1; } }else{ $reslut = model('admin/User')->change_user_money_by_uid($room_info['room_host_uid'], $money, 2, 23, "签约成功主持获得金币", $room_info['room_host_uid'], 0, $rid); if ($reslut['code'] == 201) { Db::rollback(); return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null]; } $insert = []; $insert['uid'] = $room_info['room_host_uid']; $insert['num'] = 1; $insert['add_time'] = time(); $reslut = db::name('user_new_host_award_log')->insert($insert); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '请重试', 'data' => null]; } $host_is_award = 1; } //扣除拍卖人的金币 $reslut = model('admin/User')->change_user_money_by_uid($room_auction_price_info['auction_uid'], -$room_auction_price_info['price'], 2, 24, "拍卖签约扣除金币", $room_auction_price_info['auction_uid'], 0, $rid); if ($reslut['code'] == 201) { Db::rollback(); return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null]; } //当前拍卖结束 $reslut = db::name('room_new_auction_log')->where('id', $room_auction_info['id'])->update(['auction_uid' => $room_auction_price_info['auction_uid'], 'end_value' => $room_auction_price_info['price'], 'is_stop' => 1, 'is_delete' => 2, 'update_time' => time()]); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '结束失败', 'data' => null]; } //结束当前拍卖价位 $reslut = db::name('room_new_auction_price')->where('nid', $room_auction_info['id'])->update(['is_delete' => 2, 'update_time' => time()]); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '结束失败', 'data' => null]; } $is_push = 1; } //拍卖用户下麦 $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['micro_id', 'in', [1]]; $map[] = ['uid', '>', 0]; $reslut = db::name('room_micro')->where($map)->update(['uid' => 0, 'update_time' => time(), 'frame_gid' => 0, 'centre_gid' => 0, 'above_gid' => 0, 'below_gid' => 0, 'left_gid' => 0, 'right_gid' => 0]); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '结束失败', 'data' => null]; } // $reslut = model('api/room')->user_down_micro($room_auction_info['uid'], $rid, 2); // if($reslut['code'] != 200){ // Db::rollback(); // return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null]; // } Db::commit(); model('api/room')->push_room_micro_data($rid); if($is_push == 1){ $auction_user_info = db::name('user')->find($room_auction_price_info['auction_uid']); $sign_user_info = db::name('user')->find($room_auction_price_info['uid']); $room_host_info = db::name('user')->find($room_info['room_host_uid']); $push_message = []; $push_message['auction_user_info']['uid'] = $room_auction_price_info['auction_uid']; $push_message['auction_user_info']['nick_name'] = mb_convert_encoding(base64_decode($auction_user_info['base64_nick_name']), 'UTF-8', 'UTF-8'); $push_message['auction_user_info']['head_pic'] = localpath_to_netpath($auction_user_info['head_pic']); $push_message['sign_user_info']['uid'] = $room_auction_price_info['uid']; $push_message['sign_user_info']['nick_name'] = mb_convert_encoding(base64_decode($sign_user_info['base64_nick_name']), 'UTF-8', 'UTF-8'); $push_message['sign_user_info']['head_pic'] = localpath_to_netpath($sign_user_info['head_pic']); $push_message['is_push_user_song_award'] = $user_is_song_award; $push_message['push_user_song_award']['uid'] = 0; $push_message['push_user_song_award']['nick_name'] = ''; $push_message['push_user_song_award']['head_pic'] = ''; $push_message['push_user_song_award']['content'] = ''; if($user_is_song_award == 1){ $push_message['push_user_song_award']['uid'] = $room_auction_price_info['uid']; $push_message['push_user_song_award']['nick_name'] = mb_convert_encoding(base64_decode($sign_user_info['base64_nick_name']), 'UTF-8', 'UTF-8'); $push_message['push_user_song_award']['head_pic'] = localpath_to_netpath($sign_user_info['head_pic']); $push_message['push_user_song_award']['content'] = '唱歌完成获得1钻石奖励'; } $push_message['is_push_host_award'] = $host_is_award; $push_message['push_host_award']['uid'] = 0; $push_message['push_host_award']['nick_name'] = ''; $push_message['push_host_award']['head_pic'] = ''; $push_message['push_host_award']['content'] = ''; if($host_is_award == 1){ $push_message['push_host_award']['uid'] = $room_info['room_host_uid']; $push_message['push_host_award']['nick_name'] = mb_convert_encoding(base64_decode($room_host_info['base64_nick_name']), 'UTF-8', 'UTF-8'); $push_message['push_host_award']['head_pic'] = localpath_to_netpath($room_host_info['head_pic']); $push_message['push_host_award']['content'] = '获得签约新人奖励2金币'; } //提示签约成功 $push_data = []; $push_data['code'] = 3002; $push_data['msg'] = "签约成功"; $push_data['data'] = $push_message; model('api/WebSocketPush')->send_to_group($rid, $push_data); } return ['code' => 200, 'msg' => '结束成功', 'data' => null]; } catch (\Exception $e) { // 回滚事务 dump($e); Db::rollback(); return ['code' => 201, 'msg' => '结束失败', 'data' => null]; } } }