Files
mier-php/application/api/model/AuctionRoom.php
2025-08-11 10:22:05 +08:00

866 lines
39 KiB
PHP

<?php
namespace app\api\model;
use think\Db;
use think\Model;
use think\facade\Log;
class AuctionRoom extends Model
{
//天数列表
public function get_day_list(){
$list = db::name('relation_duration')->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()]);
$paimai_long_time = get_uncache_system_config('paimai_long_time');
//开始拍卖
$update = [];
$update['status'] = 2;
$update['update_time'] = time();
$update['end_time'] = $paimai_long_time + time();
$update['duration'] = $paimai_long_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'],$gift_info1_price);
}
return ['code' => 200, 'msg' => '获取成功', 'data' => null];
}
//更新竞拍麦位信息[排行榜 2 3 4 5 6 7 拍卖位]
public function update_auction_micro($rid, $raid,$gift_info1_price){
if(empty($gift_info1_price)){
$gift_info1_price = 0;
}
//当前房间竞拍麦信息
$map = [];
$map[] = ['rid', '=', $rid];
$map[] = ['micro_id', 'in', [2,3,4,5,6,7]];
$room_micro_arr = db::name('room_micro')->where($map)->order('micro_id asc')->column('uid');
//当前竞拍前三
$map = [];
$map[] = ['rid', '=', $rid];
$map[] = ['raid', '=', $raid];
$map[] = ['total_price','>=', $gift_info1_price];
$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(6)->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', [8,9,10,11,12]];
$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];
}
//获取最低拍卖价格
$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'];
Db::startTrans();
try {
$now_time = time();
//是否有最高出价
$room_auction_price_info = db::name('user_room_auction_log')->where([['raid','=',$room_auction_info['id']],['total_price','>=',$gift_info1_price]])->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,5,6,7]];
$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];
}
//更新老板麦位 下麦
// 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];
}
}
//自动倒计时拍卖
public function close_auction_pm(){
$config = get_uncache_system_config();
$now_time = time();
//当前房间是否正在进行的拍卖
$room_auction_info = db::name('room_auction_log')->where([['status','=',2],['is_delete','=',1],['end_time','<',$now_time]])->order('id asc')->find();
if(empty($room_auction_info)){
return ['code' => 201, 'msg' => '暂没有要结束的拍卖活动!', 'data' => null];
}
$rid = $room_auction_info['rid'];
//获取最低拍卖价格
$gift_info1 = db::name('gift')->where(['gid'=>$room_auction_info['gid'],'is_delete'=>1])->field('gift_price')->find();
if(empty($gift_info1)){
Log::write(['msg'=>'竞拍礼物不存在','data_msg'=>$gift_info1],'close_auction_pm');
return ['code' => 201, 'msg' => "竞拍礼物不存在,房间rid:{$rid}!", 'data' => null];
}
$gift_info1_price = $gift_info1['gift_price'];
try {
Db::startTrans();
//是否有最高出价
$room_auction_price_info = db::name('user_room_auction_log')->where([['raid','=',$room_auction_info['id']],['total_price','>=',$gift_info1_price]])->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();
Log::write(['msg'=>'结束失败1','data_msg'=>$reslut],'close_auction_pm');
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();
Log::write(['msg'=>'结束失败2','data_msg'=>$user_relation],'close_auction_pm');
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();
Log::write(['msg'=>'结束失败3','data_msg'=>$reslut],'close_auction_pm');
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();
Log::write(['msg'=>'结束失败4','data_msg'=>$reslut,'room_auction_price_info'=>$room_auction_price_info],'close_auction_pm');
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();
Log::write(['msg'=>'结束失败5','reslut'=>$reslut],'close_auction_pm');
return ['code' => 201, 'msg' => '结束失败', 'data' => null];
}
$is_push = 1;
}
//拍卖用户下麦 结束拍卖下麦
$map = [];
$map[] = ['rid', '=', $rid];
$map[] = ['micro_id', 'in', [1,2,3,4,5,6,7]];
$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();
Log::write(['msg'=>'结束失败6','reslut'=>$reslut],'close_auction_pm');
return ['code' => 201, 'msg' => '结束失败', 'data' => null];
}
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;
$a = model('api/WebSocketPush')->send_to_group($rid, $push_data);
Log::write(['msg'=>'绑定关系成功','reslut'=>$a],'close_auction_pm');
}
Db::commit();
return ['code' => 200, 'msg' => '结束成功', 'data' => null];
} catch (\Exception $e) {
// 回滚事务
dump($e);
Db::rollback();
Log::write(['msg'=>'异常报错','reslut'=>$e],'close_auction_pm');
return ['code' => 201, 'msg' => '结束失败', 'data' => null];
}
}
//增加拍卖时长
public function add_pm_line_duration($uid, $rid, $duration=1){
$config = get_uncache_system_config();
$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];
}
$duration_time = 60;
$room_admin_uid_arr = db::name('room_admin')->where('rid', $rid)->where('is_delete', 1)->column('uid');
if ($uid != $room_info['room_owner_uid'] && $uid != $room_info['room_host_uid']) {
return ['code' => 201, 'msg' => '无权限操作', 'data' => null];
}
//当前房间是否正在进行的拍卖
$room_dating_log = db::name('room_auction_log')->where('rid', $rid)->where('status', 2)->where('is_delete', 1)->order('id desc')->find();
if(empty($room_dating_log)){
return ['code' => 201, 'msg' => '当前房间没有正在进行的拍卖!', 'data' => null];
}
if($room_dating_log['end_time'] < time()){
return ['code' => 201, 'msg' => '当前房间没有正在进行的拍卖1', 'data' => null];
}
$max_paimai_long_time = $config['max_paimai_long_time'];
if($room_dating_log['duration'] + $duration_time > ($max_paimai_long_time * 60)){
return ['code' => 201, 'msg' => "单场拍卖活动最长{$max_paimai_long_time}分钟!", 'data' => null];
}
Db::startTrans();
try {
$update = [];
$update['duration'] = $room_dating_log['duration'] + $duration_time;
$update['end_time'] = $room_dating_log['end_time'] + $duration_time;
$update['update_time'] = time();
$reslut = db::name('room_auction_log')->where('id', $room_dating_log['id'])->update($update);
if(!$reslut){
Db::rollback();
return ['code' => 201, 'msg' => '操作失败', 'data' => null];
}
//添加记录
$insert = [];
$insert['user_id'] = $uid;
$insert['pid'] = $room_dating_log['id'];
$insert['rid'] = $rid;
$insert['duration'] = $duration;
$insert['add_time'] = time();
$reslut = db::name('room_auction_duration_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 auction_room_rank($rid,$page,$limit=20){
//当前房间是否正在进行的拍卖
$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];
}
//获取最低拍卖价格
$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'];
//是否有最高出价
$room_auction_price_info = db::name('user_room_auction_log')
->alias('ul')
->join('user u',"u.uid = ul.auction_uid")
->where([['ul.raid','=',$room_auction_info['id']],['ul.total_price','>=',$gift_info1_price]])
->field('ul.auction_uid,ul.total_price,u.base64_nick_name as nick_name,u.head_pic')
->order(['total_price'=>'desc'])
->page($page,$limit)
->select();
if(!empty($room_auction_price_info)){
foreach ($room_auction_price_info as &$v){
$v['nick_name'] = mb_convert_encoding(base64_decode($v['nick_name']), 'UTF-8', 'UTF-8');
$v['head_pic'] = localpath_to_netpath($v['head_pic']);
$v['charm_level_image'] = '';
$v['contribution_level_image'] = '';
$reslut = model('api/User')->get_user_charm_contribution_info($v['auction_uid']);
// if(!empty($reslut['data']['user_charm_contribution_info'])){
$v['charm_level_image'] = $reslut['data']['charm_level_image'];
$v['contribution_level_image'] = $reslut['data']['contribution_level_image'];
// }
}
}
return ['code' => 200, 'msg' => '操作成功', 'data' => $room_auction_price_info];
}
}