field('day')->where('is_delete', 1)->order('day asc')->select(); return ['code' => 200, 'msg' => '获取成功', 'data' => $list]; } //礼物列表 public function get_gift_list(){ $config = get_uncache_system_config(); $map = []; $map[] = ['type', '=', 1]; $map[] = ['is_show', '=', 1]; $map[] = ['is_can_buy', '=', 1]; $map[] = ['is_delete', '=', 1]; if(!empty($config['cp_gift_id'])){ $map[] = ['gid', 'neq', $config['cp_gift_id']]; } $list = db::name('gift')->field('gid,gift_name,base_image,gift_price')->where($map)->order('gift_price asc')->select(); foreach($list as $k => &$v){ $v['base_image'] = localpath_to_netpath($v['base_image']); } return ['code' => 200, 'msg' => '获取成功', 'data' => $list]; } //设置用户拍卖信息 public function options_user_auction_info($uid, $rid, $relation_id, $gid, $day){ $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]; } //当前麦上拍卖信息 $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['is_delete', '=', 1]; $room_auction_info = db::name('room_auction_log')->where($map)->order('id desc')->find(); if(!$room_auction_info){ return ['code' => 201, 'msg' => '当前尚未有拍卖信息', 'data' => null]; } if($room_auction_info['status'] != 1){ return ['code' => 201, 'msg' => '当前已开始竞拍,无法设置', 'data' => null]; } //是否是该用户的配置信息 if($room_auction_info['uid'] != $uid){ return ['code' => 201, 'msg' => '你无权限设置', 'data' => null]; } //关系是否存在 $relation_info = db::name('relation')->where('id', $relation_id)->where('is_delete', 1)->find(); if(!$relation_info){ return ['code' => 201, 'msg' => '该关系不存在', 'data' => null]; } //礼物是否存在 $map = []; $map[] = ['type', '=', 1]; $map[] = ['is_show', '=', 1]; $map[] = ['is_can_buy', '=', 1]; $map[] = ['is_delete', '=', 1]; $gift_info = db::name('gift')->where($map)->find(); if(!$gift_info){ return ['code' => 201, 'msg' => '该礼物不存在', 'data' => null]; } //天数是否存在 $day_info = db::name('relation_duration')->where('is_delete', 1)->find(); if(!$day_info){ return ['code' => 201, 'msg' => '该天数不存在', 'data' => null]; } Db::startTrans(); try { $update = []; $update['relation_id'] = $relation_id; $update['gid'] = $gid; $update['day'] = $day; $update['update_time'] = time(); $reslut = db::name('room_auction_log')->where('id', $room_auction_info['id'])->update($update); 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) { // 回滚事务 Db::rollback(); dump($e); return ['code' => 201, 'msg' => '设置失败', 'data' => null]; } } //开始拍卖 public function open_auction($uid, $rid) { $user_info = db::name('user')->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[] = ['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[] = ['rid', '=', $rid]; $map[] = ['is_delete', '=', 1]; $room_auction_info = db::name('room_auction_log')->where($map)->order('id desc')->find(); if(!$room_auction_info){ return ['code' => 201, 'msg' => '当前尚未有拍卖信息', 'data' => null]; } if($room_auction_info['status'] == 2){ return ['code' => 201, 'msg' => '当前已有进行中的拍卖', 'data' => null]; } if(empty($room_auction_info['relation_id']) || empty($room_auction_info['gid']) || empty($room_auction_info['day'])){ return ['code' => 201, 'msg' => '拍卖位信息尚未设置完成', 'data' => null]; } Db::startTrans(); try { //清除财富值 db::name('room_visitor')->where([['rid','=',$rid]])->update(['change_value'=>0,'update_time'=>time()]); //开始拍卖 $update = []; $update['status'] = 2; $update['update_time'] = time(); $reslut = db::name('room_auction_log')->where('id', $room_auction_info['id'])->update($update); 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_auction_info($uid, $rid){ $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]; } //当前房间是否正在进行的拍卖 $room_auction_info = db::name('room_auction_log')->where('rid', $rid)->where('status', 2)->where('is_delete', 1)->order('id desc')->find(); if(!$room_auction_info){ return ['code' => 201, 'msg' => '当前房间尚未开启拍卖', 'data' => null]; } $auction_user_info = db::name('user')->find($room_auction_info['uid']); $auction_gift_info = db::name('gift')->find($room_auction_info['gid']); $data = []; $data['uid'] = $room_auction_info['uid']; $data['nick_name'] = mb_convert_encoding(base64_decode($auction_user_info['base64_nick_name']), 'UTF-8', 'UTF-8'); $data['head_pic'] = localpath_to_netpath($auction_user_info['head_pic']); $data['gid'] = $room_auction_info['gid']; $data['gift_name'] = $auction_gift_info['gift_name']; $data['base_image'] = localpath_to_netpath($auction_gift_info['base_image']); $data['gift_price'] = $auction_gift_info['gift_price']; $data['integral'] = $user_info['integral']; return ['code' => 200, 'msg' => '获取成功', 'data' => $data]; } //记录用户竞拍信息 public function record_user_auction_info($uid, $user_id, $rid, $gid, $gift_price, $num, $room_owner_uid){ //当前房间进行中的拍卖信息 $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['uid', '=', $user_id]; // $map[] = ['gid', '=', $gid]; $map[] = ['status', '=', 2]; $map[] = ['is_delete', '=', 1]; $room_auction_info = db::name('room_auction_log')->where($map)->order('id desc')->find(); if($room_auction_info){ if($uid == $room_owner_uid){ return ['code' => 201, 'msg' => '主持无法参与竞拍', 'data' => null]; } if(!empty($room_auction_info['gid'])){ $gift_info1 = db::name('gift')->where(['gid'=>$room_auction_info['gid'],'is_delete'=>1])->field('gift_price')->find(); if(empty($gift_info1)){ return ['code' => 201, 'msg' => '竞拍礼物不存在!', 'data' => null]; } $gift_info1_price = $gift_info1['gift_price']; if($gift_price < $gift_info1_price){ return ['code' => 201, 'msg' => "礼物竞拍单价小于{$gift_info1_price}金币!", 'data' => null]; } } //是否有该场次的赠送信息 $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['raid', '=', $room_auction_info['id']]; $map[] = ['auction_uid', '=', $uid]; $map[] = ['uid', '=', $room_auction_info['uid']]; // $map[] = ['gid', '=', $gid]; $user_auction_info = db::name('user_room_auction_log')->where($map)->find(); if(!$user_auction_info){ $insert = []; $insert['rid'] = $rid; $insert['raid'] = $room_auction_info['id']; $insert['auction_uid'] = $uid; $insert['uid'] = $room_auction_info['uid']; // $insert['gid'] = $gid; $insert['num'] = $num; $insert['total_price'] = $gift_price * $num; $insert['add_time'] = time(); $reslut = db::name('user_room_auction_log')->insertGetId($insert); $pid = $reslut; }else{ $total_price = $gift_price * $num; $reslut = db::name('user_room_auction_log')->where('id', $user_auction_info['id'])->inc('num', $num)->inc('total_price', $total_price)->update(['update_time' => time()]); $pid = $user_auction_info['id']; } if(!$reslut){ return ['code' => 201, 'msg' => '请重试', 'data' => null]; } //总计 // $room_auction_tj_info = db::name('user_room_auction_tj')->where(['pid'=>$pid,'auction_uid'=>$uid,'uid'=>$room_auction_info['uid']])->find(); // if(empty($room_auction_tj_info)){ // db::name('user_room_auction_tj')->insert([ // 'pid' => $pid, // 'auction_uid' =>$uid, // 'uid' => $room_auction_info['uid'], // 'gift_total_price' => $gift_price * $num, // 'add_time' => time(), // 'update_time' => time() // ]); // }else{ // $gift_total_price = $gift_price * $num; // db::name('user_room_auction_tj')->where(['id'=>$room_auction_tj_info['id']])->inc('gift_total_price',$gift_total_price)->update(['update_time' => time()]); // } //明细 db::name('user_room_auction_detail_log')->insert([ 'pid' => $pid, 'auction_uid' =>$uid, 'uid' => $room_auction_info['uid'], 'gid' => $gid, 'num' => $num, 'gift_total_price' => $gift_price * $num, 'add_time' => time() ]); //更新竞拍麦位信息 $this->update_auction_micro($rid, $room_auction_info['id']); } return ['code' => 200, 'msg' => '获取成功', 'data' => null]; } //更新竞拍麦位信息 public function update_auction_micro($rid, $raid){ //当前房间竞拍麦信息 $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['micro_id', 'in', [2,3,4]]; $room_micro_arr = db::name('room_micro')->where($map)->order('micro_id asc')->column('uid'); //当前竞拍前三 $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['raid', '=', $raid]; $list = db::name('user_room_auction_log')->where($map)->find(); if(!empty($list)){ $user_auction_arr = db::name('user_room_auction_log')->where($map)->order('total_price desc')->limit(3)->column('auction_uid'); if($user_auction_arr != $room_micro_arr){ foreach ($user_auction_arr as $k => $v){ if($v != $room_micro_arr[$k]){ //变更麦位信息 $micro_id = $k + 2; db::name('room_micro')->where('rid', $rid)->where('micro_id', $micro_id)->update(['uid' => $v, 'update_time' => time()]); //是否有在其他麦位 $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['micro_id', 'in', [5,6,7,8]]; $map[] = ['uid', '=', $v]; $info = db::name('room_micro')->where($map)->find(); if($info){ db::name('room_micro')->where('id', $info['id'])->update(['uid' => 0, 'update_time' => time()]); } } } } } return true; } //结束拍卖 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_auction_log')->where('rid', $rid)->where('status', 2)->where('is_delete', 1)->order('id desc')->find(); if(!$room_auction_info){ return ['code' => 201, 'msg' => '当前房间尚未开启拍卖', 'data' => null]; } // Db::startTrans(); try { $now_time = time(); //是否有最高出价 $room_auction_price_info = db::name('user_room_auction_log')->where('raid', $room_auction_info['id'])->order('total_price desc')->limit(1)->find(); if(empty($room_auction_price_info)){//流拍 //当前拍卖结束 $reslut = db::name('room_auction_log')->where('id', $room_auction_info['id'])->update(['status' => 3, 'is_delete' => 2, 'update_time' => time()]); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '结束失败', 'data' => null]; } $is_push = 2; }else{ //绑定关系 $map = []; $map[] = ['uid|receive_uid', '=', $room_auction_price_info['auction_uid']]; $map[] = ['uid|receive_uid', '=', $room_auction_price_info['uid']]; $map[] = ['relation_id', '=', $room_auction_info['relation_id']]; $map[] = ['is_delete', '=', 1]; $user_relation = db::name('user_relation_binding')->where($map)->find(); if($user_relation){//延长时间 $update = []; // $update['day'] = $relation_info['day']; $update['end_time'] = $user_relation['end_time'] + ($room_auction_info['day'] * 60 * 60 * 24); $update['update_time'] = $now_time; $reslut = db::name('user_relation_binding')->where('id', $user_relation['id'])->inc('day', $room_auction_info['day'])->update($update); }else{//添加 $insert = []; $insert['uid'] = $room_auction_price_info['auction_uid']; $insert['receive_uid'] = $room_auction_price_info['uid']; $insert['relation_id'] = $room_auction_info['relation_id']; $insert['day'] = $room_auction_info['day']; $insert['add_time'] = $now_time; $insert['end_time'] = $now_time + ($room_auction_info['day'] * 60 * 60 *24); $reslut = db::name('user_relation_binding')->insert($insert); } if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '结束失败', 'data' => null]; } //记录 $insert = []; $insert['type'] = 2; $insert['uid'] = $room_auction_price_info['auction_uid']; $insert['receive_uid'] = $room_auction_price_info['uid']; $insert['relation_id'] = $room_auction_info['relation_id']; $insert['day'] = $room_auction_info['day']; $insert['add_time'] = $now_time; $reslut = db::name('user_relation_binding_log')->insert($insert); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '结束失败', 'data' => null]; } //摩天轮数据增加 $map = []; $map[] = ['uid|receive_uid', '=', $room_auction_price_info['auction_uid']]; $map[] = ['uid|receive_uid', '=', $room_auction_price_info['uid']]; $map[] = ['r_date', '=', date('Y-m-d')]; $dating_mt_wheel = db::name('dating_mt_wheel')->where($map)->find(); if(!empty($dating_mt_wheel)){ db::name('dating_mt_wheel')->where(['id'=>$dating_mt_wheel['id']])->inc('rank_value', $room_auction_price_info['total_price'])->update(['update_time'=>time()]); }else{ //建立关系以后数据存储 db::name('dating_mt_wheel')->insert([ 'uid' => $room_auction_price_info['auction_uid'], 'receive_uid' => $room_auction_price_info['uid'], 'rank_value' => $room_auction_price_info['total_price'], 'r_date' => date('Y-m-d'), 'add_time' => time(), 'update_time' => time() ]); } //当前拍卖结束 $reslut = db::name('room_auction_log')->where('id', $room_auction_info['id'])->update(['auction_uid' => $room_auction_price_info['auction_uid'], 'auction_num' => $room_auction_price_info['num'], 'status' => 3, 'is_delete' => 2, 'update_time' => time()]); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '结束失败', 'data' => null]; } //结束当前拍卖价位 $reslut = db::name('user_room_auction_log')->where('raid', $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,2,3,4]]; $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]; // } //更新老板麦位 model('RoomBossMicro')->update_room_boss_micro($rid); 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']); $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['relation_name'] = db::name('relation')->where('id', $room_auction_info['relation_id'])->value('name'); //提示签约成功 $push_data = []; $push_data['code'] = 3005; $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]; } } }