1047 lines
43 KiB
PHP
1047 lines
43 KiB
PHP
<?php
|
|
|
|
namespace app\admin\model;
|
|
|
|
use think\Model;
|
|
use think\Db;
|
|
|
|
class Box extends Model
|
|
{
|
|
|
|
|
|
public function get_box_type_list($page = 1, $limit = 20)
|
|
{
|
|
$map = [];
|
|
$map[] = ['del_status', '=', 1];
|
|
$list = db::name('box_type')->where($map)->order('tid', 'desc')->page($page, $limit)->select();
|
|
$data = [];
|
|
$data['count'] = db::name('box_type')->where($map)->count();
|
|
$data['list'] = $list;
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
|
|
}
|
|
|
|
public function get_box_count_type_list(){
|
|
$data = [];
|
|
$data['list'] = [];
|
|
$data['list'][] = array(
|
|
'tid' => 1,
|
|
'type_name' => '奇镜寻梦'
|
|
);
|
|
$data['list'][] = array(
|
|
'tid' => 2,
|
|
'type_name' => '仙踪秘语'
|
|
);
|
|
$data['list'][] = array(
|
|
'tid' => 3,
|
|
'type_name' => '琥珀幽林'
|
|
);
|
|
|
|
// $data['list'][] = array(
|
|
// 'tid' => 4,
|
|
// 'type_name' => '重逢留声机'
|
|
// );
|
|
|
|
// $data['list'][] = array(
|
|
// 'tid' => 5,
|
|
// 'type_name' => '经典留声机'
|
|
// );
|
|
|
|
|
|
// $data['list'][] = array(
|
|
// 'tid' => 6,
|
|
// 'type_name' => '璀璨留声机'
|
|
// );
|
|
// $data['list'][] = array(
|
|
// 'tid' => 6,
|
|
// 'type_name' => '奇镜寻梦(虚拟池)'
|
|
// );
|
|
// $data['list'][] = array(
|
|
// 'tid' => 7,
|
|
// 'type_name' => '仙踪秘语(虚拟池)'
|
|
// );
|
|
// $data['list'][] = array(
|
|
// 'tid' => 8,
|
|
// 'type_name' => '琥珀幽林(虚拟池)'
|
|
// );
|
|
$data['list'][] = array(
|
|
'tid' => 101,
|
|
'type_name' => '初级盲盒'
|
|
);
|
|
$data['list'][] = array(
|
|
'tid' => 102,
|
|
'type_name' => '中级盲盒'
|
|
);
|
|
$data['list'][] = array(
|
|
'tid' => 103,
|
|
'type_name' => '高级盲盒'
|
|
);
|
|
|
|
// $data['list'][] = array(
|
|
// 'tid' => 104,
|
|
// 'type_name' => '一元盲盒'
|
|
// );
|
|
|
|
|
|
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
|
|
}
|
|
|
|
public function get_box_person_type_list(){
|
|
$map = [];
|
|
$map[] = ['del_status', '=', 1];
|
|
$map[] = ['is_person', '=', 2];
|
|
$list = db::name('box_type')->where($map)->order('tid', 'desc')->select();
|
|
$data = [];
|
|
$data['count'] = db::name('box_type')->where($map)->count();
|
|
$data['list'] = $list;
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
|
|
}
|
|
|
|
public function get_box_common_type_list(){
|
|
$map = [];
|
|
$map[] = ['del_status', '=', 1];
|
|
$map[] = ['is_person', '=', 1];
|
|
$list = db::name('box_type')->where($map)->order('tid', 'desc')->select();
|
|
$data = [];
|
|
$data['count'] = db::name('box_type')->where($map)->count();
|
|
$data['list'] = $list;
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
|
|
}
|
|
|
|
|
|
public function edit_box_type($data)
|
|
{
|
|
$validate = validate('box_type');
|
|
$reslut = $validate->scene('adminEdit')->check($data);
|
|
if ($reslut !== true) {
|
|
return ['code' => 201, 'msg' => $validate->getError(), 'data' => null];
|
|
}
|
|
$reslut = model('box_type')->isUpdate(true)->save($data);
|
|
if (!$reslut) {
|
|
return ['code' => 201, 'msg' => '编辑失败', 'data' => ''];
|
|
} else {
|
|
return ['code' => 200, 'msg' => '编辑成功', 'data' => ''];
|
|
}
|
|
}
|
|
|
|
public function add_box_type($data)
|
|
{
|
|
$validate = validate('box_type');
|
|
$reslut = $validate->scene('adminAdd')->check($data);
|
|
if ($reslut !== true) {
|
|
return ['code' => 201, 'msg' => $validate->getError(), 'data' => null];
|
|
}
|
|
$reslut = model('box_type')->save($data);
|
|
if (!$reslut) {
|
|
return ['code' => 201, 'msg' => '添加失败', 'data' => ''];
|
|
} else {
|
|
return ['code' => 200, 'msg' => '添加成功', 'data' => ''];
|
|
}
|
|
}
|
|
|
|
//获取房间信息
|
|
public function get_box_type_info($tid)
|
|
{
|
|
|
|
$box_type_info = db::name('box_type')->where(['tid' => $tid])->find();
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $box_type_info];
|
|
}
|
|
|
|
|
|
public function get_box_config_list($tid, $gid, $gift_name, $gift_price, $page = 1, $limit = 20)
|
|
{
|
|
$map = [];
|
|
if (!empty($tid)) {
|
|
$map[] = ['a.tid', '=', $tid];
|
|
}
|
|
if(!empty($gift_name)){
|
|
$map[] = ['b.gift_name', 'like', '%'.$gift_name.'%'];
|
|
}
|
|
if(!empty($gid)){
|
|
$map[] = ['a.gid', '=', $gid];
|
|
}
|
|
if(!empty($gift_price)){
|
|
$map[] = ['b.gift_price', '>=', $gift_price];
|
|
}
|
|
|
|
$redis = connectionRedis();
|
|
|
|
$list = db::name('box_config')->alias('a')->join('yy_gift b', 'a.gid = b.gid')->field('a.*, b.gift_name, b.gift_price, b.base_image')->where($map)->order('b.gift_price desc')->page($page, $limit)->select();
|
|
foreach ($list as $k => &$v) {
|
|
// $gift_info = db::name('gift')->find($v['gid']);
|
|
// if (!empty($gift_info)) {
|
|
// $v['gift_name'] = $gift_info['gift_name'];
|
|
// $v['gift_price'] = $gift_info['gift_price'];
|
|
// $v['base_image'] = localpath_to_netpath($gift_info['base_image']);
|
|
// } else {
|
|
// $v['gift_name'] = '';
|
|
// $v['gift_price'] = 0;
|
|
// }
|
|
$un_redis_list = [];
|
|
if(in_array($v['tid'],$un_redis_list)){
|
|
$v['unopen_num'] = $v['num'];
|
|
}else{
|
|
$keyname = "box:list:tid:".$v['tid'];
|
|
$redis_data_list = $redis->Lrange($keyname, 0, -1);
|
|
$redis_gift_data = [];
|
|
foreach ($redis_data_list as $a => $b) {
|
|
$gift_data = explode('-', $b);
|
|
if (empty($redis_gift_data[$gift_data[1]])) {
|
|
$redis_gift_data[$gift_data[1]] = 1;
|
|
} else {
|
|
$redis_gift_data[$gift_data[1]]++;
|
|
}
|
|
}
|
|
|
|
if (empty($redis_gift_data[$v['gid']])) {
|
|
$v['unopen_num'] = 0;
|
|
} else {
|
|
$v['unopen_num'] = $redis_gift_data[$v['gid']];
|
|
}
|
|
}
|
|
|
|
$v['base_image'] = localpath_to_netpath($v['base_image']);
|
|
$v['type_name'] = db::name('box_type')->where('tid', $v['tid'])->value('type_name');
|
|
}
|
|
//统计爆率
|
|
$total_num = 0;
|
|
$total_gift_value = 0;
|
|
$total_rate = 0;
|
|
$total_out_amount = 0;
|
|
$silver_array = [1];
|
|
$gold_array = [11];
|
|
$drill_array = [21];
|
|
|
|
//魔法之轮
|
|
$platina_array = [];
|
|
//许愿瓶
|
|
$violet_array = [];
|
|
$promise_array = [];
|
|
// $platina_array = [];
|
|
// $five_array = [];
|
|
$blind1 = [101];
|
|
$blind2 = [102];
|
|
$blind3 = [103];
|
|
$blind4 = [];
|
|
$blind5 = [];
|
|
$blind6 = [];
|
|
foreach ($list as $m => $n) {
|
|
$total_num += $n['num'];
|
|
$total_gift_value += $n['gift_price'] * $n['num'];
|
|
if(in_array($n['tid'],$gold_array)){
|
|
$total_out_amount += get_system_config('box_unit_price') * $n['num'];
|
|
}else if(in_array($n['tid'],$drill_array)){
|
|
$total_out_amount += get_system_config('box_drill_price') * $n['num'];
|
|
}else if(in_array($n['tid'],$silver_array)){
|
|
$total_out_amount += get_system_config('box_silver_price') * $n['num'];
|
|
}else if(in_array($n['tid'],$platina_array)){
|
|
$total_out_amount += get_system_config('box_platina_price') * $n['num'];
|
|
}else if(in_array($n['tid'],$violet_array)){
|
|
$total_out_amount += get_system_config('box_violet_price') * $n['num'];
|
|
}else if(in_array($n['tid'],$promise_array)){
|
|
$total_out_amount += get_system_config('box_promise_price') * $n['num'];
|
|
}
|
|
else if(in_array($n['tid'],$blind1)) {
|
|
$total_out_amount += 10 * $n['num'];
|
|
}else if(in_array($n['tid'],$blind2)) {
|
|
$total_out_amount += 30 * $n['num'];
|
|
}else if(in_array($n['tid'],$blind3)) {
|
|
$total_out_amount += 80 * $n['num'];
|
|
}else if(in_array($n['tid'],$blind4)) {
|
|
$total_out_amount += 10 * $n['num'];
|
|
}else if(in_array($n['tid'],$blind5)) {
|
|
$total_out_amount += 3880 * $n['num'];
|
|
}else if(in_array($n['tid'],$blind6)) {
|
|
$total_out_amount += 5880 * $n['num'];
|
|
}
|
|
}
|
|
// $box_unit_price = get_system_config('box_unit_price');
|
|
// $total_out_amount = $box_unit_price * $total_num;
|
|
if ($total_out_amount == 0) {
|
|
$total_rate = round(0, 6);
|
|
} else {
|
|
$total_rate = round($total_gift_value / $total_out_amount * 100, 6);
|
|
}
|
|
|
|
$total_rate .= "%";
|
|
$data = [];
|
|
$data['count'] = db::name('box_config')->alias('a')->join('yy_gift b', 'a.gid = b.gid')->field('a.*, b.gift_name, b.gift_price, b.base_image')->where($map)->count();
|
|
$data['list'] = $list;
|
|
$data['totalData']['total_num'] = $total_num;
|
|
$data['totalData']['total_gift_value'] = $total_gift_value;
|
|
$data['totalData']['total_out_amount'] = $total_out_amount;
|
|
$data['totalData']['total_rate'] = $total_rate;
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
|
|
}
|
|
public function add_box_config($tid, $gid, $num, $open_num_obtain, $is_public_screen, $is_public_server)
|
|
{
|
|
$map = [];
|
|
$map[] = ['tid', '=', $tid];
|
|
//该类型礼物总数
|
|
$box_config_sum = db::name('box_config')->where($map)->sum('num');
|
|
$map[] = ['gid', '=', $gid];
|
|
$box_config_info = db::name('box_config')->where($map)->find();
|
|
if (!empty($box_config_info)) {
|
|
return ['code' => 201, 'msg' => '该礼物已添加', 'data' => null];
|
|
}
|
|
$map = [];
|
|
$map[] = ['gid', '=', $gid];
|
|
$map[] = ['is_delete', '=', 1];
|
|
$gift_info = db::name('gift')->where($map)->find();
|
|
if (empty($gift_info)) {
|
|
return ['code' => 201, 'msg' => '礼物不存在', 'data' => null];
|
|
}
|
|
|
|
|
|
// if($tid != 17 && $tid != 18){
|
|
// $open_num_obtain = 0;
|
|
// }
|
|
|
|
if($box_config_info != 0){
|
|
if($open_num_obtain > $box_config_info){
|
|
return ['code' => 201, 'msg' => '获取条件大于当前奖池一轮总数', 'data' => null];
|
|
}
|
|
}
|
|
|
|
$data = [];
|
|
$data['tid'] = $tid;
|
|
$data['gid'] = $gid;
|
|
$data['num'] = $num;
|
|
$data['open_num_obtain'] = $open_num_obtain;
|
|
$data['is_public_screen'] = $is_public_screen;
|
|
$data['is_public_server'] = $is_public_server;
|
|
$data['add_time'] = time();
|
|
$data['update_time'] = time();
|
|
$reslut = db::name('box_config')->where($map)->insert($data);
|
|
if (!$reslut) {
|
|
return ['code' => 201, 'msg' => '添加失败', 'data' => ''];
|
|
}
|
|
// model('admin/box')->control_generate_box($tid, 1);
|
|
return ['code' => 200, 'msg' => '添加成功', 'data' => $data];
|
|
}
|
|
public function edit_box_config($bid, $gid, $num, $open_num_obtain, $accumulate_price, $accumulate_rate, $is_public_screen, $is_public_server)
|
|
{
|
|
$map = [];
|
|
$map[] = ['bid', '=', $bid];
|
|
$box_config_info = db::name('box_config')->where($map)->find();
|
|
if (empty($box_config_info)) {
|
|
return ['code' => 201, 'msg' => '信息不存在', 'data' => ''];
|
|
}
|
|
$gift_info = db::name('gift')->where('gid', $gid)->find();
|
|
if (empty($gift_info)) {
|
|
return ['code' => 201, 'msg' => '礼物不存在', 'data' => ''];
|
|
}
|
|
|
|
// $open_num_obtain_data = [4,5,10,11];
|
|
// if(!in_array($box_config_info['tid'],$open_num_obtain_data)){
|
|
// $open_num_obtain = 0;
|
|
// }
|
|
|
|
$box_config_sum = db::name('box_config')->where('tid', $box_config_info['tid'])->sum('num');
|
|
if($open_num_obtain > $box_config_sum){
|
|
return ['code' => 201, 'msg' => '获取条件大于当前奖池一轮总数', 'data' => null];
|
|
}
|
|
|
|
$data = [];
|
|
$data['bid'] = $box_config_info['bid'];
|
|
$data['gid'] = $gid;
|
|
$data['num'] = $num;
|
|
$data['accumulate_price'] = $accumulate_price;
|
|
$data['accumulate_rate'] = $accumulate_rate;
|
|
$data['open_num_obtain'] = $open_num_obtain;
|
|
$data['is_public_screen'] = $is_public_screen;
|
|
$data['is_public_server'] = $is_public_server;
|
|
$data['update_time'] = time();
|
|
$reslut = db::name('box_config')->update($data);
|
|
if (!$reslut) {
|
|
return ['code' => 201, 'msg' => '更新失败', 'data' => ''];
|
|
}
|
|
// model('admin/box')->control_generate_box($box_config_info['tid'], 1);
|
|
return ['code' => 200, 'msg' => '更新成功', 'data' => ''];
|
|
}
|
|
public function delete_box_config($bid)
|
|
{
|
|
$map = [];
|
|
$map[] = ['bid', '=', $bid];
|
|
$box_config_info = db::name('box_config')->where($map)->find();
|
|
if (empty($box_config_info)) {
|
|
return ['code' => 201, 'msg' => '信息不存在', 'data' => ''];
|
|
}
|
|
|
|
$reslut = db::name('box_config')->delete($box_config_info['bid']);
|
|
if (!$reslut) {
|
|
return ['code' => 201, 'msg' => '删除失败', 'data' => ''];
|
|
}
|
|
//更新队列宝箱信息
|
|
// model('admin/box')->control_generate_box($box_config_info['tid'], 1);
|
|
|
|
return ['code' => 200, 'msg' => '删除成功', 'data' => ''];
|
|
}
|
|
|
|
public function batch_delete_box_config($data){
|
|
$bid_list = [];
|
|
foreach ($data as $k => $v){
|
|
$bid_list[] = $v['bid'];
|
|
}
|
|
|
|
$map = [];
|
|
$map[] = ['bid', 'in', $bid_list];
|
|
$reslut = db::name('box_config')->where($map)->delete();
|
|
if($reslut){
|
|
return ['code' => 200, 'msg' => '删除成功', 'data' => ''];
|
|
}else{
|
|
return ['code' => 201, 'msg' => '删除失败', 'data' => ''];
|
|
}
|
|
}
|
|
public function get_box_config_info($bid)
|
|
{
|
|
$map = [];
|
|
$map[] = ['bid', '=', $bid];
|
|
$box_config_info = db::name('box_config')->where($map)->find();
|
|
if (empty($box_config_info)) {
|
|
return ['code' => 201, 'msg' => '信息不存在', 'data' => ''];
|
|
}
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $box_config_info];
|
|
}
|
|
public function get_box_log_list($tid, $page = 1, $limit = 20)
|
|
{
|
|
$map = [];
|
|
if (!empty($tid)) {
|
|
$map[] = ['tid', '=', $tid];
|
|
}
|
|
$list = db::name('box_log')->where($map)->order('bl_id', 'desc')->page($page, $limit)->select();
|
|
foreach ($list as $k => &$v) {
|
|
$v['type_name'] = db::name('box_type')->where('tid', $v['tid'])->value('type_name');
|
|
$v['unopen_num'] = $v['total_num'] - $v['open_num'];
|
|
$v['unopen_gift_value'] = $v['total_gift_value'] - $v['open_gift_value'];
|
|
}
|
|
$data = [];
|
|
$data['count'] = db::name('box_log')->where($map)->count();
|
|
$data['list'] = $list;
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
|
|
}
|
|
|
|
|
|
|
|
public function get_user_box_log_list($uid, $bl_id, $gid, $tid, $start, $end, $page = 1, $limit = 20)
|
|
{
|
|
$map = [];
|
|
if (!empty($uid)) {
|
|
$map[] = ['uid', '=', $uid];
|
|
}
|
|
if (!empty($bl_id)) {
|
|
$map[] = ['bl_id', '=', $bl_id];
|
|
}
|
|
if (!empty($gid)) {
|
|
$map[] = ['gid', '=', $gid];
|
|
}
|
|
if (!empty($tid)) {
|
|
$map[] = ['tid', '=', $tid];
|
|
}
|
|
if (!empty($start)) {
|
|
$map[] = ['add_time', '>=', strtotime($start)];
|
|
}
|
|
if (!empty($end)) {
|
|
$map[] = ['add_time', '<=', strtotime($end)];
|
|
}
|
|
$list = db::name('user_box_log')->where($map)->order('aid', 'desc')->page($page, $limit)->select();
|
|
foreach ($list as $k => &$v) {
|
|
$user_info = db::name('user')->field('uid,user_name,nick_name,base64_nick_name')->where('uid', $v['uid'])->find();
|
|
$gift_info = db::name('gift')->find($v['gid']);
|
|
$box_type_info = db::name('box_type')->find($v['tid']);
|
|
$v['type_name'] = $box_type_info['type_name'];
|
|
if (!empty($gift_info)) {
|
|
$v['gift_name'] = $gift_info['gift_name'];
|
|
$v['gift_price'] = $gift_info['gift_price'];
|
|
$v['base_image'] = localpath_to_netpath($gift_info['base_image']);
|
|
} else {
|
|
$v['gift_name'] = '';
|
|
$v['gift_price'] = 0;
|
|
}
|
|
$v['user_name'] = $user_info['user_name'];
|
|
$v['nick_name'] = mb_convert_encoding(base64_decode($user_info['base64_nick_name']), 'UTF-8', 'UTF-8');
|
|
}
|
|
$data = [];
|
|
$data['list'] = $list;
|
|
$totalRowData = db::name('user_box_log')->field('count(1) as count,SUM(num) as num,SUM(total_price) as total_price')->where($map)->find();
|
|
$data['count'] = $totalRowData['count'];
|
|
unset($totalRowData['count']);
|
|
//dump($totalRowData);
|
|
$data['totalRow'] = $totalRowData;
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
|
|
}
|
|
|
|
|
|
|
|
public function get_user_box_count_list($uid, $out_amount, $last_login_device, $profit, $tid, $add_time, $order, $sort, $page = 1, $limit = 20)
|
|
{
|
|
$map = [];
|
|
if (!empty($uid)) {
|
|
$map[] = ['a.uid', '=', $uid];
|
|
}
|
|
if(!empty($out_amount)){
|
|
$map[] = ['a.out_amount', '>=', $out_amount];
|
|
}
|
|
if(!empty($last_login_device)){
|
|
$map[] = ['b.last_login_device', 'like', '%'.$last_login_device.'%'];
|
|
}
|
|
if(!empty($profit)){
|
|
$map[] = ['a.profit', '>=', $profit];
|
|
}
|
|
if(!empty($tid)){
|
|
$map[] = ['a.box_type', '=', $tid];
|
|
}
|
|
if(!empty($add_time)){
|
|
$add_time = explode(' - ',$add_time);
|
|
$add_time_1 = strtotime($add_time[0]);
|
|
$add_time_2 = strtotime($add_time[1]);
|
|
$map[] = ['a.add_time','between',[$add_time_1,$add_time_2]];
|
|
}
|
|
$list = db::name('user_box_count')->alias('a')->join('user b','a.uid = b.uid')->field('a.*,b.user_name,b.base64_nick_name,b.last_login_device')->where($map)->order($order, $sort)->page($page, $limit)->select();
|
|
// $box_type_list = [1,2,3,4,5,6,7,8,9,10,11];
|
|
|
|
foreach ($list as $k => &$v) {
|
|
// if($v['box_type'] == 1){
|
|
// $v['type_name'] = '奇镜寻梦';
|
|
// }else if($v['box_type'] == 2){
|
|
// $v['type_name'] = '仙踪秘语';
|
|
// }else if($v['box_type'] == 3){
|
|
// $v['type_name'] = '琥珀幽林';
|
|
// }else if($v['box_type'] == 4){
|
|
// $v['type_name'] = '重逢留声机';
|
|
// }else if($v['box_type'] == 5){
|
|
// $v['type_name'] = '经典留声机';
|
|
// }else if($v['box_type'] == 6){
|
|
// $v['type_name'] = '璀璨留声机';
|
|
// }else if($v['box_type'] == 11){
|
|
// $v['type_name'] = '奇镜寻梦(虚拟池)';
|
|
// }else if($v['box_type'] == 12){
|
|
// $v['type_name'] = '仙踪秘语(虚拟池)';
|
|
// }else if($v['box_type'] == 13){
|
|
// $v['type_name'] = '琥珀幽林(虚拟池)';
|
|
// }else if($v['box_type'] == 14){
|
|
// $v['type_name'] = '重逢留声机(虚拟池)';
|
|
// }else if($v['box_type'] == 15){
|
|
// $v['type_name'] = '经典留声机(虚拟池)';
|
|
// }else if($v['box_type'] == 16){
|
|
// $v['type_name'] = '璀璨留声机(虚拟池)';
|
|
// }else if($v['box_type'] == 101){
|
|
// $v['type_name'] = '初级盲盒';
|
|
// }else if($v['box_type'] == 102){
|
|
// $v['type_name'] = '中级盲盒';
|
|
// }else if($v['box_type'] == 103){
|
|
// $v['type_name'] = '高级盲盒';
|
|
// }else if($v['box_type'] == 104){
|
|
// $v['type_name'] = '一元盲盒';
|
|
// }
|
|
// else{
|
|
// $v['type_name'] = '未知';
|
|
// }
|
|
|
|
if($v['box_type'] == 1){
|
|
$v['type_name'] = '奇镜寻梦';
|
|
}else if($v['box_type'] == 2){
|
|
$v['type_name'] = '仙踪秘语';
|
|
}else if($v['box_type'] == 3){
|
|
$v['type_name'] = '琥珀幽林';
|
|
}else if($v['box_type'] == 101){
|
|
$v['type_name'] = '初级盲盒';
|
|
}else if($v['box_type'] == 102){
|
|
$v['type_name'] = '中级盲盒';
|
|
}else if($v['box_type'] == 103){
|
|
$v['type_name'] = '高级盲盒';
|
|
}
|
|
else{
|
|
$v['type_name'] = '未知';
|
|
}
|
|
|
|
|
|
|
|
// $user_info = db::name('user')->field('uid,user_name,nick_name,base64_nick_name,last_login_device')->where('uid', $v['uid'])->find();
|
|
// $v['user_name'] = $user_info['user_name'];
|
|
$v['nick_name'] = mb_convert_encoding(base64_decode($v['base64_nick_name']), 'UTF-8', 'UTF-8');
|
|
// $v['last_login_device'] = $user_info['last_login_device'];
|
|
}
|
|
$data = [];
|
|
$data['list'] = $list;
|
|
$totalRowData = db::name('user_box_count')->alias('a')->join('user b','a.uid = b.uid')->field('count(1) as count,SUM(a.out_amount) as out_amount,SUM(a.in_amount) as in_amount,SUM(a.profit) as profit')->where($map)->find();
|
|
$data['count'] = $totalRowData['count'];
|
|
unset($totalRowData['count']);
|
|
//dump($totalRowData);
|
|
if($totalRowData['out_amount'] == 0){
|
|
$totalRowData['rate'] = 0.00000;
|
|
}else{
|
|
$totalRowData['rate'] = round($totalRowData['in_amount']/$totalRowData['out_amount'],6);
|
|
}
|
|
$data['totalRow'] = $totalRowData;
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
|
|
}
|
|
|
|
|
|
//监控宝箱redis list 剩余宝箱数量 生成
|
|
//tid 宝箱类型
|
|
//is_reset 0不重置 1重置
|
|
public function control_generate_box($tid = 0, $is_reset = 0)
|
|
{
|
|
set_time_limit(0);
|
|
ini_set('memory_limit', '1024M');
|
|
$redis = connectionRedis();
|
|
|
|
$map = [];
|
|
if (!empty($tid)) {
|
|
$map[] = ['tid', '=', $tid];
|
|
}
|
|
$map[] = ['open_status', '=', 1];
|
|
$map[] = ['del_status', '=', 1];
|
|
$gift_price_data = db::name('gift')->column('gift_price', 'gid'); //礼物价值
|
|
$box_type_list = db::name('box_type')->where($map)->select();
|
|
$list_len = 0;
|
|
foreach ($box_type_list as $k => $v) {
|
|
|
|
$map = [];
|
|
$map[] = ['tid', '=', $v['tid']];
|
|
$box_config_list = Db::name('box_config')->where($map)->select();
|
|
$keyname = "box:list:tid:" . $v['tid'];
|
|
if ($is_reset == 1) {
|
|
$redis->del($keyname); //如果重置则删除原队列
|
|
}
|
|
//剩余开奖次数少于5000 则补充下一期奖池
|
|
if ($redis->llen($keyname) < 500) {
|
|
$insert_data = [];
|
|
$total_gift_value = 0;
|
|
|
|
//获取0次开出的礼物
|
|
$where = [];
|
|
$where[] = ['tid', '=', $v['tid']];
|
|
$where[] = ['open_num_obtain', '=', 0];
|
|
$box_config_zero_lists = db::name('box_config')->where($where)->select();
|
|
foreach ($box_config_zero_lists as $m => $n){
|
|
//更新添加次数
|
|
for ($q = 0; $q < $n['num']; $q++) {
|
|
$insert_data[] = $n['gid'];
|
|
}
|
|
if (empty($gift_price_data[$n['gid']]) && $gift_price_data[$n['gid']] != 0) {
|
|
return ['code' => 201, 'msg' => '礼物id:' . $n['gid'] . '不存在', 'data' => ''];
|
|
}
|
|
|
|
$total_gift_value += $gift_price_data[$n['gid']] * $n['num'];
|
|
}
|
|
shuffle($insert_data);
|
|
|
|
//获取大于0次开出的礼物
|
|
$where = [];
|
|
$where[] = ['tid', '=', $v['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);
|
|
}
|
|
|
|
// foreach ($box_config_list as $m => $n) {
|
|
// //更新添加次数
|
|
// for ($q = 0; $q < $n['num']; $q++) {
|
|
// $insert_data[] = $n['gid'];
|
|
// }
|
|
// if (empty($gift_price_data[$n['gid']]) && $gift_price_data[$n['gid']] != 0) {
|
|
// return ['code' => 201, 'msg' => '礼物id:' . $n['gid'] . '不存在', 'data' => ''];
|
|
// }
|
|
// $total_gift_value += $gift_price_data[$n['gid']] * $n['num'];
|
|
// }
|
|
|
|
if (!empty($box_config_list)) {
|
|
//插入期日志表
|
|
$data = [];
|
|
$data['tid'] = $v['tid'];
|
|
$data['total_num'] = count($insert_data);
|
|
$data['total_gift_value'] = $total_gift_value;
|
|
$data['open_num'] = 0;
|
|
$data['open_gift_value'] = 0;
|
|
$data['config_text'] = json_encode($box_config_list);
|
|
$data['add_time'] = time();
|
|
$data['update_time'] = time();
|
|
$bl_id = db::name('box_log')->insertGetId($data);
|
|
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);
|
|
}
|
|
}
|
|
$list_len = $redis->llen($keyname);
|
|
//echo date('Y-m-d H:i:s') . " " . $keyname . "宝箱剩余数量:$list_len" . "\r\n";
|
|
}
|
|
|
|
return ['code' => 200, 'msg' => '生成成功', 'data' => "剩余数量: $list_len"];
|
|
}
|
|
|
|
|
|
//监控宝箱redis list 剩余宝箱数量 生成
|
|
//tid 宝箱类型
|
|
//is_reset 0不重置 1重置
|
|
public function control_generate_boxs($tid = 0, $is_reset = 0)
|
|
{
|
|
set_time_limit(0);
|
|
ini_set('memory_limit', '1024M');
|
|
$redis = connectionRedis();
|
|
|
|
$map = [];
|
|
if (!empty($tid)) {
|
|
$map[] = ['tid', '=', $tid];
|
|
}
|
|
$map[] = ['tid', 'in', [13,14,15]];
|
|
$gift_price_data = db::name('gift')->column('gift_price', 'gid'); //礼物价值
|
|
$box_type_list = db::name('box_type')->where($map)->select();
|
|
$list_len = 0;
|
|
$keyname = "box:list:tid:13";
|
|
if ($is_reset == 1) {
|
|
$redis->del($keyname); //如果重置则删除原队列
|
|
}
|
|
//剩余开奖次数少于1000 则补充下一期奖池
|
|
if($redis->llen($keyname) < 1000){
|
|
foreach ($box_type_list as $k => $v) {
|
|
|
|
$map = [];
|
|
$map[] = ['tid', '=', $v['tid']];
|
|
$box_config_list = Db::name('box_config')->where($map)->select();
|
|
|
|
$insert_data = [];
|
|
$total_gift_value = 0;
|
|
|
|
//获取0次开出的礼物
|
|
$where = [];
|
|
$where[] = ['tid', '=', $v['tid']];
|
|
$where[] = ['open_num_obtain', '=', 0];
|
|
$box_config_zero_lists = db::name('box_config')->where($where)->select();
|
|
foreach ($box_config_zero_lists as $m => $n){
|
|
//更新添加次数
|
|
for ($q = 0; $q < $n['num']; $q++) {
|
|
$insert_data[] = $n['gid'];
|
|
}
|
|
if (empty($gift_price_data[$n['gid']]) && $gift_price_data[$n['gid']] != 0) {
|
|
return ['code' => 201, 'msg' => '礼物id:' . $n['gid'] . '不存在', 'data' => ''];
|
|
}
|
|
|
|
$total_gift_value += $gift_price_data[$n['gid']] * $n['num'];
|
|
}
|
|
shuffle($insert_data);
|
|
|
|
//获取大于0次开出的礼物
|
|
$where = [];
|
|
$where[] = ['tid', '=', $v['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);
|
|
}
|
|
|
|
if (!empty($box_config_list)) {
|
|
//插入期日志表
|
|
$data = [];
|
|
$data['tid'] = $v['tid'];
|
|
$data['total_num'] = count($insert_data);
|
|
$data['total_gift_value'] = $total_gift_value;
|
|
$data['open_num'] = 0;
|
|
$data['open_gift_value'] = 0;
|
|
$data['config_text'] = json_encode($box_config_list);
|
|
$data['add_time'] = time();
|
|
$data['update_time'] = time();
|
|
$bl_id = db::name('box_log')->insertGetId($data);
|
|
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);
|
|
}
|
|
|
|
$list_len = $redis->llen($keyname);
|
|
//echo date('Y-m-d H:i:s') . " " . $keyname . "宝箱剩余数量:$list_len" . "\r\n";
|
|
}
|
|
}
|
|
|
|
return ['code' => 200, 'msg' => '生成成功', 'data' => "剩余数量: $list_len"];
|
|
}
|
|
|
|
|
|
public function get_box_person_log_list($tid, $uid, $page, $limit) {
|
|
$map = [];
|
|
if(!empty($uid)){
|
|
$map[] = ['uid', '=', $uid];
|
|
}
|
|
if(!empty($tid)){
|
|
$map[] = ['tid', '=', $tid];
|
|
}else{
|
|
$tid_list = [17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,37];
|
|
$map[] = ['tid', 'in', $tid_list];
|
|
}
|
|
$map[] = ['del_status', '=', 1];
|
|
|
|
$list = db::name('box_person_log')->where($map)->page($page, $limit)->select();
|
|
foreach ($list as $k => &$v) {
|
|
|
|
$v['unopen_gift_value'] = $v['total_gift_value'] - $v['open_gift_value'];
|
|
$v['unopen_num'] = $v['total_num'] - $v['open_num'];
|
|
|
|
$v['type_name'] = db::name('box_type')->where('tid', $v['tid'])->value('type_name');
|
|
$v['user_name'] = db::name('user')->where('uid', $v['uid'])->value('base64_nick_name');
|
|
$v['user_name'] = mb_convert_encoding(base64_decode($v['user_name']), 'UTF-8', 'UTF-8');
|
|
|
|
}
|
|
$data = [];
|
|
$data['count'] = db::name('box_person_log')->where($map)->count();
|
|
$data['list'] = $list;
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
|
|
|
|
}
|
|
|
|
//清空积攒金额
|
|
public function accumulate_del(){
|
|
$accumulate_box = [38,39,40,41];
|
|
$map = [];
|
|
$map[] = ['tid', 'in', $accumulate_box];
|
|
$data = [];
|
|
$data['accumulate_price'] = 0;
|
|
$da = [];
|
|
$da['consume'] = 0;
|
|
|
|
Db::startTrans();
|
|
try {
|
|
$reslut = db::name('box_type')->where($map)->update($da);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '清空失败', 'data' => null];
|
|
}
|
|
|
|
$resluts = db::name('box_config')->where($map)->update($data);
|
|
if(!$resluts){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '清空失败', 'data' => null];
|
|
}
|
|
|
|
// 提交事务
|
|
Db::commit();
|
|
} catch (\Exception $e) {
|
|
// 回滚事务
|
|
// dump($e);
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '清空失败', 'data' => null];
|
|
}
|
|
|
|
}
|
|
|
|
public function user_clear_box($tid){
|
|
set_time_limit(0);
|
|
ini_set('memory_limit', '1024M');
|
|
$redis = connectionRedis();
|
|
|
|
$map = [];
|
|
if (!empty($tid)) {
|
|
$map[] = ['tid', '=', $tid];
|
|
}
|
|
$map[] = ['open_status', '=', 2];
|
|
$map[] = ['del_status', '=', 1];
|
|
$box_type_list = db::name('box_type')->where($map)->select();
|
|
$user_list = db::name('user')->where('1=1')->select();
|
|
foreach ($box_type_list as $k => $v){
|
|
foreach ($user_list as $a => $b){
|
|
$key_name = "box:list:tid:".$v['tid'].":uid:".$b['uid'];
|
|
$redis->del($key_name);
|
|
}
|
|
}
|
|
$map = [];
|
|
$map[] = ['del_status','=',1];
|
|
$data = [];
|
|
$data['del_status'] = 2;
|
|
$data['update_time'] = time();
|
|
db::name('box_person_log')->where($map)->update($data);
|
|
return ['code' => 200, 'msg' => '重置成功', 'data' => null];
|
|
}
|
|
|
|
public function control_accumulate_box(){
|
|
$redis = connectionRedis();
|
|
$user = db::name('user')->where('login_status',1)->select();
|
|
foreach ($user as $k => $v){
|
|
$key_name = "box:list:tid:5:uid:".$v['uid'];
|
|
$redis->del($key_name);
|
|
}
|
|
return ['code' => 200, 'msg' => '重置成功', 'data' => null];
|
|
}
|
|
|
|
public function control_user_box(){
|
|
$redis = connectionRedis();
|
|
$user = db::name('user')->where('login_status',1)->select();
|
|
foreach ($user as $k => $v){
|
|
$key_name = "box:list:tid:4:uid:".$v['uid'];
|
|
$redis->del($key_name);
|
|
}
|
|
return ['code' => 200, 'msg' => '重置成功', 'data' => null];
|
|
}
|
|
|
|
public function get_room_box_count_list($uid, $out_amount, $tid, $add_time, $order, $sort, $page = 1, $limit = 20)
|
|
{
|
|
$map = [];
|
|
if (!empty($uid)) {
|
|
$map[] = ['b.room_number', '=', $uid];
|
|
}
|
|
if(!empty($out_amount)){
|
|
$map[] = ['a.out_amount', '>=', $out_amount];
|
|
}
|
|
if(!empty($tid)){
|
|
$map[] = ['a.box_type', '=', $tid];
|
|
}
|
|
if(!empty($add_time)){
|
|
$add_time = explode(' - ',$add_time);
|
|
$add_time_1 = strtotime($add_time[0]);
|
|
$add_time_2 = strtotime($add_time[1]);
|
|
$map[] = ['a.add_time','between',[$add_time_1,$add_time_2]];
|
|
}
|
|
$list = db::name('room_box_count')->alias('a')->join('yy_room b','a.rid = b.rid')->field('a.*,b.base64_room_name,b.room_number,b.room_owner_uid')->where($map)->order($order, $sort)->page($page, $limit)->select();
|
|
// $box_type_list = [1,2,3,4,5,6,7,8,9,10,11];
|
|
|
|
foreach ($list as $k => &$v) {
|
|
// if($v['box_type'] == 1){
|
|
// $v['type_name'] = '奇镜寻梦';
|
|
// }else if($v['box_type'] == 2){
|
|
// $v['type_name'] = '仙踪秘语';
|
|
// }else if($v['box_type'] == 3){
|
|
// $v['type_name'] = '琥珀幽林';
|
|
// }else if($v['box_type'] == 4){
|
|
// $v['type_name'] = '重逢留声机';
|
|
// }else if($v['box_type'] == 5){
|
|
// $v['type_name'] = '经典留声机';
|
|
// }else if($v['box_type'] == 6){
|
|
// $v['type_name'] = '璀璨留声机';
|
|
// }else if($v['box_type'] == 11){
|
|
// $v['type_name'] = '奇镜寻梦(虚拟池)';
|
|
// }else if($v['box_type'] == 12){
|
|
// $v['type_name'] = '仙踪秘语(虚拟池)';
|
|
// }else if($v['box_type'] == 13){
|
|
// $v['type_name'] = '琥珀幽林(虚拟池)';
|
|
// }else if($v['box_type'] == 14){
|
|
// $v['type_name'] = '重逢留声机(虚拟池)';
|
|
// }else if($v['box_type'] == 15){
|
|
// $v['type_name'] = '经典留声机(虚拟池)';
|
|
// }else if($v['box_type'] == 16){
|
|
// $v['type_name'] = '璀璨留声机(虚拟池)';
|
|
// }else if($v['box_type'] == 101){
|
|
// $v['type_name'] = '初级盲盒';
|
|
// }else if($v['box_type'] == 102){
|
|
// $v['type_name'] = '中级盲盒';
|
|
// }else if($v['box_type'] == 103){
|
|
// $v['type_name'] = '高级盲盒';
|
|
// }else if($v['box_type'] == 104){
|
|
// $v['type_name'] = '一元盲盒';
|
|
// }
|
|
// else{
|
|
// $v['type_name'] = '未知';
|
|
// }
|
|
|
|
|
|
|
|
if($v['box_type'] == 1){
|
|
$v['type_name'] = '奇镜寻梦';
|
|
}else if($v['box_type'] == 2){
|
|
$v['type_name'] = '仙踪秘语';
|
|
}else if($v['box_type'] == 3){
|
|
$v['type_name'] = '琥珀幽林';
|
|
}else if($v['box_type'] == 101){
|
|
$v['type_name'] = '初级盲盒';
|
|
}else if($v['box_type'] == 102){
|
|
$v['type_name'] = '中级盲盒';
|
|
}else if($v['box_type'] == 103){
|
|
$v['type_name'] = '高级盲盒';
|
|
}
|
|
else{
|
|
$v['type_name'] = '未知';
|
|
}
|
|
|
|
|
|
|
|
// $user_info = db::name('user')->field('uid,user_name,nick_name,base64_nick_name,last_login_device')->where('uid', $v['uid'])->find();
|
|
// $v['user_name'] = $user_info['user_name'];
|
|
$user_name = db::name('user')->where('uid',$v['room_owner_uid'])->value('base64_nick_name');
|
|
$v['user_name'] = mb_convert_encoding(base64_decode($user_name), 'UTF-8', 'UTF-8');
|
|
$v['nick_name'] = mb_convert_encoding(base64_decode($v['base64_room_name']), 'UTF-8', 'UTF-8');
|
|
// $v['last_login_device'] = $user_info['last_login_device'];
|
|
}
|
|
$data = [];
|
|
$data['list'] = $list;
|
|
$totalRowData = db::name('room_box_count')->alias('a')->join('yy_room b','a.rid = b.rid')->field('count(1) as count,SUM(a.out_amount) as out_amount,SUM(a.in_amount) as in_amount,SUM(a.profit) as profit')->where($map)->find();
|
|
$data['count'] = $totalRowData['count'];
|
|
unset($totalRowData['count']);
|
|
//dump($totalRowData);
|
|
if($totalRowData['out_amount'] == 0){
|
|
$totalRowData['rate'] = 0.00000;
|
|
}else{
|
|
$totalRowData['rate'] = round($totalRowData['in_amount']/$totalRowData['out_amount'],6);
|
|
}
|
|
$data['totalRow'] = $totalRowData;
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
|
|
}
|
|
|
|
|
|
public function get_room_box_counts_list($uid, $out_amount, $order, $sort, $page = 1, $limit = 20)
|
|
{
|
|
$map = [];
|
|
if (!empty($uid)) {
|
|
$map[] = ['b.room_number', '=', $uid];
|
|
}
|
|
if(!empty($out_amount)){
|
|
$map[] = ['a.out_amount', '>=', $out_amount];
|
|
}
|
|
$list = db::name('room_box_count')->alias('a')->join('yy_room b','a.rid = b.rid')->field('a.sid,SUM(a.out_amount) as out_amount, SUM(a.in_amount) as in_amount, SUM(a.profit) as profit, b.base64_room_name,b.room_number,b.room_owner_uid')->where($map)->group('a.rid')->order($order, $sort)->page($page, $limit)->select();
|
|
|
|
foreach ($list as $k => &$v) {
|
|
// $user_info = db::name('user')->field('uid,user_name,nick_name,base64_nick_name,last_login_device')->where('uid', $v['uid'])->find();
|
|
// $v['user_name'] = $user_info['user_name'];
|
|
$v['rate'] = round($v['in_amount']/$v['out_amount'],6);
|
|
$user_name = db::name('user')->where('uid',$v['room_owner_uid'])->value('base64_nick_name');
|
|
$v['user_name'] = mb_convert_encoding(base64_decode($user_name), 'UTF-8', 'UTF-8');
|
|
$v['nick_name'] = mb_convert_encoding(base64_decode($v['base64_room_name']), 'UTF-8', 'UTF-8');
|
|
// $v['last_login_device'] = $user_info['last_login_device'];
|
|
}
|
|
$data = [];
|
|
$data['list'] = $list;
|
|
$totalRowData = db::name('room_box_count')->alias('a')->join('yy_room b','a.rid = b.rid')->field('SUM(a.out_amount) as out_amount,SUM(a.in_amount) as in_amount,SUM(a.profit) as profit')->where($map)->find();
|
|
$data['count'] = db::name('room_box_count')->where($map)->alias('a')->join('yy_room b', 'a.rid = b.rid')->field('a.sid')->group('a.rid')->count();
|
|
unset($totalRowData['count']);
|
|
//dump($totalRowData);
|
|
if($totalRowData['out_amount'] == 0){
|
|
$totalRowData['rate'] = 0.00000;
|
|
}else{
|
|
$totalRowData['rate'] = round($totalRowData['in_amount']/$totalRowData['out_amount'],6);
|
|
}
|
|
$data['totalRow'] = $totalRowData;
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|