送礼优化 相关

This commit is contained in:
2026-01-06 17:40:13 +08:00
parent 581122b4d9
commit 132e9df303
13 changed files with 2167 additions and 1526 deletions

View File

@@ -187,6 +187,7 @@ class Room extends BaseCom
//直播间送礼
//
public function room_give_gift()
{
$key_name = "api:room:gift:" . $this->uid;
@@ -236,7 +237,7 @@ class Room extends BaseCom
public function room_online_list()
{
$room_id = input('room_id', 0);
if($room_id){
if(!$room_id){
return V(0, '房间不存在');
}
$page = input('page', 1);
@@ -249,7 +250,7 @@ class Room extends BaseCom
public function room_user_home()
{
$room_id = input('room_id', 0);
if($room_id){
if(!$room_id){
return V(0, '房间不存在');
}
$user_id = input('user_id', 0);
@@ -352,7 +353,7 @@ class Room extends BaseCom
public function room_info()
{
$room_id = input('room_id', 0);
if($room_id){
if(!$room_id){
return V(0, '房间不存在');
}
$reslut = model('Room')->room_info($this->uid, $room_id);

View File

@@ -68,11 +68,12 @@ class RoomAuction extends BaseCom
$gift_id = input('gift_id');
$num = input('num');
$type = input('type',1);//1金币购买 2送背包礼物
$gift_bag_id = input('gift_bag_id',0);
$pool_gift_id = db::name('bb_lottery_config')->where(['key' => 'pool_gift_id'])->value('value');
if($gift_id == $pool_gift_id){
return V(0, '此礼物不能进行此操作');
}
$reslut = model('RoomAuction')->room_auction_join($auction_id,$user_id,$gift_id,$num,$type);
$reslut = model('RoomAuction')->room_auction_join($auction_id,$user_id,$gift_id,$num,$type,$gift_bag_id);
return V($reslut['code'], $reslut['msg'], $reslut['data']);
}

View File

@@ -16,13 +16,19 @@ class SendGift extends BaseCom
{
$key_name = "api:send:gift:" . $this->uid;
redis_lock_exits($key_name);
$room_id = input('room_id', 0);//房间ID
$gift_id = input('gift_id', 0);//礼物ID
$gift_num = (int)input('gift_num', 1);//礼物数量
$room_id = input('room_id/d', 0);//房间ID
$gift_id = input('gift_id/d', 0);//礼物ID
$gift_num = (int)input('gift_num/d', 1);//礼物数量
$to_uid = input('to_uid', 0);//收礼人ID逗号隔开的字符串
$type = input('type', 1);//1金币购买 2送背包礼物
$pit_number = input('pit_number', 0);
$heart_id = input('heart_id', 0);//助力时的 ID
$type = input('type/d', 1);//1金币购买 2送背包礼物
$heart_id = input('heart_id/d', 0);//助力时的 ID
$gift_bag_id = input('gift_bag_id/d', 0);//盲盒类型ID 7-初级8-中级9-高级
if($room_id <= 0 || $gift_id <= 0 || $to_uid <= 0 || $type <= 0){
redis_unlocks($key_name);
return V(0, '参数错误');
}
//获取幸运币
$pool_gift_id = db::name('bb_lottery_config')->where(['key' => 'pool_gift_id'])->value('value');
@@ -34,13 +40,10 @@ class SendGift extends BaseCom
//获取房间类型 1:交友/pk(二卡八),2:练歌房(声网点歌),3:亲密拍,4:真爱拍,6:私密房,7:互娱房,9:点唱/歌手房,10:签约房,11:酒吧房
$room_type = model('Room')->get_room_type($room_id);
//送礼
$reslut = model('SendGift')->give_gift($this->uid, $to_uid, $gift_id, $gift_num,2,$type, $room_id,$pit_number,0,);
if($room_type == 1){
redis_unlocks($key_name);
return V($reslut['code'], $reslut['msg'], $reslut['data']);
}elseif ($room_type == 2){
$reslut = model('GiveGift')->give_gift($this->uid, $to_uid, $gift_id, $gift_num,2,$type, $room_id,$pit_number,0,$give_gift_ext);
//送礼 (送礼用户收礼用户组礼物ID数量礼物类型房间ID )
$reslut = model('SendGift')->send_gift($this->uid, $to_uid, $gift_id, $gift_num, $type, $room_id, $gift_bag_id, $heart_id);
if($room_type == 2){//2:练歌房(声网点歌)
if($reslut['code'] == 1){
$room_pits = model('RoomSong')->get_charm_rank($room_id);
if($room_pits['code'] == 1){
@@ -54,11 +57,10 @@ class SendGift extends BaseCom
}
redis_unlocks($key_name);
return V($reslut['code'], $reslut['msg'], $reslut['data']);
}else{
redis_unlocks($key_name);
return V(1, '送礼成功');
}
redis_unlocks($key_name);
return V(1, '送礼成功');
}
}
}

View File

@@ -321,16 +321,12 @@ class Friend extends Model
* @param $room_id 房间id
* @param $pit_number 坑位
*/
public function room_give_gift($uid, $to_uid, $gift_id, $gift_num, $from_type, $type, $room_id, $pit_number, $heart_id,$give_gift_ext)
public function room_give_gift($uid, $to_uid,$room_id,$res,$heart_id = 0)
{
$res = model('GiveGift')->give_gift($uid, $to_uid, $gift_id, $gift_num, $from_type, $type, $room_id, $pit_number,0,$give_gift_ext);
if($res['code'] != 1){
return $res;
}
//送礼成功后续操作
//查看当前时间是否在交友表的创建时间和结束时间段内 用来区分是否要拉取心动值高的用户上麦
$friend = db::name('vs_user_friending')->where(['room_id' => $room_id,'status' => 1])->order('id desc')->find();
//查看当前时间是否在交友表的创建时间和结束时间段内 用来区分是否要拉取心动值高的用户上麦
if($friend && time() >= $friend['create_time'] && time() <= $friend['end_time']){
$heart_exp = get_system_config_value('coin_charm_exp');//金币与魅力值转换比
$sumPrice = $res['data']['gift_total'] * $heart_exp;
@@ -338,7 +334,7 @@ class Friend extends Model
if($heart_id){//有这个值就是助力 不参加抢麦操作
db::name('vs_user_friending_heart')->where(['id' => $heart_id])->setInc('heart_value', $sumPrice);
$this->pullHeartChange($room_id,$friend['id']);//聊天室心动值变化通知
// $this->pullHeartChange($room_id,$friend['id']);//聊天室心动值变化通知 注释掉是因为下面那个函数会处理
//生成新排名 判断抱上麦 还是换麦
$this->pullUserPit($room_id,$friend['id']);
}else{
@@ -346,7 +342,7 @@ class Friend extends Model
$host = $this->is_host($uid,$to_uid,$room_id);
$user_idd = explode(",", $user_idd); // 将字符串转换为数组
//判断是否是主持
if($host['is_preside'] == 1){
if($host && $host['is_preside'] == 1){
if(!in_array($uid,$host['is_preside_user'])){//主持不是当前送礼人,那就是在收礼人中
//从数组中剔除主持人 && $is_preside_user!= UID
$user_idd = array_diff($user_idd, $host['is_preside_user']); // 从数组中移除
@@ -382,13 +378,13 @@ class Friend extends Model
foreach ($user_ids as $value) {
//判断收礼人是否是主持
if (in_array($value, $host)) {
$is_preside = 1;
$is_preside = 1;//是主持
$is_preside_user[] = $value;
}
}
//送礼人是主持或嘉宾
if (in_array($uid, $host)) {
$is_preside = 1;
$is_preside = 1;//是嘉宾
$is_preside_user[] = $uid;
}
return ['is_preside' =>$is_preside,'is_preside_user' => $is_preside_user];

File diff suppressed because it is too large Load Diff

View File

@@ -47,7 +47,8 @@ class Lottery extends Model
//送礼 开启事务
Db::startTrans();
//扣除用户金币并记录日志
$wallet_update = model('api/GiveGift')->change_user_cion_or_earnings_log($send_uid,$all_gift_price,$room_id,1,10,'用户金币购买礼物');
// $wallet_update = model('api/GiveGift')->change_user_cion_or_earnings_log($send_uid,$all_gift_price,$room_id,1,10,'用户金币购买幸运币礼物');
$wallet_update = model('api/UserWallet')->change_user_cion_log($send_uid, $all_gift_price, $room_id, 10, '用户金币购买幸运币礼物');
if(!$wallet_update){
Db::rollback();
return ['code' => 0, 'msg' => '扣除用户金币失败', 'data' => null];
@@ -84,7 +85,8 @@ class Lottery extends Model
//计算收礼人得益
$receiver_earnings = $gift_price /2/get_system_config_value('rmb_coin_ratio');
//增加收益并记录日志
$receiver = model('api/GiveGift') -> change_user_cion_or_earnings_log($to_id,$receiver_earnings,$room_id,2,11,'收礼增加收益');
// $receiver = model('api/GiveGift') -> change_user_cion_or_earnings_log($to_id,$receiver_earnings,$room_id,2,11,'收幸运币礼增加收益');
$receiver = model('api/UserWallet')->change_user_earnings_log($to_id,$receiver_earnings,$room_id,11,'收幸运币礼增加收益');
// //用户魅力等级更新
// $user_level = model('api/Level')->user_level_data_update($to_id,$gift_price,2,$room_id);
@@ -151,7 +153,8 @@ class Lottery extends Model
// 大奖
if ($result['is_big_prize'] == 1) {//$result['big_prize_amount'],//中奖金额
$beilv = floor($result['big_prize_amount'] / $gift_price);
$wallet_update = model('api/GiveGift')->change_user_cion_or_earnings_log($send_uid,$result['big_prize_amount'],$room_id,1,58,'参与幸运币活动获得'.$beilv.'倍');
// $wallet_update = model('api/GiveGift')->change_user_cion_or_earnings_log($send_uid,$result['big_prize_amount'],$room_id,1,58,'参与幸运币活动获得'.$beilv.'倍');
$wallet_update = model('api/UserWallet')->change_user_earnings_log($send_uid,$result['big_prize_amount'],$room_id,58,'参与幸运币活动获得'.$beilv.'倍');
if(!$wallet_update){
return ['code' => 0, 'msg' => '流水记录失败', 'data' => null];
}
@@ -162,7 +165,8 @@ class Lottery extends Model
$tet['play_image'] = $big_prize_play_image;
} else { // 小奖 $result['small_prize_amount'],//中奖金额
$beilv = floor($result['small_prize_amount'] / $gift_price);
$wallet_update = model('api/GiveGift')->change_user_cion_or_earnings_log($send_uid,$result['small_prize_amount'],$room_id,1,58,'参与幸运币活动获得'.$beilv.'倍');
// $wallet_update = model('api/GiveGift')->change_user_cion_or_earnings_log($send_uid,$result['small_prize_amount'],$room_id,1,58,'参与幸运币活动获得'.$beilv.'倍');
$wallet_update = model('api/UserWallet')->change_user_earnings_log($send_uid,$result['small_prize_amount'],$room_id,58,'参与幸运币活动获得'.$beilv.'倍');
if(!$wallet_update){
return ['code' => 0, 'msg' => '流水记录失败', 'data' => null];
}

View File

@@ -577,7 +577,7 @@ class Room extends Model
return ['code' => 0, 'msg' => '房间不存在了', 'data' => ''];
}
$black = db::name('vs_room_black')->where(['room_id' => $room_id, 'black_id' => $user_id])->find();
$black = db::name('vs_room_black')->where(['room_id' => $room_id, 'black_id' => $user_id])->order('id desc')->find();
//判断用户是被拉入黑名单
if (isset($black) && $black['type'] == 2) {
return ['code' => 0, 'msg' => '您被拉入黑名单,请联系房主', 'data' => ''];
@@ -1912,7 +1912,7 @@ class Room extends Model
}
//房间送礼
//房间送礼【1.6废弃】
public function room_gift($uid, $to_uid, $gift_id, $gift_num,$type, $room_id, $pit_number, $heart_id,$give_gift_ext="")
{
$label_type = model('Room')->get_room_label($room_id);
@@ -1954,6 +1954,7 @@ class Room extends Model
}
}
//背包礼物一键全清
public function room_gift_all_clear($uid, $room_id, $user_id,$heart_id,$auction_id = 0)
{
@@ -1965,14 +1966,14 @@ class Room extends Model
if($auction_id){//竞拍
model('RoomAuction')->room_auction_join($auction_id,$uid,$v['gid'],$v['num'],2);
}else{
$this->room_gift($uid, $user_id, $v['gid'], $v['num'],2,$room_id, 0,$heart_id);
model('api/SendGift')->send_gift($uid, $user_id, $v['gid'], $v['num'],2,$room_id,0,$heart_id);
}
}
return ['code' => 1, 'msg' => '成功', 'data' => null];
}
//房间在线列表
//房间在线列表【1.6废弃】
public function room_online_lists($room_id, $page, $limit)
{
$lists['on_pit'] = [];
@@ -2093,7 +2094,7 @@ class Room extends Model
}
//房间在线列表
//房间在线列表【1.6废弃】
public function room_online_list1($room_id, $page, $limit)
{
if (!$room_id) {
@@ -2885,7 +2886,7 @@ class Room extends Model
}
//房间的类型
//房间的类型(同意上麦和退出房间 在使用 ,其他已经修改了)
public function get_room_label($room_id)
{
$room_info = db::name('vs_room')->where(['id' => $room_id])->field('id,label_id,type_id')->find();
@@ -2911,7 +2912,7 @@ class Room extends Model
}
//房间信息
//房间信息【1.6废弃】
public function room_infos($user_id, $room_id)
{
if(!$room_id){
@@ -3931,9 +3932,6 @@ class Room extends Model
}
//用户重连
//用户在房间内切后台保留机制

View File

@@ -110,7 +110,7 @@ class RoomAuction extends Model
//参与竞拍
public function room_auction_join($auction_id,$user_id,$gift_id,$num,$type,$ext=[])
public function room_auction_join($auction_id,$user_id,$gift_id,$num,$type,$gift_bag_id=0)
{
if(!$auction_id){
return ['code' => 0, 'msg' => '拍卖已经结束','data' => null];
@@ -122,13 +122,13 @@ class RoomAuction extends Model
return ['code' => 0, 'msg' => '礼物ID不能为空','data' => null];
}
$auction = db::name('vs_room_auction')->where('auction_id',$auction_id)->field('room_id,gift_price,user_id,status')->find();
$gift_price = db::name('vs_gift')->where('gid',$gift_id)->value('gift_price') ?? 0;
// $gift_price = db::name('vs_gift')->where('gid',$gift_id)->value('gift_price') ?? 0;
if($user_id == $auction['user_id']){
return ['code' => 0, 'msg' => '不能参与自己的竞拍!','data' => null];
}
//走送礼流程
$ree = model('GiveGift')->give_gift($user_id,$auction['user_id'],$gift_id,$num,2,$type,$auction['room_id'],0,0,$ext);
$ree = model('api/SendGift')->send_gift($user_id,$auction['user_id'],$gift_id,$num,$type,$auction['room_id'],$gift_bag_id);
if($ree['code'] != 1){
return ['code' => $ree['code'], 'msg' => $ree['msg'],'data' => null];
}

File diff suppressed because it is too large Load Diff

View File

@@ -288,13 +288,14 @@ class UserCp extends Model
* @param $gift_id 礼物ID
* @param $room_id 房间ID
* @param $cp_zone_id Cp空间ID
* @param $gift_price 收礼总金币
*/
public function addCpLevel($from_user_id, $to_user_id, $room_id, $gift_id, $cp_zone_id, $num,$gift_price)
{
$jinbi_arr = explode(',', get_system_config_value('cp_exp_rate'));
$jinbi = $jinbi_arr[0];
$jinyan = $jinbi_arr[1];
$exp = round($gift_price * $num / $jinbi * $jinyan, 2);
$exp = round($gift_price / $jinbi * $jinyan, 2);
$yuan_exp = Db::name('user_cp_zone')->where(['id' => $cp_zone_id])->value('exp');
$zone_level = Db::name('user_cp_zone')->where(['id' => $cp_zone_id])->value('level');
$toUserNickname =db::name('user')->where(['id' => $to_user_id])->value('nickname')??'未知用户';

View File

@@ -204,4 +204,127 @@ class UserWallet extends Model
return ['code' => 0, 'msg' => '转赠失败', 'data' => null];
}
}
/*
*操作用户金币并记录日志
* @param int $user_id 用户id
* @param int $money 金币数量
* @param int $change_type 变动类型
* @param int $room_id 房间
* @param str $remarks 备注
*/
//change_type
// 1.系统调节 2.充值 3.提现 4.金币转增(送出) 5.每日任务奖励 6.充值返利 7.购买装扮
// 8.礼盒奖励 9.房间补贴 10.购买礼物 11.收礼增加收益 12.工会补贴 13.转赠金币(接收) 14.收益兑换
// 15.首充 16.天降好礼充值 17.退出工会扣款 18.房主收益 19.主持人收益 20.抢头条 21.公会长收益22.提现驳回或提现失败返还23.财富等级奖励金币领取24.删除关系扣金币,
// 25.赠送好友金币26.好友转赠所得金币27.小时榜获得金币28.新人充值好礼29.发红包钻石30.抢红包金币31.抢红包钻石32.发红包(金币),
// 33.红包剩余退回金币34-红包剩余退回钻石35-爵位购买赠送金币(金币),
//50-签约,51-签约失败退回,52-首次被签约收入53.签约师傅每日返还,54-叛徒补偿55-徒弟收礼返佣56-续约57-签到58-爆币,59-红包手续费
//资金操作
public function change_user_cion_log($user_id,$money,$room_id,$change_type,$remarks)
{
//增加用户金币类型
$in_types = [1,2,5,6,8,13,14,15,16,23,26,27,28,30,33,35,51,57,58];
//减少用户金币类型
$out_types = [4,7,10,17,20,24,25,32,50,56,59];
$user_coin = Db::name('user_wallet_coin')->where(['user_id' => $user_id])->value('coin');
if(in_array($change_type,$in_types)){
$update_coin = $user_coin + $money;
}elseif(in_array($change_type,$out_types)){
if($user_coin < $money){
return false;
}
$update_coin = $user_coin - $money;
}else{
$update_coin = $user_coin;
}
$res1 = Db::name('user_wallet_coin')->where(['user_id' => $user_id])->update(['coin' => $update_coin,'updatetime' => time()]);
if(!$res1){
return false;
}
$data = [
'user_id' => $user_id,
'room_id' => $room_id,
'coin' => $money,
'before' => $user_coin,
'after' => $user_coin - $money,
'change_type' => $change_type,
'remarks' => $remarks,
'createtime' => time()
];
$res = Db::name('user_coin_log')->insert($data);
if(!$res){
return false;
}
return true;
}
/*
*操作用户收益(钻石)并记录日志
* @param int $user_id 用户id
* @param int $money 数量
* @param int $change_type 变动类型
* @param int $room_id 房间
* @param str $remarks 备注
*/
//change_type
// 1.系统调节 2.充值 3.提现 4.金币转增(送出) 5.每日任务奖励 6.充值返利 7.购买装扮
// 8.礼盒奖励 9.房间补贴 10.购买礼物 11.收礼增加收益 12.工会补贴 13.转赠金币(接收) 14.收益兑换
// 15.首充 16.天降好礼充值 17.退出工会扣款 18.房主收益 19.主持人收益 20.抢头条 21.公会长收益22.提现驳回或提现失败返还23.财富等级奖励金币领取24.删除关系扣金币,
// 25.赠送好友金币26.好友转赠所得金币27.小时榜获得金币28.新人充值好礼29.发红包钻石30.抢红包金币31.抢红包钻石32.发红包(金币),
// 33.红包剩余退回金币34-红包剩余退回钻石35-爵位购买赠送金币(金币),
//50-签约,51-签约失败退回,52-首次被签约收入53.签约师傅每日返还,54-叛徒补偿55-徒弟收礼返佣56-续约57-签到58-爆币,59-红包手续费
//bcadd: 加法运算
//bcsub: 减法运算
//bcmul: 乘法运算
//bcdiv: 除法运算
public function change_user_earnings_log($user_id,$money,$room_id,$change_type,$remarks)
{
//增加用户钻石类型
$in_types = [9,11,12,18,19,21,22,31,34,52,54,55];
//减少用户钻石类型
$out_types = [3,14,29];
$user_earnings = Db::name('user_wallet_earnings')->where(['user_id' => $user_id])->value('earnings');
if(in_array($change_type,$in_types)){
$update_coin = bcadd($user_earnings , $money,4);
}elseif(in_array($change_type,$out_types)){
if($user_earnings < $money){
return false;
}
$update_coin = bcsub($user_earnings , $money,4);
}else{
$update_coin = $user_earnings;
}
$res1 = Db::name('user_wallet_earnings')->where(['user_id' => $user_id])->update(['earnings' => $update_coin,'updatetime' => time()]);
if(!$res1){
return false;
}
$data = [
'user_id' => $user_id,
'room_id' => $room_id,
'earnings' => $money,
'before' => $user_earnings,
'after' => $user_earnings - $money,
'change_type' => $change_type,
'remarks' => $remarks,
'createtime' => time()
];
$res = Db::name('user_earnings_log')->insert($data);
if(!$res){
return false;
}
return true;
}
}

View File

@@ -1244,16 +1244,23 @@ function handelCharge($where,$data){
}
}
//计算收益 10% 因为金币10 = 1元 收益 1钻石 = 1元
// @param $all_gift_price 礼物总价单位金币
// @param $ratio 收益比例
// @return int 收益单位钻石
// @param $ratio 收益比例
// @return float 收益(单位钻石)
//bcadd: 加法运算
//bcsub: 减法运算
//bcmul: 乘法运算
//bcdiv: 除法运算
function coin_earning($all_gift_price,$ratio){
//rmb_coin_ratio 人民币转换金币的比例
//金币转换人民币
//小数点保留4位
$result = $all_gift_price * $ratio / 100 / get_system_config_value('rmb_coin_ratio');
return round($result, 4);
//百分比转换为小数
$ratio = $ratio / 100;
//应得金币
$coin_earning = bcmul($all_gift_price, $ratio, 3);
//金币转为钻石的比例
$c_e_ratio = get_system_config_value('rmb_coin_ratio');
//转化为钻石(小数点保留4位)
return bcdiv($coin_earning, $c_e_ratio, 4);
}
/**

View File

@@ -45,7 +45,7 @@ class GiveGiftBase extends Model
{
try {
// 生成雪花ID
$data['id'] = Snowflake::generate();
// $data['id'] = Snowflake::generate();
// 设置时间
if (empty($data['createtime'])) {