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