Files
mier-php/application/api/model/DatingRoomGift.php

366 lines
16 KiB
PHP
Raw Permalink Normal View History

2025-08-11 10:22:05 +08:00
<?php
namespace app\api\model;
use think\Db;
use think\Model;
use think\facade\Env;
class DatingRoomGift extends Model
{
//私密续时礼物列表
public function get_privacy_room_gift_list($uid){
$map = [];
$map[] = ['a.is_delete', '=', 1];
$map[] = ['b.is_delete', '=', 1];
$map[] = ['b.is_show', '=', 1];
$list = db::name('room_privacy_gift')->alias('a')->join('yy_gift b', 'a.gid = b.gid')->field('a.gid,a.duration,b.gift_name,b.base_image,b.gift_price')->where($map)->order('b.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 send_gift($uid, $receive_uid, $rid, $prid, $gid, $num)
{
$map = [];
$map[] = ['a.gid', '=', $gid];
$map[] = ['a.is_delete', '=', 1];
$map[] = ['a.is_show', '=', 1];
$gift_info = db::name('gift')->alias('a')->join('yy_room_privacy_gift b', 'a.gid = b.gid')->field('a.*, b.duration')->where($map)->find();
if (empty($gift_info)) {
return ['code' => 201, 'msg' => '打赏礼物信息不存在', 'data' => null];
}
$gift_info['play_image'] = localpath_to_netpath($gift_info['play_image']);
$gift_info['base_image'] = localpath_to_netpath($gift_info['base_image']);
if (ceil($num) != $num) {
return ['code' => 201, 'msg' => '打赏礼物数量必须为整数', 'data' => null];
}
if ($num < 1) {
return ['code' => 201, 'msg' => '打赏礼物数量必须大于零', 'data' => null];
}
//私密小屋信息
$privacy_room = db::name('room_privacy')->find($prid);
if($privacy_room['is_use'] == 2){
return ['code' => 201, 'msg' => '该私密房间已到期', 'data' => null];
}
$user_id_data = explode(',', $privacy_room['uid_data']);
$user_id = $user_id_data[0];
$received_uid = $user_id_data[1];
if($uid == $user_id){
$receive_uid = $received_uid;
}else if($uid == $received_uid){
$receive_uid = $user_id;
}else{
return ['code' => 201, 'msg' => '参数错误', 'data' => null];
}
if(empty($rid)){
$rid = $privacy_room['rid'];
if(empty($rid)){
return ['code' => 201, 'msg' => '该私密房间已到期', 'data' => null];
}
}
$map = [];
$map[] = ['rid', '=', $rid];
$map[] = ['is_delete', '=', 1];
$room_info = db::name('room')->where($map)->find();
if (empty($room_info)) {
return ['code' => 201, 'msg' => '所处房间不存在', 'data' => null];
}
$room_owner_info = db::name('user')->where('uid', $room_info['room_owner_uid'])->find();
if ($uid == $receive_uid) {
return ['code' => 201, 'msg' => '不能给自己打赏', 'data' => null];
}
$map = [];
$map[] = ['uid', '=', $receive_uid];
$user_list = db::name('user')->field('uid,is_tester,money,integral,nick_name,base64_nick_name,head_pic,europe_key,airship')->where($map)->find();
if (empty($user_list)) {
return ['code' => 201, 'msg' => '打赏礼物对象不能为空', 'data' => null];
}
$total_send_num = $num; //赠送礼物总数量
$total_send_amount = $gift_info['gift_price'] * $num; //赠送礼物总价值
$total_time = $gift_info['duration'] * $num;
$config = get_system_config();
$now_time = time();
$user_info = db::name('user')->where('uid', $uid)->find();
if($user_info['is_teenager'] == 1){
return ['code' => 201, 'msg' => '青少年模式已开启', 'data' => null];
}
//扣款时进行用户资金是否充足判断
if ($user_info['integral'] < $total_send_amount) {
return ['code' => 201, 'msg' => '账户资金不足', 'data' => null];
}
Db::startTrans();
try {
if($user_info['is_tester'] == 2){
return ['code' => 201, 'msg' => '虚拟号无法参与', 'data' => null];
}
//计算赠送礼物总资金
$reslut = model('admin/User')->change_user_money_by_uid($uid, -$total_send_amount, 2, 4, "打赏礼物", $uid, 0, $rid);
if ($reslut['code'] == 201) {
Db::rollback();
return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null];
}
//赠送礼物增加财富值 贡献值
$reslut = model('User')->change_user_contribution_value($uid, $total_send_amount);
if ($reslut['code'] == 201) {
Db::rollback();
return ['code' => 201, 'msg' => '请重试1', 'data' => null];
}
//赠送者增加房间魅力值
$reslut = model('User')->change_user_room_contribution_value($uid, $rid, $total_send_amount);
if ($reslut['code'] == 201) {
Db::rollback();
return ['code' => 201, 'msg' => '请重试4', 'data' => null];
}
//日贡献
model('Statistics')->day_contribution($uid, $rid, $total_send_amount);
//房间礼物墙
$reslut = model('GiftWall')->room_gift_wall($rid, $gid, $total_send_num, $total_send_amount);
if($reslut['code'] == 201){
Db::rollback();
return ['code' => 201, 'msg' => '请重试5', 'data' => null];
}
//增加房间热度值
db::name('room')->where('rid', $rid)->inc('hot_value', $total_send_amount)->inc('today_hot_value', $total_send_amount)->update();
// $room_guild_info = model('Guild')->user_guild_info($room_info['room_owner_uid']);
// $guild_id = 0;
//该用户是否有公会及公会收益
// $user_guild_info = model('Guild')->user_guild_info($receive_uid);
$gift_total_price = $gift_info['gift_price'] * $num;
// $room_owner_profit = $gift_total_price * $room_owner_info['room_owner_commission'];
$room_owner_profit = 0;
$receiver_profit = $gift_total_price * 0.56;
$platform_profit = $gift_total_price - $room_owner_profit - $receiver_profit;
$data = [];
$data['uid'] = $uid;
$data['rid'] = $rid;
// $data['guild_id'] = $user_guild_info['guild_id'];
// $data['room_guild_id'] = $room_guild_info['guild_id'];
$data['room_uid'] = $room_info['room_owner_uid'];
$data['receive_uid'] = $receive_uid;
$data['gid'] = $gid;
$data['gift_name'] = $gift_info['gift_name'];
$data['gift_price'] = $gift_info['gift_price'];
$data['gift_type'] = $gift_info['type'];
$data['gift_num'] = $num;
$data['gift_total_price'] = $gift_total_price;
$data['platform_profit'] = $platform_profit;
$data['receiver_profit'] = $receiver_profit;
$data['room_owner_profit'] = $room_owner_profit;
$data['gift_from_type'] = 1;
$data['is_tester'] = $user_info['is_tester'];
$data['add_time'] = $now_time;
$data['update_time'] = $now_time;
$sid = db::name('user_send_gift')->insertGetId($data);
if (empty($sid)) {
Db::rollback();
return ['code' => 201, 'msg' => "请重试3", 'data' => null];
}
//发送数据开始
$message_data_temp = [
'from_uid' => $uid,
'to_uid' => $receive_uid,
'gift_name' => $gift_info['gift_name'],
'gift_price' => $gift_info['gift_price'],
'gift_num' => $num,
'rid' => $rid,
];
$message_data[] = $message_data_temp;
//增加厅主收益记录
if ($room_owner_profit > 0) {
$change_value = $room_owner_profit / $config['exchange_rate'];
$reslut = model('admin/User')->change_user_money_by_uid($room_info['room_owner_uid'], $change_value, 1, 7, "打赏厅主流水收益", $uid, $sid, $rid);
if ($reslut['code'] == 201) {
Db::rollback();
return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null];
}
}
//礼物接收者收益
if ($receiver_profit > 0) {
$change_value = $receiver_profit / $config['exchange_rate'];
$reslut = model('admin/User')->change_user_money_by_user_info($user_list, $change_value, 1, 6, "礼物收入", $uid, $sid, $rid);
if ($reslut['code'] == 201) {
Db::rollback();
return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null];
}
}
//收礼物增加魅力值
$reslut = model('User')->change_user_charm_value($receive_uid, $gift_total_price);
if ($reslut['code'] == 201) {
Db::rollback();
return ['code' => 201, 'msg' => '请重试4', 'data' => null];
}
//接受者增加房间魅力值
$reslut = model('User')->change_user_room_charm_value($receive_uid, $rid, $gift_total_price, $uid);
if ($reslut['code'] == 201) {
Db::rollback();
return ['code' => 201, 'msg' => '请重试4', 'data' => null];
}
//收礼物墙
$reslut = model('GiftWall')->user_receive_gift_wall($receive_uid, $gid, $num, $uid);
if($reslut['code'] == 201){
Db::rollback();
return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null];
}
//增加房间时长
$reslut = db::name('room_privacy')->where('prid', $prid)->inc('end_time', $total_time)->update(['update_time' => $now_time]);
if(!$reslut){
Db::rollback();
return ['code' => 201, 'msg' => '请重试4', 'data' => null];
}
//续时记录
$insert = [];
$insert['prid'] = $prid;
$insert['uid'] = $uid;
$insert['receive_uid'] = $receive_uid;
$insert['gid'] = $gid;
$insert['duration'] = $total_time;
$insert['add_time'] = time();
$reslut = db::name('user_room_privacy_time_log')->insert($insert);
if(!$reslut){
Db::rollback();
return ['code' => 201, 'msg' => '请重试4', 'data' => null];
}
//发送开始
if($message_data) {
model('api/AsyncPushMessage')->store_message($message_data, 2);
}
Db::commit();
$room_privacy_time = db::name('room_privacy')->where('prid', $prid)->value('end_time');
$surplus_time = $room_privacy_time - time();
if($surplus_time < 0){
$surplus_time = 0;
}
$push_room_time = [];
$push_room_time['surplus_time'] = $surplus_time;
$push_room_time['send_user_info']['uid'] = $uid;
$push_room_time['send_user_info']['head_pic'] = localpath_to_netpath($user_info['head_pic']);
$push_room_time['send_user_info']['nick_name'] = mb_convert_encoding(base64_decode($user_info['base64_nick_name']), 'UTF-8', 'UTF-8');
$push_room_time['recived_user_info']['uid'] = $receive_uid;
$push_room_time['recived_user_info']['head_pic'] = localpath_to_netpath($user_list['head_pic']);
$push_room_time['recived_user_info']['nick_name'] = mb_convert_encoding(base64_decode($user_list['base64_nick_name']), 'UTF-8', 'UTF-8');
$push_room_time['gift_price'] = $gift_info['gift_price'];
$push_room_time['gift_name'] = $gift_info['gift_name'];
$push_room_time['play_image'] = $gift_info['play_image'];
$push_room_time['gift_type'] = $gift_info['gift_type'];
$push_room_time['base_image'] = $gift_info['base_image'];
$push_room_time['num'] = $num;
if(!empty($uid)){
$pust_data = [];
$pust_data['code'] = 352;
$pust_data['msg'] = '更新私密小屋时间';
$pust_data['data'] = $push_room_time;
model('api/WebSocketPush')->send_to_one($uid, $pust_data);
// dump($reslut);
}
if(!empty($receive_uid)){
$pust_data = [];
$pust_data['code'] = 352;
$pust_data['msg'] = '更新私密小屋时间';
$pust_data['data'] = $push_room_time;
model('api/WebSocketPush')->send_to_one($receive_uid, $pust_data);
// dump($reslut);
}
// model('Room')->push_room_micro_data($rid); //推送最新房间麦位信息
// $user_decorate_info = model('api/room')->get_room_user_vip($uid, 0);
// $room_push_data = [];
// $server_push_data = [];
// $gift_list = [];
// $gift_list[] = $gift_info;
// foreach ($user_list as $k => $v) {
// foreach ($gift_list as $m => $n) {
// $ls_data = [];
// $ls_data['send_user_info']['uid'] = $uid;
// $ls_data['send_user_info']['head_pic'] = localpath_to_netpath($user_info['head_pic']);
// $ls_data['send_user_info']['nick_name'] = mb_convert_encoding(base64_decode($user_info['base64_nick_name']), 'UTF-8', 'UTF-8');
// $ls_data['recived_user_info']['uid'] = $v['uid'];
// $ls_data['recived_user_info']['head_pic'] = localpath_to_netpath($v['head_pic']);
// $ls_data['recived_user_info']['nick_name'] = mb_convert_encoding(base64_decode($v['base64_nick_name']), 'UTF-8', 'UTF-8');
// $ls_data['lwtp_base_image'] = $user_decorate_info['data']['lwtp_base_image'];
// $ls_data['gift_price'] = $n['gift_price'];
// $ls_data['gift_name'] = $n['gift_name'];
// $ls_data['play_image'] = $n['play_image'];
// $ls_data['base_image'] = $n['base_image'];
// $ls_data['gift_type'] = $n['gift_type'];
// $ls_data['num'] = $num;
// $ls_data['is_public_screen'] = $n['is_public_screen'];
// $ls_data['is_public_server'] = $n['is_public_server'];
// if ($ls_data['is_public_server'] == 1) {
// $server_push_data[] = $ls_data;
// }
// $room_push_data[] = $ls_data;
// }
// }
// if (!empty($server_push_data)) {
// $pust_data = [];
// $pust_data['code'] = 306;
// $pust_data['msg'] = '打赏礼物';
// // $pust_data['data'] = $server_push_data;
// $pust_data['data']['room_info']['rid'] = $room_info['rid'];
// $pust_data['data']['room_info']['room_name'] = mb_convert_encoding(base64_decode($room_info['base64_room_name']), 'UTF-8', 'UTF-8');
// $pust_data['data']['gift_list'] = $server_push_data;
// model('api/WebSocketPush')->send_to_all($pust_data);
// }
// if (!empty($room_push_data)) {
// $pust_data = [];
// $pust_data['code'] = 302;
// $pust_data['msg'] = '打赏礼物';
// $pust_data['data'] = $room_push_data;
// model('api/WebSocketPush')->send_to_group($room_info['rid'], $pust_data);
// }
return ['code' => 200, 'msg' => "打赏成功", 'data' => null];
} catch (\Exception $e) {
dump($e);
//回滚事务
Db::rollback();
return ['code' => 201, 'msg' => "请重试5", 'data' => null];
}
}
}