788 lines
31 KiB
PHP
788 lines
31 KiB
PHP
<?php
|
|
|
|
namespace app\api\model;
|
|
|
|
use think\Model;
|
|
use think\db;
|
|
|
|
class NewBox extends Model
|
|
{
|
|
private function file_unlock($fh) {
|
|
flock($fh, LOCK_UN);
|
|
fclose($fh);
|
|
}
|
|
//获取奖励期数
|
|
public function open_new_box($uid, $nbl_id, $pay_amount, $rid)
|
|
{
|
|
|
|
$config = get_uncache_system_config();
|
|
//宝箱是否关闭
|
|
if($config['open_box_status'] != 1){
|
|
return ['code' => 201, 'msg' => '功能关闭中', 'data' => null];
|
|
}
|
|
|
|
if($config['explore_box_status'] != 1){
|
|
return ['code' => 201, 'msg' => '奖池关闭中!', 'data' => null];
|
|
}
|
|
|
|
|
|
$redis = connectionRedis();
|
|
if(intval($pay_amount) != $pay_amount) {
|
|
return ['code' => 201, 'msg' => '投入金币只能为整数', 'data' => null];
|
|
}
|
|
$pay_amount_num = bcdiv($pay_amount, 10, 1);
|
|
if(ceil($pay_amount_num) != $pay_amount_num) {
|
|
return ['code' => 201, 'msg' => '投入金币只能为10的整数倍', 'data' => null];
|
|
}
|
|
$unique_key = $nbl_id;
|
|
$path = './lock/lock_new_box' . $unique_key . '.txt';
|
|
$fh = fopen($path, 'w');
|
|
flock($fh, LOCK_EX);
|
|
$keyname = 'user:new:box:nbl_id:'. $nbl_id;
|
|
|
|
$info = Db::name('new_box_log')->where('id', $nbl_id)->find();
|
|
if(empty($info)) {
|
|
$this->file_unlock($fh);
|
|
return ['code' => 201, 'msg' => '数据不存在', 'data' => null];
|
|
}
|
|
|
|
//活动队列名称
|
|
$keyname_num_sn = 'new:box:nb_id:'. $info['nb_id'];
|
|
|
|
if($info['status'] != 1) {
|
|
$this->file_unlock($fh);
|
|
return ['code' => 201, 'msg' => '本期已结束', 'data' => null];
|
|
}
|
|
if(($info['total_amount'] - $info['amount']) < $pay_amount) {
|
|
$this->file_unlock($fh);
|
|
return ['code' => 201, 'msg' => '投入金币过多', 'data' => null];
|
|
}
|
|
$user_info = Db::name('user')->where('uid', $uid)->field('uid,integral,base64_nick_name,is_tester')->find();
|
|
if(empty($user_info)) {
|
|
$this->file_unlock($fh);
|
|
return ['code' => 201, 'msg' => '用户数据不存在', 'data' => null];
|
|
}
|
|
if($user_info['is_tester'] != 1) {
|
|
$this->file_unlock($fh);
|
|
return ['code' => 201, 'msg' => '测试号不支持该玩法', 'data' => null];
|
|
}
|
|
if($user_info['integral'] < $pay_amount) {
|
|
$this->file_unlock($fh);
|
|
return ['code' => 201, 'msg' => '用户金币不足', 'data' => null];
|
|
}
|
|
//是否需要回退redis数据
|
|
$is_call_back_redis = 0;
|
|
//如果投入金币等于总投入本期结束
|
|
$is_over = 0;
|
|
$gift_price = Db::name('gift')->where('gid', $info['gid'])->value('gift_price');
|
|
//是否可回退编号
|
|
$is_call_back_redis_num_sn = 0;
|
|
//用户编号
|
|
$user_new_box_num_sn = [];
|
|
//回退数
|
|
$user_new_box_num_sn_reids_list = [];
|
|
//赢取礼物人id
|
|
$win_uid = 0;
|
|
// dump($redis->lrange($keyname_num_sn, 0, -1));die;
|
|
Db::startTrans();
|
|
try {
|
|
|
|
//在该奖池总投入
|
|
$reslut = model('admin/User')->change_user_money_by_uid($uid, ($pay_amount * -1), 2, 61, "龙蛋神谕玩法", $uid, 0, $rid);
|
|
if ($reslut['code'] != 200) {
|
|
|
|
Db::rollback();
|
|
$this->file_unlock($fh);
|
|
return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null];
|
|
}
|
|
|
|
// $reslut = model('admin/User')->change_user_money_by_uid($uid, ($pay_amount), 5, 51, "钥匙增加", $uid, 0, $rid);
|
|
// if ($reslut['code'] != 200) {
|
|
|
|
// Db::rollback();
|
|
// $this->file_unlock($fh);
|
|
// return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null];
|
|
// }
|
|
|
|
$map = [];
|
|
$map[] = ['uid', '=', $uid];
|
|
$map[] = ['nbl_id', '=', $nbl_id];
|
|
$user_new_box_account_info = Db::name('user_new_box_account')->where($map)->find();
|
|
if($user_new_box_account_info) {
|
|
Db::name('user_new_box_account')->where('id', $user_new_box_account_info['id'])->inc('pay_amount', $pay_amount)->update(['update_time' => time()]);
|
|
} else {
|
|
$insert_account = [
|
|
'uid' => $uid,
|
|
'nbl_id' => $nbl_id,
|
|
'pay_amount' => $pay_amount,
|
|
'update_time' => time(),
|
|
];
|
|
Db::name('user_new_box_account')->insert($insert_account);
|
|
}
|
|
|
|
|
|
//弹出随机编号
|
|
for ($i = 0; $i < $pay_amount_num; $i++) {
|
|
$num_data = $redis->blpop($keyname_num_sn, 2); //1s 超时
|
|
if (empty($num_data)) {
|
|
$this->redis_new_box_log_rollback($redis, $keyname_num_sn, $user_new_box_num_sn_reids_list);
|
|
return ['code' => 201, 'msg' => '奖池数量不足', 'data' => null];
|
|
} else {
|
|
$num_data_data = explode('-', $num_data[1]);
|
|
$nbl_ids = $num_data_data[0];
|
|
$num_sn = $num_data_data[1];
|
|
$user_new_box_num_sn_reids_list[] = $num_data[1];
|
|
if($nbl_ids == $nbl_id) {
|
|
$user_new_box_num_sn[] = $uid . '-'. $num_sn;
|
|
$is_call_back_redis_num_sn = 1;
|
|
} else {
|
|
$this->redis_new_box_log_rollback($redis, $keyname_num_sn, $user_new_box_num_sn_reids_list);
|
|
return ['code' => 201, 'msg' => '奖池参数错误', 'data' => null];
|
|
}
|
|
}
|
|
}
|
|
|
|
//用户投入记录
|
|
$user_new_box_log = [
|
|
'uid' => $uid,
|
|
'nbl_id' => $nbl_id,
|
|
'pay_amount' => $pay_amount,
|
|
'rid' => $rid,
|
|
'add_time' => time()
|
|
];
|
|
$unbl_id = Db::name('user_new_box_log')->insertGetId($user_new_box_log);
|
|
//本次投注获取号码
|
|
$insert_user_new_box_log_sn = [];
|
|
foreach($user_new_box_num_sn as $v) {
|
|
$arr = explode('-', $v);
|
|
$num_sn = $arr[1];
|
|
$temp = [
|
|
'nbl_id' => $nbl_id,
|
|
'num_sn' => $num_sn,
|
|
'uid' => $uid,
|
|
'add_time' => time()
|
|
];
|
|
$insert_user_new_box_log_sn[] = $temp;
|
|
}
|
|
Db::name('user_new_box_log_num')->insertAll($insert_user_new_box_log_sn);
|
|
|
|
$update_data = ['update_time' => time()];
|
|
if(($info['amount'] + $pay_amount) == $info['total_amount']) {
|
|
//生成新的奖池
|
|
|
|
$update_data['status'] = 2;
|
|
$update_data['over_time'] = time();
|
|
//插入队列数据
|
|
$result = $this->add_box_user_queue($redis, $keyname, $uid, $user_new_box_num_sn);
|
|
if($result['code'] == 201) {
|
|
|
|
Db::rollback();
|
|
$this->redis_new_box_log_rollback($redis, $keyname_num_sn, $user_new_box_num_sn_reids_list);
|
|
$this->file_unlock($fh);
|
|
return ['code' => 201, 'msg' => '请重新投注', 'data' => null];
|
|
} else {
|
|
$is_call_back_redis = 1;
|
|
}
|
|
//查找获取胜利的人
|
|
$win_uid_str = $this->compute_new_box_log($redis, $keyname);
|
|
$win_uid_arr = explode('-', $win_uid_str);
|
|
$win_uid = $win_uid_arr[0];
|
|
$win_num_sn = $win_uid_arr[1];
|
|
//插入背包
|
|
$now_time = time();
|
|
$map = [];
|
|
$map[] = ['uid', '=', $win_uid];
|
|
$map[] = ['gid', '=', $info['gid']];
|
|
$data = [];
|
|
$data['gid'] = $info['gid'];
|
|
$data['update_time'] = $now_time;
|
|
$reslut = db::name('user_gift_pack')->where($map)->inc('num', 1)->inc('total_num', 1)->update($data);
|
|
if (!$reslut) {
|
|
$data = [];
|
|
$data['uid'] = $win_uid;
|
|
$data['gid'] = $info['gid'];
|
|
$data['total_num'] = 1;
|
|
$data['num'] = 1;
|
|
$data['is_tester'] = 1;
|
|
$data['add_time'] = $now_time;
|
|
$data['update_time'] = $now_time;
|
|
$reslut = db::name('user_gift_pack')->insert($data);
|
|
if (!$reslut) {
|
|
Db::rollback();
|
|
$this->redis_new_box_log_rollback($redis, $keyname_num_sn, $user_new_box_num_sn_reids_list);
|
|
$this->file_unlock($fh);
|
|
return ['code' => 201, 'msg' => '请重试', 'data' => null];
|
|
}
|
|
}
|
|
|
|
$data = [];
|
|
$data['uid'] = $win_uid;
|
|
$data['type'] = 5;
|
|
$data['bl_id'] = $nbl_id;
|
|
$data['gid'] = $info['gid'];
|
|
$data['gift_price'] = $gift_price;
|
|
$data['change_num'] = 1;
|
|
$data['total_gift_price'] = $gift_price;
|
|
$data['after_num'] = 1;
|
|
$data['is_tester'] = 1;
|
|
$data['remarks'] = "开宝箱获得";
|
|
$data['add_time'] = $now_time;
|
|
$data['update_time'] = $now_time;
|
|
db::name('user_gift_pack_log')->insert($data);
|
|
|
|
$update_data['win_uid'] = $win_uid;
|
|
$update_data['win_num_sn'] = $win_num_sn;
|
|
$is_over = 1;
|
|
} else {
|
|
$result = $this->add_box_user_queue($redis, $keyname, $uid, $user_new_box_num_sn);
|
|
if($result['code'] == 201) {
|
|
|
|
Db::rollback();
|
|
$this->redis_new_box_log_rollback($redis, $keyname_num_sn, $user_new_box_num_sn_reids_list);
|
|
$this->file_unlock($fh);
|
|
return ['code' => 201, 'msg' => '请重新投注', 'data' => null];
|
|
} else {
|
|
$is_call_back_redis = 1;
|
|
}
|
|
}
|
|
//更新期数
|
|
Db::name('new_box_log')->where('id', $nbl_id)->inc('amount', $pay_amount)->update($update_data);
|
|
//创建新期数
|
|
if($is_over == 1) {
|
|
|
|
}
|
|
|
|
//开奖全服播报
|
|
|
|
if($is_over == 1) {
|
|
//推送礼物信息
|
|
$user_charm_info = model('User')->get_user_charm_contribution_info($win_uid);
|
|
$win_user_info = Db::name('user')->where('uid', $win_uid)->field('uid,base64_nick_name,head_pic')->find();
|
|
$push_all_gift_data = [];
|
|
$push_group_gift_data = [];
|
|
$push_sqb_gift_data = [];
|
|
$push_all_gift_data['user_info']['uid'] = $win_user_info['uid'];
|
|
$push_all_gift_data['user_info']['nick_name'] = mb_convert_encoding(base64_decode($win_user_info['base64_nick_name']), 'UTF-8', 'UTF-8');
|
|
$push_all_gift_data['user_info']['head_pic'] = localpath_to_netpath($win_user_info['head_pic']);
|
|
$push_all_gift_data['user_info']['contribution_level_image'] = $user_charm_info['data']['contribution_level_image'];
|
|
$sqb_gift_info = db::name('gift')->field('gid,gift_name,gift_price,base_image,play_image,gift_type')->where('gid', $info['gid'])->find();
|
|
$sqb_gift_info['base_image'] = localpath_to_netpath($sqb_gift_info['base_image']);
|
|
$sqb_gift_info['play_image'] = localpath_to_netpath($sqb_gift_info['play_image']);
|
|
$sqb_gift_info['open_num'] = 1;
|
|
$sqb_gift_info['uid'] = $win_user_info['uid'];
|
|
$sqb_gift_info['nick_name'] = mb_convert_encoding(base64_decode($win_user_info['base64_nick_name']), 'UTF-8', 'UTF-8');
|
|
$sqb_gift_info['head_pic'] = localpath_to_netpath($win_user_info['head_pic']);
|
|
$sqb_gift_info['num'] = 1;
|
|
$sqb_gift_info['total_open_num'] = 1;
|
|
$sqb_gift_info['box_type_name'] = '龙蛋神谕';
|
|
$sqb_gift_info['type_name'] = '龙蛋神谕';
|
|
$sqb_gift_info['box_type'] = 99;
|
|
$sqb_gift_info['surprise'] = 0;
|
|
$push_all_gift_data['gift_list'][] = $sqb_gift_info;
|
|
$push_data = [];
|
|
$push_data['code'] = 304;
|
|
$push_data['msg'] = "开宝箱全服播报数据";
|
|
$push_data['data'] = $push_all_gift_data;
|
|
model('api/WebSocketPush')->send_to_all($push_data);
|
|
$this->clear_queue_list($redis, $keyname);
|
|
$new_box_info = Db::name('new_box')->find($info['nb_id']);
|
|
$this->create_new_box_log($new_box_info);
|
|
$push_data_result = $this->get_new_box_log_info($uid,$info['nb_id']);
|
|
$push_data_result['is_over'] = 1;
|
|
$push_data = [];
|
|
$push_data['code'] = 343;
|
|
$push_data['msg'] = "开宝箱全服播报数据";
|
|
$push_data['data'] = $push_data_result;
|
|
model('api/WebSocketPush')->send_to_all($push_data);
|
|
} else {
|
|
$push_data_result = $this->get_new_box_log_info($uid,$info['nb_id']);
|
|
$push_data_result['is_over'] = 2;
|
|
$push_data = [];
|
|
$push_data['code'] = 343;
|
|
$push_data['msg'] = "开宝箱全服播报数据";
|
|
$push_data['data'] = $push_data_result;
|
|
|
|
model('api/WebSocketPush')->send_to_all($push_data);
|
|
}
|
|
Db::commit();
|
|
$integral = $user_info['integral'] - $pay_amount;
|
|
$this->file_unlock($fh);
|
|
return ['code' => 200, 'msg' => '开启成功', 'data' => ['integral' => $integral]];
|
|
} catch (\Exception $e) {
|
|
// 回滚事务
|
|
if($is_call_back_redis == 1) {
|
|
$this->redis_gift_data_rollback($redis, $keyname, $pay_amount_num);
|
|
}
|
|
if($is_call_back_redis_num_sn == 1) {
|
|
|
|
$this->redis_new_box_log_rollback($redis, $keyname_num_sn, $user_new_box_num_sn_reids_list);
|
|
}
|
|
Db::rollback();
|
|
// dump($user_new_box_num_sn_reids_list);
|
|
// dump($e);
|
|
return ['code' => 201, 'msg' => '开启失败', 'data' => null];
|
|
}
|
|
|
|
|
|
}
|
|
//回退编号
|
|
public function redis_new_box_log_rollback($redis, $keyname, $arr)
|
|
{
|
|
if(!empty($arr)) {
|
|
array_unshift($arr, $keyname);
|
|
//右侧取 右侧插入
|
|
call_user_func_array([$redis, 'lPush'], $arr);
|
|
}
|
|
|
|
}
|
|
//奖池归属算法
|
|
public function compute_new_box_log($redis, $keyname)
|
|
{
|
|
$uid_arr = $redis->lrange($keyname, 0, -1);
|
|
shuffle($uid_arr);
|
|
$key = mt_rand(0, (count($uid_arr) - 1));
|
|
// dump($uid_arr);die;
|
|
return $uid_arr[$key];
|
|
}
|
|
//清空队列
|
|
public function clear_queue_list($redis, $keyname)
|
|
{
|
|
$redis->del($keyname);
|
|
}
|
|
|
|
//获取奖池信息
|
|
public function get_new_box_log_info($uid, $nb_id)
|
|
{
|
|
$info = Db::name('new_box_log')
|
|
->alias('a')
|
|
->join('yy_gift b', 'a.gid = b.gid')
|
|
->field('a.total_amount,a.amount,a.nb_id,a.nbl_sn,a.id as nbl_id,b.gift_name,b.base_image,b.gift_price')
|
|
->where('nb_id', $nb_id)
|
|
->where('a.status', 1)
|
|
->order('id', 'desc')
|
|
->find();
|
|
if($info) {
|
|
$my_pay_amount = Db::name('user_new_box_account')->where(['uid' => $uid, 'nbl_id' => $info['nbl_id']])->value('pay_amount');
|
|
$info['my_pay_amount'] = $my_pay_amount ? $my_pay_amount : 0;
|
|
$info['base_image'] = localpath_to_netpath($info['base_image']);
|
|
$info['gift_name'] = $info['gift_name'] . '(' . intval($info['gift_price']) . ')';
|
|
$info['uid'] = $uid;
|
|
}
|
|
return $info;
|
|
}
|
|
|
|
|
|
//插入队列数据
|
|
private function add_box_user_queue($redis, $keyname, $uid, $uid_arr)
|
|
{
|
|
if($uid_arr) {
|
|
array_unshift($uid_arr, $keyname);
|
|
//右侧取 右侧插入
|
|
call_user_func_array([$redis, 'lPush'], $uid_arr);
|
|
}
|
|
return ['code' => 200, 'msg' => '入队成功', 'data' => null];
|
|
}
|
|
//返还用户抽中礼物到奖池
|
|
public function redis_gift_data_rollback($redis, $keyname, $pay_amount)
|
|
{
|
|
for($i=0; $i < $pay_amount; $i++) {
|
|
$redis->lpop($keyname);
|
|
}
|
|
return ['code' => 200, 'msg' => '返还成功', 'data' => null];
|
|
}
|
|
|
|
|
|
public function get_new_box_list($uid)
|
|
{
|
|
|
|
//第一个奖池
|
|
$one_nb_id = 1;
|
|
$one_box_log_info = $this->get_new_box_log_info($uid,$one_nb_id);
|
|
$one_nb_id_show = true;
|
|
$one_box_info = Db::name('new_box')->find($one_nb_id);
|
|
if($one_box_info['new_box_status'] == 2){
|
|
$one_nb_id_show = false;
|
|
}
|
|
|
|
if(empty($one_box_log_info)) {
|
|
$this->create_new_box_log($one_box_info);
|
|
$one_box_log_info = $this->get_new_box_log_info($uid,$one_nb_id);
|
|
}
|
|
//第二个奖池
|
|
$two_nb_id = 2;
|
|
$two_box_log_info = $this->get_new_box_log_info($uid,$two_nb_id);
|
|
$two_nb_id_show = true;
|
|
$two_box_info = Db::name('new_box')->find($two_nb_id);
|
|
if($two_box_info['new_box_status'] == 2){
|
|
$two_nb_id_show = false;
|
|
}
|
|
if(empty($two_box_log_info)) {
|
|
$this->create_new_box_log($two_box_info);
|
|
$two_box_log_info = $this->get_new_box_log_info($uid,$two_nb_id);
|
|
}
|
|
//第三个奖池
|
|
$three_nb_id = 3;
|
|
$three_box_log_info = $this->get_new_box_log_info($uid,$three_nb_id);
|
|
$three_nb_id_show = true;
|
|
$three_box_info = Db::name('new_box')->find($three_nb_id);
|
|
if($three_box_info['new_box_status'] == 2){
|
|
$three_nb_id_show = false;
|
|
}
|
|
|
|
if(empty($three_box_log_info)) {
|
|
$this->create_new_box_log($three_box_info);
|
|
$three_box_log_info = $this->get_new_box_log_info($uid,$three_nb_id);
|
|
}
|
|
//第四个奖池
|
|
$four_nb_id = 4;
|
|
$four_box_log_info = $this->get_new_box_log_info($uid,$four_nb_id);
|
|
$four_nb_id_show = true;
|
|
$four_box_info = Db::name('new_box')->find($four_nb_id);
|
|
if($four_box_info['new_box_status'] == 2){
|
|
$four_nb_id_show = false;
|
|
}
|
|
if(empty($four_box_log_info)) {
|
|
$this->create_new_box_log($four_box_info);
|
|
$four_box_log_info = $this->get_new_box_log_info($uid,$four_nb_id);
|
|
}
|
|
|
|
//第五个奖池
|
|
$five_nb_id = 5;
|
|
$five_box_log_info = $this->get_new_box_log_info($uid,$five_nb_id);
|
|
$five_nb_id_show = true;
|
|
$five_box_info = Db::name('new_box')->find($five_nb_id);
|
|
if($five_box_info['new_box_status'] == 2){
|
|
$five_nb_id_show = false;
|
|
}
|
|
if(empty($five_box_log_info)) {
|
|
$this->create_new_box_log($five_box_info);
|
|
$five_box_log_info = $this->get_new_box_log_info($uid,$five_nb_id);
|
|
}
|
|
//第六个奖池
|
|
$six_nb_id = 6;
|
|
$six_box_log_info = $this->get_new_box_log_info($uid,$six_nb_id);
|
|
$six_nb_id_show = true;
|
|
$six_box_info = Db::name('new_box')->find($six_nb_id);
|
|
if($six_box_info['new_box_status'] == 2){
|
|
$six_nb_id_show = false;
|
|
}
|
|
if(empty($six_box_log_info)) {
|
|
$this->create_new_box_log($six_box_info);
|
|
$six_box_log_info = $this->get_new_box_log_info($uid,$six_nb_id);
|
|
}
|
|
//第七个奖池
|
|
$seven_nb_id = 7;
|
|
$seven_box_log_info = $this->get_new_box_log_info($uid,$seven_nb_id);
|
|
$seven_nb_id_show = true;
|
|
$seven_box_info = Db::name('new_box')->find($seven_nb_id);
|
|
if($seven_box_info['new_box_status'] == 2){
|
|
$seven_nb_id_show = false;
|
|
}
|
|
if(empty($seven_box_log_info)) {
|
|
$this->create_new_box_log($seven_box_info);
|
|
$seven_box_log_info = $this->get_new_box_log_info($uid,$seven_nb_id);
|
|
}
|
|
|
|
//第八个奖池
|
|
$eight_nb_id = 8;
|
|
$eight_box_log_info = $this->get_new_box_log_info($uid,$eight_nb_id);
|
|
$eight_nb_id_show = true;
|
|
$eight_box_info = Db::name('new_box')->find($eight_nb_id);
|
|
if($eight_box_info['new_box_status'] == 2){
|
|
$eight_nb_id_show = false;
|
|
}
|
|
if(empty($eight_box_log_info)) {
|
|
$this->create_new_box_log($eight_box_info);
|
|
$eight_box_log_info = $this->get_new_box_log_info($uid,$eight_nb_id);
|
|
}
|
|
|
|
|
|
// //第九个奖池
|
|
$nine_nb_id = 9;
|
|
$nine_box_log_info = $this->get_new_box_log_info($uid,$nine_nb_id);
|
|
$nine_nb_id_show = true;
|
|
$nine_box_info = Db::name('new_box')->find($nine_nb_id);
|
|
if($nine_box_info['new_box_status'] == 2){
|
|
$nine_nb_id_show = false;
|
|
}
|
|
if(empty($nine_box_log_info)) {
|
|
$this->create_new_box_log($nine_box_info);
|
|
$nine_box_log_info = $this->get_new_box_log_info($uid,$nine_nb_id);
|
|
}
|
|
|
|
$list = [];
|
|
if($one_nb_id_show){
|
|
$list[] = $one_box_log_info;
|
|
}
|
|
|
|
if($two_nb_id_show){
|
|
$list[] = $two_box_log_info;
|
|
}
|
|
|
|
if($three_nb_id_show){
|
|
$list[] = $three_box_log_info;
|
|
}
|
|
|
|
if($four_nb_id_show){
|
|
$list[] = $four_box_log_info;
|
|
}
|
|
|
|
if($five_nb_id_show){
|
|
$list[] = $five_box_log_info;
|
|
}
|
|
|
|
if($six_nb_id_show){
|
|
$list[] = $six_box_log_info;
|
|
}
|
|
|
|
if($seven_nb_id_show){
|
|
$list[] = $seven_box_log_info;
|
|
}
|
|
|
|
if($eight_nb_id_show){
|
|
$list[] = $eight_box_log_info;
|
|
}
|
|
|
|
if($nine_nb_id_show){
|
|
$list[] = $nine_box_log_info;
|
|
}
|
|
|
|
|
|
// $list = [
|
|
// $one_box_log_info,
|
|
// $two_box_log_info,
|
|
// $three_box_log_info,
|
|
// $four_box_log_info,
|
|
// $five_box_log_info,
|
|
// $six_box_log_info,
|
|
// $seven_box_log_info,
|
|
// $eight_box_log_info,
|
|
// $nine_box_log_info
|
|
// ];
|
|
$integral = Db::name('user')->where('uid', $uid)->value('integral');
|
|
$data = [
|
|
'integral' => $integral,
|
|
'list' => $list
|
|
];
|
|
return ['code' => 200, 'msg' => '获取数据成功', 'data' => $data];
|
|
}
|
|
|
|
|
|
|
|
|
|
// public function get_new_box_list1($uid)
|
|
// {
|
|
// //第一个奖池
|
|
// $one_nb_id = 1;
|
|
// $one_box_log_info = $this->get_new_box_log_info($uid,$one_nb_id);
|
|
// $one_nb_id_show = true;
|
|
// $one_box_info = Db::name('new_box')->find($one_nb_id);
|
|
// if($one_box_info['new_box_status'] == 2){
|
|
// $one_nb_id_show = false;
|
|
// }
|
|
|
|
// //第二个奖池
|
|
// $two_nb_id = 2;
|
|
// $two_box_log_info = $this->get_new_box_log_info($uid,$two_nb_id);
|
|
// $two_nb_id_show = true;
|
|
// $two_box_info = Db::name('new_box')->find($two_nb_id);
|
|
// if($two_box_info['new_box_status'] == 2){
|
|
// $two_nb_id_show = false;
|
|
// }
|
|
|
|
// //第三个奖池
|
|
// $three_nb_id = 3;
|
|
// $three_box_log_info = $this->get_new_box_log_info($uid,$three_nb_id);
|
|
// $three_nb_id_show = true;
|
|
// $three_box_info = Db::name('new_box')->find($three_nb_id);
|
|
// if($three_box_info['new_box_status'] == 2){
|
|
// $three_nb_id_show = false;
|
|
// }
|
|
// //第四个奖池
|
|
// $four_nb_id = 4;
|
|
// $four_box_log_info = $this->get_new_box_log_info($uid,$four_nb_id);
|
|
// $four_nb_id_show = true;
|
|
// $four_box_info = Db::name('new_box')->find($four_nb_id);
|
|
// if($four_box_info['new_box_status'] == 2){
|
|
// $four_nb_id_show = false;
|
|
// }
|
|
|
|
// //第五个奖池
|
|
// $five_nb_id = 5;
|
|
// $five_box_log_info = $this->get_new_box_log_info($uid,$five_nb_id);
|
|
// $five_nb_id_show = true;
|
|
// $five_box_info = Db::name('new_box')->find($five_nb_id);
|
|
|
|
// if($five_box_info['new_box_status'] == 2){
|
|
// $five_nb_id_show = false;
|
|
// }
|
|
// //第六个奖池
|
|
// $six_nb_id = 6;
|
|
// $six_box_log_info = $this->get_new_box_log_info($uid,$six_nb_id);
|
|
// $six_nb_id_show = true;
|
|
// $six_box_info = Db::name('new_box')->find($six_nb_id);
|
|
|
|
// if($six_box_info['new_box_status'] == 2){
|
|
// $six_nb_id_show = false;
|
|
// }
|
|
// //第七个奖池
|
|
// $seven_nb_id = 7;
|
|
// $seven_box_log_info = $this->get_new_box_log_info($uid,$seven_nb_id);
|
|
// $seven_nb_id_show = true;
|
|
// $seven_box_info = Db::name('new_box')->find($seven_nb_id);
|
|
|
|
|
|
// if($seven_box_info['new_box_status'] == 2){
|
|
// $seven_box_info = false;
|
|
// }
|
|
|
|
// //第八个奖池
|
|
// $eight_nb_id = 8;
|
|
// $eight_box_log_info = $this->get_new_box_log_info($uid,$eight_nb_id);
|
|
// $eight_nb_id_show = true;
|
|
// $eight_box_info = Db::name('new_box')->find($eight_nb_id);
|
|
|
|
// if($eight_box_info['new_box_status'] == 2){
|
|
// $eight_nb_id_show = false;
|
|
// }
|
|
|
|
// //第九个奖池
|
|
// $nine_nb_id = 9;
|
|
// $nine_box_log_info = $this->get_new_box_log_info($uid,$nine_nb_id);
|
|
// $nine_nb_id_show = true;
|
|
// $nine_box_info = Db::name('new_box')->find($nine_nb_id);
|
|
// if($nine_box_info['new_box_status'] == 2){
|
|
// $nine_nb_id_show = false;
|
|
// }
|
|
|
|
// halt([
|
|
// $one_nb_id_show,
|
|
// $two_nb_id_show,
|
|
// $three_nb_id_show,
|
|
// $four_nb_id_show,
|
|
// $five_nb_id_show,
|
|
// $six_nb_id_show,
|
|
// $seven_nb_id_show,
|
|
// $eight_nb_id_show,
|
|
// $nine_nb_id_show
|
|
|
|
// ]);
|
|
// }
|
|
|
|
|
|
|
|
|
|
//生成奖池
|
|
public function create_new_box_log($new_box_info)
|
|
{
|
|
//期数id
|
|
$nbl_sn = 1;
|
|
//查找上一期期数
|
|
$last_new_box_log_info = Db::name('new_box_log')->where('nb_id', $new_box_info['id'])->order('id', 'desc')->find();
|
|
if($last_new_box_log_info) {
|
|
$nbl_sn = $last_new_box_log_info['nbl_sn'] + 1;
|
|
}
|
|
$insert_data = [
|
|
'nb_id' => $new_box_info['id'],
|
|
'total_amount' => $new_box_info['total_amount'],
|
|
'gid' => $new_box_info['gid'],
|
|
'nbl_sn' => $nbl_sn,
|
|
'add_time' => time(),
|
|
'update_time' => time()
|
|
];
|
|
$log_id = Db::name('new_box_log')->insertGetId($insert_data);
|
|
$num_arr = [];
|
|
$total_num = intval($new_box_info['total_amount']/10);
|
|
for($i=1; $i <= $total_num; $i++) {
|
|
$num_arr[] = $log_id . '-'. $i;
|
|
}
|
|
shuffle($num_arr);
|
|
$keyname = 'new:box:nb_id:' . $new_box_info['id'];
|
|
array_unshift($num_arr, $keyname);
|
|
$redis = connectionRedis();
|
|
call_user_func_array([$redis, 'rPush'], $num_arr);
|
|
}
|
|
|
|
//登顶记录
|
|
public function get_new_box_win_user($nb_id, $page, $page_limit)
|
|
{
|
|
$map = [];
|
|
if($nb_id) {
|
|
$map[] = ['a.nb_id', '=', $nb_id];
|
|
}
|
|
|
|
$map[] = ['a.status', '=', 2];
|
|
$list = Db::name('new_box_log')
|
|
->alias('a')
|
|
->join('yy_user b', 'a.win_uid = b.uid')
|
|
->where($map)
|
|
->field('a.id,b.base64_nick_name,b.uid,b.head_pic,a.nbl_sn,a.win_num_sn,over_time')
|
|
->order('a.id', 'desc')
|
|
->page($page, $page_limit)
|
|
->select();
|
|
foreach($list as &$val) {
|
|
$val['head_pic'] = localpath_to_netpath($val['head_pic']);
|
|
$val['nick_name'] = mb_convert_encoding(base64_decode($val['base64_nick_name']), 'UTF-8', 'UTF-8');
|
|
}
|
|
return ['code' => 200, 'msg' => '获取数据成功', 'data' => $list];
|
|
}
|
|
|
|
//我的成就
|
|
public function get_my_new_box_log($uid, $box_type, $type, $page, $page_limit)
|
|
{
|
|
$map = [];
|
|
$map[] = ['a.uid', '=', $uid];
|
|
if($box_type) {
|
|
$map[] = ['nb_id', '=', $box_type];
|
|
}
|
|
|
|
if($type == 1) {
|
|
$map[] = ['b.status', '=', 1];
|
|
} elseif($type == 2) {
|
|
$map[] = ['b.status', '=', 2];
|
|
$map[] = ['b.win_uid', '=', $uid];
|
|
} elseif($type == 3) {
|
|
$map[] = ['b.status', '=', 2];
|
|
$map[] = ['b.win_uid', 'neq', $uid];
|
|
}
|
|
$list = Db::name('user_new_box_account')
|
|
->alias('a')
|
|
->join('yy_new_box_log b', 'a.nbl_id = b.id')
|
|
->join('yy_gift c', 'b.gid = c.gid')
|
|
->field('c.gift_name, b.total_amount,a.pay_amount as amount,c.base_image,a.nbl_id,b.nbl_sn')
|
|
->where($map)
|
|
->order('a.id', 'desc')
|
|
->page($page, $page_limit)
|
|
->select();
|
|
foreach($list as &$val) {
|
|
$val['base_image'] = localpath_to_netpath($val['base_image']);
|
|
|
|
}
|
|
return ['code' => 200, 'msg' => '获取数据成功', 'data' => $list];
|
|
}
|
|
|
|
//获取规则
|
|
public function get_box_note()
|
|
{
|
|
$text = Db::name('config')->where('key_title', 'new_box_note')->value('key_value');
|
|
return ['code' => 200, 'msg' => '获取数据成功', 'data' => ['note' => $text]];
|
|
}
|
|
//我的号码
|
|
public function get_my_box_num_sn($uid, $nbl_id, $page, $page_limit = 20)
|
|
{
|
|
$win_num_sn = Db::name('new_box_log')->where('id', $nbl_id)->value('win_num_sn');
|
|
$list = Db::name('user_new_box_log_num')->where(['uid' => $uid, 'nbl_id' => $nbl_id])->page($page, $page_limit)->select();
|
|
$data = [];
|
|
foreach($list as $val) {
|
|
$is_win = 0;
|
|
if($val['num_sn'] == $win_num_sn) {
|
|
$is_win = 1;
|
|
}
|
|
$temp['num_sn'] = $val['num_sn'];
|
|
$temp['is_win'] = $is_win;
|
|
$data[] = $temp;
|
|
}
|
|
return ['code' => 200, 'msg' => '获取数据成功', 'data' => ['list' => $data, 'win_num_sn' => $win_num_sn]];
|
|
}
|
|
}
|