diff --git a/application/api/controller/Monster.php b/application/api/controller/Monster.php new file mode 100644 index 00000000..1b3c0968 --- /dev/null +++ b/application/api/controller/Monster.php @@ -0,0 +1,102 @@ +choice_gold_list(); + return V($reslut['code'],$reslut['msg'], $reslut['data']); + + } + //游戏详情 + public function get_monster_info(){ + $uid = $this->uid; + $reslut = model('Monster')->get_monster_info($uid); + return V($reslut['code'],$reslut['msg'], $reslut['data']); + } + + //生成/结算喂养怪兽 + public function create_monster_log(){ + $uid = $this->uid; + $key_name = "api:Monster:create_monster_log"; + redis_lock_exit($key_name); + $reslut = model('Monster')->create_monster_log(); + redis_unlock($key_name); + return V($reslut['code'],$reslut['msg'], $reslut['data']); + } + + //喂养怪兽 + public function open_beat_monster(){ + $uid = $this->uid; + $rid = input('rid', 0); + $type = input('type', 0); + $num = input('num', 0); + $key_name = "api:Monster:open_beat_monster:uid:".$uid; + redis_lock_exit($key_name); + $reslut = model('Monster')->open_beat_monster($uid, $rid, $type, $num); + redis_unlock($key_name); + return V($reslut['code'],$reslut['msg'], $reslut['data']); + + } + + //规则 + public function get_monster_note(){ + $reslut = model('Monster')->get_monster_note(); + return V($reslut['code'],$reslut['msg'], $reslut['data']); + } + + //开奖记录 + public function get_monster_log(){ + $uid = $this->uid; + $page = input('page', 1); + $page_limit = input('page_limit', 20); + $reslut = model('Monster')->get_monster_log($uid, $page, $page_limit); + return V($reslut['code'],$reslut['msg'], $reslut['data']); + } + + //我的记录 + public function get_user_monster_log(){ + $uid = $this->uid; + $page = input('page', 1); + $page_limit = input('page_limit', 20); + $reslut = model('Monster')->get_user_monster_log($uid, $page, $page_limit); + return V($reslut['code'],$reslut['msg'], $reslut['data']); + } + + //中奖次数榜单 + public function get_monster_winner_num_list(){ + $uid = $this->uid; + $time = input('time', 1); + $reslut = model('Monster')->get_monster_winner_num_list($uid, $time); + return V($reslut['code'],$reslut['msg'], $reslut['data']); + + } + + //设置房间期数开关 + public function operate_room_monster_show_status(){ + $uid = $this->uid; + $rid = input('rid', 0); + $is_show_monster_push = input('is_show_monster_push', 1); + $reslut = model('Monster')->operate_room_monster_show_status($uid, $rid, $is_show_monster_push); + return V($reslut['code'],$reslut['msg'], $reslut['data']); + } +} diff --git a/application/api/model/Monster.php b/application/api/model/Monster.php new file mode 100644 index 00000000..91655d45 --- /dev/null +++ b/application/api/model/Monster.php @@ -0,0 +1,715 @@ +field('multiple')->select(); + $data = []; + $data['list'] = $list; + return ['code' => 1, 'msg' => '获取成功', 'data' => $data]; + } + + //游戏详情 + public function get_monster_info($uid){ + $config = get_system_config(); + $user_info = db::name('user_wallet_coin')->where('user_id', $uid)->field('id,coin')->find(); + if(!$user_info){ + return ['code' => 0, 'msg' => '参数错误', 'data' => null]; + } + $now_time = time(); + + $data = []; + $data['surplus_time'] = 0; + $data['is_finsh'] = 3; + $data['win_number'] = 0; + // $data['list'] = []; + $data['open_monster_price'] = $config['open_monster_price']; + $data['integral'] = $user_info['coin']; + $data['multiple_list'] = db::name('monster')->field('id,type,type_name,multiple')->order('id asc')->select(); + foreach ($data['multiple_list'] as $a => &$b){ + $b['num'] = 0; + } + //当前是否有开放该活动 + $monster_log = db::name('monster_log')->order('id desc')->limit(1)->find(); + if(empty($monster_log)){ + return ['code' => 0, '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_monster_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['num']; + } + } + } + return ['code' => 1, 'msg' => '获取成功', 'data' => $data]; + } + + //生成当前国王游戏期数 + public function create_monster_log(){ + set_time_limit(0); + ini_set('memory_limit', '1024M'); + + $config = get_system_config(); + $now_time = time(); + $is_push = 5;//不推送 + + Db::startTrans(); +// try { + $map = []; + $map['is_delete'] = 1; + $monster_log = db::name('monster_log')->where($map)->find(); + if($monster_log){//当前有未结束的国王游戏期数 + if($now_time >= $monster_log['end_time']){ + $key_name = "api:monster:create_monster_log:id".$monster_log['id']; + $redis_order_sn = redis_lock_exits($key_name,1,7); + if(!$redis_order_sn){ + return ['code' => 0, 'msg' => '请重试1', 'data' => null]; + } + + $win_type = $monster_log['win_type']; + $in_amount = 0; + + $win_type = $this->check_win_type_is_loss($win_type, $monster_log); + + $win_gift_info = db::name('vs_gift')->alias('a')->join('monster b', 'a.gid = b.gid')->where('b.type', $win_type)->field('a.gid,a.gift_name,a.gift_price,a.base_image,b.multiple')->find(); + + //获取得奖用户ID + $map = []; + $map['mid'] = $monster_log['id']; + $part_user_array = db::name('user_monster_log')->where($map)->group('uid')->column('uid'); + $map['type'] = $win_type; + $user_array = db::name('user_monster_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'] = $win_type; + $user_monster_log = db::name('user_monster_log')->where($map)->find(); + + $wim_num = floor($user_monster_log['price'] * $win_gift_info['multiple'] / $win_gift_info['gift_price']); + + $in_amount += $win_gift_info['gift_price'] * $wim_num; + + //礼物送到背包 + $reslut = model('api/UserGiftPack')->change_user_gift_pack($b, $win_gift_info['gid'], $wim_num, model('UserGiftPack')::LY_DRAW_GIFT_GET, '炼仙传说中奖获取'); + if($reslut['code'] ==1){ + Db::rollback(); + return ['code' => 0, 'msg' => $reslut['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'] = $win_gift_info['gid']; + $insert['price'] = $user_monster_log['price']; + $insert['num'] = $wim_num; + $insert['createtime'] = time(); + $insert_all[] = $insert; + + } + + $reslut = db::name('user_monster_win_log')->insertAll($insert_all); + if(!$reslut){ + Db::rollback(); + return ['code' => 0, 'msg' => '请重试2', 'data' => null]; + } + + } + + //结束当前抽卡期数 + $update = []; + $update['win_type'] = $win_type; + $update['in_amount'] = $in_amount; + $update['is_delete'] = 2; + $update['updatetime'] = time(); + $reslut = db::name('monster_log')->where('id', $monster_log['id'])->update($update); + if(!$reslut){ + Db::rollback(); + return ['code' => 0, 'msg' => '请重试3', 'data' => null]; + } + + $is_push = 2; + } + }else{//当前未有国王游戏期数 + if($config['open_monster_status'] != 1){ + Db::rollback(); + return ['code' => 0, 'msg' => '游戏已关闭', 'data' => null]; + } + + //距离上次多长时间 + $map = []; + $map['is_delete'] = 2; + $last_monster_log = db::name('monster_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_interval_time']){ + Db::rollback(); + return ['code' => 0, 'msg' => '距离上次结束尚未超过'.$config['end_interval_time'].'秒', 'data' => null]; + } + } + + //当前国王游戏配置信息 + $monster_list = db::name('monster')->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['createtime'] = $now_time; + $insert['end_time'] = $now_time + $config['monster_count_down_time']; + $reslut = db::name('monster_log')->insert($insert); + if(!$reslut){ + Db::rollback(); + return ['code' => 0, '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'] = 3031; + $push_data['msg'] = "探索开始播报"; + $push_data['data'] = $push_feed_monster_data; + // 推送 + $push = new Push(UID); + $push->xianxuan($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['game_name'] = '国王游戏'; + $push_feed_monster_data['win_type_name'] = db::name('monster')->where('type', $win_type)->value('type_name'); + $push_feed_monster_data['gift_name'] = $win_gift_info['gift_name']; + $push_feed_monster_data['num'] = 0; + $push_feed_monster_data['total_gift_price'] = 0; + $push_feed_monster_data['is_push_message'] = 2; + + if(!empty($part_user_array)){ + foreach ($part_user_array as $k => $v){ + $push_user_monster_data = []; + $push_user_monster_data['win_type'] = $win_type; + $push_user_monster_data['type_name'] = db::name('monster')->where('type', $win_type)->value('type_name'); + //是否中奖 + $map = []; + $map['mid'] = $monster_log['id']; + $map['uid'] = $v; + $user_win_info = db::name('user_monster_win_log')->where($map)->find(); + if($user_win_info){//中奖 + $push_user_monster_data['is_win'] = 1; + $push_user_monster_data['gid'] = $win_gift_info['gid']; + $push_user_monster_data['gift_name'] = $win_gift_info['gift_name']; + $push_user_monster_data['base_image'] = localpath_to_netpath($win_gift_info['base_image']); + $push_user_monster_data['gift_price'] = $win_gift_info['gift_price']; + $push_user_monster_data['num'] = $user_win_info['num']; + $push_user_monster_data['total_gift_price'] = $win_gift_info['gift_price'] * $user_win_info['num']; + $push_feed_monster_data['num'] += $user_win_info['num']; + $push_feed_monster_data['total_gift_price'] += $push_user_monster_data['total_gift_price']; + }else{//未中奖 + $push_user_monster_data['is_win'] = 2; + $push_user_monster_data['gid'] = 0; + $push_user_monster_data['gift_name'] = ''; + $push_user_monster_data['base_image'] = ''; + $push_user_monster_data['gift_price'] = 0; + $push_user_monster_data['num'] = 0; + } + + $push_data = []; + $push_data['code'] = 3032; + $push_data['msg'] = "抽卡个人结束播报"; + $push_data['data'] = $push_user_monster_data; + $push = new Push(UID); + $push->xianxuan($push_data); + // error_log(date('Y-m-d H:i:s').'_'.$v.'_'.$reslut."\r\n", 3, '1111.txt'); + } + } + + if($push_feed_monster_data['num'] > 0){ + $push_feed_monster_data['is_push_message'] = 1; + } + + $push_data = []; + $push_data['code'] = 3033; + $push_data['msg'] = "探索结束播报"; + $push_data['data'] = $push_feed_monster_data; + $push = new Push(UID); + $push->xianxuan($push_data); + + // $close_data = $this->get_close_monster_win_log(); + // $push_colse_data = []; + // $push_colse_data['code'] = 3034; + // $push_colse_data['msg'] = "国王游戏结束播报"; + // $push_colse_data['data'] = $close_data; + // model('api/WebSocketPush')->send_to_all($push_colse_data); + } + + return ['code' => 1, 'msg' => '成功', 'data' => null]; +// } catch (\Exception $e) { +// // 回滚事务 +// dump($e); +// Db::rollback(); +// return ['code' => 0, 'msg' => '失败', 'data' => null]; +// } + + } + + //是否修改中奖类型 + public function check_win_type_is_loss($win_type, $monster_log){ + $config = get_system_config(); + //当前亏损数值是否大于 + $map = []; + $map['is_delete'] = 2; + $map['out_amount'] = ['>', 0]; + $now_monster_out_amount = db::name('monster_log')->where($map)->sum('out_amount');//投入 + $now_monster_in_amount = db::name('monster_log')->where($map)->sum('in_amount');//产出 + + //获取得奖用户ID + $map = []; + $map['mid'] = [ '=', $monster_log['id']]; + $map['type'] = ['=', $win_type]; + $user_array = db::name('user_monster_log')->where($map)->group('uid')->column('uid'); + + if(!empty($user_array)){ + $wim_monster = db::name('monster')->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]; + $user_monster_log = db::name('user_monster_log')->where($map)->find(); + + //中奖金额 + $win_price = $user_monster_log['price'] * $wim_monster['multiple']; + + $in_amount += $win_price; + } + + $profit = ($now_monster_in_amount + $in_amount) - ($now_monster_out_amount + $monster_log['out_amount']); + if($profit > $config['monster_max_loss_price']){//亏损大于3w + $type_price_1 = db::name('user_monster_log')->where('mid', $monster_log['id'])->where('type', 1)->sum('price'); + $win_type_amount_1 = $type_price_1 * 2; + $type_price_2 = db::name('user_monster_log')->where('mid', $monster_log['id'])->where('type', 2)->sum('price'); + $win_type_amount_2 = $type_price_2 * 4; + $type_price_3 = db::name('user_monster_log')->where('mid', $monster_log['id'])->where('type', 3)->sum('price'); + $win_type_amount_3 = $type_price_3 * 6.5; + $type_price_4 = db::name('user_monster_log')->where('mid', $monster_log['id'])->where('type', 4)->sum('price'); + $win_type_amount_4 = $type_price_4 * 10; + $type_price_5 = db::name('user_monster_log')->where('mid', $monster_log['id'])->where('type', 5)->sum('price'); + $win_type_amount_5 = $type_price_5 * 15; + $type_price_6 = db::name('user_monster_log')->where('mid', $monster_log['id'])->where('type', 6)->sum('price'); + $win_type_amount_6 = $type_price_6 * 20; + // $type_price_6 = db::name('user_monster_log')->where('mid', $monster_log['id'])->where('type', 6)->sum('price'); + // $win_type_amount_6 = $type_price_6 * 50; + + // $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_6]; + $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_6]; + // $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_4 == $win_type_min && $win_type_amount_3 == $win_type_min && $win_type_amount_2 == $win_type_min && $win_type_amount_1 == $win_type_min){ + // $win_type = rand(1,4); + // }else + 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; + }else if($win_type_amount_6 == $win_type_min){ + $win_type = 6; + } + + } + + } + return $win_type; + } + + //当前最新探索信息 + 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('monster')->field('id,type,type_name,multiple')->order('id asc')->select(); + + //当前是否有开放该活动 + $monster_log = db::name('monster_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']; + }else{ + $is_finish = 2; + $data['surplus_time'] = $monster_log['end_time'] - $now_time; + } + $data['is_finsh'] = $is_finish; + } + + //当前参与用户探索列表 + // $list = db::name('user_monster_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'])->field('a.id,b.uid,b.nick_name,b.base64_nick_name,b.head_pic,c.type_name,a.price')->order('a.id desc')->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 $data; + } + + //国王游戏 + public function open_beat_monster($uid, $rid, $type, $num){ + $user_info = db::name('user_wallet_coin')->where('user_id', $uid)->field('id,coin')->find(); + if(!$user_info){ + return ['code' => 0, 'msg' => '参数错误', 'data' => null]; + } + + $config = get_system_config(); + $now_time = time(); + + $monster = db::name('monster')->where('type', $type)->find(); + if(!$monster){ + return ['code' => 0, 'msg' => '当前类型不存在', 'data' => null]; + } + + + // + $map = []; + $map['end_time'] = ['>', time()]; + $map['is_delete'] = 1; + $monster_log = db::name('monster_log')->where($map)->find(); + if(!$monster_log){ + return ['code' => 0, 'msg' => '请等待新一轮开启', 'data' => null]; + }else{ + $surplus_time = $monster_log['end_time'] - 5; + if($surplus_time < time()){ + return ['code' => 0, 'msg' => '最后五秒内无法参与', 'data' => null]; + } + } + + if($num < 1){ + return ['code' => 0, 'msg' => '次数不能小于1', 'data' => null]; + } + + //该星途已探索多少次数 + $map = []; + $map['mid'] = $monster_log['id']; + $map['uid'] = $uid; + $user_type_num = db::name('user_monster_log')->where($map)->column('type'); + $map['type'] = $type; + $user_monster_num = db::name('user_monster_log')->where($map)->sum('num'); + if($user_monster_num > 0){ + if($user_monster_num + $num > $config['open_monster_max_num']){ + return ['code' => 0, 'msg' => '该玩法次数已达上限', 'data' => null]; + } + }else{ + if($num > $config['open_monster_max_num']){ + return ['code' => 0, 'msg' => '该玩法次数已达上限', 'data' => null]; + } + } + $user_monster_log = db::name('user_monster_log')->where($map)->find(); + + if(count($user_type_num) >= 6 && !in_array($type, $user_type_num)){ + return ['code' => 0, 'msg' => '玩法类型不能大于六个', 'data' => null]; + } + + // $open_monster_ticket = $config['open_monster_ticket']; + // $pay_ticket = $num * $open_monster_ticket; + // if($user_info['had_ticket_num'] < $pay_ticket){ + // return ['code' => 201, 'msg' => '用户剩余门票数不足', 'data' => null]; + // } + $money = $num * $config['open_monster_price']; + if($user_info['coin'] < $money){ + return ['code' => 0, 'msg' => '金币不足', 'data' => null]; + } + + Db::startTrans(); + try { + //扣除用户金币 + $reslut = model('common/UserWallet')->change_user_money($uid, $money, 1, model('common/UserWallet')::LINGXIAN_TRADITION_LOTTERY_COIN,model('common/UserWallet')::ChangeTypeLable(model('common/UserWallet')::LINGXIAN_TRADITION_LOTTERY_COIN)); + if ($reslut['code'] != 1) { + Db::rollback(); + return ['code' => 0, 'msg' => $reslut['msg'], 'data' => null]; + } + + //是否探索过 + if($user_monster_log){//已探索则继续 + $update = []; + $update['updatetime'] = time(); + $reslut = db::name('user_monster_log')->where('id', $user_monster_log['id'])->inc('num', $num)->inc('price', $money)->update($update); + if(!$reslut){ + Db::rollback(); + return ['code' => 0, 'msg' => '请重试', 'data' => null]; + } + }else{//未探索则探索 + $insert = []; + $insert['uid'] = $uid; + $insert['rid'] = $rid; + $insert['mid'] = $monster_log['id']; + $insert['type'] = $type; + $insert['num'] = $num; + $insert['price'] = $money; + $insert['createtime'] = time(); + $reslut = db::name('user_monster_log')->insert($insert); + if(!$reslut){ + Db::rollback(); + return ['code' => 0, '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['num'] = $num; + $insert_data['price'] = $money; + $insert_data['createtime'] = time(); + $fid = db::name('user_monster_feed_log')->insertGetId($insert_data); + if(!$fid){ + Db::rollback(); + return ['code' => 0, 'msg' => '请重试', 'data' => null]; + } + + //计入当期支出累消 + $update = []; + $update['updatetime'] = time(); + $reslut = db::name('monster_log')->where('id', $monster_log['id'])->inc('out_amount', $money)->update($update); + if(!$reslut){ + Db::rollback(); + return ['code' => 0, 'msg' => '请重试', 'data' => null]; + } + + Db::commit(); + $user_data = db::name('user')->where('id', $uid)->find(); + $push_feed_monster_data = []; + $push_feed_monster_data['id'] = $fid; + $push_feed_monster_data['uid'] = $uid; + $push_feed_monster_data['nick_name'] = $user_data['nickname']??""; + $push_feed_monster_data['head_pic'] = $user_data['avatar']??""; + $push_feed_monster_data['type'] = $type; + $push_feed_monster_data['type_name'] = db::name('monster')->where('type', $type)->value('type_name'); + $push_feed_monster_data['price'] = $money; + $push_feed_monster_data['num'] = db::name('user_monster_log')->where('mid',$monster_log['id'])->where('uid', $uid)->where('type', $type)->sum('num'); + // $push_feed_monster_data['pay_ticket'] = $pay_ticket; + $push_feed_monster_data['integral'] = db::name('user_wallet_coin')->where('user_id', $uid)->value('coin'); + // $push_data = []; + // $push_data['code'] = 334; + // $push_data['msg'] = "探索公屏播报"; + // $push_data['data'] = $push_feed_monster_data; + // model('api/WebSocketPush')->send_to_all($push_data); + + + return ['code' => 0, 'msg' => '探索成功', 'data' => $push_feed_monster_data]; + } catch (\Exception $e) { + // 回滚事务 + // dump($e); + Db::rollback(); + return ['code' => 0, 'msg' => '探索失败', 'data' => null]; + } + + } + + //规则 + public function get_monster_note(){ + $config = get_system_config(); + $note = $config['monster_feed_note']; + return ['code' => 1, 'msg' => '获取成功', 'data' => $note]; + + } + //奖池 + public function get_monster_box_list(){ + $monster_gift_list = db::name('monster')->alias('a')->join('vs_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' => 1, 'msg' => '获取成功', 'data' => $monster_gift_list]; + } + //开奖记录 + public function get_monster_log($uid, $page, $page_limit){ + $user_info = db::name('user')->where('id', $uid)->find(); + if(!$user_info){ + return ['code' => 0, 'msg' => '参数错误', 'data' => null]; + } + + $map = []; + $map['a.is_delete'] = ['=', 2]; + $monster_list = db::name('monster_log')->alias('a')->join('monster b', 'a.win_type = b.type')->field('a.id,a.win_type,b.type_name,a.createtime as add_time')->where($map)->order('a.id desc')->page($page, $page_limit)->select(); + foreach ($monster_list as $k => &$v){ + $v['is_join'] = 3; + $v['gift_name'] = ''; + $v['base_image'] = ''; + $v['gift_price'] = 0; + $v['num'] = 0; + $user_monster_log = db::name('user_monster_log')->where('uid', $uid)->where('mid', $v['id'])->find(); + if($user_monster_log){ + $v['is_join'] = 2; + $user_monster_win_log = db::name('user_monster_win_log')->where('uid', $uid)->where('mid', $v['id'])->find(); + if($user_monster_win_log){ + $v['is_join'] = 1; + $gift_info = db::name('gift')->find($user_monster_win_log['win_gid']); + $v['gift_name'] = $gift_info['gift_name']; + $v['base_image'] = localpath_to_netpath($gift_info['base_image']); + $v['gift_price'] = $gift_info['gift_price']; + $v['num'] = $user_monster_win_log['num']; + } + } + + } + return ['code' => 200, 'msg' => '获取成功', 'data' => $monster_list]; + } + + //我的列表 + public function get_user_monster_log($mid, $order, $sort, $page = 1, $limit = 20) + { + + $list = db::name('user_monster_log')->where('mid', $mid)->order($order, $sort)->page($page, $limit)->select(); + foreach ($list as $k => &$v) { + $user_info = db::name('user')->where('id', $v['uid'])->field('id,nickname,avatar')->find(); + $v['nick_name'] = $user_info['nickname']; + $v['head_pic'] = $user_info['avatar']; + $v['type_name'] = db::name('Monster')->where('type', $v['type'])->value('type_name'); + } + + $data = []; + $data['count'] = db::name('user_monster_log')->where('mid', $mid)->count(); + $data['list'] = $list; + return ['code' => 1, 'msg' => '获取成功', 'data' => $data]; + } + + //中奖次数榜单 + public function get_monster_winner_num_list($uid, $time){ + if(in_array($time, [1,2,3])){ + + } + + $model = db::name('user_monster_win_log')->field('uid, count(id) as win_num'); + if($time == 1){ + $model = $model->whereTime('add_time', 'today'); + }else if($time == 2){ + $model = $model->whereTime('add_time', 'week'); + }else if($time == 3){ + $model = $model->whereTime('add_time', 'month'); + } + $list = $model->group('uid')->order('win_num desc, uid asc')->limit(30)->select(); + foreach ($list as $k => &$v){ + $user_info = db::name('user')->where('id', $v['uid'])->field('id,nickname,avatar')->find(); + $v['nick_name'] = $user_info['nickname']; + $v['head_pic'] = $user_info['avatar']; + + } + + return ['code' => 1, 'msg' => '获取成功', 'data' => $list]; + } + + //设置房间期数开关 + public function operate_room_monster_show_status($uid, $rid, $is_show_monster_push){ + $room_info = db::name('vs_room')-> where('id', $rid)->find(); + if(!$room_info){ + return ['code' => 0, 'msg' => '该房间不存在', 'data' => null]; + } + + $room_admin_uid_arr = explode(',', $room_info['room_admin_uid']); + if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr)) { + return ['code' => 0, 'msg' => '无权限操作', 'data' => null]; + } + + Db::startTrans(); + try { + + $update = []; + $update['is_show_monster_push'] = $is_show_monster_push; + $update['update_time'] = time(); + $reslut = db::name('room')->where('rid', $rid)->update($update); + if(!$reslut){ + Db::rollback(); + return ['code' => 0, 'msg' => '修改失败', 'data' => null]; + } + + Db::commit(); + + $data = []; + $data['rid'] = $rid; + $data['is_show_monster_push'] = $is_show_monster_push; + + //推送 + $push_data = []; + $push_data['code'] = 3035; + $push_data['msg'] = "修改房间期数开关"; + $push_data['data'] = $data; + model('api/WebSocketPush')->send_to_group($rid, $push_data); + + return ['code' => 200, 'msg' => '修改成功', 'data' => $data]; + } catch (\Exception $e) { + // 回滚事务 + // dump($e); + Db::rollback(); + return ['code' => 201, 'msg' => '修改失败', 'data' => null]; + } + + } +} diff --git a/application/api/model/UserGiftPack.php b/application/api/model/UserGiftPack.php index 8971af45..4e0c7009 100644 --- a/application/api/model/UserGiftPack.php +++ b/application/api/model/UserGiftPack.php @@ -44,6 +44,8 @@ class UserGiftPack extends Model const DAILY_SIGN = 12; //盲盒转盘抽奖所得 const BLANK_BOX_DRAW_GIFT_GET = 13; + //炼仙传说中奖获取 + const LY_DRAW_GIFT_GET = 14; public static function init() { @@ -66,7 +68,8 @@ class UserGiftPack extends Model self::NEW_CHARGE_GIFT => '新人充值好礼', self::TASK_REWARD => '任务奖励', self::DAILY_SIGN => '每日签到', - self::BLANK_BOX_DRAW_GIFT_GET => '盲盒转盘抽奖所得' + self::BLANK_BOX_DRAW_GIFT_GET => '盲盒转盘抽奖所得', + self::LY_DRAW_GIFT_GET => '炼仙传说中奖获取' ]; } diff --git a/application/api/model/UserWallet.php b/application/api/model/UserWallet.php index 9ddbb3b6..55d9ddab 100644 --- a/application/api/model/UserWallet.php +++ b/application/api/model/UserWallet.php @@ -54,7 +54,7 @@ class UserWallet extends Model // 15.首充 16.天降好礼充值 17.退出工会扣款 18.房主收益 19.主持人收益 20.抢头条 21.公会长收益,22.提现驳回或提现失败返还,23.财富等级奖励金币领取,24.删除关系扣金币, // 25.赠送好友金币,26.好友转赠所得金币,27.小时榜获得金币,28.新人充值好礼,29.发红包(钻石),30.抢红包(金币),31.抢红包(钻石),32.发红包(金币), // 33.红包剩余退回(金币),34-红包剩余退回(钻石),35-爵位购买赠送金币(金币),40-后台充值金币,41-后台充值钻石,42-后台扣除金币,43-后台扣除钻石, - //50-签约,51-签约失败退回,52-首次被签约收入,53.签约师傅每日返还,54-叛徒补偿,55-徒弟收礼返佣,56-续约,57-签到,58-爆币,59-红包手续费 + //50-签约,51-签约失败退回,52-首次被签约收入,53.签约师傅每日返还,54-叛徒补偿,55-徒弟收礼返佣,56-续约,57-签到,58-爆币,59-红包手续费 60-炼仙传说抽奖扣除金币 public function log_list($uid, $last_id, $page_limit,$in_out_type,$start_time,$end_time,$gift_type) { // 时间范围处理 @@ -76,7 +76,7 @@ class UserWallet extends Model $in_out_types = [2,5,6,8,13,14,15,16,22,23,26,27,30,28,33,40,44,51,57,58]; $map['change_type'] = ['in', $in_out_types]; }else{//2-支出 - $in_out_types = [4,7,10,17,20,24,25,32,42,50,56,59]; + $in_out_types = [4,7,10,17,20,24,25,32,42,50,56,59,60]; $map['change_type'] = ['in', $in_out_types]; } @@ -233,14 +233,14 @@ class UserWallet extends Model // 15.首充 16.天降好礼充值 17.退出工会扣款 18.房主收益 19.主持人收益 20.抢头条 21.公会长收益,22.提现驳回或提现失败返还,23.财富等级奖励金币领取,24.删除关系扣金币, // 25.赠送好友金币,26.好友转赠所得金币,27.小时榜获得金币,28.新人充值好礼,29.发红包(钻石),30.抢红包(金币),31.抢红包(钻石),32.发红包(金币), // 33.红包剩余退回(金币),34-红包剩余退回(钻石),35-爵位购买赠送金币(金币),,40-后台充值金币,41-后台充值钻石,42-后台扣除金币,43-后台扣除钻石, - //50-签约,51-签约失败退回,52-首次被签约收入,53.签约师傅每日返还,54-叛徒补偿,55-徒弟收礼返佣,56-续约,57-签到,58-爆币,59-红包手续费 + //50-签约,51-签约失败退回,52-首次被签约收入,53.签约师傅每日返还,54-叛徒补偿,55-徒弟收礼返佣,56-续约,57-签到,58-爆币,59-红包手续费 60-炼仙传说抽奖扣除金币 //资金操作 public function change_user_cion_log($user_id,$money,$room_id,$change_type,$remarks) { //增加用户金币类型 $in_types = [2,5,6,8,13,14,15,16,23,26,27,28,30,33,35,40,51,57,58,44]; //减少用户金币类型 - $out_types = [4,7,10,17,20,24,25,32,42,50,56,59]; + $out_types = [4,7,10,17,20,24,25,32,42,50,56,59,60]; $user_wallet = Db::name('user_wallet_coin')->where(['user_id' => $user_id])->lock(true)->find(); if (!$user_wallet) { diff --git a/application/common/controller/Push.php b/application/common/controller/Push.php index b5cdfa23..306b985b 100644 --- a/application/common/controller/Push.php +++ b/application/common/controller/Push.php @@ -77,6 +77,8 @@ class Push const PUSH_ROOM_PAN_HOUR_PROGRESS = 8001; //红包 const PUSH_ROOM_PAN_RED_PROGRESS = 8002; + //炼仙传说 + const PUSH_ROOM_PAN_XLXS_PROGRESS = 8003; public $user_id, $room_id, $topic_room, $topic_client; @@ -315,6 +317,12 @@ class Push $this->push(self::PUSH_ROOM_PAN_RED_PROGRESS, $topic, $data); } + //炼仙传说 + public function xianxuan($data){ + $topic = 'qx_xianxuan'; + $this->push(self::PUSH_ROOM_PAN_XLXS_PROGRESS, $topic, $data); + } + // =========================================项目使用结束===================================================== diff --git a/application/common/model/UserWallet.php b/application/common/model/UserWallet.php index fe0e9657..4eb0497b 100644 --- a/application/common/model/UserWallet.php +++ b/application/common/model/UserWallet.php @@ -123,6 +123,8 @@ class UserWallet extends Model const BACKGROUND_DEDUCTION_DIAMOND = 43; //公会会员付费退出会长收入 const GUILD_EXIT_DEACON_INCOME = 44; + //炼仙传说抽奖扣除金币 + const LINGXIAN_TRADITION_LOTTERY_COIN = 60; //金币支出类型数组 @@ -139,8 +141,9 @@ class UserWallet extends Model self::RENEWAL, self::RED_PACKET_FEE, self::BACKGROUND_DEDUCTION_COIN, - + self::LINGXIAN_TRADITION_LOTTERY_COIN, ]; + //钻石支出类型数组 public $diamond_consumption_type_array = [ self::OPERATION_WITHDRAW, @@ -219,7 +222,8 @@ class UserWallet extends Model self::BACKGROUND_RECHARGE_DIAMOND => '后台充值钻石', self::BACKGROUND_DEDUCTION_COIN => '后台扣除金币', self::BACKGROUND_DEDUCTION_DIAMOND => '后台扣除钻石', - self::GUILD_EXIT_DEACON_INCOME => "公会会员付费退出会长收入" + self::GUILD_EXIT_DEACON_INCOME => "公会会员付费退出会长收入", + self::LINGXIAN_TRADITION_LOTTERY_COIN => '炼仙传说抽奖扣除金币', ]; if ($type) { return $status[$type] ?? '';