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

553 lines
24 KiB
PHP

<?php
namespace app\api\model;
use think\Db;
use think\Model;
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()]);
//开始拍卖
$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];
}
}
}