Files
mier-php/application/api/model/NewBox.php
2025-08-11 10:22:05 +08:00

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]];
}
}