1535 lines
71 KiB
PHP
1535 lines
71 KiB
PHP
<?php
|
|
|
|
namespace app\api\model;
|
|
|
|
use think\Db;
|
|
use think\Model;
|
|
|
|
class Sprite extends Model
|
|
{
|
|
|
|
//选择兑换数量列表
|
|
public function choice_amount_list($uid){
|
|
$user_info = db::name('user')->find($uid);
|
|
if(!$user_info){
|
|
return ['code' => 201, 'msg' => '参数错误', 'data' => null];
|
|
}
|
|
|
|
$config = get_uncache_system_config();
|
|
$list = db::name('sprite_multiple')->field('amount')->select();
|
|
|
|
$data = [];
|
|
$data['list'] = $list;
|
|
$data['sprite_price'] = $config['sprite_price'];
|
|
$data['integral'] = $user_info['integral'];
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
|
|
|
|
}
|
|
|
|
//兑换门票
|
|
public function exchange_airship($uid, $rid, $num){
|
|
$user_info = db::name('user')->find($uid);
|
|
if(!$user_info){
|
|
return ['code' => 201, 'msg' => '参数错误', 'data' => null];
|
|
}
|
|
|
|
$room_info = db::name('room')->find($rid);
|
|
if(!$room_info){
|
|
return ['code' => 201, 'msg' => '该房间不存在', 'data' => null];
|
|
}
|
|
|
|
if($num < 1){
|
|
return ['code' => 201, 'msg' => '最低数量不能小于1', 'data' => null];
|
|
}
|
|
|
|
if(ceil($num) != $num){
|
|
return ['code' => 201, 'msg' => '数量必须为整数', 'data' => null];
|
|
}
|
|
|
|
$config = get_uncache_system_config();
|
|
$money = $config['sprite_price'] * $num;
|
|
|
|
//用户金币是否足够
|
|
if($user_info['integral'] < $money){
|
|
return ['code' => 201, 'msg' => '金币不足', 'data' => null];
|
|
}
|
|
|
|
Db::startTrans();
|
|
try {
|
|
|
|
//扣除金币
|
|
$reslut = model('admin/User')->change_user_money_by_uid($uid, -$money, 2, 40, "购买门票消耗金币", $uid, 0, 0);
|
|
if ($reslut['code'] == 201) {
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null];
|
|
}
|
|
|
|
//增加门票数量
|
|
$reslut = model('admin/User')->change_user_money_by_uid($uid, $num, 3, 41, "购买门票", $uid, 0, 0);
|
|
if ($reslut['code'] == 201) {
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null];
|
|
}
|
|
|
|
//增加兑换记录
|
|
$insert = [];
|
|
$insert['uid'] = $uid;
|
|
$insert['rid'] = $rid;
|
|
$insert['airship'] = $num;
|
|
$insert['total_price'] = $money;
|
|
$insert['add_time'] = time();
|
|
$reslut = db::name('user_exchange_sprite_log')->insert($insert);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '兑换失败', 'data' => null];
|
|
}
|
|
|
|
Db::commit();
|
|
|
|
$data = [];
|
|
$data['integral'] = db::name('user')->where('uid', $uid)->value('integral');
|
|
$data['airship'] = db::name('user')->where('uid', $uid)->value('airship');
|
|
|
|
return ['code' => 200, 'msg' => '兑换成功', 'data' => $data];
|
|
} catch (\Exception $e) {
|
|
// 回滚事务
|
|
dump($e);
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '兑换失败', 'data' => null];
|
|
}
|
|
|
|
|
|
}
|
|
|
|
//当前该玩法详情
|
|
public function get_monster_info($uid){
|
|
$user_info = db::name('user')->field('uid, integral, airship')->find($uid);
|
|
if(!$user_info){
|
|
return ['code' => 201, 'msg' => '参数错误', 'data' => null];
|
|
}
|
|
$now_time = time();
|
|
|
|
$data = [];
|
|
$data['surplus_time'] = 0;
|
|
$data['is_finsh'] = 3;
|
|
$data['win_number'] = 0;
|
|
// $data['list'] = [];
|
|
$data['integral'] = $user_info['integral'];
|
|
$data['airship'] = $user_info['airship'];
|
|
$data['multiple_list'] = db::name('sprite')->field('id,type,base_image,type_name,multiple')->order('id asc')->select();
|
|
foreach ($data['multiple_list'] as $a => &$b){
|
|
$b['num'] = 0;
|
|
$b['base_image'] = localpath_to_netpath($b['base_image']);
|
|
}
|
|
|
|
//当前是否有开放该活动
|
|
$monster_log = db::name('sprite_log')->order('id desc')->limit(1)->find();
|
|
if(empty($monster_log)){
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
|
|
}else{
|
|
if($monster_log['end_time'] <= $now_time){
|
|
$is_finish = 1;
|
|
$data['win_number'] = $monster_log['win_type'];
|
|
}else{
|
|
$is_finish = 2;
|
|
$data['surplus_time'] = $monster_log['end_time'] - $now_time;
|
|
}
|
|
$data['is_finsh'] = $is_finish;
|
|
|
|
foreach ($data['multiple_list'] as $a => &$b){
|
|
$user_monster_feed_log = db::name('user_sprite_log')->where('uid', $uid)->where('mid', $monster_log['id'])->where('type', $b['type'])->find();
|
|
if(!empty($user_monster_feed_log)){
|
|
$b['num'] = $user_monster_feed_log['airship'];
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
|
|
}
|
|
|
|
//结算当前玩法消费票数
|
|
public function close_user_sprite(){
|
|
set_time_limit(0);
|
|
ini_set('memory_limit', '1024M');
|
|
$config = get_uncache_system_config();
|
|
//获取当前尚未结束的玩法
|
|
$map = [];
|
|
$map[] = ['is_delete', '=', 1];
|
|
$monster_log = db::name('sprite_log')->where($map)->find();
|
|
if($monster_log){
|
|
Db::startTrans();
|
|
try {
|
|
$close_time = $monster_log['end_time'] - 5;
|
|
|
|
if($close_time < time()){
|
|
$map = [];
|
|
$map[] = ['mid', '=', $monster_log['id']];
|
|
$map[] = ['is_close', '=', 2];
|
|
$user_array = db::name('user_sprite_log')->where($map)->group('uid')->column('uid');
|
|
if(!empty($user_array)){
|
|
$num = 0;
|
|
foreach ($user_array as $a => $b){
|
|
//用户投入票数
|
|
$map = [];
|
|
$map[] = ['mid', '=', $monster_log['id']];
|
|
$map[] = ['uid', '=', $b];
|
|
$map[] = ['is_close', '=', 2];
|
|
$user_pay_airship = db::name('user_sprite_log')->where($map)->sum('airship');
|
|
|
|
$user_airship = db::name('user')->where('uid', $b)->value('airship');
|
|
|
|
if($user_pay_airship > 0 && $user_airship >= $user_pay_airship){
|
|
//扣除用户门票数量
|
|
$reslut = model('admin/User')->change_user_money_by_uid($b, -$user_pay_airship, 3, 42, "仲夏夜梦曲投入票数", $b, 0, 0);
|
|
if ($reslut['code'] != 201) {
|
|
//修改投入状态
|
|
$reslut = db::name('user_sprite_log')->where($map)->update(['is_close' => 1, 'close_time' => time()]);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '请重试', 'data' => null];
|
|
}
|
|
$num += $user_pay_airship;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
$total_money = $num * $config['sprite_price'];
|
|
//计入当期支出累消
|
|
$update = [];
|
|
$update['update_time'] = time();
|
|
$reslut = db::name('sprite_log')->where('id', $monster_log['id'])->inc('out_amount', $total_money)->update($update);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '请重试', 'data' => null];
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
Db::commit();
|
|
return ['code' => 200, 'msg' => '成功', 'data' => null];
|
|
} catch (\Exception $e) {
|
|
// 回滚事务
|
|
dump($e);
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '失败', 'data' => null];
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
//生成当前该玩法期数
|
|
public function create_sprite_log($type = 1){
|
|
set_time_limit(0);
|
|
ini_set('memory_limit', '1024M');
|
|
// if($type == 1){
|
|
// exit;
|
|
// }
|
|
|
|
$config = get_uncache_system_config();
|
|
$now_time = time();
|
|
$is_push = 5;//不推送
|
|
|
|
Db::startTrans();
|
|
try {
|
|
$map = [];
|
|
$map[] = ['is_delete', '=', 1];
|
|
$monster_log = db::name('sprite_log')->where($map)->find();
|
|
if($monster_log){//当前有未结束的该星球期数
|
|
if($now_time >= $monster_log['end_time']){
|
|
$key_name = "admin:cli:close_sprite_log";
|
|
redis_lock_exit($key_name,1,5);
|
|
$win_type_info = [];
|
|
$evil_wind_type = 0;
|
|
//是否有双号
|
|
$evil_wind_number = rand(0,500);
|
|
// $evil_wind_number = 39;
|
|
$is_evil_wind = 2;
|
|
if(in_array($evil_wind_number, [39,67,111,143,182,202,237,254,375,461])){
|
|
$is_evil_wind = 1;
|
|
$check_wind_type = $this->check_wind_type_is_loss($evil_wind_number, $monster_log);
|
|
$is_evil_wind = $check_wind_type['is_evil_wind'];
|
|
$evil_wind_number = $check_wind_type['evil_wind_number'];
|
|
}
|
|
|
|
if($is_evil_wind == 1){
|
|
|
|
if($evil_wind_number == 39){
|
|
$evil_wind_type = 1;
|
|
$win_type_arr = [1,2];
|
|
}else if($evil_wind_number == 67){
|
|
$evil_wind_type = 2;
|
|
$win_type_arr = [1,3];
|
|
}else if($evil_wind_number == 111){
|
|
$evil_wind_type = 3;
|
|
$win_type_arr = [1,4];
|
|
}else if($evil_wind_number == 143){
|
|
$evil_wind_type = 4;
|
|
$win_type_arr = [1,5];
|
|
}else if($evil_wind_number == 182){
|
|
$evil_wind_type = 5;
|
|
$win_type_arr = [2,3];
|
|
}else if($evil_wind_number == 202){
|
|
$evil_wind_type = 6;
|
|
$win_type_arr = [2,4];
|
|
}else if($evil_wind_number == 237){
|
|
$evil_wind_type = 7;
|
|
$win_type_arr = [2,5];
|
|
}else if($evil_wind_number == 254){
|
|
$evil_wind_type = 8;
|
|
$win_type_arr = [3,4];
|
|
}else if($evil_wind_number == 375){
|
|
$evil_wind_type = 9;
|
|
$win_type_arr = [3,5];
|
|
}else if($evil_wind_number == 461){
|
|
$evil_wind_type = 10;
|
|
$win_type_arr = [4,5];
|
|
}
|
|
|
|
$in_amount = 0;
|
|
|
|
//参与用户ID
|
|
$map = [];
|
|
$map[] = ['mid', '=', $monster_log['id']];
|
|
$map[] = ['is_close', '=', 1];
|
|
$part_user_array = db::name('user_sprite_log')->where($map)->group('uid')->column('uid');
|
|
$map[] = ['type', 'in', $win_type_arr];
|
|
//中奖用户ID
|
|
$user_array = db::name('user_sprite_log')->where($map)->group('uid')->column('uid');
|
|
|
|
if(!empty($user_array)){
|
|
$insert_all = [];
|
|
|
|
foreach ($user_array as $a => $b){
|
|
$map = [];
|
|
$map[] = ['mid', '=', $monster_log['id']];
|
|
$map[] = ['uid', '=', $b];
|
|
$map[] = ['type', 'in', $win_type_arr];
|
|
$map[] = ['is_close', '=', 1];
|
|
$user_monster_log = db::name('user_sprite_log')->where($map)->select();
|
|
$win_price = 0;
|
|
//计算中奖金额
|
|
$user_in_amount = 0;
|
|
$user_in_airship = 0;
|
|
$gift_data = [];
|
|
foreach ($user_monster_log as $c => $d){
|
|
$sprite_multiple_info = db::name('sprite')->where('type', $d['type'])->find();
|
|
$win_gift_price = db::name('gift')->where('gid', $sprite_multiple_info['gid'])->value('gift_price');
|
|
$win_price += ($d['price'] * $sprite_multiple_info['multiple']);
|
|
$rid = $d['rid'];
|
|
$user_in_amount += $d['price'];
|
|
$user_in_airship += $d['airship'];
|
|
$gift = [];
|
|
$gift['gid'] = $sprite_multiple_info['gid'];
|
|
$gift['gift_price'] = $win_gift_price;
|
|
$gift['num'] = (int)($d['price'] * $sprite_multiple_info['multiple'] / $win_gift_price);
|
|
$gift['in_amount'] = $d['price'];
|
|
$gift_data[] = $gift;
|
|
}
|
|
|
|
$in_amount += $win_price;
|
|
|
|
if(!empty($gift_data)){
|
|
foreach ($gift_data as $i => $j){
|
|
//礼物送到背包
|
|
$reslut = model('api/UserGiftPack')->change_user_gift_pack($b, $j['gid'], $j['num'], 4, '仲夏夜梦曲中奖获取');
|
|
if($reslut['code'] == 201){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '请重试', 'data' => null];
|
|
}
|
|
//用户中奖信息
|
|
$insert = [];
|
|
$insert['uid'] = $b;
|
|
$insert['rid'] = $rid;
|
|
$insert['mid'] = $monster_log['id'];
|
|
$insert['win_type'] = $evil_wind_type;
|
|
$insert['is_evil_wind'] = 1;
|
|
$insert['win_gid'] = $j['gid'];
|
|
$insert['price'] = $j['in_amount'];
|
|
$insert['airship'] = $user_in_airship;
|
|
$insert['win_total_price'] = $j['gift_price'] * $j['num'];
|
|
$insert['num'] = $j['num'];
|
|
$insert['add_time'] = time();
|
|
$insert_all[] = $insert;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(!empty($insert_all)){
|
|
$reslut = db::name('user_sprite_win_log')->insertAll($insert_all);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '请重试', 'data' => null];
|
|
}
|
|
}
|
|
}
|
|
|
|
//结束当前抽卡期数
|
|
$update = [];
|
|
$update['win_type'] = $evil_wind_type;
|
|
$update['is_evil_wind'] = 1;
|
|
$update['in_amount'] = $in_amount;
|
|
$update['is_delete'] = 2;
|
|
$update['update_time'] = time();
|
|
$reslut = db::name('sprite_log')->where('id', $monster_log['id'])->update($update);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '请重试', 'data' => null];
|
|
}
|
|
|
|
//中奖类型
|
|
$where = [];
|
|
$where[] = ['type', 'in', $win_type_arr];
|
|
$wim_monster = db::name('sprite')->where($where)->select();
|
|
foreach ($wim_monster as $x => $y){
|
|
$win_type_data = [];
|
|
$win_type_data['win_number'] = $y['type'];
|
|
$win_type_data['type_name'] = $y['type_name'];
|
|
$win_type_data['base_image'] = $y['base_image'];
|
|
$win_type_info[] = $win_type_data;
|
|
}
|
|
$is_push = 2;
|
|
|
|
}else{
|
|
|
|
$win_type = $monster_log['win_type'];
|
|
if($win_type > 5){
|
|
$win_type = 1;
|
|
}
|
|
$in_amount = 0;
|
|
|
|
//是否更改中奖类型
|
|
$win_type = $this->check_win_type_is_loss($win_type, $monster_log);
|
|
|
|
//获取得奖用户ID
|
|
$map = [];
|
|
$map[] = ['mid', '=', $monster_log['id']];
|
|
$map[] = ['is_close', '=', 1];
|
|
$part_user_array = db::name('user_sprite_log')->where($map)->group('uid')->column('uid');
|
|
$map[] = ['type', '=', $win_type];
|
|
$user_array = db::name('user_sprite_log')->where($map)->group('uid')->column('uid');
|
|
$win_gift_info = db::name('gift')->alias('a')->join('yy_sprite b', 'a.gid = b.gid')->where('b.type', $win_type)->field('a.gid,a.gift_name,a.gift_price,a.base_image,b.multiple,b.type_name')->find();
|
|
$wim_monster = db::name('sprite')->where('type', $win_type)->find();
|
|
if(!empty($user_array)){
|
|
//有获奖用户
|
|
$insert_all = [];
|
|
foreach ($user_array as $a => $b){
|
|
$map = [];
|
|
$map[] = ['mid', '=', $monster_log['id']];
|
|
$map[] = ['uid', '=', $b];
|
|
$map[] = ['type', '=', $win_type];
|
|
$map[] = ['is_close', '=', 1];
|
|
$user_monster_log = db::name('user_sprite_log')->where($map)->find();
|
|
|
|
$win_num = ceil($user_monster_log['price'] * $win_gift_info['multiple'] / $win_gift_info['gift_price']);
|
|
|
|
$in_amount += $win_gift_info['gift_price'] * $win_num;
|
|
|
|
$gift_data = [];
|
|
$gift = [];
|
|
$gift['gid'] = $win_gift_info['gid'];
|
|
$gift['gift_price'] = $win_gift_info['gift_price'];
|
|
$gift['num'] = $win_num;
|
|
$gift_data[] = $gift;
|
|
|
|
//中奖金额
|
|
// $win_price = $user_monster_log['price'] * $wim_monster['multiple'];
|
|
|
|
// $in_amount += $win_price;
|
|
// //获得对应礼物
|
|
// $gift_data = $this->distribute_gift($win_price);
|
|
|
|
if(!empty($gift_data)){
|
|
foreach ($gift_data as $i => $j){
|
|
//礼物送到背包
|
|
$reslut = model('api/UserGiftPack')->change_user_gift_pack($b, $j['gid'], $j['num'], 4, '仲夏夜梦曲中奖获取');
|
|
if($reslut['code'] == 201){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '请重试', 'data' => null];
|
|
}
|
|
//用户中奖信息
|
|
$insert = [];
|
|
$insert['uid'] = $b;
|
|
$insert['rid'] = $user_monster_log['rid'];
|
|
$insert['mid'] = $monster_log['id'];
|
|
$insert['win_type'] = $win_type;
|
|
$insert['win_gid'] = $j['gid'];
|
|
$insert['price'] = $user_monster_log['price'];
|
|
$insert['airship'] = $user_monster_log['airship'];
|
|
$insert['win_total_price'] = $j['gift_price'] * $j['num'];
|
|
$insert['num'] = $j['num'];
|
|
$insert['add_time'] = time();
|
|
$insert_all[] = $insert;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(!empty($insert_all)){
|
|
$reslut = db::name('user_sprite_win_log')->insertAll($insert_all);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '请重试', 'data' => null];
|
|
}
|
|
}
|
|
}
|
|
|
|
//结束当前抽卡期数
|
|
$update = [];
|
|
$update['win_type'] = $win_type;
|
|
$update['in_amount'] = $in_amount;
|
|
$update['is_delete'] = 2;
|
|
$update['update_time'] = time();
|
|
$reslut = db::name('sprite_log')->where('id', $monster_log['id'])->update($update);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '请重试', 'data' => null];
|
|
}
|
|
|
|
$win_type_data = [];
|
|
$win_type_data['win_number'] = $win_type;
|
|
$win_type_data['type_name'] = $wim_monster['type_name'];
|
|
$win_type_data['base_image'] = $wim_monster['base_image'];
|
|
$win_type_info[] = $win_type_data;
|
|
$is_push = 2;
|
|
}
|
|
redis_unlock($key_name);
|
|
}
|
|
}else{//当前未有该星球期数
|
|
if($config['open_sprite_status'] != 1){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '该捉妖玩法已关闭', 'data' => null];
|
|
}
|
|
|
|
// $s_time = date('s');
|
|
|
|
// if(!in_array($s_time, ['00', '01', '02', '03', '04'])){
|
|
// Db::rollback();
|
|
// return ['code' => 201, 'msg' => '暂未在生成时间内', 'data' => null];
|
|
// }
|
|
|
|
//距离上次多长时间
|
|
$map = [];
|
|
$map[] = ['is_delete', '=', 2];
|
|
$last_monster_log = db::name('sprite_log')->where($map)->order('id desc')->limit(1)->find();
|
|
if($last_monster_log){
|
|
// $interval_time = $last_monster_log['end_time'] + 10 + $config['end_interval_time'];
|
|
$interval_time = time() - $last_monster_log['end_time'];
|
|
if($interval_time < $config['end_sprite_interval_time']){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '距离上次结束尚未超过'.$config['end_sprite_interval_time'].'秒', 'data' => null];
|
|
}
|
|
}
|
|
|
|
//当前该星球配置信息
|
|
$monster_list = db::name('sprite')->order('id asc')->select();
|
|
$monster_data = '';
|
|
$total_num = 0;
|
|
$win_number_data = [];
|
|
foreach ($monster_list as $a => $b){
|
|
$da = $b['id'].'-'.$b['gid'].'-'.$b['num'].';';
|
|
$monster_data .= $da;
|
|
$total_num += $b['num'];
|
|
for($i = 0; $i < $b['num']; $i++){
|
|
$win_number_data[] = $b['id'];
|
|
}
|
|
}
|
|
|
|
shuffle($win_number_data);
|
|
$win_key = array_rand($win_number_data);
|
|
//随机抽取中奖数字
|
|
$win_type = $win_number_data[$win_key];
|
|
|
|
//生成最新
|
|
$insert = [];
|
|
$insert['win_type'] = $win_type;
|
|
$insert['total_num'] = $total_num;
|
|
$insert['config_text'] = $monster_data;
|
|
$insert['add_time'] = time();
|
|
$insert['end_time'] = time() + $config['sprite_count_down_time'];
|
|
$reslut = db::name('sprite_log')->insert($insert);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '生成失败', 'data' => null];
|
|
}
|
|
$is_push = 1;//开启推送
|
|
}
|
|
|
|
Db::commit();
|
|
|
|
if($is_push == 1){
|
|
$push_feed_monster_data = $this->get_new_feed_monster_info();
|
|
|
|
$push_data = [];
|
|
$push_data['code'] = 3401;
|
|
$push_data['msg'] = "捉妖开始播报";
|
|
$push_data['data'] = $push_feed_monster_data;
|
|
model('api/WebSocketPush')->send_to_all($push_data);
|
|
}else if($is_push == 2){
|
|
$push_feed_monster_data = $this->get_new_feed_monster_info();
|
|
$push_feed_monster_data['win_count'] = count($user_array);
|
|
$push_feed_monster_data['user_win_gift_list'] = [];
|
|
|
|
if(!empty($part_user_array)){
|
|
foreach ($part_user_array as $k => $v){
|
|
$push_user_monster_data = [];
|
|
$push_user_monster_data['win_count'] = $push_feed_monster_data['win_count'];
|
|
$push_user_monster_data['airship'] = db::name('user')->where('uid', $v)->value('airship');
|
|
//是否中奖
|
|
$map = [];
|
|
$map[] = ['mid', '=', $monster_log['id']];
|
|
$map[] = ['uid', '=', $v];
|
|
$user_win_info = db::name('user_sprite_win_log')->where($map)->find();
|
|
if($user_win_info){//中奖
|
|
$push_group_gift_data = [];
|
|
$push_group_gift_data['gift_list'] = [];
|
|
$push_user_monster_data['is_win'] = 1;
|
|
$push_user_monster_data['is_evil_wind'] = $is_evil_wind;
|
|
$push_user_monster_data['evil_wind_type'] = $evil_wind_type;
|
|
$push_user_monster_data['win_type_info'] = $win_type_info;
|
|
$push_user_monster_data['win_gift_list'] = [];
|
|
$user_win_gift_arr = db::name('user_sprite_win_log')->alias('a')->join('yy_gift b', 'a.win_gid = b.gid')->where('a.mid', $monster_log['id'])->where('a.uid', $v)->field('b.gid,b.gift_name,b.base_image,b.gift_price,a.num')->select();
|
|
foreach ($user_win_gift_arr as $x => $y){
|
|
$win_gift_info = [];
|
|
$win_gift_info['gid'] = $y['gid'];
|
|
$win_gift_info['gift_name'] = $y['gift_name'];
|
|
$win_gift_info['base_image'] = localpath_to_netpath($y['base_image']);
|
|
$win_gift_info['gift_price'] = $y['gift_price'];
|
|
$win_gift_info['num'] = $y['num'];
|
|
$win_gift_info['open_num'] = $y['num'];
|
|
$win_gift_info['type_name'] = '仲夏夜梦曲';
|
|
$push_user_monster_data['win_gift_list'][] = $win_gift_info;
|
|
// if($y['gift_price'] >= 10000){
|
|
// $push_group_gift_data['gift_list'][] = $win_gift_info;
|
|
// }
|
|
$push_group_gift_data['gift_list'][] = $win_gift_info;
|
|
}
|
|
if(!empty($push_group_gift_data['gift_list'])){
|
|
$user_infos = db::name('user')->where('uid', $v)->find();
|
|
$push_group_gift_data['user_info']['uid'] = $user_infos['uid'];
|
|
$push_group_gift_data['user_info']['nick_name'] = mb_convert_encoding(base64_decode($user_infos['base64_nick_name']), 'UTF-8', 'UTF-8');
|
|
$push_group_gift_data['user_info']['head_pic'] = localpath_to_netpath($user_infos['head_pic']);
|
|
|
|
$push_feed_monster_data['user_win_gift_list'][] = $push_group_gift_data;
|
|
}
|
|
}else{//未中奖
|
|
$push_user_monster_data['is_win'] = 2;
|
|
$push_user_monster_data['is_evil_wind'] = $is_evil_wind;
|
|
$push_user_monster_data['evil_wind_type'] = $evil_wind_type;
|
|
$push_user_monster_data['win_type_info'] = $win_type_info;
|
|
$push_user_monster_data['win_gift_list'] = [];
|
|
}
|
|
|
|
$push_data = [];
|
|
$push_data['code'] = 3402;
|
|
$push_data['msg'] = "抽卡个人结束播报";
|
|
$push_data['data'] = $push_user_monster_data;
|
|
$reslut = model('api/WebSocketPush')->send_to_one($v, $push_data);
|
|
// dump($push_user_monster_data);
|
|
// dump($reslut);
|
|
}
|
|
}
|
|
|
|
$push_data = [];
|
|
$push_data['code'] = 3403;
|
|
$push_data['msg'] = "探索结束播报";
|
|
$push_data['data'] = $push_feed_monster_data;
|
|
$reslut = model('api/WebSocketPush')->send_to_all($push_data);
|
|
// dump($push_feed_monster_data);
|
|
// dump($reslut);
|
|
|
|
}
|
|
|
|
return ['code' => 200, 'msg' => '成功', 'data' => null];
|
|
} catch (\Exception $e) {
|
|
// 回滚事务
|
|
dump($e);
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '失败', 'data' => null];
|
|
}
|
|
|
|
}
|
|
|
|
//根据中奖金额获取对应礼物ID及数量
|
|
public function distribute_gift($win_price, $win_data = []){
|
|
|
|
$monster_gift_price = db::name('sprite_gift')->alias('a')->join('yy_gift b', 'a.gid = b.gid')->order('b.gift_price asc')->column('b.gid,b.gift_price');
|
|
$gid = 0;
|
|
$gift_price = 0;
|
|
foreach ($monster_gift_price as $k => $v){
|
|
if($win_price < $v){
|
|
break;
|
|
}else{
|
|
$gift_price = $v;
|
|
$gid = $k;
|
|
}
|
|
}
|
|
$num = (int)floor($win_price/$gift_price);
|
|
$surplus_price = $win_price%$gift_price;
|
|
|
|
$data = [];
|
|
$data['gid'] = $gid;
|
|
$data['num'] = $num;
|
|
$data['gift_price'] = $gift_price;
|
|
$win_data[] = $data;
|
|
if($surplus_price == 0){
|
|
return $win_data;
|
|
}else{
|
|
$reslut = $this->distribute_gift($surplus_price, $win_data);
|
|
return $reslut;
|
|
}
|
|
|
|
}
|
|
|
|
//当前最新探索信息
|
|
public function get_new_feed_monster_info(){
|
|
$now_time = time();
|
|
|
|
$data = [];
|
|
$data['surplus_time'] = 0;
|
|
$data['is_finsh'] = 3;
|
|
$data['win_number'] = 0;
|
|
// $data['list'] = [];
|
|
$data['multiple_list'] = db::name('sprite')->field('id,type,multiple')->order('id asc')->select();
|
|
$data['win_type_info'] = [];
|
|
|
|
//当前是否有开放该活动
|
|
$monster_log = db::name('sprite_log')->order('id desc')->limit(1)->find();
|
|
if(empty($monster_log)){
|
|
return $data;
|
|
}else{
|
|
if($monster_log['end_time'] <= $now_time){
|
|
$is_finish = 1;
|
|
$data['win_number'] = $monster_log['win_type'];
|
|
$data['is_evil_wind'] = 2;
|
|
$data['evil_wind_type'] = 0;
|
|
if($monster_log['is_evil_wind'] == 1){
|
|
$data['is_evil_wind'] = 1;
|
|
$data['evil_wind_type'] = $monster_log['win_type'];
|
|
if($monster_log['win_type'] == 1){
|
|
$win_type_arr = [1,2];
|
|
}else if($monster_log['win_type'] == 2){
|
|
$win_type_arr = [1,3];
|
|
}else if($monster_log['win_type'] == 3){
|
|
$win_type_arr = [1,4];
|
|
}else if($monster_log['win_type'] == 4){
|
|
$win_type_arr = [1,5];
|
|
}else if($monster_log['win_type'] == 5){
|
|
$win_type_arr = [2,3];
|
|
}else if($monster_log['win_type'] == 6){
|
|
$win_type_arr = [2,4];
|
|
}else if($monster_log['win_type'] == 7){
|
|
$win_type_arr = [2,5];
|
|
}else if($monster_log['win_type'] == 8){
|
|
$win_type_arr = [3,4];
|
|
}else if($monster_log['win_type'] == 9){
|
|
$win_type_arr = [3,5];
|
|
}else{
|
|
$win_type_arr = [4,5];
|
|
}
|
|
foreach ($win_type_arr as $a => $b){
|
|
$win_type_data = [];
|
|
$win_type_data['win_number'] = $b;
|
|
$win_type_data['type_name'] = db::name('sprite')->where('type', $b)->value('type_name');
|
|
$win_type_data['base_image'] = db::name('sprite')->where('type', $b)->value('base_image');
|
|
$data['win_type_info'][] = $win_type_data;
|
|
}
|
|
}else{
|
|
$win_type_data = [];
|
|
$win_type_data['win_number'] = $monster_log['win_type'];
|
|
$win_type_data['type_name'] = db::name('sprite')->where('type', $monster_log['win_type'])->value('type_name');
|
|
$win_type_data['base_image'] = db::name('sprite')->where('type', $monster_log['win_type'])->value('base_image');
|
|
$data['win_type_info'][] = $win_type_data;
|
|
}
|
|
}else{
|
|
$is_finish = 2;
|
|
$data['surplus_time'] = $monster_log['end_time'] - $now_time;
|
|
}
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
|
|
//玩法投入【单个】
|
|
public function open_beat_monster($uid, $rid, $type, $money, $num){
|
|
$user_info = db::name('user')->find($uid);
|
|
if(!$user_info){
|
|
return ['code' => 201, 'msg' => '参数错误', 'data' => null];
|
|
}
|
|
|
|
$config = get_uncache_system_config();
|
|
$now_time = time();
|
|
|
|
$monster = db::name('sprite')->where('type', $type)->find();
|
|
if(!$monster){
|
|
return ['code' => 201, 'msg' => '当前小妖类型不存在', 'data' => null];
|
|
}
|
|
|
|
//
|
|
$map = [];
|
|
$map[] = ['end_time', '>', $now_time];
|
|
$map[] = ['is_delete', '=', 1];
|
|
$monster_log = db::name('sprite_log')->where($map)->find();
|
|
if(!$monster_log){
|
|
return ['code' => 201, 'msg' => '请等待新一轮开启', 'data' => null];
|
|
}else{
|
|
$s_time = date('s');
|
|
if(in_array($s_time, ['49', '50', '51'])){
|
|
return ['code' => 201, 'msg' => '请等待新一轮开启', 'data' => null];
|
|
}
|
|
}
|
|
|
|
if(ceil($num) != $num){
|
|
return ['code' => 201, 'msg' => '捉妖次数必须为整数', 'data' => null];
|
|
}
|
|
|
|
if($num < 1){
|
|
return ['code' => 201, 'msg' => '捉妖次数不能小于1次', 'data' => null];
|
|
}
|
|
|
|
$money = $num * $config['airship_price'];
|
|
|
|
//该星球已探索多少金额
|
|
$map = [];
|
|
$map[] = ['mid', '=', $monster_log['id']];
|
|
$map[] = ['uid', '=', $uid];
|
|
|
|
$user_type_num = db::name('user_sprite_log')->where($map)->column('type');
|
|
$map[] = ['type', '=', $type];
|
|
$user_monster_log = db::name('user_sprite_log')->where($map)->find();
|
|
if($user_monster_log){
|
|
if(($user_monster_log['airship'] + $num) > $config['open_monster_max_airship_num']){
|
|
return ['code' => 201, 'msg' => '该星球探索飞船数量已达上限', 'data' => null];
|
|
}
|
|
}else{
|
|
if($num > $config['open_monster_max_airship_num']){
|
|
return ['code' => 201, 'msg' => '该星球探索飞船数量已达上限', 'data' => null];
|
|
}
|
|
}
|
|
|
|
if(count($user_type_num) >= $config['open_monster_max_type'] && !in_array($type, $user_type_num)){
|
|
return ['code' => 201, 'msg' => '投入星球类型不能大于'.$config['open_monster_max_type'].'个', 'data' => null];
|
|
}
|
|
|
|
Db::startTrans();
|
|
try {
|
|
|
|
//扣除用户飞船数量
|
|
$reslut = model('admin/User')->change_user_money_by_uid($uid, -$num, 3, 42, "仲夏夜梦曲投入票数", $uid, 0, $rid);
|
|
if ($reslut['code'] == 201) {
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null];
|
|
}
|
|
|
|
//是否探索过
|
|
if($user_monster_log){//已探索则继续
|
|
$update = [];
|
|
$update['update_time'] = time();
|
|
$reslut = db::name('user_sprite_log')->where('id', $user_monster_log['id'])->inc('airship', $num)->inc('price', $money)->update($update);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '请重试', 'data' => null];
|
|
}
|
|
}else{//未探索则探索
|
|
$insert = [];
|
|
$insert['uid'] = $uid;
|
|
$insert['rid'] = $rid;
|
|
$insert['mid'] = $monster_log['id'];
|
|
$insert['type'] = $type;
|
|
$insert['airship'] = $num;
|
|
$insert['price'] = $money;
|
|
$insert['add_time'] = time();
|
|
$reslut = db::name('user_sprite_log')->insert($insert);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '请重试', 'data' => null];
|
|
}
|
|
}
|
|
|
|
//用户探索记录表
|
|
$insert_data = [];
|
|
$insert_data['uid'] = $uid;
|
|
$insert_data['rid'] = $rid;
|
|
$insert_data['mid'] = $monster_log['id'];
|
|
$insert_data['type'] = $type;
|
|
$insert_data['airship'] = $num;
|
|
$insert_data['price'] = $money;
|
|
$insert_data['add_time'] = time();
|
|
$fid = db::name('user_sprite_feed_log')->insertGetId($insert_data);
|
|
if(!$fid){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '请重试', 'data' => null];
|
|
}
|
|
|
|
//计入当期支出累消
|
|
$update = [];
|
|
$update['update_time'] = time();
|
|
$reslut = db::name('sprite_log')->where('id', $monster_log['id'])->inc('out_amount', $money)->update($update);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '请重试', 'data' => null];
|
|
}
|
|
|
|
Db::commit();
|
|
|
|
$push_feed_monster_data = [];
|
|
$push_feed_monster_data['id'] = $fid;
|
|
$push_feed_monster_data['uid'] = $uid;
|
|
$push_feed_monster_data['nick_name'] = mb_convert_encoding(base64_decode($user_info['base64_nick_name']), 'UTF-8', 'UTF-8');
|
|
$push_feed_monster_data['head_pic'] = localpath_to_netpath($user_info['head_pic']);
|
|
$push_feed_monster_data['type_name'] = db::name('sprite')->where('type', $type)->value('type_name');
|
|
$push_feed_monster_data['airship'] = $num;
|
|
$push_feed_monster_data['price'] = $money;
|
|
|
|
// $push_data = [];
|
|
// $push_data['code'] = 344;
|
|
// $push_data['msg'] = "探索公屏播报";
|
|
// $push_data['data'] = $push_feed_monster_data;
|
|
// model('api/WebSocketPush')->send_to_all($push_data);
|
|
|
|
|
|
return ['code' => 200, 'msg' => '探索成功', 'data' => $push_feed_monster_data];
|
|
} catch (\Exception $e) {
|
|
// 回滚事务
|
|
dump($e);
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '探索失败', 'data' => null];
|
|
}
|
|
|
|
}
|
|
|
|
//玩法投入【多个】
|
|
public function open_explore_star($uid, $rid, $open_data){
|
|
$user_info = db::name('user')->find($uid);
|
|
if(!$user_info){
|
|
return ['code' => 201, 'msg' => '参数错误', 'data' => null];
|
|
}
|
|
|
|
$config = get_uncache_system_config();
|
|
$now_time = time();
|
|
|
|
$map = [];
|
|
$map[] = ['end_time', '>', $now_time];
|
|
$map[] = ['is_delete', '=', 1];
|
|
$monster_log = db::name('sprite_log')->where($map)->find();
|
|
if(!$monster_log){
|
|
return ['code' => 201, 'msg' => '请等待新一轮开启', 'data' => null];
|
|
}else{
|
|
//最后十秒无法投入
|
|
$end_time = $monster_log['end_time'] - 5;
|
|
if($end_time < time()){
|
|
return ['code' => 201, 'msg' => '请等待新一轮开启', 'data' => null];
|
|
}
|
|
}
|
|
|
|
$open_data = explode(',', trim($open_data, ','));
|
|
|
|
$num = 0;
|
|
$open_type_array = [];
|
|
foreach ($open_data as $k => $v){
|
|
$user_open_monster = explode('-', $v);
|
|
$open_type = $user_open_monster[0];
|
|
$open_num = $user_open_monster[1];
|
|
|
|
$monster = db::name('sprite')->where('type', $open_type)->find();
|
|
if(!$monster){
|
|
return ['code' => 201, 'msg' => '乐器类型不存在', 'data' => null];
|
|
}
|
|
|
|
if(ceil($open_num) != $open_num){
|
|
return ['code' => 201, 'msg' => '投入票数必须为整数', 'data' => null];
|
|
}
|
|
|
|
if($open_num < 0){
|
|
return ['code' => 201, 'msg' => '投入票数不能小于0', 'data' => null];
|
|
}
|
|
|
|
//是否探索过
|
|
// $map = [];
|
|
// $map[] = ['mid', '=', $monster_log['id']];
|
|
// $map[] = ['uid', '=', $uid];
|
|
// $map[] = ['type', '=', $open_type];
|
|
// $user_monster_log = db::name('user_sprite_log')->where($map)->find();
|
|
// if(!empty($user_monster_log)){
|
|
// if($user_monster_log['airship'] + $open_num > 100){
|
|
// return ['code' => 201, 'msg' => '单个乐器最多不能投入超过100次', 'data' => null];
|
|
// }
|
|
// }
|
|
|
|
$open_type_array[] = $open_type;
|
|
|
|
$num += $open_num;
|
|
}
|
|
|
|
if($num < 0){
|
|
return ['code' => 201, 'msg' => '投入票数不能小于0', 'data' => null];
|
|
}
|
|
|
|
//未变更数量
|
|
$map = [];
|
|
$map[] = ['uid', '=', $uid];
|
|
$map[] = ['mid', '=', $monster_log['id']];
|
|
$map[] = ['type', 'not in', $open_type_array];
|
|
$user_out_airship = db::name('user_sprite_log')->where($map)->sum('airship');
|
|
if(empty($user_out_airship)){
|
|
$user_out_airship = 0;
|
|
}
|
|
|
|
if($user_info['airship'] < ($num + $user_out_airship)){
|
|
return ['code' => 201, 'msg' => '您当前门票数量不足', 'data' => null];
|
|
}
|
|
|
|
Db::startTrans();
|
|
try {
|
|
|
|
//扣除用户门票数量
|
|
// $reslut = model('admin/User')->change_user_money_by_uid($uid, -$num, 3, 42, "仲夏夜梦曲投入票数", $uid, 0, $rid);
|
|
// if ($reslut['code'] == 201) {
|
|
// Db::rollback();
|
|
// return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null];
|
|
// }
|
|
|
|
foreach ($open_data as $k => $v){
|
|
$user_open_monster = explode('-', $v);
|
|
$open_type = $user_open_monster[0];
|
|
$open_num = $user_open_monster[1];
|
|
|
|
$money = $open_num * $config['sprite_price'];
|
|
|
|
//是否探索过
|
|
$map = [];
|
|
$map[] = ['mid', '=', $monster_log['id']];
|
|
$map[] = ['uid', '=', $uid];
|
|
$map[] = ['type', '=', $open_type];
|
|
$user_monster_log = db::name('user_sprite_log')->where($map)->find();
|
|
if($user_monster_log){//已探索则继续
|
|
$update = [];
|
|
$update['airship'] = $open_num;
|
|
$update['price'] = $money;
|
|
$update['update_time'] = time();
|
|
$reslut = db::name('user_sprite_log')->where('id', $user_monster_log['id'])->update($update);//->inc('airship', $open_num)->inc('price', $money)
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '请重试', 'data' => null];
|
|
}
|
|
}else{//未探索则探索
|
|
$insert = [];
|
|
$insert['uid'] = $uid;
|
|
$insert['rid'] = $rid;
|
|
$insert['mid'] = $monster_log['id'];
|
|
$insert['type'] = $open_type;
|
|
$insert['airship'] = $open_num;
|
|
$insert['price'] = $money;
|
|
$insert['add_time'] = time();
|
|
$reslut = db::name('user_sprite_log')->insert($insert);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '请重试', 'data' => null];
|
|
}
|
|
}
|
|
|
|
//用户探索记录表
|
|
$insert_data = [];
|
|
$insert_data['uid'] = $uid;
|
|
$insert_data['rid'] = $rid;
|
|
$insert_data['mid'] = $monster_log['id'];
|
|
$insert_data['type'] = $open_type;
|
|
$insert_data['airship'] = $open_num;
|
|
$insert_data['price'] = $money;
|
|
$insert_data['add_time'] = time();
|
|
$fid = db::name('user_sprite_feed_log')->insertGetId($insert_data);
|
|
if(!$fid){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '请重试', 'data' => null];
|
|
}
|
|
|
|
}
|
|
|
|
// $total_money = $num * $config['sprite_price'];
|
|
// //计入当期支出累消
|
|
// $update = [];
|
|
// $update['update_time'] = time();
|
|
// $reslut = db::name('sprite_log')->where('id', $monster_log['id'])->inc('out_amount', $total_money)->update($update);
|
|
// if(!$reslut){
|
|
// Db::rollback();
|
|
// return ['code' => 201, 'msg' => '请重试', 'data' => null];
|
|
// }
|
|
|
|
Db::commit();
|
|
|
|
$user_monster_info = $this->get_monster_info($uid);
|
|
|
|
|
|
return ['code' => 200, 'msg' => '弹奏成功', 'data' => $user_monster_info['data']];
|
|
} catch (\Exception $e) {
|
|
// 回滚事务
|
|
dump($e);
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '弹奏失败', 'data' => null];
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//规则
|
|
public function get_monster_note(){
|
|
$config = get_uncache_system_config();
|
|
|
|
$note = $config['sprite_feed_note'];
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $note];
|
|
|
|
}
|
|
|
|
//奖池
|
|
public function get_monster_box_list(){
|
|
$monster_gift_list = db::name('sprite')->alias('a')->join('yy_gift b', 'a.gid = b.gid')->field('a.gid,b.base_image,b.gift_name,b.gift_price')->order('b.gift_price asc')->select();
|
|
foreach ($monster_gift_list as $k => &$v){
|
|
$v['base_image'] = localpath_to_netpath($v['base_image']);
|
|
}
|
|
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $monster_gift_list];
|
|
}
|
|
|
|
//开奖记录
|
|
public function get_monster_log($uid, $page, $page_limit){
|
|
$user_info = db::name('user')->field('uid')->find();
|
|
if(!$user_info){
|
|
return ['code' => 201, 'msg' => '参数错误', 'data' => null];
|
|
}
|
|
|
|
$map = [];
|
|
$map[] = ['is_delete', '=', 2];
|
|
// $monster_list = db::name('sprite_log')->alias('a')->join('yy_sprite b', 'a.win_type = b.type')->field('a.id,a.win_type,b.type_name,b.type_name_eng,b.type_name_tw,a.add_time')->where($map)->order('a.id desc')->limit(100)->select();
|
|
$monster_list = db::name('sprite_log')->field('id,win_type,is_evil_wind,add_time')->where($map)->order('id desc')->limit(100)->select();
|
|
foreach ($monster_list as $k => &$v){
|
|
//是否参与,中奖
|
|
$v['is_join'] = 3;
|
|
$v['join_data'] = [];
|
|
$user_monster_log = db::name('user_sprite_log')->where('uid', $uid)->where('mid', $v['id'])->where('is_close', 1)->find();
|
|
if($user_monster_log){
|
|
$v['is_join'] = 2;
|
|
$user_monster_win_log = db::name('user_sprite_win_log')->where('uid', $uid)->where('mid', $v['id'])->find();
|
|
if($user_monster_win_log){
|
|
$v['is_join'] = 1;
|
|
//中奖礼物信息
|
|
$user_win_gift_list = db::name('user_sprite_win_log')->alias('a')->join('yy_gift b', 'a.win_gid = b.gid')->where('a.uid', $uid)->where('a.mid', $v['id'])->field('b.gid,b.base_image,a.num')->select();
|
|
foreach ($user_win_gift_list as $x => &$y){
|
|
$y['base_image'] = localpath_to_netpath($y['base_image']);
|
|
}
|
|
$v['win_gift_list'] = $user_win_gift_list;
|
|
}
|
|
$v['join_data'] = db::name('user_sprite_log')->alias('a')->join('yy_sprite b', 'a.type = b.type')->where('a.uid', $uid)->where('a.mid', $v['id'])->where('a.is_close', 1)->field('b.type_name,a.airship as num')->select();
|
|
}
|
|
|
|
//当期中奖类型
|
|
if($v['is_evil_wind'] == 1){//双倍
|
|
$win_type_data = [];
|
|
if($v['win_type'] == 1){
|
|
$win_type_arr = [1,2];
|
|
}else if($v['win_type'] == 2){
|
|
$win_type_arr = [1,3];
|
|
}else if($v['win_type'] == 3){
|
|
$win_type_arr = [1,4];
|
|
}else if($v['win_type'] == 4){
|
|
$win_type_arr = [1,5];
|
|
}else if($v['win_type'] == 5){
|
|
$win_type_arr = [2,3];
|
|
}else if($v['win_type'] == 6){
|
|
$win_type_arr = [2,4];
|
|
}else if($v['win_type'] == 7){
|
|
$win_type_arr = [2,5];
|
|
}else if($v['win_type'] == 8){
|
|
$win_type_arr = [3,4];
|
|
}else if($v['win_type'] == 9){
|
|
$win_type_arr = [3,5];
|
|
}else{
|
|
$win_type_arr = [4,5];
|
|
}
|
|
foreach ($win_type_arr as $a => $b){
|
|
$win_type['type'] = $b;
|
|
$win_type['type_name'] = db::name('sprite')->where('type',$b)->value('type_name');
|
|
// $win_type['sprite_type'] = db::name('sprite')->where('type', $b)->value('sprite_type');
|
|
$win_type_data[] = $win_type;
|
|
}
|
|
}else{//没有妖风
|
|
$win_type['type'] = $v['win_type'];
|
|
$win_type['type_name'] = db::name('sprite')->where('type',$v['win_type'])->value('type_name');
|
|
// $win_type['sprite_type'] = db::name('sprite')->where('type', $v['win_type'])->value('sprite_type');
|
|
$win_type_data = [];
|
|
$win_type_data[] = $win_type;
|
|
}
|
|
$v['win_type_data'] = $win_type_data;
|
|
|
|
}
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $monster_list];
|
|
}
|
|
|
|
//我的记录
|
|
public function get_user_monster_log($uid, $page, $page_limit){
|
|
$user_info = db::name('user')->field('uid')->find();
|
|
if(!$user_info){
|
|
return ['code' => 201, 'msg' => '参数错误', 'data' => null];
|
|
}
|
|
|
|
$map = [];
|
|
$map[] = ['a.uid', '=', $uid];
|
|
$user_monster_log = db::name('user_sprite_win_log')->alias('a')->join('yy_user b', 'a.uid = b.uid')->join('yy_monster c', 'a.win_type = c.type')->join('yy_gift d', 'd.gid = a.win_gid')->field('a.id,a.mid,b.uid,b.nick_name,b.base64_nick_name,b.head_pic,a.win_type,c.type_name,d.gift_name,d.base_image,d.gift_price,a.num,a.add_time')->where($map)->order('a.id desc')->page($page, $page_limit)->select();
|
|
foreach ($user_monster_log as $k => &$v){
|
|
$v['nick_name'] = mb_convert_encoding(base64_decode($v['base64_nick_name']), 'UTF-8', 'UTF-8');
|
|
$v['head_pic'] = localpath_to_netpath($v['head_pic']);
|
|
$v['base_image'] = localpath_to_netpath($v['base_image']);
|
|
|
|
}
|
|
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $user_monster_log];
|
|
}
|
|
|
|
//本期记录
|
|
public function get_now_user_monster_feed_log($uid, $page, $page_limit){
|
|
//当前是否有期数
|
|
$now_time = time();
|
|
|
|
$data = [];
|
|
$data['list'] = [];
|
|
|
|
//当前是否有开放该活动
|
|
$monster_log = db::name('sprite_log')->order('id desc')->limit(1)->find();
|
|
if(empty($monster_log)){
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
|
|
}
|
|
|
|
//当前参与用户探索列表
|
|
$list = db::name('user_sprite_feed_log')->alias('a')->join('yy_user b', 'a.uid = b.uid')->join('yy_monster c', 'a.type = c.type')->where('a.mid', $monster_log['id'])->where('a.uid', $uid)->field('a.id,b.uid,b.nick_name,b.base64_nick_name,b.head_pic,c.type_name,a.price,a.add_time')->order('a.id desc')->page($page, $page_limit)->select();
|
|
foreach ($list as $k => &$v){
|
|
$v['nick_name'] = mb_convert_encoding(base64_decode($v['base64_nick_name']), 'UTF-8', 'UTF-8');
|
|
$v['head_pic'] = localpath_to_netpath($v['head_pic']);
|
|
}
|
|
$data['list'] = $list;
|
|
|
|
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
|
|
}
|
|
|
|
|
|
//投入记录
|
|
public function get_user_monster_feed_log($uid, $page, $page_limit){
|
|
$user_info = db::name('user')->field('uid')->find();
|
|
if(!$user_info){
|
|
return ['code' => 201, 'msg' => '参数错误', 'data' => null];
|
|
}
|
|
|
|
$monster_list = [];
|
|
$monster = db::name('sprite')->select();
|
|
foreach ($monster as $a => $b){
|
|
$monster_list[$b['id']] = $b;
|
|
}
|
|
|
|
$map = [];
|
|
$map[] = ['a.uid', '=', $uid];
|
|
$map[] = ['b.is_delete', '=', 2];
|
|
$map[] = ['a.is_close', '=', 1];
|
|
$list = db::name('user_sprite_log')->alias('a')->join('yy_sprite_log b', 'a.mid = b.id')->field('b.id,b.win_type,b.add_time,b.end_time')->where($map)->group('a.mid')->order('b.id desc')->limit(100)->select();
|
|
foreach ($list as $k => &$v){
|
|
$v['is_win'] = 2;
|
|
$user_monster_feed_log = db::name('user_sprite_log')->where('mid', $v['id'])->where('uid', $uid)->where('is_close', 1)->field('type, airship')->select();
|
|
foreach ($user_monster_feed_log as $a => &$b){
|
|
// $b['sprite_type'] = db::name('sprite')->where('type', $b['type'])->value('sprite_type');
|
|
}
|
|
$v['user_monster_feed_log'] = $user_monster_feed_log;
|
|
$user_monster_win_log = db::name('user_sprite_win_log')->where('uid', $uid)->where('mid', $v['id'])->find();
|
|
if($user_monster_win_log){
|
|
$v['is_win'] = 1;
|
|
}
|
|
}
|
|
|
|
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $list];
|
|
}
|
|
|
|
//用户榜
|
|
public function get_user_monster_rank($uid, $page, $page_limit){
|
|
|
|
if($page > 1){
|
|
$list = [];
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $list];
|
|
}
|
|
|
|
$list = db::name('user_sprite_win_log')->field('uid, sum(win_total_price) as win_total_price')->group('uid')->order('win_total_price desc')->limit(10)->select();
|
|
foreach ($list as $k => &$v){
|
|
$user_info = db::name('user')->field('base64_nick_name, head_pic')->find($v['uid']);
|
|
$v['nick_name'] = mb_convert_encoding(base64_decode($user_info['base64_nick_name']), 'UTF-8', 'UTF-8');
|
|
$v['head_pic'] = localpath_to_netpath($user_info['head_pic']);
|
|
// $user_monster_win_log = db::name('user_sprite_win_log')->alias('a')->join('yy_gift b', 'a.win_gid = b.gid')->where('uid', $v['uid'])->whereTime('a.add_time','week')->group('a.win_gid')->field('b.gid,b.base_image,sum(a.num) as num')->order('b.gift_price desc')->select();
|
|
// foreach ($user_monster_win_log as $a => &$b){
|
|
// $b['base_image'] = localpath_to_netpath($b['base_image']);
|
|
// }
|
|
// $v['user_win_gift_list'] = $user_monster_win_log;
|
|
|
|
}
|
|
|
|
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $list];
|
|
}
|
|
|
|
//当前中奖用户信息
|
|
public function get_user_win_monster_list($uid, $rid){
|
|
$config = get_uncache_system_config();
|
|
$map = [];
|
|
$map[] = ['b.gift_price', '>=', 10000];
|
|
$list = db::name('user_sprite_win_log')->alias('a')->join('yy_gift b', 'a.win_gid = b.gid')->field('a.id, a.uid,b.gid,b.gift_name,b.eng_gift_name,b.tw_gift_name,a.num')->where($map)->order('id desc')->limit(20)->select();
|
|
foreach ($list as $k => &$v){
|
|
$nick_name = db::name('user')->where('uid', $v['uid'])->value('base64_nick_name');
|
|
$v['nick_name'] = mb_convert_encoding(base64_decode($nick_name), 'UTF-8', 'UTF-8');
|
|
|
|
}
|
|
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $list];
|
|
}
|
|
|
|
//是否修改中奖类型[单号]
|
|
public function check_win_type_is_loss($win_type, $monster_log){
|
|
$config = get_uncache_system_config();
|
|
//当前亏损数值是否大于
|
|
$map = [];
|
|
$map[] = ['is_delete', '=', 2];
|
|
$map[] = ['out_amount', '>', 0];
|
|
$now_sprite_out_amount = db::name('sprite_log')->where($map)->whereTime('add_time', 'today')->sum('out_amount');//投入
|
|
$now_sprite_in_amount = db::name('sprite_log')->where($map)->whereTime('add_time', 'today')->sum('in_amount');//产出
|
|
|
|
//获取得奖用户ID
|
|
$map = [];
|
|
$map[] = ['mid', '=', $monster_log['id']];
|
|
$map[] = ['type', '=', $win_type];
|
|
$map[] = ['is_close', '=', 1];
|
|
$user_array = db::name('user_sprite_log')->where($map)->group('uid')->column('uid');
|
|
|
|
if(!empty($user_array)){
|
|
$wim_monster = db::name('sprite')->where('type', $win_type)->find();
|
|
$in_amount = 0;
|
|
foreach ($user_array as $a => $b){
|
|
$map = [];
|
|
$map[] = ['mid', '=', $monster_log['id']];
|
|
$map[] = ['uid', '=', $b];
|
|
$map[] = ['type', '=', $win_type];
|
|
$map[] = ['is_close', '=', 1];
|
|
$user_monster_log = db::name('user_sprite_log')->where($map)->find();
|
|
|
|
//中奖金额
|
|
$win_price = $user_monster_log['price'] * $wim_monster['multiple'];
|
|
|
|
$in_amount += $win_price;
|
|
}
|
|
|
|
$profit = ($now_sprite_in_amount + $in_amount) - ($now_sprite_out_amount + $monster_log['out_amount']);
|
|
if($profit > $config['sprite_max_loss_price']){//亏损大于3w
|
|
$type_price_1 = db::name('user_sprite_log')->where('mid', $monster_log['id'])->where('type', 1)->where('is_close', 1)->sum('price');
|
|
$win_type_amount_1 = $type_price_1 * 2;
|
|
$type_price_2 = db::name('user_sprite_log')->where('mid', $monster_log['id'])->where('type', 2)->where('is_close', 1)->sum('price');
|
|
$win_type_amount_2 = $type_price_2 * 5;
|
|
$type_price_3 = db::name('user_sprite_log')->where('mid', $monster_log['id'])->where('type', 3)->where('is_close', 1)->sum('price');
|
|
$win_type_amount_3 = $type_price_3 * 6.5;
|
|
$type_price_4 = db::name('user_sprite_log')->where('mid', $monster_log['id'])->where('type', 4)->where('is_close', 1)->sum('price');
|
|
$win_type_amount_4 = $type_price_4 * 10;
|
|
$type_price_5 = db::name('user_sprite_log')->where('mid', $monster_log['id'])->where('type', 5)->where('is_close', 1)->sum('price');
|
|
$win_type_amount_5 = $type_price_5 * 20;
|
|
|
|
$win_type_amount_arr = [$win_type_amount_1, $win_type_amount_2, $win_type_amount_3, $win_type_amount_4, $win_type_amount_5];
|
|
// $win_type_amount_arr = [$win_type_amount_1, $win_type_amount_2, $win_type_amount_3, $win_type_amount_4];
|
|
$win_type_min = min($win_type_amount_arr);
|
|
|
|
if($win_type_amount_1 == $win_type_min){
|
|
$win_type = 1;
|
|
}else if($win_type_amount_2 == $win_type_min){
|
|
$win_type = 2;
|
|
}else if($win_type_amount_3 == $win_type_min){
|
|
$win_type = 3;
|
|
}else if($win_type_amount_4 == $win_type_min){
|
|
$win_type = 4;
|
|
}else if($win_type_amount_5 == $win_type_min){
|
|
$win_type = 5;
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
return $win_type;
|
|
}
|
|
|
|
//是否修改中奖类型[双号]
|
|
public function check_wind_type_is_loss($evil_wind_number, $monster_log){
|
|
$config = get_uncache_system_config();
|
|
//当前亏损数值是否大于
|
|
$map = [];
|
|
$map[] = ['is_delete', '=', 2];
|
|
$map[] = ['out_amount', '>', 0];
|
|
$now_sprite_out_amount = db::name('sprite_log')->where($map)->whereTime('add_time', 'today')->sum('out_amount');//投入
|
|
$now_sprite_in_amount = db::name('sprite_log')->where($map)->whereTime('add_time', 'today')->sum('in_amount');//产出
|
|
//39,67,111,143,182,202,237,254,375,461
|
|
if($evil_wind_number == 39){
|
|
$evil_wind_type = 1;
|
|
$win_type_arr = [1,2];
|
|
}else if($evil_wind_number == 67){
|
|
$evil_wind_type = 2;
|
|
$win_type_arr = [1,3];
|
|
}else if($evil_wind_number == 111){
|
|
$evil_wind_type = 3;
|
|
$win_type_arr = [1,4];
|
|
}else if($evil_wind_number == 143){
|
|
$evil_wind_type = 4;
|
|
$win_type_arr = [1,5];
|
|
}else if($evil_wind_number == 182){
|
|
$evil_wind_type = 5;
|
|
$win_type_arr = [2,3];
|
|
}else if($evil_wind_number == 202){
|
|
$evil_wind_type = 6;
|
|
$win_type_arr = [2,4];
|
|
}else if($evil_wind_number == 237){
|
|
$evil_wind_type = 7;
|
|
$win_type_arr = [2,5];
|
|
}else if($evil_wind_number == 254){
|
|
$evil_wind_type = 8;
|
|
$win_type_arr = [3,4];
|
|
}else if($evil_wind_number == 375){
|
|
$evil_wind_type = 9;
|
|
$win_type_arr = [3,5];
|
|
}else if($evil_wind_number == 461){
|
|
$evil_wind_type = 10;
|
|
$win_type_arr = [4,5];
|
|
}
|
|
|
|
$in_amount = 0;
|
|
$is_evil_wind = 1;
|
|
|
|
//参与用户ID
|
|
$map = [];
|
|
$map[] = ['mid', '=', $monster_log['id']];
|
|
$map[] = ['type', 'in', $win_type_arr];
|
|
$map[] = ['is_close', '=', 1];
|
|
//中奖用户ID
|
|
$user_array = db::name('user_sprite_log')->where($map)->group('uid')->column('uid');
|
|
|
|
if(!empty($user_array)){
|
|
$insert_all = [];
|
|
|
|
foreach ($user_array as $a => $b){
|
|
$map = [];
|
|
$map[] = ['mid', '=', $monster_log['id']];
|
|
$map[] = ['uid', '=', $b];
|
|
$map[] = ['type', 'in', $win_type_arr];
|
|
$map[] = ['is_close', '=', 1];
|
|
$user_monster_log = db::name('user_sprite_log')->where($map)->select();
|
|
$win_price = 0;
|
|
//计算中奖金额
|
|
$user_in_amount = 0;
|
|
$user_in_airship = 0;
|
|
foreach ($user_monster_log as $c => $d){
|
|
$sprite_multiple = db::name('sprite')->where('type', $d['type'])->value('multiple');
|
|
|
|
$win_price += ($d['price'] * $sprite_multiple);
|
|
$rid = $d['rid'];
|
|
$user_in_amount += $d['price'];
|
|
$user_in_airship += $d['airship'];
|
|
}
|
|
|
|
$in_amount += $win_price;
|
|
}
|
|
|
|
$profit = ($now_sprite_in_amount + $in_amount) - ($now_sprite_out_amount + $monster_log['out_amount']);
|
|
if($profit > $config['sprite_max_loss_price']){//亏损大于3w
|
|
$is_evil_wind = 2;
|
|
|
|
}
|
|
|
|
}
|
|
$data = [];
|
|
$data['is_evil_wind'] = $is_evil_wind;
|
|
$data['evil_wind_number'] = $evil_wind_number;
|
|
// dump($data);exit;
|
|
return $data;
|
|
}
|
|
|
|
public function txt(){
|
|
$map = [];
|
|
$map[] = ['is_delete', '=', 1];
|
|
$monster_log = db::name('sprite_log')->where($map)->find();
|
|
|
|
$evil_wind_number = input('evil_wind_number', 0);
|
|
$data = $this->check_wind_type_is_loss($evil_wind_number, $monster_log);
|
|
$is_evil_wind = $data['is_evil_wind'];
|
|
$evil_wind_number = $data['evil_wind_number'];
|
|
dump($is_evil_wind);
|
|
dump($evil_wind_number);
|
|
}
|
|
|
|
public function get_monsters_log($uid, $page, $page_limit){
|
|
$user_info = db::name('user')->field('uid')->find();
|
|
if(!$user_info){
|
|
return ['code' => 201, 'msg' => '参数错误', 'data' => null];
|
|
}
|
|
|
|
$map = [];
|
|
$map[] = ['is_delete', '=', 2];
|
|
// $monster_list = db::name('sprite_log')->alias('a')->join('yy_sprite b', 'a.win_type = b.type')->field('a.id,a.win_type,b.type_name,b.type_name_eng,b.type_name_tw,a.add_time')->where($map)->order('a.id desc')->limit(100)->select();
|
|
$monster_list = db::name('sprite_log')->field('id,win_type,is_evil_wind,add_time')->where($map)->whereTime('add_time', 'yesterday')->order('id desc')->limit(100)->select();
|
|
foreach ($monster_list as $k => &$v){
|
|
//是否参与,中奖
|
|
$v['is_join'] = 3;
|
|
$user_monster_log = db::name('user_sprite_log')->where('uid', $uid)->where('mid', $v['id'])->where('is_close', 1)->find();
|
|
if($user_monster_log){
|
|
$v['is_join'] = 2;
|
|
$user_monster_win_log = db::name('user_sprite_win_log')->where('uid', $uid)->where('mid', $v['id'])->find();
|
|
if($user_monster_win_log){
|
|
$v['is_join'] = 1;
|
|
}
|
|
}
|
|
|
|
//当期中奖类型
|
|
if($v['is_evil_wind'] == 1){//双倍
|
|
$win_type_data = [];
|
|
if($v['win_type'] == 1){
|
|
$win_type_arr = [1,2];
|
|
}else if($v['win_type'] == 2){
|
|
$win_type_arr = [1,3];
|
|
}else if($v['win_type'] == 3){
|
|
$win_type_arr = [1,4];
|
|
}else if($v['win_type'] == 4){
|
|
$win_type_arr = [1,5];
|
|
}else if($v['win_type'] == 5){
|
|
$win_type_arr = [2,3];
|
|
}else if($v['win_type'] == 6){
|
|
$win_type_arr = [2,4];
|
|
}else if($v['win_type'] == 7){
|
|
$win_type_arr = [2,5];
|
|
}else if($v['win_type'] == 8){
|
|
$win_type_arr = [3,4];
|
|
}else if($v['win_type'] == 9){
|
|
$win_type_arr = [3,5];
|
|
}else{
|
|
$win_type_arr = [4,5];
|
|
}
|
|
foreach ($win_type_arr as $a => $b){
|
|
$win_type['type'] = $b;
|
|
// $win_type['sprite_type'] = db::name('sprite')->where('type', $b)->value('sprite_type');
|
|
$win_type_data[] = $win_type;
|
|
}
|
|
}else{//没有妖风
|
|
$win_type['type'] = $v['win_type'];
|
|
// $win_type['sprite_type'] = db::name('sprite')->where('type', $v['win_type'])->value('sprite_type');
|
|
$win_type_data = [];
|
|
$win_type_data[] = $win_type;
|
|
}
|
|
$v['win_type_data'] = $win_type_data;
|
|
|
|
}
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $monster_list];
|
|
}
|
|
|
|
|
|
}
|