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