10) { return ['code' => 201, 'msg' => '全麦盲盒赠送不能超过10个', 'data' => null]; } if (ceil($open_num) != $open_num) { return ['code' => 201, 'msg' => '开奖次数参数非法', 'data' => null]; } $config = get_system_config(); $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]; } //房主id $room_owner_uid = $room_info['room_owner_uid']; $room_owner_info = db::name('user')->where('uid', $room_info['room_owner_uid'])->find(); //该房间是否加入公会 $guild_id = 0; $map = []; $map[] = ['uid', '=', $room_info['room_owner_uid']]; $map[] = ['status', '=', 1]; $map[] = ['is_delete', '=', 1]; $guild_info = db::name('user_guild')->where($map)->find(); if($guild_info){ $guild_id = $guild_info['guild_id']; } if(count($recived_uid) > 1){ // return ['code' => 201, 'msg' => '打赏礼物对象不能为多个', 'data' => null]; } $recived_uid_arr = $recived_uid; if(in_array($uid, $recived_uid_arr)) { // return ['code' => 201, 'msg' => '不能给自己打赏', 'data' => null]; } $map = []; $map[] = ['uid', 'in', $recived_uid_arr]; $recived_user_info = db::name('user')->field('uid,is_tester,money,integral,nick_name,base64_nick_name,head_pic') ->where($map)->select(); if (empty($recived_user_info)) { return ['code' => 201, 'msg' => '打赏礼物对象不能为空', 'data' => null]; } if(count($recived_uid_arr) != count($recived_user_info)) { return ['code' => 201, 'msg' => '打赏礼物对象不能为空', 'data' => null]; } $received_num = count($recived_uid_arr); // dump($recived_uid);exit; $redis = connectionRedis(); $user_gift_id_list = []; //用户抽中礼物id集合 $user_gift_id_redis_list = []; //用户抽中redis礼物id集合 $user_win_gift_data = []; //抽中礼物列表 $box_log_data = []; //抽中礼物期数数据 $box_type_data = []; //宝箱类型配置信息 $user_pay_amount = 0; //用户支付总额 $user_win_gift_total_value = 0; //抽中礼物总价值 $surplus_user_money = 0; //用户剩余资金 $now_time = time(); $tid = ''; $user_info = db::name('user')->find($uid); //获取用户信息 if(!$user_info){ return ['code' => 201, 'msg' => '用户信息不存在', 'data' => null]; } //用户消费所对应的宝箱类型 if ($type == 32) {//琉璃魔盒 $tid = 101; // $gift_level_type = db::name('gift')->where('gid',31)->value('level_type'); } else if($type == 33) {//琥珀魔盒 $tid = 102; // $gift_level_type = db::name('gift')->where('gid',32)->value('level_type'); } else if($type == 34) {//钻石魔盒 $tid = 103; // $gift_level_type = db::name('gift')->where('gid',33)->value('level_type'); } //判断是否是虚拟用户 if($user_info['is_tester']==2){ return ['code' => 201, 'msg' => '虚拟用户无法购买', 'data' => null]; } // dump($tid);exit; //该奖池是否配置礼物 $map = []; $map[] = ['tid', '=', $tid]; $is_box_config = db('box_config')->where($map)->select(); // dump($is_box_config);die; if(!$is_box_config){ return ['code' => 201, 'msg' => '盲盒数量不足', 'data' => null]; } //获取宝箱类型配置信息 $box_type_list = db::name('box_type')->field('tid,open_price,open_status,show_name')->cache(10)->select(); foreach ($box_type_list as $k => &$v) { $box_type_data[$v['tid']] = $v; } if (empty($box_type_data[$tid])) { return ['code' => 201, 'msg' => '开奖类型非法参数', 'data' => null]; } if ($box_type_data[$tid]['open_status'] != 1) { return ['code' => 201, 'msg' => '该开奖类型暂时已关闭', 'data' => null]; } $unique_key = $tid; $path = './lock/lock_blind_box' . $unique_key . '.txt'; $fh = fopen($path, 'w'); flock($fh, LOCK_EX); $need_open_num = $open_num * $received_num; $user_pay_amount = $need_open_num * $box_type_data[$tid]['open_price']; $keyname = "box:list:tid:".$tid; $len = $redis->llen($keyname); if ($keyname == "box:list:tid:") { return ['code' => 201, 'msg' => '开奖类型非法参数', 'data' => null]; } if($len < $need_open_num) { $this->file_unlock($fh); return ['code' => 201, 'msg' => '请重试', 'data' => null]; } //补礼物用户id $give_user_id_arr = []; // 启动事务 Db::startTrans(); try { //获取用户必中信息 (每次补发一个) $map = []; $map[] = ['uid', '=', $uid]; $map[] = ['tid', '=', $tid]; $map[] = ['give_status', '=', 1]; $box_give_gift_info = db::name('box_give_gift')->where($map)->order('id','asc')->find(); if($box_give_gift_info) { $key = mt_rand(0, (count($recived_uid_arr) - 1)); $data = [ 'uid' => $recived_uid_arr[$key], 'bl_id' => 0, 'gid' => $val['gid'], ]; $user_gift_id_list[] = $data; $give_user_id_arr[$val['id']] = $data['uid']; } $give_user_id_arrs = $give_user_id_arr; //补发礼物领取id $give_box_gift_id = []; //获取待核销必中礼物数据 $map = []; $map[] = ['tid', '=', $tid]; $map[] = ['give_status', '=', 2]; $map[] = ['deduction_status', '=', 1]; $box_un_deduction_give_gift_list = db::name('box_give_gift')->where($map)->order('id desc')->column('id', 'gid'); //每种礼物只核销第一个 //待核销数据id $un_deduction_give_gift_id = []; //更新开奖记录条件 $update_user_box_log = []; for($i = 0; $i < $open_num; $i++) { foreach($recived_uid_arr as $val) { if(in_array($val, $give_user_id_arrs)) { $keys = array_search($val, $give_user_id_arrs); $give_box_gift_id[] = $keys; unset($give_user_id_arrs[$keys]); } else { $gift_data = $redis->blpop($keyname, 2); //1s 超时 if (empty($gift_data)) { $this->file_unlock($fh); return ['code' => 201, 'msg' => '', 'data' => null]; } else { //获取是否有待核销必中 $gift_data_data = explode('-', $gift_data[1]); $bl_id = $gift_data_data[0]; $gid = $gift_data_data[1]; if (!empty($box_un_deduction_give_gift_list[$gid])) { $id = $box_un_deduction_give_gift_list[$gid]; unset($box_un_deduction_give_gift_list[$gid]); $un_deduction_give_gift_id[] = $id; $data = []; $data['bl_id'] = $bl_id; $data['gid'] = $gid; $data['uid'] = $val; $user_gift_id_redis_list[] = $data; //开宝箱记录表更新 $update_user_box_log_item = []; $map = []; $map[] = ['tid', '=', $tid]; $map[] = ['gid', '=', $gid]; $map[] = ['num', '=', 1]; $map[] = ['bl_id', '=', 0]; $update_user_box_log_item['map'] = $map; $data = []; $data['bl_id'] = $bl_id; $data['update_time'] = time(); $update_user_box_log_item['data'] = $data; $update_user_box_log[] = $update_user_box_log_item; //重新从队列获取一个礼物信息 $gift_data = $redis->blpop($keyname, 2); //1s 超时 if (empty($gift_data)) { $this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list); $this->file_unlock($fh); return ['code' => 201, 'msg' => '盲盒数量不足', 'data' => null]; } $gift_data_data = explode('-', $gift_data[1]); $bl_id = $gift_data_data[0]; $gid = $gift_data_data[1]; } $data = []; $data['bl_id'] = $bl_id; $data['gid'] = $gid; $data['uid'] = $val; $user_gift_id_redis_list[] = $data; $user_gift_id_list[] = $data; } } } } if (count($user_gift_id_list) != (count($recived_uid_arr) * $open_num)) { $this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list); $this->file_unlock($fh); return ['code' => 201, 'msg' => '盲盒数量不足', 'data' => null]; } //取出所有礼物数据 $gift_list = db::name('gift')->field('gid,gift_name,gift_price,base_image,play_image,gift_type,is_special')->cache(10)->select(); $gift_list_data = []; foreach ($gift_list as $k => &$v) { $v['base_image'] = localpath_to_netpath($v['base_image']); $v['play_image'] = localpath_to_netpath($v['play_image']); $gift_list_data[$v['gid']] = $v; } //获取宝箱礼物配置信息 $box_config_list = db::name('box_config')->field('gid,tid,is_public_screen,is_public_server')->cache(10)->select(); $box_config_list_data = []; foreach ($box_config_list as $k => $v) { $box_config_list_data[$v['gid']][$v['tid']] = $v; } //用户获取礼物价值 $user_win_gift_price_by_uid = []; //整理用户抽中礼物数量 foreach ($user_gift_id_list as $k => $v) { if (empty($gift_list_data[$v['gid']])) { $this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list); $this->file_unlock($fh); return ['code' => 201, 'msg' => '礼物信息不存在', 'data' => null]; } if (empty($box_config_list_data[$v['gid']])) { $this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list); $this->file_unlock($fh); return ['code' => 201, 'msg' => '宝箱礼物信息不存在', 'data' => null]; } if (empty($user_win_gift_data[$v['gid']])) { $user_win_gift_data[$v['gid']] = $gift_list_data[$v['gid']]; $user_win_gift_data[$v['gid']]['open_num'] = 1; } else { $user_win_gift_data[$v['gid']]['open_num']++; } $user_win_gift_data[$v['gid']]['bl_id'] = $v['bl_id']; $user_win_gift_data[$v['gid']]['is_public_screen'] = $box_config_list_data[$v['gid']][$tid]['is_public_screen']; $user_win_gift_data[$v['gid']]['is_public_server'] = $box_config_list_data[$v['gid']][$tid]['is_public_server']; if (empty($box_log_data[$v['bl_id']])) { $box_log_data[$v['bl_id']]['open_num'] = 1; $box_log_data[$v['bl_id']]['open_gift_value'] = $gift_list_data[$v['gid']]['gift_price']; } else { $box_log_data[$v['bl_id']]['open_num']++; $box_log_data[$v['bl_id']]['open_gift_value'] += $gift_list_data[$v['gid']]['gift_price']; } $user_win_gift_total_value += $gift_list_data[$v['gid']]['gift_price']; $unique_key = $v['uid'] . '_' . $v['gid']; if(!isset($user_win_gift_price_by_uid[$unique_key]['num'])) { $user_win_gift_price_by_uid[$unique_key]['num'] = 1; $user_win_gift_price_by_uid[$unique_key]['gift_price'] = $gift_list_data[$v['gid']]['gift_price']; $user_win_gift_price_by_uid[$unique_key]['uid'] = $v['uid']; $user_win_gift_price_by_uid[$unique_key]['gid'] = $v['gid']; // $user_win_gift_price_by_uid[$unique_key]['is_special'] = $gift_list_data[$v['gid']]['is_special']; $user_win_gift_price_by_uid[$unique_key]['gift_name'] = $gift_list_data[$v['gid']]['gift_name']; $user_win_gift_price_by_uid[$unique_key]['base_image'] = $gift_list_data[$v['gid']]['base_image']; $user_win_gift_price_by_uid[$unique_key]['play_image'] = $gift_list_data[$v['gid']]['play_image']; $user_win_gift_price_by_uid[$unique_key]['gift_type'] = $gift_list_data[$v['gid']]['gift_type']; $user_win_gift_price_by_uid[$unique_key]['is_public_screen'] = $box_config_list_data[$v['gid']][$tid]['is_public_screen']; $user_win_gift_price_by_uid[$unique_key]['is_public_server'] = $box_config_list_data[$v['gid']][$tid]['is_public_server']; } else { $user_win_gift_price_by_uid[$unique_key]['num']++; } } if($user_info['is_tester'] == 1){ //扣除账户积分 $reslut = model('admin/User')->change_user_money_by_user_info($user_info, -$user_pay_amount, 2, 16, "开盲盒送礼物", $user_info['uid'], 0); if ($reslut['code'] != 200) { Db::rollback(); $this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list); $this->file_unlock($fh); return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null]; } $surplus_user_money = $user_info['integral'] - $user_pay_amount; } foreach ($box_log_data as $k => $v) { if ($k != 0) { $map = []; $map[] = ['bl_id', '=', $k]; $reslut = db::name('box_log')->where($map)->inc('open_num', $v['open_num'])->inc('open_gift_value', $v['open_gift_value'])->update(); if (!$reslut) { Db::rollback(); $this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list); $this->file_unlock($fh); return ['code' => 201, 'msg' => '请重试', 'data' => null]; } } } //用户必中礼物状态更新 if (!empty($box_give_gift_info)) { $map = []; $map[] = ['id', '=', $box_give_gift_info['id']]; $data = []; $data['give_time'] = $now_time; $data['give_status'] = 2; $data['update_time'] = $now_time; $reslut = db::name('box_give_gift')->where($map)->update($data); if (!$reslut) { Db::rollback(); $this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list); $this->file_unlock($fh); return ['code' => 201, 'msg' => '请重试', 'data' => null]; } } //添加用户开宝箱日志 可能存在2期奖情况 特殊处理 $user_box_data_by_bl_id = []; foreach ($user_gift_id_list as $k => $v) { if (empty($user_box_data_by_bl_id[$v['bl_id']][$v['gid']])) { $user_box_data_by_bl_id[$v['bl_id']][$v['gid']]['bl_id'] = $v['bl_id']; $user_box_data_by_bl_id[$v['bl_id']][$v['gid']]['gid'] = $v['gid']; $user_box_data_by_bl_id[$v['bl_id']][$v['gid']]['open_num'] = 1; } else { $user_box_data_by_bl_id[$v['bl_id']][$v['gid']]['open_num']++; } } foreach ($user_box_data_by_bl_id as $k => $v) { $insert_user_box_data = []; foreach ($v as $m => $n) { $gift_info = $gift_list_data[$n['gid']]; $data = []; $data['uid'] = $user_info['uid']; $data['rid'] = $rid; $data['tid'] = $tid; $data['bl_id'] = $n['bl_id']; $data['gid'] = $n['gid']; $data['num'] = $n['open_num']; $data['gift_price'] = $gift_info['gift_price']; $data['total_price'] = $n['open_num'] * $gift_info['gift_price']; $data['total_open_num'] = $open_num; $data['add_time'] = $now_time; $data['update_time'] = $now_time; // $data['last_login_device'] = $user_info['last_login_device']; $insert_user_box_data[] = $data; } $reslut = db::name('user_box_log')->insertAll($insert_user_box_data); if (!$reslut) { Db::rollback(); $this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list); $this->file_unlock($fh); return ['code' => 201, 'msg' => '请重试', 'data' => null]; } } //添加用户开宝箱统计数据 $time = strtotime(date("Y-m-d")); $box_type = 0; $map = []; $map[] = ['uid', '=', $user_info['uid']]; $map[] = ['box_type', '=', $tid]; $box_type = $tid; $map[] = ['add_time', '>', $time]; $user_box_count_info = db::name('user_box_count')->where($map)->find(); if (!empty($user_box_count_info)) { $rate = 0; //支收比 $rate = round(($user_win_gift_total_value + $user_box_count_info['in_amount']) / ($user_box_count_info['out_amount'] + $user_pay_amount), 4); $map = []; $map[] = ['sid', '=', $user_box_count_info['sid']]; // $map[] = ['uid', '=', $user_info['uid']]; // $map[] = ['box_type', '=', $box_type]; $data = []; $data['rate'] = $rate; $data['update_time'] = $now_time; $profit = $user_win_gift_total_value - $user_pay_amount; $reslut = db::name('user_box_count')->where($map)->inc('out_amount', $user_pay_amount)->inc('in_amount', $user_win_gift_total_value)->inc('profit', $profit)->update($data); if (!$reslut) { Db::rollback(); $this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list); $this->file_unlock($fh); return ['code' => 201, 'msg' => '请重试', 'data' => null]; } } else { $rate = round($user_win_gift_total_value / $user_pay_amount, 4); $profit = $user_win_gift_total_value - $user_pay_amount; $data = []; $data['uid'] = $user_info['uid']; $data['out_amount'] = $user_pay_amount; $data['in_amount'] = $user_win_gift_total_value; $data['profit'] = $profit; $data['rate'] = $rate; $data['box_type'] = $box_type; $data['add_time'] = $now_time; $data['update_time'] = $now_time; $reslut = db::name('user_box_count')->insert($data); if (!$reslut) { Db::rollback(); $this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list); $this->file_unlock($fh); return ['code' => 201, 'msg' => '请重试', 'data' => null]; } } //礼物放入背包 $insert_user_gift_pack_log_data = []; foreach ($user_win_gift_data as $k => $v) { $map = []; $map[] = ['uid', '=', $user_info['uid']]; $map[] = ['gid', '=', $v['gid']]; $data = []; $data['gid'] = $v['gid']; $data['update_time'] = $now_time; $reslut = db::name('user_gift_pack')->where($map)->inc('num', $v['open_num'])->inc('total_num', $v['open_num'])->update($data); if (!$reslut) { $data = []; $data['uid'] = $user_info['uid']; $data['gid'] = $v['gid']; $data['total_num'] = $v['open_num']; $data['num'] = $v['open_num']; $data['is_tester'] = $user_info['is_tester']; $data['add_time'] = $now_time; $data['update_time'] = $now_time; $reslut = db::name('user_gift_pack')->insert($data); if (!$reslut) { Db::rollback(); $this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list); $this->file_unlock($fh); return ['code' => 201, 'msg' => '请重试', 'data' => null]; } } $data = []; $data['uid'] = $user_info['uid']; $data['type'] = 2; $data['bl_id'] = $v['bl_id']; $data['gid'] = $v['gid']; $data['gift_price'] = $gift_list_data[$v['gid']]['gift_price']; $data['change_num'] = $v['open_num']; $data['total_gift_price'] = $gift_list_data[$v['gid']]['gift_price'] * $v['open_num']; $data['after_num'] = 0; $data['is_tester'] = $user_info['is_tester']; $data['remarks'] = "开盲盒获得"; $data['add_time'] = $now_time; $data['update_time'] = $now_time; $insert_user_gift_pack_log_data[] = $data; } if (!empty($insert_user_gift_pack_log_data)) { $reslut = db::name('user_gift_pack_log')->insertAll($insert_user_gift_pack_log_data); if (!$reslut) { Db::rollback(); $this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list); $this->file_unlock($fh); return ['code' => 201, 'msg' => '请重试', 'data' => null]; } } // dump($user_win_gift_data);exit; //礼物信息 $user_win_gift_data 扣除背包礼物 $gift_total_price = 0; foreach($user_win_gift_data as $a => $b){ //扣除背包礼物 $reslut = model('UserGiftPack')->change_user_gift_pack($uid, $b['gid'], -$b['open_num'], 3, '开盲盒,背包打赏礼物'); if ($reslut['code'] == 201) { Db::rollback(); $this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list); $this->file_unlock($fh); return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null]; } $gift_total_price += $b['open_num'] * $b['gift_price']; } //赠送礼物增加财富值 贡献值 $reslut = model('User')->change_user_contribution_value($uid, $gift_total_price); if ($reslut['code'] == 201) { Db::rollback(); $this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list); $this->file_unlock($fh); return ['code' => 201, 'msg' => '请重试1', 'data' => null]; } //赠送者增加房间魅力值 $reslut = model('User')->change_user_room_contribution_value($uid, $rid, $gift_total_price); if ($reslut['code'] == 201) { Db::rollback(); $this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list); $this->file_unlock($fh); return ['code' => 201, 'msg' => '请重试4', 'data' => null]; } //增加房间热度值 $when = []; $when[] = ['rid', '=', $rid]; db::name('room')->where($when)->setInc('hot_value', $gift_total_price); // db::name('room')->where($when)->setInc('today_hot_value', $gift_total_price); //礼物是否参加PK计算 //判断该礼物是否参加PK $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['is_close', '=', 1]; $map[] = ['over_time', '>', time()]; $room_pk_info = db::name('room_pk')->where($map)->find(); $total_total_gift_price = 0; foreach ($user_win_gift_price_by_uid as $k => $v) { $this_gift_total_price = $v['gift_price'] * $v['num']; $total_total_gift_price += $this_gift_total_price; $this_room_owner_profit = $this_gift_total_price * $room_owner_info['room_owner_commission']; //房主厅主收益 $this_receiver_profit = $this_gift_total_price * 0.7;//接收人收益 $this_platform_profit = $this_gift_total_price - $this_room_owner_profit - $this_receiver_profit;//平台收益 $data = []; $data['uid'] = $uid; $data['rid'] = $rid; $data['guild_id'] = $guild_id; $data['room_uid'] = $room_info['room_owner_uid']; $data['receive_uid'] = $v['uid']; $data['gid'] = $v['gid']; $data['gift_name'] = $v['gift_name']; $data['gift_price'] = $v['gift_price']; $data['gift_num'] = $v['num']; $data['gift_total_price'] = $this_gift_total_price; $data['platform_profit'] = $this_platform_profit; $data['receiver_profit'] = $this_receiver_profit; $data['room_owner_profit'] = $this_room_owner_profit; $data['gift_from_type'] = 2; //背包 $data['is_tester'] = $user_info['is_tester']; // $data['micro_id'] = $micro_id; // $data['room_user_profit'] = $room_user_profit; $data['gift_level_type'] = 0; $data['add_time'] = $now_time; $data['update_time'] = $now_time; // $data['room_type_tid'] = $room_type_tid; $sid = db::name('user_send_gift')->insertGetId($data); if (empty($sid)) { Db::rollback(); $this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list); $this->file_unlock($fh); return ['code' => 201, 'msg' => "请重试3", 'data' => null]; } //增加厅主收益记录 if ($this_room_owner_profit > 0) { // $change_value = $this_room_owner_profit / $config['exchange_rate']; $change_value = $this_room_owner_profit; $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(); $this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list); $this->file_unlock($fh); return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null]; } //增加用户厅主收益统计 $reslut = model('User')->change_user_room_profit($room_info['room_owner_uid'],$rid, $change_value); if ($reslut['code'] == 201) { Db::rollback(); $this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list); $this->file_unlock($fh); return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null]; } } //礼物接收者收益 if ($this_receiver_profit > 0) { // $change_value = $this_receiver_profit / $config['exchange_rate']; $change_value = $this_receiver_profit; $reslut = model('admin/User')->change_user_money_by_uid($v['uid'], $change_value, 1, 6, "礼物收入", $uid, $sid, $rid); if ($reslut['code'] == 201) { Db::rollback(); $this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list); $this->file_unlock($fh); return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null]; } } // if($uid == $room_owner_uid && $v['uid'] == $room_owner_uid) { // //增加厅主收益记录 // if ($this_room_owner_profit > 0) { // // $change_value = $room_owner_profit / $config['exchange_rate']; // $change_value = round($this_room_owner_profit, 2); // $reslut = model('admin/User')->change_user_money_by_uid($room_info['room_owner_uid'], $change_value, 2, 41, "自刷礼物获得钻石(房主)", $uid, $sid, $rid); // if ($reslut['code'] == 201) { // Db::rollback(); // return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null]; // } // //增加用户厅主收益统计 // $reslut = model('User')->change_user_room_profit_integral($room_info['room_owner_uid'],$rid, $change_value); // if ($reslut['code'] == 201) { // Db::rollback(); // return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null]; // } // } // } else { // //增加厅主收益记录 // if ($this_room_owner_profit > 0) { // $change_value = $this_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]; // } // //增加用户厅主收益统计 // $reslut = model('User')->change_user_room_profit($room_info['room_owner_uid'],$rid, $change_value); // if ($reslut['code'] == 201) { // Db::rollback(); // return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null]; // } // } // } // if($uid == $v['uid']) { // if ($this_receiver_profit > 0) { // // $change_value = $receiver_profit / $config['exchange_rate']; // $change_value = round($this_receiver_profit, 2); // $reslut = model('admin/User')->change_user_money_by_uid($v['uid'], $change_value, 2, 42, "自刷礼物获得钻石", $uid, $sid, $rid); // if ($reslut['code'] == 201) { // Db::rollback(); // return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null]; // } // } // } else { // //礼物接收者收益 // if ($this_receiver_profit > 0) { // $change_value = $this_receiver_profit / $config['exchange_rate']; // $reslut = model('admin/User')->change_user_money_by_uid($v['uid'], $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($v['uid'], $this_gift_total_price); if ($reslut['code'] == 201) { Db::rollback(); $this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list); $this->file_unlock($fh); return ['code' => 201, 'msg' => '请重试4', 'data' => null]; } //接受者增加房间魅力值 $reslut = model('User')->change_user_room_charm_value($v['uid'], $rid, $this_gift_total_price); if ($reslut['code'] == 201) { Db::rollback(); $this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list); $this->file_unlock($fh); return ['code' => 201, 'msg' => '请重试4', 'data' => null]; } } //公会流水 if($guild_id > 0 && $total_total_gift_price > 0) { $result = model('GuildWeekAmount')->add_data($guild_id, $total_total_gift_price, $room_info['room_owner_uid']); if($result['code'] == 201) { Db::rollback(); return ['code' => 201, 'msg' => '请重试5', 'data' => null]; } } // $user_list = []; $user_list = []; foreach($recived_user_info as $val) { $user_list[$val['uid']] = $val; } // dump($user_list);die; // 提交事务 Db::commit(); $this->file_unlock($fh); if($is_on_micro == 1) { model('Room')->push_room_micro_data($rid); //推送最新房间麦位信息 } //新增 $charm_user_id = $recived_uid_arr; $charm_user_id[] = $uid; //推送赠送礼物信息 $room_push_data = []; $server_push_data = []; // dump($user_list);die; $send_user_info = [ 'uid' => $uid, 'nick_name' => mb_convert_encoding(base64_decode($user_info['base64_nick_name']), 'UTF-8', 'UTF-8'), 'head_pic' => localpath_to_netpath($user_info['head_pic']), ]; $box_name = db::name('box_type')->where('tid',$tid)->value('show_name'); foreach($user_win_gift_price_by_uid as $key => $val) { $key_arr = explode('_', $key); $ls_data = []; $ls_data['send_user_info'] = $send_user_info; $receive_uid = $key_arr[0]; $box_gid = $key_arr[1]; $ls_data['recived_user_info']['uid'] = $val['uid']; $ls_data['recived_user_info']['nick_name'] = mb_convert_encoding(base64_decode($user_list[$val['uid']]['base64_nick_name']), 'UTF-8', 'UTF-8'); $ls_data['recived_user_info']['head_pic'] = localpath_to_netpath($user_list[$val['uid']]['head_pic']); $ls_data['gift_name'] = $val['gift_name']; $ls_data['play_image'] = $val['play_image']; $ls_data['base_image'] = $val['base_image']; $ls_data['gift_type'] = $val['gift_type']; $ls_data['gift_price'] = $val['gift_price']; $ls_data['blind_box_image'] = localpath_to_netpath($val['base_image']); $ls_data['num'] = $val['num']; $ls_data['is_public_screen'] = $val['is_public_screen']; $ls_data['is_public_server'] = $val['is_public_server']; $ls_data['is_blind_box'] = 1; $ls_data['is_blind_gift'] = 1; $ls_data['blind_box_name'] = $box_name; $ls_data['is_special_gift'] = $val['is_special']; $ls_data['rid'] = 0; if($ls_data['is_special_gift'] == 1) { $ls_data['rid'] = $rid; } 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' => $room_push_data]; } catch (\Exception $e) { // 回滚事务 $this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list); Db::rollback(); $this->file_unlock($fh); dump($e); return ['code' => 201, 'msg' => '开启失败', 'data' => null]; } } //返还用户抽中礼物到奖池 private function redis_gift_data_rollback($redis, $keyname, $user_gift_id_list) { $insert_data = []; foreach ($user_gift_id_list as $k => $v) { $insert_data[] = $v['bl_id'] . '-' . $v['gid']; } if (!empty($insert_data)) { array_unshift($insert_data, $keyname); //右侧取 右侧插入 call_user_func_array([$redis, 'lPush'], $insert_data); } return ['code' => 200, 'msg' => '返还成功', 'data' => null]; } //喵咪盲盒礼物 public function get_cate_blind_box_gift() { $gid_arr = [203, 204, 205]; $gift_image_list = Db::name('gift')->whereIn('gid', $gid_arr)->column('base_image', 'gid'); $box_open_price = Db::name('box_type')->whereIn('tid', [104, 105, 106])->column('open_price', 'tid'); $blind_box_gift_list = Db::name('box_config')->alias('a') ->join('yy_gift b', 'a.gid = b.gid') ->field('a.tid,b.gift_name,b.base_image,b.gift_price') ->where('a.tid', 'in', [104,105,106]) ->order('b.gift_price', 'asc') ->select(); // dump($blind_box_gift_list);die; $one_cate_blind_box_gift = $two_cate_blind_box_gift = $three_cate_blind_box_gift = []; foreach($blind_box_gift_list as $val){ $temp = $val; $temp['base_image'] = localpath_to_netpath($val['base_image']); unset($temp['tid']); if($val['tid'] == 106) { $one_cate_blind_box_gift[] = $temp; } if($val['tid'] == 105) { $two_cate_blind_box_gift[] = $temp; } if($val['tid'] == 104) { $three_cate_blind_box_gift[] = $temp; } } $one_cate_blind_box = [ 'open_price' => $box_open_price[106], 'base_image' => localpath_to_netpath($gift_image_list[205]), 'max_gift' => $this->get_max_gift($one_cate_blind_box_gift), 'gift_list' => $one_cate_blind_box_gift, ]; $two_cate_blind_box = [ 'open_price' => $box_open_price[105], 'base_image' => localpath_to_netpath($gift_image_list[204]), 'max_gift' => $this->get_max_gift($two_cate_blind_box_gift), 'gift_list' => $two_cate_blind_box_gift, ]; $three_cate_blind_box = [ 'open_price' => $box_open_price[104], 'base_image' => localpath_to_netpath($gift_image_list[203]), 'max_gift' => $this->get_max_gift($three_cate_blind_box_gift), 'gift_list' => $three_cate_blind_box_gift, ]; $data = [ 'one_cate_blind_box' => $one_cate_blind_box, 'two_cate_blind_box' => $two_cate_blind_box, 'three_cate_blind_box' => $three_cate_blind_box, ]; return ['code' => 200, 'msg' => '获取数据成功', 'data' => $data]; } //获取最大礼物信息 private function get_max_gift($gift_list) { $big_gift_info = ['gift_name' => '', 'gift_price' => 0]; if($gift_list) { $big_gift_info['gift_name'] = $gift_list[count($gift_list) -1]['gift_name']; $big_gift_info['gift_price'] = $gift_list[count($gift_list) -1]['gift_price']; } return $big_gift_info; } //获取盲盒礼物 public function get_cate_blind_box_gift_by_gid($gid) { $tid = 0; if($gid == 203) { $tid = 104; }elseif($gid == 204) { $tid = 105; }elseif($gid == 205) { $tid = 106; } $blind_box_gift_list = Db::name('box_config')->alias('a') ->join('yy_gift b', 'a.gid = b.gid') ->field('b.base_image') ->where('a.tid', '=', $tid) ->order('b.gift_price', 'asc') ->select(); foreach ($blind_box_gift_list as &$val){ $val['base_image'] = localpath_to_netpath($val['base_image']); } return ['code' => 200, 'msg' => '获取数据成功', 'data' => $blind_box_gift_list]; } }