2683 lines
125 KiB
PHP
2683 lines
125 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace app\api\model;
|
||
|
|
|
||
|
|
use think\Model;
|
||
|
|
use think\db;
|
||
|
|
|
||
|
|
class Box extends Model
|
||
|
|
{
|
||
|
|
|
||
|
|
//开奖池
|
||
|
|
public function open_box($uid, $rid, $type, $open_num){
|
||
|
|
$config = get_uncache_system_config();
|
||
|
|
//宝箱是否关闭
|
||
|
|
if($config['open_box_status'] != 1){
|
||
|
|
return ['code' => 201, 'msg' => '功能关闭中', 'data' => null];
|
||
|
|
}
|
||
|
|
|
||
|
|
if($type == 1){//银蛋是否关闭
|
||
|
|
if($config['open_silver_box_status'] != 1){
|
||
|
|
return ['code' => 201, 'msg' => '功能关闭中', 'data' => null];
|
||
|
|
}
|
||
|
|
}else if($type == 3){//钻蛋是否关闭
|
||
|
|
if($config['open_drill_box_status'] != 1){
|
||
|
|
return ['code' => 201, 'msg' => '功能关闭中', 'data' => null];
|
||
|
|
}
|
||
|
|
}else if($type == 2){//金蛋是否关闭
|
||
|
|
if($config['open_gold_box_status'] != 1){
|
||
|
|
return ['code' => 201, 'msg' => '功能关闭中', 'data' => null];
|
||
|
|
}
|
||
|
|
}else if ($type == 4) {
|
||
|
|
if(!in_array($uid,[200130,217015])){
|
||
|
|
if ($config['open_platina_box_status'] != 1) {
|
||
|
|
return ['code' => 201, 'msg' => '功能关闭中', 'data' => null];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}else if ($type == 5) {//许愿瓶开关
|
||
|
|
if(!in_array($uid,[200130,217015])){
|
||
|
|
if ($config['open_violet_box_status'] != 1) {
|
||
|
|
return ['code' => 201, 'msg' => '功能关闭中', 'data' => null];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}else if ($type == 6) {//中级 promise_consume
|
||
|
|
if(!in_array($uid,[200130,217015])){
|
||
|
|
if ($config['open_promise_box_status'] != 1) {
|
||
|
|
return ['code' => 201, 'msg' => '功能关闭中', 'data' => null];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}else{
|
||
|
|
return ['code' => 201, 'msg' => '参数错误', 'data' => null];
|
||
|
|
}
|
||
|
|
|
||
|
|
$user_info = db::name('user')->find($uid);
|
||
|
|
|
||
|
|
if($user_info['is_teenager'] == 1){
|
||
|
|
return ['code' => 201, 'msg' => '已开启青少年模式', 'data' => null];
|
||
|
|
}
|
||
|
|
|
||
|
|
// dump($config);die;
|
||
|
|
//禁止该设备号砸蛋
|
||
|
|
$forbid_open_box = $config['forbid_device_open_box'];
|
||
|
|
if(!empty($forbid_open_box)){
|
||
|
|
$forbid_open_box_list = explode(',', trim($forbid_open_box, ','));
|
||
|
|
if(in_array($user_info['last_login_device'], $forbid_open_box_list)){
|
||
|
|
return ['code' => 201, 'msg' => '账号异常,请联系客服', 'data' => null];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
//禁止该用户砸蛋
|
||
|
|
$forbid_user_open_box = $config['forbid_uid_open_box'];
|
||
|
|
if(!empty($forbid_user_open_box)){
|
||
|
|
$forbid_user_open_box_list = explode(',', trim($forbid_user_open_box, ','));
|
||
|
|
if(in_array($uid, $forbid_user_open_box_list)){
|
||
|
|
return ['code' => 201, 'msg' => '账号异常,请联系客服', 'data' => null];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// $person_box = [4,5];
|
||
|
|
$common_boxs = [1,2,3,4,5,6];
|
||
|
|
if($user_info['is_tester'] == 2){//测试号
|
||
|
|
$data = $this->open_common_box($uid,$rid,$type,$open_num);
|
||
|
|
return $data;
|
||
|
|
}else if(in_array($type,$common_boxs)){//公池
|
||
|
|
if($type == 1){//银蛋
|
||
|
|
$silver_tid = [1];
|
||
|
|
$common_box = [1];
|
||
|
|
$person_box = [];
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['tid','in',$silver_tid];
|
||
|
|
$box_type_lists = db::name('box_type')->where($map)->field('tid,consume')->order('consume desc')->select();
|
||
|
|
foreach ($box_type_lists as $a => $b) {
|
||
|
|
if($user_info['silver_consume'] >= $b['consume']){
|
||
|
|
$tid = $b['tid'];
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if(in_array($tid,$common_box)){
|
||
|
|
$data = $this->open_common_box($uid,$rid,$type,$open_num);
|
||
|
|
return $data;
|
||
|
|
}
|
||
|
|
|
||
|
|
}else if($type == 2){//金蛋
|
||
|
|
$silver_tid = [11];
|
||
|
|
$common_box = [11];
|
||
|
|
$person_box = [];
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['tid','in',$silver_tid];
|
||
|
|
$box_type_lists = db::name('box_type')->where($map)->field('tid,consume')->order('consume desc')->select();
|
||
|
|
foreach ($box_type_lists as $a => $b) {
|
||
|
|
if($user_info['gold_consume'] >= $b['consume']){
|
||
|
|
$tid = $b['tid'];
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if(in_array($tid,$common_box)){
|
||
|
|
$data = $this->open_common_box($uid,$rid,$type,$open_num);
|
||
|
|
return $data;
|
||
|
|
}
|
||
|
|
}else if($type == 3){//钻蛋
|
||
|
|
// return ['code' => 201, 'msg' => '参数错误', 'data' => null];
|
||
|
|
$drill_tid = [21];
|
||
|
|
$common_box = [21];
|
||
|
|
$person_box = [];
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['tid','in',$drill_tid];
|
||
|
|
$box_type_lists = db::name('box_type')->where($map)->field('tid,consume')->order('consume desc')->select();
|
||
|
|
foreach ($box_type_lists as $a => $b) {
|
||
|
|
if($user_info['drill_consume'] >= $b['consume']){
|
||
|
|
$tid = $b['tid'];
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if(in_array($tid,$common_box)){
|
||
|
|
$data = $this->open_common_box($uid,$rid,$type,$open_num);
|
||
|
|
return $data;
|
||
|
|
}
|
||
|
|
}else if($type == 4){//钻蛋
|
||
|
|
// return ['code' => 201, 'msg' => '参数错误', 'data' => null];
|
||
|
|
$platina_tid = [31];
|
||
|
|
$common_box = [31];
|
||
|
|
$person_box = [];
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['tid','in',$platina_tid];
|
||
|
|
$box_type_lists = db::name('box_type')->where($map)->field('tid,consume')->order('consume desc')->select();
|
||
|
|
foreach ($box_type_lists as $a => $b) {
|
||
|
|
if($user_info['platina_consume'] >= $b['consume']){
|
||
|
|
$tid = $b['tid'];
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if(in_array($tid,$common_box)){
|
||
|
|
$data = $this->open_common_box($uid,$rid,$type,$open_num);
|
||
|
|
return $data;
|
||
|
|
}
|
||
|
|
}else if($type == 5){//钻蛋
|
||
|
|
// return ['code' => 201, 'msg' => '参数错误', 'data' => null];
|
||
|
|
$violet_tid = [41];
|
||
|
|
$common_box = [41];
|
||
|
|
$person_box = [];
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['tid','in',$violet_tid];
|
||
|
|
$box_type_lists = db::name('box_type')->where($map)->field('tid,consume')->order('consume desc')->select();
|
||
|
|
foreach ($box_type_lists as $a => $b) {
|
||
|
|
if($user_info['violet_consume'] >= $b['consume']){
|
||
|
|
$tid = $b['tid'];
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if(in_array($tid,$common_box)){
|
||
|
|
$data = $this->open_common_box($uid,$rid,$type,$open_num);
|
||
|
|
return $data;
|
||
|
|
}
|
||
|
|
}else if($type == 6){//钻蛋
|
||
|
|
// return ['code' => 201, 'msg' => '参数错误', 'data' => null];
|
||
|
|
$promise_tid = [51];
|
||
|
|
$common_box = [51];
|
||
|
|
$person_box = [];
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['tid','in',$promise_tid];
|
||
|
|
$box_type_lists = db::name('box_type')->where($map)->field('tid,consume')->order('consume desc')->select();
|
||
|
|
foreach ($box_type_lists as $a => $b) {
|
||
|
|
if($user_info['promise_consume'] >= $b['consume']){
|
||
|
|
$tid = $b['tid'];
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if(in_array($tid,$common_box)){
|
||
|
|
$data = $this->open_common_box($uid,$rid,$type,$open_num);
|
||
|
|
return $data;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
//公池
|
||
|
|
public function open_common_box($uid, $rid, $type, $open_num)
|
||
|
|
{
|
||
|
|
$open_num = input('open_num', 0);
|
||
|
|
if (!in_array($open_num, [1, 10, 100])) {
|
||
|
|
return ['code' => 201, 'msg' => '开奖次数参数非法', 'data' => null];
|
||
|
|
}
|
||
|
|
$config = get_system_config();
|
||
|
|
$map = [];
|
||
|
|
$map['rid'] = $rid;
|
||
|
|
$map['is_delete'] = 1;
|
||
|
|
$room_info = db::name('room')->field('rid,is_auto_accumulate,room_owner_uid')->where($map)->find();
|
||
|
|
if (empty($room_info)) {
|
||
|
|
return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null];
|
||
|
|
}
|
||
|
|
|
||
|
|
$redis = connectionRedis();
|
||
|
|
$user_gift_id_list = []; //用户抽中礼物id集合
|
||
|
|
$user_gift_id_redis_list = []; //用户抽中redis礼物id集合
|
||
|
|
$user_win_gift_data = []; //抽中礼物列表
|
||
|
|
$box_log_data = []; //抽中礼物期数数据
|
||
|
|
$box_type_data = []; //宝箱类型配置信息
|
||
|
|
$box_logs_data = [];
|
||
|
|
$user_pay_amount = 0; //用户支付总额
|
||
|
|
$user_win_gift_total_value = 0; //抽中礼物总价值
|
||
|
|
$surplus_user_money = 0; //用户剩余资金
|
||
|
|
$europe_key = 0;//用户所得皇钥匙
|
||
|
|
$now_time = time();
|
||
|
|
$tid = '';
|
||
|
|
|
||
|
|
$user_info = db::name('user')->find($uid); //获取用户信息
|
||
|
|
if(!$user_info){
|
||
|
|
return ['code' => 201, 'msg' => '用户信息不存在', 'data' => null];
|
||
|
|
}
|
||
|
|
|
||
|
|
$ress = model('api/UserWallet')->get_user_wallet($uid,$user_info['money'], $user_info['integral']);
|
||
|
|
if($ress['code'] != 200) {
|
||
|
|
return $ress;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
//不同宝箱类型
|
||
|
|
//判断是否是虚拟用户
|
||
|
|
if($user_info['is_tester']==2){
|
||
|
|
if($type == 1){
|
||
|
|
$tid = 61;
|
||
|
|
}else if($type == 2){
|
||
|
|
$tid = 62;
|
||
|
|
}else if($type == 3){
|
||
|
|
$tid = 63;
|
||
|
|
}else if($type == 4){
|
||
|
|
$tid = 64;
|
||
|
|
}else if($type == 5){
|
||
|
|
$tid = 65;
|
||
|
|
}else if($type == 6){
|
||
|
|
$tid = 66;
|
||
|
|
}
|
||
|
|
}else{
|
||
|
|
|
||
|
|
if($type == 1){
|
||
|
|
return ['code' => 201, 'msg' => '奖池类型非法!', 'data' => null];
|
||
|
|
$silver_tid = [1];
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['tid','in',$silver_tid];
|
||
|
|
$box_type_lists = db::name('box_type')->where($map)->field('tid,consume')->order('consume desc')->select();
|
||
|
|
foreach ($box_type_lists as $a => $b) {
|
||
|
|
if($user_info['silver_consume'] >= $b['consume']){
|
||
|
|
$tid = $b['tid'];
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}else if($type == 2){
|
||
|
|
return ['code' => 201, 'msg' => '奖池类型非法!', 'data' => null];
|
||
|
|
$gold_tid = [11];
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['tid','in',$gold_tid];
|
||
|
|
$box_type_lists = db::name('box_type')->where($map)->field('tid,consume')->order('consume desc')->select();
|
||
|
|
foreach ($box_type_lists as $a => $b) {
|
||
|
|
if($user_info['gold_consume'] >= $b['consume']){
|
||
|
|
$tid = $b['tid'];
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}else if($type == 3){
|
||
|
|
return ['code' => 201, 'msg' => '奖池类型非法!', 'data' => null];
|
||
|
|
$drill_tid = [21];
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['tid','in',$drill_tid];
|
||
|
|
$box_type_lists = db::name('box_type')->where($map)->field('tid,consume')->order('consume desc')->select();
|
||
|
|
foreach ($box_type_lists as $a => $b) {
|
||
|
|
if($user_info['drill_consume'] >= $b['consume']){
|
||
|
|
$tid = $b['tid'];
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}else if ($type == 4) {
|
||
|
|
// if (!in_array($open_num, [1, 10, 50])) {
|
||
|
|
// return ['code' => 201, 'msg' => '开奖次数参数非法', 'data' => null];
|
||
|
|
// }
|
||
|
|
$platina_id = [31];
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['tid', 'in', $platina_id];
|
||
|
|
$box_type_lists = db::name('box_type')->where($map)->field('tid,consume')->order('consume desc')->select();
|
||
|
|
foreach ($box_type_lists as $a => $b) {
|
||
|
|
if ($user_info['platina_consume'] >= $b['consume']) {
|
||
|
|
$tid = $b['tid'];
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}else if ($type == 5) {
|
||
|
|
// if (!in_array($open_num, [1, 10, 50])) {
|
||
|
|
// return ['code' => 201, 'msg' => '开奖次数参数非法', 'data' => null];
|
||
|
|
// }
|
||
|
|
$violet_id = [41];
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['tid', 'in', $violet_id];
|
||
|
|
$box_type_lists = db::name('box_type')->where($map)->field('tid,consume')->order('consume desc')->select();
|
||
|
|
foreach ($box_type_lists as $a => $b) {
|
||
|
|
if ($user_info['violet_consume'] >= $b['consume']) {
|
||
|
|
$tid = $b['tid'];
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}else if ($type == 6) {
|
||
|
|
// if (!in_array($open_num, [1, 10, 50])) {
|
||
|
|
// return ['code' => 201, 'msg' => '开奖次数参数非法', 'data' => null];
|
||
|
|
// }
|
||
|
|
|
||
|
|
$promise_id = [51];
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['tid', 'in', $promise_id];
|
||
|
|
$box_type_lists = db::name('box_type')->where($map)->field('tid,consume')->order('consume desc')->select();
|
||
|
|
foreach ($box_type_lists as $a => $b) {
|
||
|
|
if ($user_info['promise_consume'] >= $b['consume']) {
|
||
|
|
$tid = $b['tid'];
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
//该奖池是否配置礼物
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['tid', '=', $tid];
|
||
|
|
$is_box_config = db('box_config')->where($map)->select();
|
||
|
|
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,consume')->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];
|
||
|
|
}
|
||
|
|
|
||
|
|
$user_pay_amount = $open_num * $box_type_data[$tid]['open_price'];
|
||
|
|
//当前用户金额是否可以开宝箱
|
||
|
|
$user_auction_price = model('NewRoom')->get_user_auction_price($uid);
|
||
|
|
if($user_info['integral'] < ($user_auction_price + $user_pay_amount)){
|
||
|
|
return ['code' => 201, 'msg' => '金币不足', 'data' => null];
|
||
|
|
}
|
||
|
|
|
||
|
|
$tid_box_price = $box_type_data[$tid]['open_price'];
|
||
|
|
$tid_box_consume = $box_type_data[$tid]['consume'];
|
||
|
|
$keyname = "box:list:tid:".$tid;
|
||
|
|
|
||
|
|
if ($keyname == "box:list:tid:") {
|
||
|
|
return ['code' => 201, 'msg' => '开奖类型非法参数', 'data' => null];
|
||
|
|
}
|
||
|
|
// dump($tid);
|
||
|
|
// 启动事务
|
||
|
|
Db::startTrans();
|
||
|
|
try {
|
||
|
|
//获取用户必中信息 (每次补发一个)
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['uid', '=', $uid];
|
||
|
|
$map[] = ['tid', '=', $tid];
|
||
|
|
$map[] = ['is_admin', '=', 1];
|
||
|
|
$map[] = ['give_status', '=', 1];
|
||
|
|
$box_give_gift_info = db::name('box_give_gift')->where($map)->find();
|
||
|
|
//插入用户必中
|
||
|
|
$need_open_num = $open_num;
|
||
|
|
if (!empty($box_give_gift_info)) {
|
||
|
|
$data = [];
|
||
|
|
$data['bl_id'] = 0;
|
||
|
|
$data['bl_id_tid'] = $box_give_gift_info['tid'];
|
||
|
|
$data['gid'] = $box_give_gift_info['gid'];
|
||
|
|
$user_gift_id_list[] = $data;
|
||
|
|
$need_open_num--; //待取礼物总数-1
|
||
|
|
}
|
||
|
|
|
||
|
|
//获取待核销必中礼物数据
|
||
|
|
$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 asc')->column('id', 'gid'); //每种礼物只核销第一个
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
// //爆条礼物【幸运宝树】
|
||
|
|
if(in_array($type,[4,5,6])){
|
||
|
|
if($type==4){
|
||
|
|
$gid = $config['xys_gift_data1']; //补发礼物 初级
|
||
|
|
$limit_consume = $config['xys_bt_bufa_consume_limit1']; //补发消费限制
|
||
|
|
}elseif($type==5){
|
||
|
|
$gid = $config['xys_gift_data2']; //补发礼物 高级
|
||
|
|
$limit_consume = $config['xys_bt_bufa_consume_limit2']; //补发消费限制
|
||
|
|
|
||
|
|
}elseif($type==6){
|
||
|
|
$gid = $config['xys_gift_data3']; //补发礼物 中级
|
||
|
|
$limit_consume = $config['xys_bt_bufa_consume_limit3']; //补发消费限制
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
$insert_data = ['uid'=>$uid,'rid'=>$rid,'tid'=>$tid,'gid'=>$gid,'num'=>1,
|
||
|
|
'give_time'=>time(),'give_status'=>2,'deduction_status'=>2,
|
||
|
|
'deduction_time'=>time(),'is_admin'=>1,'is_bt'=>1];
|
||
|
|
|
||
|
|
|
||
|
|
//当前房间爆率值
|
||
|
|
$room_bt = Db::name("room_bt")->where(['type'=>$type,'is_full'=>2])->order('id','desc')->find();
|
||
|
|
if(empty($room_bt)){
|
||
|
|
$key_name = "api:type7bt_ss1";
|
||
|
|
$room_bt_lock = redis_lock_exits($key_name,1,4);
|
||
|
|
if($room_bt_lock){
|
||
|
|
if($user_pay_amount >= $limit_consume){
|
||
|
|
//发礼物
|
||
|
|
Db::name('box_give_gift')->insert($insert_data);
|
||
|
|
$data = [];
|
||
|
|
$data['bl_id'] = 0;
|
||
|
|
$data['bl_id_tid'] = $tid;
|
||
|
|
$data['gid'] = $gid;
|
||
|
|
$user_gift_id_list[] = $data;
|
||
|
|
$need_open_num--; //待取礼物总数-1
|
||
|
|
Db::name("room_bt")->insert(['type'=>$type,'consume'=>$limit_consume,'is_full'=>1,'add_time'=>time(),'update_time'=>time()]);
|
||
|
|
}else{
|
||
|
|
Db::name("room_bt")->insert(['type'=>$type,'consume'=>$user_pay_amount,'is_full'=>2,'add_time'=>time(),'update_time'=>time()]);
|
||
|
|
}
|
||
|
|
// redis_unlock($key_name); //不用解封 10秒钟解限
|
||
|
|
}else{
|
||
|
|
Db::rollback();
|
||
|
|
return ['code' => 201, 'msg' => '请重试8-8!', 'data' => null];
|
||
|
|
}
|
||
|
|
}else{
|
||
|
|
//上锁 防并发
|
||
|
|
$room_bt = db::name('room_bt')
|
||
|
|
->where(['id'=>$room_bt['id']])
|
||
|
|
->where(['type'=>$type,'is_full'=>2])
|
||
|
|
->lock(true)
|
||
|
|
->find();
|
||
|
|
if(empty($room_bt)){
|
||
|
|
Db::rollback();
|
||
|
|
return ['code' => 201, 'msg' => '请重试8-9!', 'data' => null];
|
||
|
|
}
|
||
|
|
if(($user_pay_amount + $room_bt['consume']) >= $limit_consume){
|
||
|
|
Db::name('box_give_gift')->insert($insert_data);
|
||
|
|
$data = [];
|
||
|
|
$data['bl_id'] = 0;
|
||
|
|
$data['bl_id_tid'] = $tid;
|
||
|
|
$data['gid'] = $gid;
|
||
|
|
$user_gift_id_list[] = $data;
|
||
|
|
$need_open_num--; //待取礼物总数-1
|
||
|
|
Db::name("room_bt")->where(['id'=>$room_bt['id']])->update(['consume'=>$limit_consume,'is_full'=>1,'update_time'=>time()]);
|
||
|
|
}else{
|
||
|
|
//增加暴条值
|
||
|
|
Db::name("room_bt")->where(['id'=>$room_bt['id']])->inc('consume',$user_pay_amount)->update(['update_time'=>time()]);
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
//每日砸蛋次数限制
|
||
|
|
$now_date = date('Y-m-d');
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['uid', '=', $user_info['uid']];
|
||
|
|
$map[] = ['box_date', '=', $now_date];
|
||
|
|
$data = [];
|
||
|
|
$data['update_time'] = $now_time;
|
||
|
|
$reslut = db::name('user_box_statics')->where($map)->inc('box_times', $open_num)->update($data);
|
||
|
|
if (!$reslut) {
|
||
|
|
$data = [];
|
||
|
|
$data['uid'] = $user_info['uid'];
|
||
|
|
$data['box_date'] = $now_date;
|
||
|
|
$data['box_times'] = $open_num;
|
||
|
|
$data['add_time'] = $now_time;
|
||
|
|
$data['update_time'] = $now_time;
|
||
|
|
$reslut = db::name('user_box_statics')->insert($data);
|
||
|
|
if (!$reslut) {
|
||
|
|
Db::rollback();
|
||
|
|
return ['code' => 201, 'msg' => '请重试tj1', 'data' => null];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
$user_box_times = db::name('user_box_statics')->where(['uid'=>$uid,'box_date'=>date('Y-m-d')])->value('box_times');
|
||
|
|
//限制次数
|
||
|
|
$box_limit_times = $config['user_day_box_limit_times'];
|
||
|
|
if($user_box_times > $box_limit_times){
|
||
|
|
Db::rollback();
|
||
|
|
return ['code' => 201, 'msg' => '超过每日最大次数!', 'data' => null];
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
//获取待开奖池礼物
|
||
|
|
for ($i = 0; $i < $need_open_num; $i++) {
|
||
|
|
$gift_data = $redis->blpop($keyname, 2); //1s 超时
|
||
|
|
if (empty($gift_data)) {
|
||
|
|
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]);
|
||
|
|
|
||
|
|
$data = [];
|
||
|
|
$data['bl_id'] = $bl_id;
|
||
|
|
$data['gid'] = $gid;
|
||
|
|
$user_gift_id_redis_list[] = $data;
|
||
|
|
|
||
|
|
//更新对应数据
|
||
|
|
//补偿表 更新
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['id', '=', $id];
|
||
|
|
$map[] = ['tid', '=', $tid];
|
||
|
|
$map[] = ['gid', '=', $gid];
|
||
|
|
$map[] = ['deduction_status', '=', 1];
|
||
|
|
$data = [];
|
||
|
|
$data['deduction_bl_id'] = $bl_id;
|
||
|
|
$data['deduction_status'] = 2;
|
||
|
|
$data['deduction_time'] = time();
|
||
|
|
$data['update_time'] = time();
|
||
|
|
$reslut = db::name('box_give_gift')->where($map)->order('id asc')->limit(1)->update($data);
|
||
|
|
if (!$reslut) {
|
||
|
|
Db::rollback();
|
||
|
|
$this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list);
|
||
|
|
return ['code' => 201, 'msg' => '请重试', 'data' => null];
|
||
|
|
}
|
||
|
|
|
||
|
|
//开宝箱记录表更新
|
||
|
|
// $map = [];
|
||
|
|
// $map[] = ['tid', '=', $tid];
|
||
|
|
// $map[] = ['gid', '=', $gid];
|
||
|
|
// $map[] = ['num', '=', 1];
|
||
|
|
// $map[] = ['bl_id', '=', 0];
|
||
|
|
// $data = [];
|
||
|
|
// $data['bl_id'] = $bl_id;
|
||
|
|
// $data['update_time'] = time();
|
||
|
|
// $reslut = db::name('user_box_log')->where($map)->order('aid asc')->limit(1)->update($data);
|
||
|
|
// if (!$reslut) {
|
||
|
|
// Db::rollback();
|
||
|
|
// $this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list);
|
||
|
|
// return ['code' => 201, 'msg' => '请重试', 'data' => null];
|
||
|
|
// }
|
||
|
|
//重新从队列获取一个礼物信息
|
||
|
|
$gift_data = $redis->blpop($keyname, 2); //1s 超时
|
||
|
|
if (empty($gift_data)) {
|
||
|
|
$this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list);
|
||
|
|
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['bl_id_tid'] = $tid;
|
||
|
|
$user_gift_id_redis_list[] = $data;
|
||
|
|
$user_gift_id_list[] = $data;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if (count($user_gift_id_list) != $open_num) {
|
||
|
|
$this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list);
|
||
|
|
return ['code' => 201, 'msg' => '奖池数量不足', 'data' => null];
|
||
|
|
}
|
||
|
|
|
||
|
|
//取出所有礼物数据
|
||
|
|
$gift_list = db::name('gift')->field('gid,gift_name,gift_price,base_image,play_image,gift_type')->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')->select();
|
||
|
|
$box_config_list_data = [];
|
||
|
|
foreach ($box_config_list as $k => $v) {
|
||
|
|
$box_config_list_data[$v['gid']][$v['tid']] = $v;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
//整理用户抽中礼物数量
|
||
|
|
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);
|
||
|
|
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);
|
||
|
|
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']]['bl_id_tid'] = $v['bl_id_tid'];
|
||
|
|
// $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($v['bl_id'] == 0){
|
||
|
|
$user_win_gift_data[$v['gid']]['is_public_screen'] = $box_config_list_data[$v['gid']][$v['bl_id_tid']]['is_public_screen'];
|
||
|
|
$user_win_gift_data[$v['gid']]['is_public_server'] = $box_config_list_data[$v['gid']][$v['bl_id_tid']]['is_public_server'];
|
||
|
|
}else{
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['bl_id', '=', $v['bl_id']];
|
||
|
|
$bl_tid = db::name('box_log')->where($map)->value('tid');
|
||
|
|
$user_win_gift_data[$v['gid']]['is_public_screen'] = $box_config_list_data[$v['gid']][$bl_tid]['is_public_screen'];
|
||
|
|
$user_win_gift_data[$v['gid']]['is_public_server'] = $box_config_list_data[$v['gid']][$bl_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'];
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
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);
|
||
|
|
return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null];
|
||
|
|
}
|
||
|
|
$surplus_user_money = $user_info['integral'] - $user_pay_amount;
|
||
|
|
|
||
|
|
//消费爵位处理
|
||
|
|
// $nobility_info = model('Nobility')->user_gain_nobility_value($uid, $user_pay_amount);
|
||
|
|
// if($nobility_info['code'] == 201){
|
||
|
|
// Db::rollback();
|
||
|
|
// $this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list);
|
||
|
|
// return ['code' => 201, 'msg' => $nobility_info['msg'], 'data' => null];
|
||
|
|
// }
|
||
|
|
|
||
|
|
}else{
|
||
|
|
$surplus_user_money = $user_info['integral'];
|
||
|
|
}
|
||
|
|
|
||
|
|
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);
|
||
|
|
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);
|
||
|
|
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_tid'] = $v['bl_id_tid'];
|
||
|
|
$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['total_pay_price'] = $n['open_num'] * $tid_box_price;
|
||
|
|
$data['add_time'] = $now_time;
|
||
|
|
$data['update_time'] = $now_time;
|
||
|
|
$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);
|
||
|
|
return ['code' => 201, 'msg' => '请重试', 'data' => null];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
//添加用户开宝箱统计数据
|
||
|
|
$time = strtotime(date("Y-m-d"));
|
||
|
|
$box_type = 0;
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['uid', '=', $user_info['uid']];
|
||
|
|
if ($user_info['is_tester'] == 2) {
|
||
|
|
if($type == 1){
|
||
|
|
$map[] = ['box_type','=',11];
|
||
|
|
$box_type = 11;
|
||
|
|
}else if($type == 2){
|
||
|
|
$map[] = ['box_type','=',12];
|
||
|
|
$box_type = 12;
|
||
|
|
}else if($type == 3){
|
||
|
|
$map[] = ['box_type','=',13];
|
||
|
|
$box_type = 13;
|
||
|
|
}else if($type == 4){
|
||
|
|
$map[] = ['box_type','=',14];
|
||
|
|
$box_type = 14;
|
||
|
|
}else if($type == 5){
|
||
|
|
$map[] = ['box_type','=',15];
|
||
|
|
$box_type = 15;
|
||
|
|
}else if($type == 6){
|
||
|
|
$map[] = ['box_type','=',16];
|
||
|
|
$box_type = 16;
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
$map[] = ['box_type', '=', $type];
|
||
|
|
$box_type = $type;
|
||
|
|
}
|
||
|
|
$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);
|
||
|
|
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);
|
||
|
|
return ['code' => 201, 'msg' => '请重试', 'data' => null];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
//添加房间开宝箱统计数据
|
||
|
|
$time = strtotime(date("Y-m-d"));
|
||
|
|
$box_type = 0;
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['rid', '=', $rid];
|
||
|
|
if ($user_info['is_tester'] == 2) {
|
||
|
|
if($type == 1){
|
||
|
|
$map[] = ['box_type','=',11];
|
||
|
|
$box_type = 11;
|
||
|
|
}else if($type == 2){
|
||
|
|
$map[] = ['box_type','=',12];
|
||
|
|
$box_type = 12;
|
||
|
|
}else if($type == 3){
|
||
|
|
$map[] = ['box_type','=',13];
|
||
|
|
$box_type = 13;
|
||
|
|
}else if($type == 4){
|
||
|
|
$map[] = ['box_type','=',14];
|
||
|
|
$box_type = 14;
|
||
|
|
}else if($type == 5){
|
||
|
|
$map[] = ['box_type','=',15];
|
||
|
|
$box_type = 15;
|
||
|
|
}else if($type == 6){
|
||
|
|
$map[] = ['box_type','=',16];
|
||
|
|
$box_type = 16;
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
$map[] = ['box_type', '=', $type];
|
||
|
|
$box_type = $type;
|
||
|
|
}
|
||
|
|
$map[] = ['add_time', '>', $time];
|
||
|
|
$room_box_count_info = db::name('room_box_count')->where($map)->find();
|
||
|
|
|
||
|
|
if (!empty($room_box_count_info)) {
|
||
|
|
$rate = 0; //支收比
|
||
|
|
$rate = round(($user_win_gift_total_value + $room_box_count_info['in_amount']) / ($room_box_count_info['out_amount'] + $user_pay_amount), 4);
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['sid', '=', $room_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('room_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);
|
||
|
|
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['rid'] = $rid;
|
||
|
|
$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('room_box_count')->insert($data);
|
||
|
|
|
||
|
|
if (!$reslut) {
|
||
|
|
Db::rollback();
|
||
|
|
$this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list);
|
||
|
|
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);
|
||
|
|
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);
|
||
|
|
return ['code' => 201, 'msg' => '请重试', 'data' => null];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
//用户消费累计
|
||
|
|
if($user_info['is_tester'] != 2){
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['uid', '=', $user_info['uid']];
|
||
|
|
if ($type == 1) {
|
||
|
|
$reslut = db::name('user')->where($map)->inc('silver_consume', $user_pay_amount)->update();
|
||
|
|
} else if($type == 2){
|
||
|
|
$reslut = db::name('user')->where($map)->inc('gold_consume', $user_pay_amount)->update();
|
||
|
|
} else if($type == 3) {
|
||
|
|
$reslut = db::name('user')->where($map)->inc('drill_consume', $user_pay_amount)->update();
|
||
|
|
} else if ($type == 4) {
|
||
|
|
$reslut = db::name('user')->where($map)->inc('platina_consume', $user_pay_amount)->update();
|
||
|
|
} else if ($type == 5) {
|
||
|
|
$reslut = db::name('user')->where($map)->inc('violet_consume', $user_pay_amount)->update();
|
||
|
|
} else if ($type == 6) {
|
||
|
|
$reslut = db::name('user')->where($map)->inc('promise_consume', $user_pay_amount)->update();
|
||
|
|
}
|
||
|
|
if(!$reslut){
|
||
|
|
Db::rollback();
|
||
|
|
$this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list);
|
||
|
|
return ['code' => 201, 'msg' => '请重试', 'data' => null];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
// 提交事务
|
||
|
|
Db::commit();
|
||
|
|
|
||
|
|
//推送礼物信息
|
||
|
|
$user_charm_info = model('User')->get_user_charm_contribution_info($user_info['uid']);
|
||
|
|
$push_all_gift_data = [];
|
||
|
|
$push_group_gift_data = [];
|
||
|
|
$push_sqb_gift_data = [];
|
||
|
|
$push_all_gift_data['rid'] = $rid;
|
||
|
|
$push_all_gift_data['user_info']['uid'] = $user_info['uid'];
|
||
|
|
$push_all_gift_data['user_info']['nick_name'] = mb_convert_encoding(base64_decode($user_info['base64_nick_name']), 'UTF-8', 'UTF-8');
|
||
|
|
$push_all_gift_data['user_info']['head_pic'] = localpath_to_netpath($user_info['head_pic']);
|
||
|
|
$push_all_gift_data['user_info']['contribution_level_image'] = $user_charm_info['data']['contribution_level_image'];
|
||
|
|
$push_group_gift_data['rid'] = $rid;
|
||
|
|
$push_group_gift_data['user_info']['uid'] = $user_info['uid'];
|
||
|
|
$push_group_gift_data['user_info']['nick_name'] = mb_convert_encoding(base64_decode($user_info['base64_nick_name']), 'UTF-8', 'UTF-8');
|
||
|
|
$push_group_gift_data['user_info']['head_pic'] = localpath_to_netpath($user_info['head_pic']);
|
||
|
|
$push_group_gift_data['user_info']['contribution_level_image'] = $user_charm_info['data']['contribution_level_image'];
|
||
|
|
// dump($user_win_gift_data);
|
||
|
|
foreach ($user_win_gift_data as $k => &$v) {
|
||
|
|
//是否大礼物展示
|
||
|
|
$v['surprise'] = 0;
|
||
|
|
if($v['gift_price'] > $config['big_gift_price']){
|
||
|
|
$v['surprise'] = 1;
|
||
|
|
}
|
||
|
|
unset($v['bl_id']);
|
||
|
|
$v['type_name'] = $box_type_data[$v['bl_id_tid']]['show_name'];
|
||
|
|
$v['box_type'] = $v['bl_id_tid'];
|
||
|
|
if ($v['is_public_server'] == 1) {
|
||
|
|
if($v['gift_price'] > $config['sqb_limit_gift_price']){
|
||
|
|
$sqb_gift_info = $v;
|
||
|
|
|
||
|
|
$sqb_gift_info['uid'] = $user_info['uid'];
|
||
|
|
$sqb_gift_info['nick_name'] = mb_convert_encoding(base64_decode($user_info['base64_nick_name']), 'UTF-8', 'UTF-8');
|
||
|
|
$sqb_gift_info['head_pic'] = localpath_to_netpath($user_info['head_pic']);
|
||
|
|
$sqb_gift_info['num'] = $v['open_num'];
|
||
|
|
$sqb_gift_info['total_open_num'] = $open_num;
|
||
|
|
$sqb_gift_info['box_type_name'] = $v['type_name'];
|
||
|
|
$push_all_gift_data['gift_list'][] = $sqb_gift_info;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if ($v['is_public_screen'] == 1) {
|
||
|
|
$push_group_gift_data['gift_list'][] = $v;
|
||
|
|
}
|
||
|
|
// if($v['gift_price'] > $config['sqb_limit_gift_price']){
|
||
|
|
// $sqb_gift_info = $v;
|
||
|
|
// $sqb_gift_info['uid'] = $user_info['uid'];
|
||
|
|
// $sqb_gift_info['nick_name'] = mb_convert_encoding(base64_decode($user_info['base64_nick_name']), 'UTF-8', 'UTF-8');
|
||
|
|
// $sqb_gift_info['head_pic'] = localpath_to_netpath($user_info['head_pic']);
|
||
|
|
// $sqb_gift_info['num'] = $v['open_num'];
|
||
|
|
// $sqb_gift_info['total_open_num'] = $open_num;
|
||
|
|
// $sqb_gift_info['box_type_name'] = $v['type_name'];
|
||
|
|
// $push_sqb_gift_data['gift_list'][] = $sqb_gift_info;
|
||
|
|
// }
|
||
|
|
}
|
||
|
|
//sqb_limit_gift_price
|
||
|
|
if (!empty($push_all_gift_data['gift_list'])) {
|
||
|
|
$push_data = [];
|
||
|
|
$push_data['code'] = 304;
|
||
|
|
$push_data['msg'] = "开宝箱全服播报数据";
|
||
|
|
$push_data['data'] = $push_all_gift_data;
|
||
|
|
model('api/WebSocketPush')->send_to_all($push_data);
|
||
|
|
}else if (!empty($push_group_gift_data['gift_list'])) {
|
||
|
|
$push_data = [];
|
||
|
|
$push_data['code'] = 303;
|
||
|
|
$push_data['msg'] = "开宝箱房间播报数据";
|
||
|
|
$push_data['data'] = $push_group_gift_data;
|
||
|
|
model('api/WebSocketPush')->send_to_group($rid, $push_data);
|
||
|
|
}
|
||
|
|
|
||
|
|
$data = [];
|
||
|
|
$data['win_gift_list'] = array_values($user_win_gift_data);
|
||
|
|
$data['user_win_gift_total_value'] = $user_win_gift_total_value;
|
||
|
|
$data['user_money'] = $surplus_user_money;
|
||
|
|
$data['user_box_times'] = $box_limit_times - $user_box_times;
|
||
|
|
|
||
|
|
|
||
|
|
//幸运树
|
||
|
|
if(in_array($type,[4,5,6])){
|
||
|
|
$jb = $this->box_store_consume($user_info['uid'],$type);
|
||
|
|
$push_data = [];
|
||
|
|
$push_data['code'] = 310;
|
||
|
|
$push_data['msg'] = "暴条数据";
|
||
|
|
$push_data['data'] = $jb['data'];
|
||
|
|
model('api/WebSocketPush')->send_to_all($push_data);
|
||
|
|
$data = array_merge($data,$jb['data']);
|
||
|
|
}
|
||
|
|
|
||
|
|
return ['code' => 200, 'msg' => '开启成功', 'data' => $data];
|
||
|
|
//推送礼物
|
||
|
|
} catch (\Exception $e) {
|
||
|
|
// 回滚事务
|
||
|
|
dump($e);
|
||
|
|
$this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list);
|
||
|
|
Db::rollback();
|
||
|
|
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];
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 幸运树暴条数据
|
||
|
|
* @param $uid
|
||
|
|
* @return array
|
||
|
|
* @throws \think\exception\DbException
|
||
|
|
* @throws db\exception\DataNotFoundException
|
||
|
|
* @throws db\exception\ModelNotFoundException
|
||
|
|
*/
|
||
|
|
public function box_store_consume($uid,$type){
|
||
|
|
$config = get_system_config();
|
||
|
|
$data1 = Db::table('yy_room_bt')->where(['type'=>$type])->order(['id'=>'desc'])->field('consume')->find();
|
||
|
|
|
||
|
|
if($type==4){
|
||
|
|
$xxs_box_consume = $config['xys_bt_bufa_consume_limit1']; //补发消费限制 初级
|
||
|
|
}elseif($type==5){
|
||
|
|
$xxs_box_consume = $config['xys_bt_bufa_consume_limit2']; //补发消费限制 高级
|
||
|
|
}elseif($type==6){
|
||
|
|
$xxs_box_consume = $config['xys_bt_bufa_consume_limit3']; //补发消费限制 中级
|
||
|
|
}
|
||
|
|
|
||
|
|
// $xxs_box_consume = $config['xys_bt_bufa_consume_limit'];
|
||
|
|
|
||
|
|
$xys_bt_bili_man = $config['xys_bt_bili_man'];
|
||
|
|
if($data1){
|
||
|
|
$user_consume = $data1['consume']?:0;
|
||
|
|
//实际百分比
|
||
|
|
// $fact_per = sprintf("%.2f", substr(sprintf("%." . (2 + 1) . "f", ($user_consume/$xxs_box_consume)), 0, -1));
|
||
|
|
// $show_per = ($fact_per>=0.8)?1:$fact_per;
|
||
|
|
|
||
|
|
}else{
|
||
|
|
$user_consume = 0;
|
||
|
|
// $fact_per = 0;
|
||
|
|
// $show_per = 0;
|
||
|
|
}
|
||
|
|
$data3 = ['type'=>$type,'xxs_box_consume'=>$xxs_box_consume,'xxs_dis_box_consume'=>$xxs_box_consume*$xys_bt_bili_man,'xxs_user_consume'=>$user_consume];
|
||
|
|
return ['code' => 200, 'msg' => '开启成功', 'data' => $data3];
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
public function get_box_list($tid)
|
||
|
|
{
|
||
|
|
$map = [];
|
||
|
|
// if($tid == 1){
|
||
|
|
// $map[] = ['tid', 'in',[1,61]];
|
||
|
|
// }else if($tid == 2){
|
||
|
|
// $map[] = ['tid', 'in',[11,62]];
|
||
|
|
// }else if($tid == 3){
|
||
|
|
// $map[] = ['tid', 'in',[21,63]];
|
||
|
|
// }else if($tid == 4){
|
||
|
|
// $map[] = ['tid', 'in',[31,64]];
|
||
|
|
// }else if($tid == 5){
|
||
|
|
// $map[] = ['tid', 'in',[41,65]];
|
||
|
|
// }else if($tid == 6){
|
||
|
|
// $map[] = ['tid', 'in',[51,66]];
|
||
|
|
// }
|
||
|
|
|
||
|
|
if($tid == 4){
|
||
|
|
$map[] = ['tid', 'in',[31,64]];
|
||
|
|
}else if($tid == 5){
|
||
|
|
$map[] = ['tid', 'in',[41,65]];
|
||
|
|
}else if($tid == 6){
|
||
|
|
$map[] = ['tid', 'in',[51,66]];
|
||
|
|
}
|
||
|
|
|
||
|
|
// $map[] = ['tid', '=', $tid];
|
||
|
|
$box_config_gid_arr = db::name('box_config')->where($map)->column('gid');
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['gid', 'in', $box_config_gid_arr];
|
||
|
|
$gift_list = db::name('gift')->where($map)->field('gid,gift_name,gift_price,base_image,play_image')->order('gift_price asc')->cache(600)->select();
|
||
|
|
foreach ($gift_list as $k => &$v) {
|
||
|
|
$v['base_image'] = localpath_to_netpath($v['base_image']);
|
||
|
|
$v['play_image'] = localpath_to_netpath($v['play_image']);
|
||
|
|
}
|
||
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $gift_list];
|
||
|
|
}
|
||
|
|
|
||
|
|
public function get_box_lists($tid)
|
||
|
|
{
|
||
|
|
$gift_list = [];
|
||
|
|
$gift_list['one'] = [];
|
||
|
|
$gift_list['two'] = [];
|
||
|
|
$gift_list['three'] = [];
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['tid', 'in',[31]];
|
||
|
|
// $map[] = ['tid', '=', $tid];
|
||
|
|
$box_config_gid_arr = db::name('box_config')->where($map)->column('gid');
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['gid', 'in', $box_config_gid_arr];
|
||
|
|
$gift_list['one'] = db::name('gift')->where($map)->field('gid,gift_name,gift_price,base_image,play_image')->order('gift_price asc')->cache(600)->select();
|
||
|
|
foreach ($gift_list['one'] as $k => &$v) {
|
||
|
|
$v['base_image'] = localpath_to_netpath($v['base_image']);
|
||
|
|
$v['play_image'] = localpath_to_netpath($v['play_image']);
|
||
|
|
}
|
||
|
|
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['tid', 'in',[41]];
|
||
|
|
$box_config_gid_arr = db::name('box_config')->where($map)->column('gid');
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['gid', 'in', $box_config_gid_arr];
|
||
|
|
$gift_list['two'] = db::name('gift')->where($map)->field('gid,gift_name,gift_price,base_image,play_image')->order('gift_price asc')->cache(600)->select();
|
||
|
|
foreach ($gift_list['two'] as $k => &$v) {
|
||
|
|
$v['base_image'] = localpath_to_netpath($v['base_image']);
|
||
|
|
$v['play_image'] = localpath_to_netpath($v['play_image']);
|
||
|
|
}
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['tid', 'in',[51]];
|
||
|
|
$box_config_gid_arr = db::name('box_config')->where($map)->column('gid');
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['gid', 'in', $box_config_gid_arr];
|
||
|
|
$gift_list['three'] = db::name('gift')->where($map)->field('gid,gift_name,gift_price,base_image,play_image')->order('gift_price asc')->cache(600)->select();
|
||
|
|
foreach ($gift_list['three'] as $k => &$v) {
|
||
|
|
$v['base_image'] = localpath_to_netpath($v['base_image']);
|
||
|
|
$v['play_image'] = localpath_to_netpath($v['play_image']);
|
||
|
|
}
|
||
|
|
|
||
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $gift_list];
|
||
|
|
}
|
||
|
|
|
||
|
|
//获取开宝箱手气榜
|
||
|
|
public function get_box_user_out_amount_rank($box_type, $time_type)
|
||
|
|
{
|
||
|
|
$start_time = 0;
|
||
|
|
$end_time = 0;
|
||
|
|
$date_time = strtotime(date('Ymd'));
|
||
|
|
if($time_type == 1) {
|
||
|
|
$start_time = $date_time;
|
||
|
|
$end_time = $date_time + 86400;
|
||
|
|
} elseif($time_type == 2) {
|
||
|
|
$start_time = $date_time - 86400;
|
||
|
|
$end_time = $date_time;
|
||
|
|
} elseif($time_type == 3) {
|
||
|
|
$wn = date('w', $date_time);
|
||
|
|
if($wn == 0) {
|
||
|
|
$n = 6;
|
||
|
|
} else {
|
||
|
|
$n = $wn - 1;
|
||
|
|
}
|
||
|
|
$start_time = $date_time - $n * 86400;
|
||
|
|
$end_time = time();
|
||
|
|
} else {
|
||
|
|
return ['code' => 201, 'msg' => '参数错误', 'data' => []];
|
||
|
|
}
|
||
|
|
$map = [];
|
||
|
|
$box_type_arr = [];
|
||
|
|
// if($box_type == 1) {
|
||
|
|
// $box_type_arr = [1,11];
|
||
|
|
// } elseif ($box_type == 2) {
|
||
|
|
// $box_type_arr = [2,12];
|
||
|
|
// }elseif ($box_type == 3) {
|
||
|
|
// $box_type_arr = [3,13];
|
||
|
|
// }elseif ($box_type == 4) {
|
||
|
|
// $box_type_arr = [4,14];
|
||
|
|
// }elseif ($box_type == 5) {
|
||
|
|
// $box_type_arr = [5,15];
|
||
|
|
// }elseif ($box_type == 6) {
|
||
|
|
// $box_type_arr = [6,16];
|
||
|
|
// }
|
||
|
|
|
||
|
|
if ($box_type == 4) {
|
||
|
|
$box_type_arr = [4,14];
|
||
|
|
}elseif ($box_type == 5) {
|
||
|
|
$box_type_arr = [5,15];
|
||
|
|
}elseif ($box_type == 6) {
|
||
|
|
$box_type_arr = [6,16];
|
||
|
|
}
|
||
|
|
|
||
|
|
$map[] = ['box_type', 'in', $box_type_arr];
|
||
|
|
$map[] = ['add_time', 'between', [$start_time, $end_time]];
|
||
|
|
$list = Db::name('user_box_count')->where($map)->field('uid,SUM(out_amount) as out_amount')->group('uid')->order('out_amount', 'desc')->limit(10)->select();
|
||
|
|
$uid_list = array_column($list, 'uid');
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['uid', 'in', $uid_list];
|
||
|
|
$user_list = db::name('user')->field('uid,head_pic,base64_nick_name')->where($map)->select();
|
||
|
|
$user_list_data = [];
|
||
|
|
foreach ($user_list as $k => $v) {
|
||
|
|
$user_list_data[$v['uid']]['nick_name'] = mb_convert_encoding(base64_decode($v['base64_nick_name']), 'UTF-8', 'UTF-8');
|
||
|
|
$user_list_data[$v['uid']]['head_pic'] = localpath_to_netpath($v['head_pic']);
|
||
|
|
}
|
||
|
|
|
||
|
|
foreach ($list as $k => &$v) {
|
||
|
|
$v['nick_name'] = $user_list_data[$v['uid']]['nick_name'];
|
||
|
|
$v['head_pic'] = $user_list_data[$v['uid']]['head_pic'];
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $list];
|
||
|
|
}
|
||
|
|
//获取开宝箱手气榜
|
||
|
|
public function get_box_user_sqb_rank($rid, $box_type, $page, $page_limit)
|
||
|
|
{
|
||
|
|
|
||
|
|
$page_limit = $page_limit < 30 ? $page_limit : 30;
|
||
|
|
$page = intval(($page-1)*$page_limit);
|
||
|
|
if (!empty($rid)) {
|
||
|
|
$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];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
$sqb_limit_gift_price = get_system_config('sqb_limit_gift_price');
|
||
|
|
$map = [];
|
||
|
|
if (!empty($rid)) {
|
||
|
|
$map[] = ['rid', '=', $rid];
|
||
|
|
}
|
||
|
|
// $map[] = ['tid', 'in', [1,2,11,12,21,22,31,41,51,61,62,63,64,65,66]];
|
||
|
|
$map[] = ['tid', 'in', [31,41,51]];
|
||
|
|
|
||
|
|
|
||
|
|
// if($box_type==1){
|
||
|
|
// $map[] = ['tid', 'in',[1,2,3,4,31,32,33,34]];
|
||
|
|
// }elseif($box_type == 2){
|
||
|
|
// $map[] = ['tid', 'in',[11,12,13,14,33,34]];
|
||
|
|
// }elseif($box_type == 3){
|
||
|
|
// $map[] = ['tid', 'in',[21,22,35,36]];
|
||
|
|
// }
|
||
|
|
$map[] = ['gift_price', '>', $sqb_limit_gift_price];
|
||
|
|
$user_box_log_list = db::name('user_box_log')->field('uid,gid,rid,tid,num,total_open_num,gift_price,total_price,add_time')->where($map)->whereTime('add_time', 'today')->limit($page, $page_limit)->order('aid desc')->select();
|
||
|
|
// dump($user_box_log_list);exit;
|
||
|
|
$map = [];
|
||
|
|
$gift_list = db::name('gift')->cache(60)->where($map)->select();
|
||
|
|
$gift_data = [];
|
||
|
|
foreach ($gift_list as $k => $v) {
|
||
|
|
$gift_data[$v['gid']]['gift_name'] = $v['gift_name'];
|
||
|
|
$gift_data[$v['gid']]['base_image'] = localpath_to_netpath($v['base_image']);
|
||
|
|
}
|
||
|
|
|
||
|
|
$uid_list = array_column($user_box_log_list, 'uid');
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['uid', 'in', $uid_list];
|
||
|
|
$user_list = db::name('user')->field('uid,head_pic,base64_nick_name')->where($map)->select();
|
||
|
|
$user_list_data = [];
|
||
|
|
foreach ($user_list as $k => $v) {
|
||
|
|
$user_list_data[$v['uid']]['nick_name'] = mb_convert_encoding(base64_decode($v['base64_nick_name']), 'UTF-8', 'UTF-8');
|
||
|
|
$user_list_data[$v['uid']]['head_pic'] = localpath_to_netpath($v['head_pic']);
|
||
|
|
}
|
||
|
|
$box_type_data = db::name('box_type')->cache(60)->column('show_name', 'tid');
|
||
|
|
foreach ($user_box_log_list as $k => &$v) {
|
||
|
|
$v['nick_name'] = $user_list_data[$v['uid']]['nick_name'];
|
||
|
|
$v['head_pic'] = $user_list_data[$v['uid']]['head_pic'];
|
||
|
|
$v['gift_name'] = $gift_data[$v['gid']]['gift_name'];
|
||
|
|
$v['base_image'] = $gift_data[$v['gid']]['base_image'];
|
||
|
|
$v['box_type_name'] = $box_type_data[$v['tid']];
|
||
|
|
}
|
||
|
|
|
||
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $user_box_log_list];
|
||
|
|
}
|
||
|
|
//获取开宝箱手气榜
|
||
|
|
public function get_box_user_gift_rank($page, $page_limit)
|
||
|
|
{
|
||
|
|
if($page > 1) {
|
||
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => []];
|
||
|
|
}
|
||
|
|
// $page_limit = $page_limit < 30 ? $page_limit : 30;
|
||
|
|
// $page = intval(($page-1)*$page_limit);
|
||
|
|
$page_limit = 20;
|
||
|
|
$page = 0;
|
||
|
|
$sqb_limit_gift_price = get_system_config('sqb_limit_gift_price');
|
||
|
|
|
||
|
|
$map = [];
|
||
|
|
// $map[] = ['tid', 'in',[1,2,11,12,21,22,31,41,51,61,62,63,64,65,66]];
|
||
|
|
|
||
|
|
$map[] = ['tid', 'in', [31,41,51]];
|
||
|
|
|
||
|
|
$map[] = ['gift_price', '>', $sqb_limit_gift_price];
|
||
|
|
$user_box_log_list = db::name('user_box_log')->field('uid,gid,rid,tid,num,total_open_num,gift_price,total_price,add_time')->where($map)->limit($page, $page_limit)->order('aid desc')->select();
|
||
|
|
// dump($user_box_log_list);exit;
|
||
|
|
$map = [];
|
||
|
|
$gift_list = db::name('gift')->cache(60)->where($map)->select();
|
||
|
|
$gift_data = [];
|
||
|
|
foreach ($gift_list as $k => $v) {
|
||
|
|
$gift_data[$v['gid']]['gift_name'] = $v['gift_name'];
|
||
|
|
$gift_data[$v['gid']]['base_image'] = localpath_to_netpath($v['base_image']);
|
||
|
|
}
|
||
|
|
|
||
|
|
$uid_list = array_column($user_box_log_list, 'uid');
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['uid', 'in', $uid_list];
|
||
|
|
$user_list = db::name('user')->field('uid,head_pic,base64_nick_name')->where($map)->select();
|
||
|
|
$user_list_data = [];
|
||
|
|
foreach ($user_list as $k => $v) {
|
||
|
|
$user_list_data[$v['uid']]['nick_name'] = mb_convert_encoding(base64_decode($v['base64_nick_name']), 'UTF-8', 'UTF-8');
|
||
|
|
$user_list_data[$v['uid']]['head_pic'] = localpath_to_netpath($v['head_pic']);
|
||
|
|
}
|
||
|
|
$box_type_data = db::name('box_type')->cache(60)->column('show_name', 'tid');
|
||
|
|
foreach ($user_box_log_list as $k => &$v) {
|
||
|
|
$v['nick_name'] = $user_list_data[$v['uid']]['nick_name'];
|
||
|
|
$v['head_pic'] = $user_list_data[$v['uid']]['head_pic'];
|
||
|
|
$v['gift_name'] = $gift_data[$v['gid']]['gift_name'];
|
||
|
|
$v['base_image'] = $gift_data[$v['gid']]['base_image'];
|
||
|
|
$v['box_type_name'] = $box_type_data[$v['tid']];
|
||
|
|
}
|
||
|
|
|
||
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $user_box_log_list];
|
||
|
|
}
|
||
|
|
//获取用户开出礼物列表
|
||
|
|
public function get_user_box_gift_list($uid, $box_type, $page, $page_limit)
|
||
|
|
{
|
||
|
|
$page = intval($page);
|
||
|
|
$page_limit = $page_limit < 30 ? $page_limit : 30;
|
||
|
|
$map = [];
|
||
|
|
// $map['a.uid'] = $uid;
|
||
|
|
$map[]=['a.uid','=',$uid];
|
||
|
|
// if($box_type==1){
|
||
|
|
// $map[] = ['a.tid', 'in',[1,2,11,12,21,22,31,41,51,61,62,63,64,65,66]];
|
||
|
|
$map[] = ['tid', 'in', [31,41,51]];
|
||
|
|
|
||
|
|
|
||
|
|
// }else{
|
||
|
|
// $map[] = ['a.tid', 'in',[3,4]];
|
||
|
|
// }
|
||
|
|
$model = Db::name('user_box_log')->alias('a')->join('yy_gift b', 'a.gid = b.gid');
|
||
|
|
$model = $model->where($map);
|
||
|
|
$list = $model->field('a.num,b.gid,b.gift_name,b.base_image,a.add_time,a.uid,a.tid,a.total_open_num')->order('a.aid desc')->page($page, $page_limit)->select();
|
||
|
|
$uid_list = array_column($list, 'uid');
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['uid', 'in', $uid_list];
|
||
|
|
$user_list = db::name('user')->field('uid,head_pic,base64_nick_name')->where($map)->select();
|
||
|
|
$user_list_data = [];
|
||
|
|
foreach ($user_list as $k => $v) {
|
||
|
|
$user_list_data[$v['uid']]['nick_name'] = mb_convert_encoding(base64_decode($v['base64_nick_name']), 'UTF-8', 'UTF-8');
|
||
|
|
$user_list_data[$v['uid']]['head_pic'] = localpath_to_netpath($v['head_pic']);
|
||
|
|
}
|
||
|
|
$map = [];
|
||
|
|
$gift_list = db::name('gift')->cache(60)->where($map)->select();
|
||
|
|
$gift_data = [];
|
||
|
|
foreach ($gift_list as $k => $v) {
|
||
|
|
$gift_data[$v['gid']]['gift_name'] = $v['gift_name'];
|
||
|
|
$gift_data[$v['gid']]['base_image'] = localpath_to_netpath($v['base_image']);
|
||
|
|
}
|
||
|
|
|
||
|
|
$box_type_data = db::name('box_type')->cache(60)->column('show_name', 'tid');
|
||
|
|
foreach ($list as $k => &$v) {
|
||
|
|
$v['base_image'] = localpath_to_netpath($v['base_image']);
|
||
|
|
$v['head_pic'] = $user_list_data[$v['uid']]['head_pic'];
|
||
|
|
$v['gift_name'] = $gift_data[$v['gid']]['gift_name'];
|
||
|
|
$v['base_image'] = $gift_data[$v['gid']]['base_image'];
|
||
|
|
$v['box_type_name'] = $box_type_data[$v['tid']];
|
||
|
|
$v['nick_name'] = $user_list_data[$v['uid']]['nick_name'];
|
||
|
|
}
|
||
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $list];
|
||
|
|
}
|
||
|
|
//获取宝箱公告
|
||
|
|
public function get_box_note($type)
|
||
|
|
{
|
||
|
|
// if(in_array($type,[4,5,6])){
|
||
|
|
// $box_note = get_system_config('box_note1');
|
||
|
|
// }else{
|
||
|
|
// $box_note = get_system_config('box_note');
|
||
|
|
// }
|
||
|
|
$box_note = get_system_config('box_note1');
|
||
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $box_note];
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
public function open_affiliate_box($uid, $rid, $type, $open_num, $tid)
|
||
|
|
{
|
||
|
|
if (!in_array($open_num, [1, 10, 100])) {
|
||
|
|
return ['code' => 201, 'msg' => '开奖次数参数非法', 'data' => null];
|
||
|
|
}
|
||
|
|
|
||
|
|
$config = get_system_config();
|
||
|
|
$gold_price = $config['box_unit_price'];
|
||
|
|
$drill_price = $config['box_drill_price'];
|
||
|
|
$silver_price = $config['box_silver_price'];
|
||
|
|
$platina_price = $config['box_platina_price'];
|
||
|
|
|
||
|
|
$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; //用户剩余资金
|
||
|
|
$europe_key = 0; //用户所得欧皇钥匙
|
||
|
|
$now_time = time();
|
||
|
|
// $tid = $tid;
|
||
|
|
|
||
|
|
$user_info = db::name('user')->find($uid); //获取用户信息
|
||
|
|
if(!$user_info){
|
||
|
|
return ['code' => 201, 'msg' => '用户信息错误', 'data' => null];
|
||
|
|
}
|
||
|
|
|
||
|
|
if($type == 1){
|
||
|
|
// $tid = 25;
|
||
|
|
$tid_box_price = $silver_price;
|
||
|
|
} else if($type == 2){
|
||
|
|
// $tid = 26;
|
||
|
|
$tid_box_price = $gold_price;
|
||
|
|
} else if($type == 3){
|
||
|
|
// $tid = 27;
|
||
|
|
$tid_box_price = $drill_price;
|
||
|
|
} else if($type == 4){
|
||
|
|
// $tid = 28;
|
||
|
|
$tid_box_price = $platina_price;
|
||
|
|
} else {
|
||
|
|
return ['code' => 201, 'msg' => '参数错误', 'data' => null];
|
||
|
|
}
|
||
|
|
$user_pay_amount = $open_num * $tid_box_price;
|
||
|
|
|
||
|
|
$map = [];
|
||
|
|
$map['rid'] = $rid;
|
||
|
|
$map['is_delete'] = 1;
|
||
|
|
$room_info = db::name('room')->field('rid,is_auto_accumulate')->where($map)->find();
|
||
|
|
if (empty($room_info)) {
|
||
|
|
return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null];
|
||
|
|
}
|
||
|
|
|
||
|
|
//个池数据是否充足
|
||
|
|
$redis = connectionRedis();
|
||
|
|
$gift_price_data = db::name('gift')->column('gift_price', 'gid'); //礼物价值
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['tid', '=', $tid];
|
||
|
|
$box_config_lists = Db::name('box_config')->where($map)->select();
|
||
|
|
if(empty($box_config_lists)){
|
||
|
|
return ['code' => 201, 'msg' => '奖池数量不足', 'data' => null];
|
||
|
|
}
|
||
|
|
|
||
|
|
$keyname = "box:list:tid:" . $tid . ':uid:' . $uid;
|
||
|
|
$list_len = 0;
|
||
|
|
// $del = $redis->del($keyname);
|
||
|
|
$list_len = $redis->llen($keyname);
|
||
|
|
// $list_lens = $redis->lrange($keyname,0,-1);
|
||
|
|
// dump($list_lens);
|
||
|
|
// dump($list_len);exit;
|
||
|
|
if($tid == 35 || $tid == 36) {
|
||
|
|
$len = 15;
|
||
|
|
} else {
|
||
|
|
$len = 150;
|
||
|
|
}
|
||
|
|
if($list_len < $len){
|
||
|
|
$insert_data = [];
|
||
|
|
$total_gift_value = 0;
|
||
|
|
|
||
|
|
//获取0次开出的礼物
|
||
|
|
$where = [];
|
||
|
|
$where[] = ['tid', '=', $tid];
|
||
|
|
$where[] = ['open_num_obtain', '=', 0];
|
||
|
|
$box_config_zero_lists = db::name('box_config')->where($where)->select();
|
||
|
|
foreach ($box_config_zero_lists as $a => $b) {
|
||
|
|
//更新添加次数
|
||
|
|
for ($q = 0; $q < $b['num']; $q++) {
|
||
|
|
$insert_data[] = $b['gid'];
|
||
|
|
}
|
||
|
|
if (empty($gift_price_data[$b['gid']]) && $gift_price_data[$b['gid']] != 0) {
|
||
|
|
return ['code' => 201, 'msg' => '礼物id:' . $b['gid'] . '不存在', 'data' => ''];
|
||
|
|
}
|
||
|
|
$total_gift_value += $gift_price_data[$b['gid']] * $b['num'];
|
||
|
|
}
|
||
|
|
|
||
|
|
shuffle($insert_data);
|
||
|
|
//获取0次以上开出的礼物
|
||
|
|
$where = [];
|
||
|
|
$where[] = ['tid', '=', $tid];
|
||
|
|
$where[] = ['open_num_obtain', '>', 0];
|
||
|
|
$box_config_unzero_lists = db::name('box_config')->where($where)->order('open_num_obtain asc')->select();
|
||
|
|
foreach ($box_config_unzero_lists as $c => $d){
|
||
|
|
$da = [];
|
||
|
|
for ($i = 0; $i < $d['num']; $i++) {
|
||
|
|
$da[] = $d['gid'];
|
||
|
|
}
|
||
|
|
$total_gift_value += $gift_price_data[$d['gid']] * $d['num'];
|
||
|
|
|
||
|
|
$data_count = count($insert_data);
|
||
|
|
$box_open_num = $data_count - $d['open_num_obtain'];
|
||
|
|
$box_array = array_slice($insert_data,0,$d['open_num_obtain']);
|
||
|
|
$box_array_1 = array_slice($insert_data,-$box_open_num,$box_open_num);
|
||
|
|
$insert_data = array_merge($box_array_1,$da);
|
||
|
|
shuffle($insert_data);
|
||
|
|
$insert_data = array_merge($box_array,$insert_data);
|
||
|
|
|
||
|
|
}
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['tid', '=', $tid];
|
||
|
|
$map[] = ['uid', '=', $uid];
|
||
|
|
$map[] = ['del_status','=',1];
|
||
|
|
$box_person_log = db::name('box_person_log')->where($map)->field('bl_id,total_num,total_gift_value')->find();
|
||
|
|
//插入期日志表
|
||
|
|
if(!empty($box_person_log)){
|
||
|
|
$bl_id = $box_person_log['bl_id'];
|
||
|
|
$data = [];
|
||
|
|
$data['total_num'] = count($insert_data) + $box_person_log['total_num'];
|
||
|
|
$data['total_gift_value'] = $total_gift_value + $box_person_log['total_gift_value'];
|
||
|
|
$data['update_time'] = time();
|
||
|
|
$reslut = db::name('box_person_log')->where(['bl_id'=>$box_person_log['bl_id']])->inc('term',1)->update($data);
|
||
|
|
if(!$reslut){
|
||
|
|
return ['code' => 201, 'msg' => '', 'data' => null];
|
||
|
|
}
|
||
|
|
}else{
|
||
|
|
$data = [];
|
||
|
|
$data['tid'] = $tid;
|
||
|
|
$data['uid'] = $uid;
|
||
|
|
$data['total_num'] = count($insert_data);
|
||
|
|
$data['total_gift_value'] = $total_gift_value;
|
||
|
|
$data['config_text'] = json_encode($box_config_lists);
|
||
|
|
$data['add_time'] = time();
|
||
|
|
$data['update_time'] = time();
|
||
|
|
$bl_id = db::name('box_person_log')->insertGetId($data);
|
||
|
|
if(!$bl_id){
|
||
|
|
return ['code' => 201, 'msg' => '', 'data' => null];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
foreach ($insert_data as $p => $q) {
|
||
|
|
$insert_data[$p] = $bl_id . '-' . $insert_data[$p];
|
||
|
|
}
|
||
|
|
// shuffle($insert_data);
|
||
|
|
array_unshift($insert_data, $keyname);
|
||
|
|
call_user_func_array([$redis, 'rPush'], $insert_data);
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
Db::startTrans();
|
||
|
|
try {
|
||
|
|
|
||
|
|
//获取用户必中信息 (每次补发一个)
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['uid', '=', $uid];
|
||
|
|
$map[] = ['tid', '=', $tid];
|
||
|
|
$map[] = ['is_admin', '=', 1];
|
||
|
|
$map[] = ['give_status', '=', 1];
|
||
|
|
$box_give_gift_info = db::name('box_give_gift')->where($map)->find();
|
||
|
|
//插入用户必中
|
||
|
|
$need_open_num = $open_num;
|
||
|
|
if (!empty($box_give_gift_info)) {
|
||
|
|
$data = [];
|
||
|
|
$data['bl_id'] = 0;
|
||
|
|
$data['gid'] = $box_give_gift_info['gid'];
|
||
|
|
$user_gift_id_list[] = $data;
|
||
|
|
$need_open_num--; //待取礼物总数-1
|
||
|
|
}
|
||
|
|
|
||
|
|
//获取待核销必中礼物数据
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['uid', '=', $uid];
|
||
|
|
$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 asc')->column('id', 'gid'); //每种礼物只核销第一个
|
||
|
|
|
||
|
|
|
||
|
|
//获取待开奖池礼物
|
||
|
|
for ($i = 0; $i < $need_open_num; $i++) {
|
||
|
|
$gift_data = $redis->blpop($keyname, 2); //1s 超时
|
||
|
|
if (empty($gift_data)) {
|
||
|
|
// $this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_list);
|
||
|
|
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]);
|
||
|
|
|
||
|
|
$data = [];
|
||
|
|
$data['bl_id'] = $bl_id;
|
||
|
|
$data['gid'] = $gid;
|
||
|
|
$user_gift_id_redis_list[] = $data;
|
||
|
|
|
||
|
|
|
||
|
|
//更新对应数据
|
||
|
|
//补偿表 更新
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['id', '=', $id];
|
||
|
|
$map[] = ['tid', '=', $tid];
|
||
|
|
$map[] = ['gid', '=', $gid];
|
||
|
|
$map[] = ['deduction_status', '=', 1];
|
||
|
|
$data = [];
|
||
|
|
$data['deduction_bl_id'] = $bl_id;
|
||
|
|
$data['deduction_status'] = 2;
|
||
|
|
$data['deduction_time'] = time();
|
||
|
|
$data['update_time'] = time();
|
||
|
|
$reslut = db::name('box_give_gift')->where($map)->order('id asc')->limit(1)->update($data);
|
||
|
|
if (!$reslut) {
|
||
|
|
Db::rollback();
|
||
|
|
$this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list);
|
||
|
|
return ['code' => 201, 'msg' => '请重试', 'data' => null];
|
||
|
|
}
|
||
|
|
|
||
|
|
//开宝箱记录表更新
|
||
|
|
// $map = [];
|
||
|
|
// $map[] = ['uid', '=', $uid];
|
||
|
|
// $map[] = ['tid', '=', $tid];
|
||
|
|
// $map[] = ['gid', '=', $gid];
|
||
|
|
// $map[] = ['num', '=', 1];
|
||
|
|
// $map[] = ['bl_id', '=', 0];
|
||
|
|
// $data = [];
|
||
|
|
// $data['bl_id'] = $bl_id;
|
||
|
|
// $data['update_time'] = time();
|
||
|
|
// $reslut = db::name('user_box_log')->where($map)->order('aid asc')->limit(1)->update($data);
|
||
|
|
// if (!$reslut) {
|
||
|
|
// Db::rollback();
|
||
|
|
// $this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list);
|
||
|
|
// return ['code' => 201, 'msg' => '请重试', 'data' => null];
|
||
|
|
// }
|
||
|
|
//重新从队列获取一个礼物信息
|
||
|
|
$gift_data = $redis->blpop($keyname, 2); //1s 超时
|
||
|
|
if (empty($gift_data)) {
|
||
|
|
$this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list);
|
||
|
|
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;
|
||
|
|
$user_gift_id_redis_list[] = $data;
|
||
|
|
$user_gift_id_list[] = $data;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if (count($user_gift_id_list) != $open_num) {
|
||
|
|
$this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list);
|
||
|
|
return ['code' => 201, 'msg' => '奖池数量不足', 'data' => null];
|
||
|
|
}
|
||
|
|
|
||
|
|
//取出所有礼物数据
|
||
|
|
$gift_list = db::name('gift')->field('gid,gift_name,gift_price,base_image,play_image,gift_type')->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;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
//整理用户抽中礼物数量
|
||
|
|
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);
|
||
|
|
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);
|
||
|
|
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'];
|
||
|
|
|
||
|
|
$user_win_gift_total_value += $gift_list_data[$v['gid']]['gift_price'];
|
||
|
|
|
||
|
|
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'];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
//扣除账户积分
|
||
|
|
$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);
|
||
|
|
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_person_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);
|
||
|
|
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);
|
||
|
|
return ['code' => 201, 'msg' => '', 'data' => null];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
//添加用户开宝箱日志
|
||
|
|
$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_pay_price'] = $n['open_num'] * $tid_box_price;
|
||
|
|
$data['total_open_num'] = $open_num;
|
||
|
|
$data['add_time'] = $now_time;
|
||
|
|
$data['update_time'] = $now_time;
|
||
|
|
$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);
|
||
|
|
return ['code' => 201, 'msg' => '', 'data' => null];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
//添加用户开宝箱数据统计
|
||
|
|
$time = strtotime(date("Y-m-d"));
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['uid', '=', $user_info['uid']];
|
||
|
|
// if($type == 2){
|
||
|
|
// $box_type = 5;
|
||
|
|
// $map[] = ['box_type', '=', 5];
|
||
|
|
// }else{
|
||
|
|
$box_type = $type;
|
||
|
|
$map[] = ['box_type', '=', $box_type];
|
||
|
|
// }
|
||
|
|
|
||
|
|
$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);
|
||
|
|
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['box_type'] = $box_type;
|
||
|
|
$data['out_amount'] = $user_pay_amount;
|
||
|
|
$data['in_amount'] = $user_win_gift_total_value;
|
||
|
|
$data['profit'] = $profit;
|
||
|
|
$data['rate'] = $rate;
|
||
|
|
$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);
|
||
|
|
return ['code' => 201, 'msg' => '', 'data' => null];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
//添加房间开宝箱数据统计
|
||
|
|
$time = strtotime(date("Y-m-d"));
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['rid', '=', $rid];
|
||
|
|
// if($type == 2){
|
||
|
|
// $box_type = 5;
|
||
|
|
// $map[] = ['box_type', '=', 5];
|
||
|
|
// }else{
|
||
|
|
$box_type = $type;
|
||
|
|
$map[] = ['box_type', '=', $box_type];
|
||
|
|
// }
|
||
|
|
// $box_type = $type;
|
||
|
|
// $map[] = ['box_type', '=', $box_type];
|
||
|
|
$map[] = ['add_time', '>', $time];
|
||
|
|
$room_box_count_info = db::name('room_box_count')->where($map)->find();
|
||
|
|
if (!empty($room_box_count_info)) {
|
||
|
|
$rate = 0; //支收比
|
||
|
|
$rate = round(($user_win_gift_total_value + $room_box_count_info['in_amount']) / ($room_box_count_info['out_amount'] + $user_pay_amount), 4);
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['sid', '=', $room_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('room_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);
|
||
|
|
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['rid'] = $rid;
|
||
|
|
$data['box_type'] = $box_type;
|
||
|
|
$data['out_amount'] = $user_pay_amount;
|
||
|
|
$data['in_amount'] = $user_win_gift_total_value;
|
||
|
|
$data['profit'] = $profit;
|
||
|
|
$data['rate'] = $rate;
|
||
|
|
$data['add_time'] = $now_time;
|
||
|
|
$data['update_time'] = $now_time;
|
||
|
|
$reslut = db::name('room_box_count')->insert($data);
|
||
|
|
if (!$reslut) {
|
||
|
|
Db::rollback();
|
||
|
|
$this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list);
|
||
|
|
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);
|
||
|
|
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);
|
||
|
|
return ['code' => 201, 'msg' => '', 'data' => null];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
//用户消费累计
|
||
|
|
if($user_info['is_tester'] != 2){
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['uid', '=', $user_info['uid']];
|
||
|
|
if ($type == 1) {
|
||
|
|
$reslut = db::name('user')->where($map)->inc('silver_consume', $user_pay_amount)->update();
|
||
|
|
}else if($type == 2){
|
||
|
|
$reslut = db::name('user')->where($map)->inc('gold_consume', $user_pay_amount)->update();
|
||
|
|
}else if($type == 3){
|
||
|
|
$reslut = db::name('user')->where($map)->inc('drill_consume', $user_pay_amount)->update();
|
||
|
|
}else if($type == 4){
|
||
|
|
$reslut = db::name('user')->where($map)->inc('platina_consume', $user_pay_amount)->update();
|
||
|
|
}
|
||
|
|
if(!$reslut){
|
||
|
|
Db::rollback();
|
||
|
|
$this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list);
|
||
|
|
return ['code' => 201, 'msg' => '请重试', 'data' => null];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
//赠送礼物增加财富值 贡献值
|
||
|
|
// $reslut = model('User')->change_user_contribution_value($uid, $user_pay_amount);
|
||
|
|
// if ($reslut['code'] == 201) {
|
||
|
|
// Db::rollback();
|
||
|
|
// return ['code' => 201, 'msg' => '请重试1', 'data' => null];
|
||
|
|
// }
|
||
|
|
|
||
|
|
|
||
|
|
Db::commit();
|
||
|
|
|
||
|
|
//推送礼物信息
|
||
|
|
$user_charm_info = model('User')->get_user_charm_contribution_info($user_info['uid']);
|
||
|
|
$push_all_gift_data = [];
|
||
|
|
$push_group_gift_data = [];
|
||
|
|
$push_sqb_gift_data = [];
|
||
|
|
$push_all_gift_data['user_info']['uid'] = $user_info['uid'];
|
||
|
|
$push_all_gift_data['user_info']['nick_name'] = mb_convert_encoding(base64_decode($user_info['base64_nick_name']), 'UTF-8', 'UTF-8');
|
||
|
|
$push_all_gift_data['user_info']['head_pic'] = localpath_to_netpath($user_info['head_pic']);
|
||
|
|
$push_all_gift_data['user_info']['contribution_level_image'] = $user_charm_info['data']['contribution_level_image'];
|
||
|
|
$push_group_gift_data['user_info']['uid'] = $user_info['uid'];
|
||
|
|
$push_group_gift_data['user_info']['nick_name'] = mb_convert_encoding(base64_decode($user_info['base64_nick_name']), 'UTF-8', 'UTF-8');
|
||
|
|
$push_group_gift_data['user_info']['head_pic'] = localpath_to_netpath($user_info['head_pic']);
|
||
|
|
$push_group_gift_data['user_info']['contribution_level_image'] = $user_charm_info['data']['contribution_level_image'];
|
||
|
|
|
||
|
|
foreach ($user_win_gift_data as $k => &$v) {
|
||
|
|
$v['surprise'] = 0;
|
||
|
|
if($v['gift_price'] > $config['big_gift_price']){
|
||
|
|
$v['surprise'] = 1;
|
||
|
|
}
|
||
|
|
unset($v['id']);
|
||
|
|
$v['type_name'] = db::name('box_type')->where('tid',$tid)->value('show_name');
|
||
|
|
$v['box_type'] = $tid;
|
||
|
|
if ($v['is_public_server'] == 1) {
|
||
|
|
if($v['gift_price'] > $config['sqb_limit_gift_price']){
|
||
|
|
$sqb_gift_info = $v;
|
||
|
|
|
||
|
|
$sqb_gift_info['uid'] = $user_info['uid'];
|
||
|
|
$sqb_gift_info['nick_name'] = mb_convert_encoding(base64_decode($user_info['base64_nick_name']), 'UTF-8', 'UTF-8');
|
||
|
|
$sqb_gift_info['head_pic'] = localpath_to_netpath($user_info['head_pic']);
|
||
|
|
$sqb_gift_info['num'] = $v['open_num'];
|
||
|
|
$sqb_gift_info['total_open_num'] = $open_num;
|
||
|
|
$sqb_gift_info['box_type_name'] = $v['type_name'];
|
||
|
|
$push_all_gift_data['gift_list'][] = $sqb_gift_info;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if ($v['is_public_screen'] == 1) {
|
||
|
|
$push_group_gift_data['gift_list'][] = $v;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if (!empty($push_all_gift_data['gift_list'])) {
|
||
|
|
$push_data = [];
|
||
|
|
$push_data['code'] = 304;
|
||
|
|
$push_data['msg'] = "开宝箱全服播报数据";
|
||
|
|
$push_data['data'] = $push_all_gift_data;
|
||
|
|
model('api/WebSocketPush')->send_to_all($push_data);
|
||
|
|
}else if (!empty($push_group_gift_data['gift_list'])) {
|
||
|
|
$push_data = [];
|
||
|
|
$push_data['code'] = 303;
|
||
|
|
$push_data['msg'] = "开宝箱房间播报数据";
|
||
|
|
$push_data['data'] = $push_group_gift_data;
|
||
|
|
model('api/WebSocketPush')->send_to_group($rid, $push_data);
|
||
|
|
}
|
||
|
|
|
||
|
|
$data = [];
|
||
|
|
$data['win_gift_list'] = array_values($user_win_gift_data);
|
||
|
|
$data['user_win_gift_total_value'] = $user_win_gift_total_value;
|
||
|
|
// $data['user_money'] = $surplus_user_money;
|
||
|
|
$data['user_money'] = db::name('user')->where('uid',$uid)->value('integral');
|
||
|
|
return ['code' => 200, 'msg' => '开奖成功', 'data' => $data];
|
||
|
|
} catch (\Exception $e) {
|
||
|
|
//回滚事务
|
||
|
|
dump($e);
|
||
|
|
$this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list);
|
||
|
|
Db::rollback();
|
||
|
|
return ['code' => 201, 'msg' => '开奖失败', 'data' => null];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public function auto_open_virtual_box()
|
||
|
|
{
|
||
|
|
//功能开关
|
||
|
|
$config = get_uncache_system_config();
|
||
|
|
if($config['open_virtual_report'] != 1){
|
||
|
|
return ['code' => 201, 'msg' => '该功能未开放', 'data' => null];
|
||
|
|
}
|
||
|
|
|
||
|
|
//随机虚拟用户
|
||
|
|
$virtual_user_array = db::name('user')->where('is_tester',2)->order('uid asc')->cache(60)->column('uid');
|
||
|
|
if(!empty($virtual_user_array)){
|
||
|
|
$a = array_rand($virtual_user_array,1);
|
||
|
|
$uid = $virtual_user_array[$a];
|
||
|
|
}else{
|
||
|
|
return ['code' => 201, 'msg' => '暂未设置虚拟号', 'data' => null];
|
||
|
|
}
|
||
|
|
|
||
|
|
//随机宝箱类型
|
||
|
|
$virtual_box_type_list = [];
|
||
|
|
if($config['open_silver_box_status'] == 1){
|
||
|
|
$virtual_box_type_list[] = 1;
|
||
|
|
}
|
||
|
|
if($config['open_gold_box_status'] == 1){
|
||
|
|
$virtual_box_type_list[] = 2;
|
||
|
|
}
|
||
|
|
if($config['open_drill_box_status'] == 1){
|
||
|
|
$virtual_box_type_list[] = 3;
|
||
|
|
}
|
||
|
|
if(empty($virtual_box_type_list)){
|
||
|
|
return ['code' => 201, 'msg' => '暂未开放', 'data' => null];
|
||
|
|
}
|
||
|
|
$cz = array_rand($virtual_box_type_list,1);
|
||
|
|
$type = $virtual_box_type_list[$cz];
|
||
|
|
// $type = rand(1,3);
|
||
|
|
|
||
|
|
|
||
|
|
//随机次数
|
||
|
|
// $open_num_list = [10];
|
||
|
|
// $b = array_rand($open_num_list,1);
|
||
|
|
// $open_num = $open_num_list[$b];
|
||
|
|
|
||
|
|
// if (!in_array($open_num, [1, 10])) {
|
||
|
|
// return ['code' => 201, 'msg' => '开奖次数参数非法', 'data' => null];
|
||
|
|
// }
|
||
|
|
if(in_array($type,[3])){
|
||
|
|
$open_num_list = [1,10];
|
||
|
|
}else{
|
||
|
|
$open_num_list = [10,100];
|
||
|
|
}
|
||
|
|
$b = array_rand($open_num_list,1);
|
||
|
|
$open_num = $open_num_list[$b];
|
||
|
|
|
||
|
|
if (!in_array($open_num, [1,10,100])) {
|
||
|
|
return ['code' => 201, 'msg' => '开奖次数参数非法', 'data' => null];
|
||
|
|
}
|
||
|
|
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['b.is_tester', '=', 2];
|
||
|
|
$map[] = ['a.is_delete', '=', 1];
|
||
|
|
$room_info = db::name('room')->alias('a')->join('yy_user b', 'b.uid = a.room_owner_uid')->field('a.rid,a.is_auto_accumulate,a.room_owner_uid')->where($map)->find();
|
||
|
|
if (empty($room_info)) {
|
||
|
|
return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null];
|
||
|
|
}
|
||
|
|
$rid = $room_info['rid'];
|
||
|
|
|
||
|
|
$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; //用户剩余资金
|
||
|
|
$europe_key = 0;//用户所得皇钥匙
|
||
|
|
$now_time = time();
|
||
|
|
$tid = '';
|
||
|
|
|
||
|
|
$user_info = db::name('user')->find($uid); //获取用户信息
|
||
|
|
if(!$user_info){
|
||
|
|
return ['code' => 201, 'msg' => '用户信息不存在', 'data' => null];
|
||
|
|
}
|
||
|
|
//不同宝箱类型
|
||
|
|
//判断是否是虚拟用户
|
||
|
|
if($user_info['is_tester']==2){
|
||
|
|
if($type == 1){
|
||
|
|
$tid = 61;
|
||
|
|
}else if($type == 2){
|
||
|
|
$tid = 62;
|
||
|
|
}else if($type == 3){
|
||
|
|
$tid = 63;
|
||
|
|
}
|
||
|
|
}else{
|
||
|
|
return ['code' => 201, 'msg' => '参数错误', 'data' => null];
|
||
|
|
}
|
||
|
|
|
||
|
|
//该奖池是否配置礼物
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['tid', '=', $tid];
|
||
|
|
$is_box_config = db('box_config')->where($map)->select();
|
||
|
|
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(60)->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];
|
||
|
|
}
|
||
|
|
$user_pay_amount = $open_num * $box_type_data[$tid]['open_price'];
|
||
|
|
$tid_box_price = $box_type_data[$tid]['open_price'];
|
||
|
|
$keyname = "box:list:tid:".$tid;
|
||
|
|
|
||
|
|
if ($keyname == "box:list:tid:") {
|
||
|
|
return ['code' => 201, 'msg' => '开奖类型非法参数', 'data' => null];
|
||
|
|
}
|
||
|
|
// 启动事务
|
||
|
|
Db::startTrans();
|
||
|
|
try {
|
||
|
|
//获取用户必中信息 (每次补发一个)
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['uid', '=', $uid];
|
||
|
|
$map[] = ['tid', '=', $tid];
|
||
|
|
$map[] = ['is_admin', '=', 1];
|
||
|
|
$map[] = ['give_status', '=', 1];
|
||
|
|
$box_give_gift_info = db::name('box_give_gift')->where($map)->find();
|
||
|
|
//插入用户必中
|
||
|
|
$need_open_num = $open_num;
|
||
|
|
if (!empty($box_give_gift_info)) {
|
||
|
|
$data = [];
|
||
|
|
$data['bl_id'] = 0;
|
||
|
|
$data['gid'] = $box_give_gift_info['gid'];
|
||
|
|
$user_gift_id_list[] = $data;
|
||
|
|
$need_open_num--; //待取礼物总数-1
|
||
|
|
}
|
||
|
|
|
||
|
|
//获取待核销必中礼物数据
|
||
|
|
$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 asc')->column('id', 'gid'); //每种礼物只核销第一个
|
||
|
|
|
||
|
|
//获取待开奖池礼物
|
||
|
|
for ($i = 0; $i < $need_open_num; $i++) {
|
||
|
|
$gift_data = $redis->blpop($keyname, 2); //1s 超时
|
||
|
|
if (empty($gift_data)) {
|
||
|
|
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]);
|
||
|
|
|
||
|
|
$data = [];
|
||
|
|
$data['bl_id'] = $bl_id;
|
||
|
|
$data['gid'] = $gid;
|
||
|
|
$user_gift_id_redis_list[] = $data;
|
||
|
|
|
||
|
|
//更新对应数据
|
||
|
|
//补偿表 更新
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['id', '=', $id];
|
||
|
|
$map[] = ['tid', '=', $tid];
|
||
|
|
$map[] = ['gid', '=', $gid];
|
||
|
|
$map[] = ['deduction_status', '=', 1];
|
||
|
|
$data = [];
|
||
|
|
$data['deduction_bl_id'] = $bl_id;
|
||
|
|
$data['deduction_status'] = 2;
|
||
|
|
$data['deduction_time'] = time();
|
||
|
|
$data['update_time'] = time();
|
||
|
|
$reslut = db::name('box_give_gift')->where($map)->order('id asc')->limit(1)->update($data);
|
||
|
|
if (!$reslut) {
|
||
|
|
Db::rollback();
|
||
|
|
$this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list);
|
||
|
|
return ['code' => 201, 'msg' => '请重试', 'data' => null];
|
||
|
|
}
|
||
|
|
|
||
|
|
//开宝箱记录表更新
|
||
|
|
// $map = [];
|
||
|
|
// $map[] = ['tid', '=', $tid];
|
||
|
|
// $map[] = ['gid', '=', $gid];
|
||
|
|
// $map[] = ['num', '=', 1];
|
||
|
|
// $map[] = ['bl_id', '=', 0];
|
||
|
|
// $data = [];
|
||
|
|
// $data['bl_id'] = $bl_id;
|
||
|
|
// $data['update_time'] = time();
|
||
|
|
// $reslut = db::name('user_box_log')->where($map)->order('aid asc')->limit(1)->update($data);
|
||
|
|
// if (!$reslut) {
|
||
|
|
// Db::rollback();
|
||
|
|
// $this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list);
|
||
|
|
// return ['code' => 201, 'msg' => '请重试', 'data' => null];
|
||
|
|
// }
|
||
|
|
//重新从队列获取一个礼物信息
|
||
|
|
$gift_data = $redis->blpop($keyname, 2); //1s 超时
|
||
|
|
if (empty($gift_data)) {
|
||
|
|
$this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list);
|
||
|
|
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;
|
||
|
|
$user_gift_id_redis_list[] = $data;
|
||
|
|
$user_gift_id_list[] = $data;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if (count($user_gift_id_list) != $open_num) {
|
||
|
|
$this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list);
|
||
|
|
return ['code' => 201, 'msg' => '奖池数量不足', 'data' => null];
|
||
|
|
}
|
||
|
|
|
||
|
|
//取出所有礼物数据
|
||
|
|
$gift_list = db::name('gift')->field('gid,gift_name,gift_price,base_image,play_image,gift_type')->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;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
//整理用户抽中礼物数量
|
||
|
|
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);
|
||
|
|
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);
|
||
|
|
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($v['bl_id'] == 0){
|
||
|
|
$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'];
|
||
|
|
}else{
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['bl_id', '=', $v['bl_id']];
|
||
|
|
$bl_tid = db::name('box_log')->where($map)->value('tid');
|
||
|
|
$user_win_gift_data[$v['gid']]['is_public_screen'] = $box_config_list_data[$v['gid']][$bl_tid]['is_public_screen'];
|
||
|
|
$user_win_gift_data[$v['gid']]['is_public_server'] = $box_config_list_data[$v['gid']][$bl_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'];
|
||
|
|
}
|
||
|
|
|
||
|
|
$surplus_user_money = $user_info['integral'];
|
||
|
|
|
||
|
|
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);
|
||
|
|
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);
|
||
|
|
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['total_pay_price'] = $n['open_num'] * $tid_box_price;
|
||
|
|
$data['add_time'] = $now_time;
|
||
|
|
$data['update_time'] = $now_time;
|
||
|
|
$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);
|
||
|
|
return ['code' => 201, 'msg' => '请重试', 'data' => null];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
//添加用户开宝箱统计数据
|
||
|
|
$time = strtotime(date("Y-m-d"));
|
||
|
|
$box_type = 0;
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['uid', '=', $user_info['uid']];
|
||
|
|
if ($user_info['is_tester'] == 2) {
|
||
|
|
if($type == 1){
|
||
|
|
$map[] = ['box_type','=',6];
|
||
|
|
$box_type = 6;
|
||
|
|
}else if($type == 2){
|
||
|
|
$map[] = ['box_type','=',7];
|
||
|
|
$box_type = 7;
|
||
|
|
}else if($type == 3){
|
||
|
|
$map[] = ['box_type','=',8];
|
||
|
|
$box_type = 8;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
$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);
|
||
|
|
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);
|
||
|
|
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);
|
||
|
|
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);
|
||
|
|
return ['code' => 201, 'msg' => '请重试', 'data' => null];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// 提交事务
|
||
|
|
Db::commit();
|
||
|
|
|
||
|
|
//推送礼物信息
|
||
|
|
$user_charm_info = model('User')->get_user_charm_contribution_info($user_info['uid']);
|
||
|
|
$push_all_gift_data = [];
|
||
|
|
$push_group_gift_data = [];
|
||
|
|
$push_all_gift_data['user_info']['uid'] = $user_info['uid'];
|
||
|
|
$push_all_gift_data['user_info']['nick_name'] = mb_convert_encoding(base64_decode($user_info['base64_nick_name']), 'UTF-8', 'UTF-8');
|
||
|
|
$push_all_gift_data['user_info']['head_pic'] = localpath_to_netpath($user_info['head_pic']);
|
||
|
|
$push_all_gift_data['user_info']['contribution_level_image'] = $user_charm_info['data']['contribution_level_image'];
|
||
|
|
$push_group_gift_data['user_info']['uid'] = $user_info['uid'];
|
||
|
|
$push_group_gift_data['user_info']['nick_name'] = mb_convert_encoding(base64_decode($user_info['base64_nick_name']), 'UTF-8', 'UTF-8');
|
||
|
|
$push_group_gift_data['user_info']['head_pic'] = localpath_to_netpath($user_info['head_pic']);
|
||
|
|
$push_group_gift_data['user_info']['contribution_level_image'] = $user_charm_info['data']['contribution_level_image'];
|
||
|
|
|
||
|
|
foreach ($user_win_gift_data as $k => &$v) {
|
||
|
|
//是否大礼物展示
|
||
|
|
$v['surprise'] = 0;
|
||
|
|
if($v['gift_price'] > $config['big_gift_price']){
|
||
|
|
$v['surprise'] = 1;
|
||
|
|
}
|
||
|
|
unset($v['bl_id']);
|
||
|
|
$v['type_name'] = $box_type_data[$tid]['show_name'];
|
||
|
|
$v['box_type'] = $tid;
|
||
|
|
if ($v['is_public_server'] == 1) {
|
||
|
|
$sqb_gift_info = $v;
|
||
|
|
|
||
|
|
$sqb_gift_info['uid'] = $user_info['uid'];
|
||
|
|
$sqb_gift_info['nick_name'] = mb_convert_encoding(base64_decode($user_info['base64_nick_name']), 'UTF-8', 'UTF-8');
|
||
|
|
$sqb_gift_info['head_pic'] = localpath_to_netpath($user_info['head_pic']);
|
||
|
|
$sqb_gift_info['num'] = $v['open_num'];
|
||
|
|
$sqb_gift_info['total_open_num'] = $open_num;
|
||
|
|
$sqb_gift_info['box_type_name'] = $v['type_name'];
|
||
|
|
$push_all_gift_data['gift_list'][] = $sqb_gift_info;
|
||
|
|
}
|
||
|
|
if ($v['is_public_screen'] == 1) {
|
||
|
|
$push_group_gift_data['gift_list'][] = $v;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if (!empty($push_all_gift_data['gift_list'])) {
|
||
|
|
$push_data = [];
|
||
|
|
$push_data['code'] = 304;
|
||
|
|
$push_data['msg'] = "开宝箱全服播报数据";
|
||
|
|
$push_data['data'] = $push_all_gift_data;
|
||
|
|
model('api/WebSocketPush')->send_to_all($push_data);
|
||
|
|
}else if (!empty($push_group_gift_data['gift_list'])) {
|
||
|
|
$push_data = [];
|
||
|
|
$push_data['code'] = 303;
|
||
|
|
$push_data['msg'] = "开宝箱房间播报数据";
|
||
|
|
$push_data['data'] = $push_group_gift_data;
|
||
|
|
model('api/WebSocketPush')->send_to_group($rid, $push_data);
|
||
|
|
}
|
||
|
|
|
||
|
|
$data = [];
|
||
|
|
$data['win_gift_list'] = array_values($user_win_gift_data);
|
||
|
|
$data['user_win_gift_total_value'] = $user_win_gift_total_value;
|
||
|
|
$data['user_money'] = $surplus_user_money;
|
||
|
|
return ['code' => 200, 'msg' => '开启成功', 'data' => $data];
|
||
|
|
//推送礼物
|
||
|
|
} catch (\Exception $e) {
|
||
|
|
// 回滚事务
|
||
|
|
dump($e);
|
||
|
|
$this->redis_gift_data_rollback($redis, $keyname, $user_gift_id_redis_list);
|
||
|
|
Db::rollback();
|
||
|
|
return ['code' => 201, 'msg' => '开启失败', 'data' => null];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
//用户投入爆率产出
|
||
|
|
public function get_user_box_count($uid,$type){
|
||
|
|
$user_info = db::name('user')->find($uid);
|
||
|
|
if($user_info['is_tester'] == 2){
|
||
|
|
if($type == 1){
|
||
|
|
$type = 11;
|
||
|
|
}else if($type == 2){
|
||
|
|
$type = 12;
|
||
|
|
}else if($type == 3){
|
||
|
|
$type = 13;
|
||
|
|
}else if($type == 4){
|
||
|
|
$type = 14;
|
||
|
|
}else if($type == 5){
|
||
|
|
$type = 15;
|
||
|
|
}else if($type == 6){
|
||
|
|
$type = 16;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
$time = strtotime(date('Y-m-d'));
|
||
|
|
$map = [];
|
||
|
|
$map[] = ['uid','=',$uid];
|
||
|
|
$map[] = ['box_type','=',$type];
|
||
|
|
$map[] = ['add_time', '>', $time];
|
||
|
|
// dump($map);exit;
|
||
|
|
$user_box_count = db::name('user_box_count')->where($map)->field('out_amount,in_amount')->find();
|
||
|
|
if($user_box_count){
|
||
|
|
$data = [];
|
||
|
|
$data['out_amount'] = $user_box_count['out_amount'];
|
||
|
|
$data['in_amount'] = $user_box_count['in_amount'];
|
||
|
|
$data['rate'] = round(($data['in_amount'] / $data['out_amount']),4)*100;
|
||
|
|
$data['rate'] .= '%';
|
||
|
|
}else{
|
||
|
|
$data = [];
|
||
|
|
$data['out_amount'] = 0;
|
||
|
|
$data['in_amount'] = 0;
|
||
|
|
$data['rate'] = '0%';
|
||
|
|
}
|
||
|
|
|
||
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
|
||
|
|
}
|
||
|
|
public function get_user_box_times($uid)
|
||
|
|
{
|
||
|
|
$config = get_uncache_system_config();
|
||
|
|
$user_box_times = db::name('user_box_statics')->where(['uid'=>$uid,'box_date'=>date('Y-m-d')])->value('box_times');
|
||
|
|
if($config['user_day_box_limit_times'] >= $user_box_times) {
|
||
|
|
$user_box_times = $config['user_day_box_limit_times'] - $user_box_times;
|
||
|
|
} else {
|
||
|
|
$user_box_times = 0;
|
||
|
|
}
|
||
|
|
return ['code' => 200, 'msg' => '获取数据成功', 'data' => ['user_box_times' => $user_box_times]];
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|