<?php
// +----------------------------------------------------------------------
// | OneThink [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://www.onethink.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: 麦当苗儿 <zuojiazi@vip.qq.com> <http://www.zjzit.cn>
// +----------------------------------------------------------------------
use Home\Controller\PromoteCoinController;

/**
 * 前台公共库文件
 * 主要定义前台公共函数库
 */

function is_weixin_brower()
{
    if (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false) {
        return true;
    }
    return false;
}

function is_in_qq_brower()
{
    if (strpos($_SERVER['HTTP_USER_AGENT'], 'QQ/') !== false) {
        return true;
    }
    return false;
}

function get_apply_launch_status($applyid = 0, $gameid = 0)
{

    if (is_numeric($applyid) && is_numeric($gameid) && $applyid > 0 and $gameid > 0) {

        $launchmodel = M('apply_launch', 'tab_');

        $launch = $launchmodel->field('launch_packge')->where(['apply_id' => $applyid, 'launch_game_id' => $gameid, 'launch_packge' => array('neq', 1)])->find();

        return !empty($launch) ? true : false;

    } else {
        return false;
    }

}

/**
 * 平台币来源
 * @author 鹿文学
 */
function get_promote_coin_source_name($id = 0)
{
    if (is_numeric($id) && $id > 0 && $id < 6) {
        $list = get_promote_coin_source_list();
        return $list[$id];
    } else {
        return '';
    }
}

/**
 * 平台币来源列表
 * @author 鹿文学
 */
function get_promote_coin_source_list()
{
    return [
        1 => '后台发放',
        2 => '自主充值',
        3 => '渠道充值',
        4 => '充值渠道',
        5 => '充值子渠道',
    ];
}

function get_user_by_game($promote_id, $game_id = '', $fields = 'user_id,user_account')
{

    $map = [];

    $game_id > 0 && $map['game_id'] = $game_id;

    $promote_id > 0 && $map['promote_id'] = $promote_id;

    $map['ppuid'] = 0;

    $data = M("UserPlay", "tab_")->field($fields)->where($map)->group('user_id')->select();

    return $data;

}

function get_pro_grade_name($id = 0, $flag = 0)
{
    $list = ['', '一级渠道', '二级渠道', '三级渠道'];
    if ($flag > 0)
        return $list[$id + 1];
    else
        return $list[$id];
}

function check_another_status($game_id = 0, $promote_id = 0)
{
    if (is_numeric($game_id) && $game_id > 0 && is_numeric($promote_id) && $promote_id > 0) {

        $result = M('apply', 'tab_')->field('id')->where(['game_id' => $game_id, 'promote_id' => $promote_id])->find();

        if (is_array($result) && $result['id'] > 0) {
            return true;
        } else {
            return false;
        }

    } else {
        return false;
    }
}

/* 截取指定两个字符之间字符串 */
function get_between($input, $start, $end)
{
    $substr = substr($input, strlen($start) + strpos($input, $start), (strlen($input) - strpos($input, $end)) * (-1));
    return $substr;
}

/**
 * 检测用户是否登录
 * @return integer 0-未登录,大于0-当前登录用户ID
 * @author 麦当苗儿 <zuojiazi@vip.qq.com>
 */
function is_login_promote()
{
    $user = session('promote_auth');
    if (empty($user)) {
        return 0;
    } else {
        return session('promote_auth_sign') == data_auth_sign($user) ? $user['pid'] : 0;
    }
}

function get_pay_sett($id)
{
    switch ($id) {
        case 0:
            return "未提现";
            break;

        case 1:
            return "已提现";
            break;

    }
}

/**
 * 检测验证码
 * @param integer $id 验证码ID
 * @return boolean     检测结果
 * @author 麦当苗儿 <zuojiazi@vip.qq.com>
 */
function check_verify($code, $id = 1)
{
    $verify = new \Think\Verify();
    return $verify->check($code, $id);
}

/**
 * 获取列表总行数
 * @param string $category 分类ID
 * @param integer $status 数据状态
 * @author 麦当苗儿 <zuojiazi@vip.qq.com>
 */
function get_list_count($category, $status = 1)
{
    static $count;
    if (!isset($count[$category])) {
        $count[$category] = D('Document')->listCount($category, $status);
    }
    return $count[$category];
}

/**
 * 获取段落总数
 * @param string $id 文档ID
 * @return integer    段落总数
 * @author 麦当苗儿 <zuojiazi@vip.qq.com>
 */
function get_part_count($id)
{
    static $count;
    if (!isset($count[$id])) {
        $count[$id] = D('Document')->partCount($id);
    }
    return $count[$id];
}

/**
 * 获取导航URL
 * @param string $url 导航URL
 * @return string      解析或的url
 * @author 麦当苗儿 <zuojiazi@vip.qq.com>
 */
function get_nav_url($url)
{
    switch ($url) {
        case 'http://' === substr($url, 0, 7):
        case '#' === substr($url, 0, 1):
            break;
        default:
            $url = U($url);
            break;
    }
    return $url;
}

function get_apply_dow_url($game_id = 0, $promote_id = 0)
{
    $model = M('Apply', 'tab_');
    $map['game_id'] = $game_id;
    $map['promote_id'] = $promote_id;
    $map['offline_status'] = 0;
    $data = $model->where($map)->find();
    if (empty($data['dow_url'])) {
        $game_address = M('game', 'tab_')->where('id=' . $game_id)->find();
        if ($game_address['sdk_version'] == 1) {
            if ($game_address['add_game_address'] != '') {
                $game_address_url = $game_address['add_game_address'];
                return $game_address_url;
            } else {
                $game_address_url = $game_address['and_dow_address'];
                return 'http://' . C('APPLY_DOWN_DOMAIN') . substr($game_address_url, 1);
            }
        } else {
            if ($game_address['ios_game_address'] != '') {
                $game_address_url = $game_address['ios_game_address'];
                return $game_address_url;
            } else {
                $game_address_url = $game_address['ios_dow_address'];
                return 'http://' . C('APPLY_DOWN_DOMAIN') . substr($game_address_url, 1);
            }
        }
    }
    return 'https://' . C('APPLY_DOWN_DOMAIN') . $data['dow_url'];
}

function get_promote_list_by_id()
{
    $map['parent_id'] = get_pid();
    $pro = M("promote", "tab_")->where($map)->select();
    return $pro;
}

function index_show($param = array())
{
    $paramcount = count($param);
    if ($paramcount > 0) {
        $paramm[0][] = $param[0];
        $paramm[0][] = $param[1];
        $paramm[0][] = $param[2];
    }
    if ($paramcount - 3 > 0) {
        $paramm[1][] = $param[3];
        $paramm[1][] = $param[4];
        $paramm[1][] = $param[5];
    }
    foreach ($paramm as $key => $value) {
        foreach ($value as $k => $v) {
            if ($v == '') {
                unset($paramm[$key][$k]);
            }
        }
    }
    return $paramm;
}


//获取礼包激活码数量
function get_site_gift_num($id)
{
    $data = M('site_gift', 'tab_')->find($id);
    $novice = explode(',', $data['novice']);
    $count = count($novice);
    if (empty(array_pop($novice)) && $count > 0) {
        $count--;
    }
    if (empty($novice[0])) {
        //$count--;
    }
    return $count;
}

//获取游戏类型
function get_game_type($id)
{
    $game_type = D('SiteGame')->field('game_type')->find($id);
    return $game_type['game_type'];
}

//获取游戏名称
function get_site_game_name($id)
{
    $game_type = D('SiteGame')->field('game_name')->find($id);
    return $game_type['game_name'];
}

//获取游戏图标
function get_site_game_icon($id)
{
    $data = D('SiteGame')->field('game_icon')->find($id);
    $icon_url = get_cover($data['game_icon'], 'path');
    return $icon_url;
}

//获取游戏ID
function get_game_id($game_name)
{
    $map['game_name'] = $game_name;
    $map['promote_id'] = PID;
    $game_type = M('Game', 'tab_')->field('id')->where($map)->find();
    return $game_type['id'];
}

function get_game_icon()
{
    $data = $game_type = M('Game', 'tab_')->field('icon')->find($id);
    return $data['icon'];

}

function get_site_game_id($game_name)
{
    $map['game_name'] = $game_name;
    $map['promote_id'] = PID;
    $game_type = D('SiteGame')->field('id')->where($map)->find();
    return $game_type['id'];
}

/**
 * 判断手机访问型号
 * @return string
 */
function get_device_type()
{
    //全部变成小写字母
    $agent = strtolower($_SERVER['HTTP_USER_AGENT']);
    $type = 'other';
    //分别进行判断
    if (strpos($agent, 'iphone') || strpos($agent, 'ipad')) {
        $type = 'ios';
    }

    if (strpos($agent, 'android')) {
        $type = 'android';
    }
    return $type;
}

//获取支付方式
function get_pay_way($id = null)
{
    if (!isset($id)) {
        return false;
    }
    switch ($id) {
        case -1:
            return "绑币";
            break;
        case 0:
            return "平台币";
            break;
        case 1:
            return "支付宝";
            break;
        case 2:
        case 3:
        case 4:
            return "微信";
            break;
        case 5:
            return "聚宝云";
            break;
        case 6:
            return "竣付通";
            break;
        case 7:
            return "苹果支付";
            break;
        case 8:
            return "金猪支付";
            break;
        case 9:
            return "双乾支付";
            break;
        case 15:
            return "双乾支付-快捷";
            break;
    }
}

//获取支付方式
function getPayStatusName($status)
{
    switch ($status) {
        case -1:
            return "绑币";
            break;
        case 0:
            return "平台币";
            break;
        case 1:
            return "支付宝";
            break;
        case 2:
        case 3:
        case 4:
            return "微信";
            break;
        case 5:
            return "聚宝云";
            break;
        case 6:
            return "竣付通";
            break;
        case 7:
            return "苹果支付";
            break;
        case 8:
            return "金猪支付";
            break;
        case 9:
            return "双乾支付";
            break;
    }
}

/**
 * 获取打包状态
 * @param  [type] $promote_id [description]
 * @param  [type] $game_id    [description]
 * @return [type]             [description]
 */
function get_enable_status($promote_id = 0, $game_id = 0)
{
    if ($promote_id != 0 && $game_id != 0) {
        $map['promote_id'] = $promote_id;
        $map['game_id'] = $game_id;
        $data = M('apply', 'tab_')->field('enable_status')->where($map)->find();
        if ($data) {
            return $data['enable_status'];
        } else {
            return false;
        }
    } else {
        return false;
    }
}

/**
 * 获取打包id ,单价 分成比例
 * @param  [type] $promote_id [description] 0:id  1:money 2:ratio
 * @param  [type] $game_id    [description]
 * @return [type]             [description]
 */
function get_apply_id($promote_id = 0, $game_id = 0, $type = 0)
{
    if ($promote_id != 0 && $game_id != 0) {
        $map['promote_id'] = $promote_id;
        $map['game_id'] = $game_id;
        $data = M('apply', 'tab_')->field('id,promote_ratio,promote_money')->where($map)->find();
        if ($type == 1) {
            return $data['promote_money'];
            die;
        } elseif ($type == 2) {
            return $data['promote_ratio'];
            die;
        } else {
            return $data['id'];
            die;
        }

    }
    if (empty($data)) {
        $data = M('game', 'tab_')->field('id,ratio,money')->find($game_id);
        if ($type == 1) {
            return $data['money'];
            die;
        } elseif ($type == 2) {
            return $data['ratio'];
            die;
        } else {
            return $data['id'];
            die;
        }
    }

}

/**
 * 获取打包状态
 * @param  [type] $promote_id [description]
 * @param  [type] $game_id    [description]
 * @return [type]             [description]
 */
function get_apply_status($promote_id = 0, $game_id = 0)
{
    if ($promote_id != 0 && $game_id != 0) {
        $map['promote_id'] = $promote_id;
        $map['game_id'] = $game_id;
        $info = M('apply', 'tab_')->field('status')->where($map)->find();
        if ($info) {
            return $info['status'];
        } else {
            $game = M('Game', 'tab_');
            $gdata = $game->where(array('id' => $game_id))->find();
            $ratio = $gdata['ratio'];
            $money = $gdata['money'];
            $sdk_version = $gdata['sdk_version'];
            $model = M('Apply', 'tab_');
            $data['game_id'] = $game_id;
            $data['game_name'] = get_game_name($game_id);
            $data['promote_id'] = session("promote_auth.pid");
            $data['promote_account'] = session("promote_auth.account");
            $data['apply_time'] = NOW_TIME;
            $data['status'] = 1;
            $data['sdk_version'] = $sdk_version;
            $data['ratio'] = $ratio;
            $data['money'] = $money;

            $res = $model->add($data);
            return 1;
        }
    } else {
        return false;
    }
}

/**
 * [获取游戏版本]
 * @param  [type] $id [description]
 * @return [type]     [description]
 */
function game_version($id)
{
    $game = M('game', 'tab_');
    $map['id'] = $id;
    $data = $game->field('sdk_version')->where($map)->find();
    if ($data['id'] == null) {
        return false;
    }
    return $data['version'];
}

// 获取IOS游戏名称
function get_ios_game_name($game_id = null, $field = 'id')
{
    $map[$field] = $game_id;
    $map['game_version'] = 0;
    $data = M('Game', 'tab_')->where($map)->find();
    if (empty($data)) {
        return false;
    }
    $game_name = explode("(", $data['game_name']);
    return $game_name[0];
}

function get_version($game_id = '')
{
    if ($game_id) {
        $res = M('game_source', 'tab_')->field('version')->where(['game_id' => $game_id])->find();
        return $res['version'];
    } else {
        return false;
    }
}

//根据id获取游戏原包更新时间
function get_source_time($game_id)
{
    $model = M('game_source', 'tab_');
    $map['game_id'] = $game_id;
    $res = $model->where($map)->find();
    return $res['create_time'];
}

/**
 *推广员搜索游戏下拉列表
 */
function get_promote_serach_game()
{
    $game = M("game", "tab_");
    if (!empty($type)) {
        $map['developers'] = $type == 1 ? array('EQ', 0) : array('GT', 0);
        $map['game_status'] = $type == 1 ? 1 : array('in', '0,1');

    } else {
        $map['apply_status'] = 1;
        $map['online_status'] = 1;

    }
    $map['down_port'] = 1;
    $lists = $game->field('id,game_name,sdk_version,relation_game_name,icon,relation_game_id')->where($map)->group('relation_game_id')->select();
    if (empty($lists)) {
        return false;
    }
    return $lists;
}

function getPromoteSearchGame()
{
    $game = M("game", "tab_");
    if (!empty($type)) {
        $map['developers'] = $type == 1 ? array('EQ', 0) : array('GT', 0);
        $map['game_status'] = $type == 1 ? 1 : array('in', '0,1');

    } else {
        $map['apply_status'] = 1;
        $map['online_status'] = 1;

    }
    $map['down_port'] = 1;
    $lists = $game->field('id,game_name,sdk_version,relation_game_name,icon,relation_game_id')->where($map)->select();
    if (empty($lists)) {
        return false;
    }
    return $lists;
}

//二级推广员id
function get_promote_child_ids($id)
{
    $map1['parent_id'] = $id;
    $arr1 = M('promote', 'tab_')->where($map1)->field('id')->select();
    if ($arr1) {
        return $arr1;
    } else {
        return false;
    }

}

/**
 * 获取原包信息
 * @return [type] [description]
 */
function get_game_source_info($id)
{
    $map["game_id"] = $id;
    $data = M('GameSource', 'tab_')->where($map)->find();
    if (empty($data)) {
        $result = '';
    } else {
        $result = $data;
    }
    if (empty($result['file_size'])) {
        $result['file_size'] = 0;
    }
    return $result;

}

/**
 * 获取游戏信息
 * @return [type] [description]
 */
function get_game_info($id = 0)
{
    $map["id"] = $id;
    $data = M('Game', 'tab_')->where($map)->find();


    return $data;

}

/**
 * 获取游戏区服
 * @return [type] [description]
 */
function getServer_name($game_name = "")
{
    $data = M('server', 'tab_')->where(['game_name' => $game_name])->select();
    return $data;
}

/**
 * 获取游戏已开服的区服
 * @return [type] [description]
 */
function getServer_name_on($game_name = "", $status = 1)
{
    $map['game_name'] = $game_name;
    $map['start_time'] = ['lt', time()];
    if ($status == 2) {
        $map['show_status'] = 1;
    }
    $data = M('server', 'tab_')->where($map)->order('server_id asc')->select();
    return $data;
}


/**
 * 统计推广员总流水
 * @param  [type] $id [description]
 * @return [type]     [description]
 */
function sum_promote_total_money($id)
{
    $map['promote_id'] = $id;
    $map['pay_status'] = 1;
    $res = M('Spend', 'tab_')->field("SUM(pay_amount) as pay_amount")->where($map)->select();
    return $res[0]['pay_amount'] == null ? '0.00' : $res[0]['pay_amount'];
}


function get_promote_levels($id = 0)
{
    $data = M('promote', 'tab_')->field('parent_id, level')->where(array('id' => $id))->find();
    switch ($data['level']) {
        case '1':
            return "会长";
            break;
        case '2':
            return "部门长";
            break;
        case '3':
            return "组长";
            break;
        case '4':
            return "组员";
            break;
        
        default:
            return '';
    }
}

/**
 * [上线渠道]
 * @param  [type] $id  [description]
 * @param  [type] $pid [description]
 * @return [type]      [description]
 */
function get_top_promote($id, $pid)
{
    if ($pid == 0) {
        $pro = M("promote", "tab_")->field('account')->where(array('id' => $id))->find();
    } else {
        $map['id'] = $pid;
        $pro = M("promote", "tab_")->field('account')->where($map)->find();
    }
    if ($pro == '') {
        return false;
    }
    return $pro['account'];
}

function get_promote_list($select = '')
{
    $list = M("Promote", "tab_")->field('id,account,balance_coin')->select();//where("status=1")->
    if (empty($list)) {
        return '';
    }
    if ($select == 111) {
        $new['id'] = -1;
        $new['account'] = "全站用户";
        array_unshift($list, $new);
    }
    return $list;
}

/**
 * [获取所有一级推广员]
 * @return [type] [description]
 */
function get_all_toppromote()
{
    $map['status'] = 1;
    $map['parent_id'] = 0;
    $list = M("Promote", "tab_")->where($map)->select();
    if (empty($list)) {
        return '';
    }
    return $list;
}

//获取sdk类型名称
function getSDKTypeName($sdkType, $chinese = false)
{
    $android = 'Android';

    if ($chinese) {
        $android = '安卓';
    }

    switch ($sdkType) {
        case 0:
            $sdkName = $android . '+ios';
            break;
        case 1:
            $sdkName = $android;
            break;
        case 2:
            $sdkName = 'ios';
            break;
    }

    return $sdkName;
}

//获取sdk类型
function getSDKType()
{
    $sdkTypeData = array(
        1 => '安卓',
        2 => 'ios',
    );

    return $sdkTypeData;
}

//判断是否有推广员权限 $parentId-父推广员ID $promoterId-推广员ID $promoterParentId-推广员父ID
function hasPromotePermission($parentId, $promoteId)
{
    if ($promoteId == $parentId) {
        return true;
    }

    return isParentPromote($parentId, $promoteId);
}

function isParentPromote($parentId, $promoteId)
{
    $promoteParentId = D('Promote')->where(array('id' => $promoteId))->getField('parent_id');

    if ($promoteParentId == $parentId) {
        return true;
    } elseif ($promoteParentId == 0) {
        return false;
    } else {
        return isParentPromote($parentId, $promoteParentId);
    }
}

//获取所有该类型的渠道    $promoteId-渠道ID  $promoteType-1:本账号 2:组长 3:推广员
function getAllPromoteListByType($promoteType = 1, $retOne = false, $promoteId = PID)
{
    $childPromoteData = array();

    switch ($promoteType) {
        case 1:
            $map['id'] = $promoteId;
            break;
        case 2:
        case 3:
        case 4:
            $map['chain'] = ['like', '%/' . $promoteId . '/%'];
            $map['level'] = $promoteType;
            break;
    }

    if (!empty($map)) {
        if ($retOne) {
            $childPromoteData = D('Promote')->where($map)->getField('id', true);
        } else {
            $childPromoteData = D('Promote')->where($map)->field('id,account,nickname,real_name')->select();
        }
    }

    return $childPromoteData;
}

//获取所有子渠道ID
function getAllPromoteIdsByType($promoteIds, $level = 3, $nowLevel = 1)
{
    if (!empty($promoteIds)) {
        $map['parent_id'] = ['in', $promoteIds];
        $nowLevel++;

        $promoteData = D('Promote')
            ->where($map)
            ->getField('id', true);

        if (count($promoteData) > 0) {
            $promoteIdsStr = implode(',', $promoteData);
            $thisMap['parent_id'] = ['in', $promoteIdsStr];
            $thisPromoteDataCount = D('Promote')->where($thisMap)->count('id');

            if ($thisPromoteDataCount > 0 && $level > $nowLevel) {
                return getAllPromoteIdsByType($promoteIdsStr, $level, $nowLevel);
            } else {
                if ($level == $nowLevel) {
                    return $promoteIdsStr;
                } else {
                    return '';
                }
            }
        } else {
            return '';
        }
    }

    return '';
}

//获取所有子渠道列表    $type 1-返回数组 2-返回id数组 3-返回id字符串
function getAllChildPromoteList($type = 1, $promoteId = PID)
{
    $childPromoteData = array();
    $childPromoteIds = getAllChildPromoteIds($promoteId);

    if (!empty($childPromoteIds)) {
        $map['id'] = ['in', $childPromoteIds];

        switch ($type) {
            case 1:
                $childPromoteData = D('Promote')->where($map)->field('id,account,nickname')->select();
                break;
            case 2:
                $childPromoteData = D('Promote')->where($map)->getField('id');
                break;
            case 3:
                $childPromoteData = $childPromoteIds;
                break;
        }
    }

    return $childPromoteData;
}

//获取所有子渠道ID
function getAllChildPromoteIds($promoteId)
{
    if (!empty($promoteId)) {
        $model = D('Promote');
        $promote = $model->field('chain,level')->where(array('id' => $promoteId))->find();
        $map['chain'] = ['like', $promote['chain'] . $promoteId . '/%'];
        $map['level'] = ['gt', $promote['level']];

        $promoteData = D('Promote')
            ->where($map)
            ->getField('id', true);

        if (count($promoteData) > 0) {
            return implode(',', $promoteData);
        }

        return '';
    }

    return '';
}

//获上级渠道ID
function getParentPromoteId($promoteId)
{
    $map['id'] = $promoteId;

    return D('Promote')->where($map)->getField('parent_id');
}

//获会长渠道ID
function getGrandPromoteId($promoteId)
{
    $model = D('Promote');
    $map['id'] = $promoteId;

    $data = $model->field('parent_id,chain,level')->where($map)->find();
    if (empty($data)) {
        return 0;
    }

    switch ($data['level']) {
        case 1:
            return $promoteId;
            break;
        case 2:
            return $data['parent_id'];
            break;
        case 3:
        case 4:
            $ids = explode('/', $data['chain']);
            return (isset($ids[1]) ? $ids[1] : 0);
            break;
    }
}

function getGamePermission($gameId)
{
    $gameData = M('Game', 'tab_')
        ->where(array('id' => $gameId))
        ->select();

    if (count($gameData) == 2) {
        $applyIdAnd = M('Apply', 'tab_')->where(array('game_id' => $gameData[0]['id']))->getField('id');
        $applyIdIos = M('Apply', 'tab_')->where(array('game_id' => $gameData[1]['id']))->getField('id');
    }

    if (empty($applyIdAnd) || empty($applyIdIos)) {
        return 1;
    } else {
        return 0;
    }
}

function isMinPromote($promoteId = PID)
{
    return D('Promote')->where(array('id' => $promoteId))->getField('grand_id');
}

//判断渠道游戏是否添加--安卓+ios
function addedAboutDoubleSdk($promoteId, $gameId)
{
    $promoteData = D('Promote')->where(array('id' => $promoteId))->find();
    $gameData = M('Game', 'tab_')->where(array('id' => $gameId))->find();

    $map['tab_game.relation_game_id'] = $gameData['relation_game_id'];
    if ($promoteData['parent_id'] == 0) {
        $count = M('Game', 'tab_')
            ->join('tab_apply on tab_game.id = tab_apply.game_id and tab_apply.offline_status = 0 and tab_apply.promote_id = ' . $promoteId)
            ->where($map)
            ->count();

        $added = ($count == 2) ? 1 : 0;
    } else {
        $applyData = M('Game', 'tab_')
            ->field('tab_game.id,ta_2.id as apply_id')
            ->join('tab_apply as ta_1 on tab_game.id = ta_1.game_id and ta_1.offline_status = 0 and ta_1.promote_id = ' . $promoteData['parent_id'])
            ->join('left join tab_apply as ta_2 on tab_game.id = ta_2.game_id and ta_2.offline_status = 0 and ta_2.promote_id = ' . $promoteId)
            ->where($map)
            ->select();

        $added = 0;
        $count = 0;
        foreach ($applyData as $list) {
            if ($list['apply_id'] > 0) {
                $count++;
            }
        }

        if ($count == count($applyData)) {
            $added = 1;
        }
    }

    return $added;
}

function hideStar($string, $start = 0, $length = 0, $re = '*')
{
    if (empty($string)) return false;
    $strarr = array();
    $mb_strlen = mb_strlen($string);
    while ($mb_strlen) {
        $strarr[] = mb_substr($string, 0, 1, 'utf8');
        $string = mb_substr($string, 1, $mb_strlen, 'utf8');
        $mb_strlen = mb_strlen($string);
    }
    $strlen = count($strarr);
    $begin = $start >= 0 ? $start : ($strlen - abs($start));
    $end = $last = $strlen - 1;
    if ($length > 0) {
        $end = $begin + $length - 1;
    } elseif ($length < 0) {
        $end -= abs($length);
    }
    for ($i = $begin; $i <= $end; $i++) {
        $strarr[$i] = $re;
    }
    if ($begin >= $end || $begin >= $last || $end > $last) return false;
    return implode('', $strarr);
}

//ios下载链接处理
function getIosDownloadLink($gameId, $promoteId)
{
    $downloadLink = get_apply_dow_url($gameId, $promoteId);
    $gameData = M('Game', 'tab_')->where(array('id' => $gameId))->find();

    if ($downloadLink == ('https://' . $_SERVER['HTTP_HOST']) || $gameData['dow_status'] == 0) {
        return ('https://' . $_SERVER['HTTP_HOST']);
    }

    $gameSourceData = M('GameSource', 'tab_')->where(array('game_id' => $gameId))->find();

    $data['game_id'] = $gameId;
    $data['promote_id'] = $promoteId;
    $data['download_link'] = $downloadLink;
    $data['game_icon'] = 'https://' . $_SERVER['HTTP_HOST'] . get_cover($gameData['icon'], 'path');
    $data['pack_name'] = $gameSourceData['pack_name'];
    $data['version'] = $gameSourceData['version'];
    $data['source_version'] = $gameSourceData['source_version'];
    $data['relation_game_name'] = $gameData['relation_game_name'];

    return getIosPlistFile($data);
}

function getIosPlistFile($data)
{
    $sourceVersion = empty($data['source_version']) ? 0 : $data['source_version'];
    $fileName = __DIR__ . '/../../../Plist/manifest_' . $data['game_id'] . '_' . $data['promote_id'] . '_' . $sourceVersion . '.plist';
    $fileUrl = 'https://' . $_SERVER['HTTP_HOST'] . '/Plist/manifest_' . $data['game_id'] . '_' . $data['promote_id'] . '_' . $sourceVersion . '.plist';
//    if (!file_exists($fileName)) {
//
//    }
    $obj['items'][0]['assets'][0] = [
        'kind' => 'software-package',
        'url' => $data['download_link'],
    ];
    $obj['items'][0]['assets'][1] = [
        'kind' => 'display-image',
        'url' => $data['game_icon'],
    ];
    $obj['items'][0]['assets'][2] = [
        'kind' => 'full-size-image',
        'url' => $data['game_icon'],
    ];
    $obj['items'][0]['metadata']['bundle-identifier'] = $data['bao_name'];
    $obj['items'][0]['metadata']['bundle-version'] = empty($data['version']) ? '1.0' : $data['version'];
    $obj['items'][0]['metadata']['kind'] = 'software';
    $obj['items'][0]['metadata']['title'] = $data['relation_game_name'];
    Vendor('XmlOperate.XmlOperate');
    $plist = new PropertyList($obj);
    $xml = $plist->xml();

    file_put_contents($fileName, $xml, LOCK_EX);

    return 'itms-services://?action=download-manifest&url=' . $fileUrl;
}

function getCoinTypeName($coinType)
{
    $coinTypeName = '';
    switch ($coinType) {
        case 1:
            $coinTypeName = '通用币';
            break;
        case 2:
            $coinTypeName = '绑定币';
            break;
    }

    return $coinTypeName;
}

function getCoinStatusName($status)
{
    $statusName = '';
    switch ($status) {
        case 1:
            $statusName = '正常';
            break;
        case 2:
            $statusName = '锁定';
            break;
        case 3:
            $statusName = '验证失败';
            break;
    }

    return $statusName;
}

function getCoinRecordTypeName($type = 0)
{
    if ($type == 0) {
        return PromoteCoinController::$type;
    } else {
        return PromoteCoinController::$type[$type];
    }
}

function getCoinRecordSubTypeName($type = 0)
{
    if ($type == 0) {
        return PromoteCoinController::$subType;
    } else {
        return PromoteCoinController::$subType[$type];
    }
}

function getCoinRecordHandleTypeName($type = 0)
{
    if ($type == 0) {
        return PromoteCoinController::$handleType;
    }
}

function promoteCan($promoteId, \Closure $callback)
{
    $level = get_promote_level(session('promote_auth.pid'));
    return $callback($level);
}

//获取下级游戏添加权限
function getChildGameAddPermission($promoteId)
{
    return D('Promote')->where(array('id' => $promoteId))->getField('child_game_permission');
}

function gameSearch($relationGameId, $sdkVersion)
{
    $map['_string'] = '1 = 1';
    if ($relationGameId != 0) {
        $map['relation_game_id'] = $relationGameId;
    }
    if ($sdkVersion != 0) {
        $map['sdk_version'] = $sdkVersion;
    }
    $gameIds = M('game', 'tab_')->where($map)->getField('id', true);
    $gameIds = $gameIds ?? [-1];

    return $gameIds;
}

function convertAmountToCn($num) {
    //判断$num是否存在
    if(!$num) return '零圆';
    //保留小数点后两位
    $num = round($num, 2);
    //将浮点转换为整数
    $tem_num = $num * 100;
    //判断数字长度
    $tem_num_len = strlen($tem_num);
    if($tem_num_len > 14) {
        return '数值过大';
    }

    //大写数字
    $dint = array('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖');
    //大写金额单位
    $danwei = array('仟', '佰', '拾', '亿', '仟', '佰', '拾', '万', '仟', '佰', '拾', '圆');
    $danwei1 = array('角', '分');

    //空的变量用来保存转换字符串
    $daxie = '';

    //分割数字,区分圆角分
    list($left_num, $right_num) = explode('.', $num);

    //计算单位长度
    $danwei_len = count($danwei);
    //计算分割后的字符串长度
    $left_num_len = strlen($left_num);
    $right_num_len = strlen($right_num);

    //循环计算亿万元等
    for($i = 0; $i < $left_num_len; $i++) {
        //循环单个文字
        $key_ = substr($left_num, $i, 1);

        //判断数字不等于0或数字等于0与金额单位为亿、万、圆,就返回完整单位的字符串
        if($key_ !== '0' || ($key_ == '0' && ($danwei[$danwei_len - $left_num_len + $i] == '亿' || $danwei[$danwei_len - $left_num_len + $i] == '万' || $danwei[$danwei_len - $left_num_len + $i] == '圆'))) {
            $daxie = $daxie . $dint[$key_] . $danwei[$danwei_len - $left_num_len + $i];
        } else {
            //否则就不含单位
            $daxie = $daxie . $dint[$key_];
        }
    }

    //循环计算角分
    for($i = 0; $i < $right_num_len; $i++) {
        $key_ = substr($right_num, $i, 1);
        if($key_ > 0) {
            $daxie = $daxie . $dint[$key_] . $danwei1[$i];
        }
    }

    //计算转换后的长度
    $daxie_len = strlen($daxie);
    //设置文字切片从0开始,utf-8汉字占3个字符
    $j = 0;
    while($daxie_len > 0) {
        //每次切片两个汉字
        $str = substr($daxie, $j, 6);
        //判断切片后的文字不等于零万、零圆、零亿、零零
        if($str == '零万' || $str == '零圆' || $str == '零亿' || $str == '零零') {
            //重新切片
            $left = substr($daxie, 0, $j);
            $right = substr($daxie, $j + 3);
            $daxie = $left . $right;
        }
        $j += 3;
        $daxie_len -= 3;
    }

    return $daxie . '整';
}

//记录工作人员相关操作日志
function recordPromoteLogs($module,$action_type) {
    $id = get_pid();
    $promoteInfo =  M("promote","tab_")->field('account')->where(['id'=>$id])->find();
    $promoteLogsData['action_type'] = $action_type;
    $promoteLogsData['module'] = $module;
    $promoteLogsData['promote'] = $promoteInfo['account'];
    $promoteLogsData['promote_id'] = $id;
    $promoteLogsData['ip'] = $_SERVER['REMOTE_ADDR'];
    $promoteLogsData['create_time'] = time();
    M('promote_action_logs','tab_')->add($promoteLogsData);

}

/**
 * 获取测试资源可用余额
 *      promote_id=>推广员id,
 *      game_id=>游戏id,
 */

function getAvailableBalance($promote_id=0,$game_id=0,$server_id='') {

    if (!$promote_id||!$game_id||!$server_id) {
        return 0;
    }

    $availableBalanceData = M('promote_game_available_balance','tab_')
        ->field('available_balance')
        ->where(['promote_id'=>$promote_id,'game_id'=>$game_id,'server_name'=>$server_id])
        ->find();

    return $availableBalanceData['available_balance']?$availableBalanceData['available_balance']:0;

}

/**
 * 获取同一个公司的会长
 *      $promoteType=>推广员等级,
 */

function getPromoteLists($promoteType = 1) {
    $map['level'] = $promoteType;
    $company = M('promote','tab_')->field("company_id")->where(['id'=>get_pid()])->find();

    $map['company_id'] = $company['company_id'];

    $data = M('promote','tab_')
        ->field('id,account,real_name')
        ->where($map)
        ->select();

    return $data;

}
/**
 * csv 导出函数
 * @param [array] $data 一般为数据库查询结果集
 * @param [string] $title 表格名称
 * @param [array] $fields [字段=>首行名称,...]例如:['name'=>'名称']
 * @return void
 */
function data2csv(&$data,$title,$fields){
    set_time_limit(0);
    ini_set('memory_limit', '-1'); //设置内存不受限制
    $csvFileName = $title.'.csv';
    //设置好告诉浏览器要下载excel文件的headers
    header('Content-Description: File Transfer');
    header('Content-Type: application/vnd.ms-excel;charset=utf-8');
    header('Content-Disposition: attachment; filename="'. $csvFileName .'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    $fp = fopen('php://output', 'a');//打开output流
    fwrite($fp, chr(0xEF).chr(0xBB).chr(0xBF));//转码,防止乱码
    $field = array_keys($fields);
    //生成首行
    $header = array_values($fields);
    fputcsv($fp, $header);

    $index = 0;
    foreach ($data as $row) {
        $a = [];
        foreach($field as $k=>$v){
            // $a[$v] = $row[$v] . "\t";//防止格式错误
            $a[$v] = $row[$v];
        }
        if ($index == 10000) { //每次写入1000条数据清除内存
            $index = 0;
            ob_flush();//清除内存
            flush();
        }
        $index++;
        fputcsv($fp, $a);
    }
    ob_flush();
    fclose($fp);  //每生成一个文件关闭
    die();
}

function is_active_menu(array $controllers, array $actions, \Closure $otherCondition = null)
{
    $controllerStatus = true;
    $actionStatus = true;
    $otherConditionStatus = true;
    if ($controllers && !in_array(CONTROLLER_NAME, $controllers)) {
        $controllerStatus = false;
    }
    if ($actions && !in_array(ACTION_NAME, $actions)) {
        $actionStatus = false;
    }
    if ($otherCondition) {
        $otherConditionStatus = $otherCondition();
    }
    if ($controllerStatus && $actionStatus && $otherConditionStatus) {
        return true;
    }
    return false;
}

function is_active_class(array $controllers, array $actions, \Closure $otherCondition = null)
{
    if (is_active_menu($controllers, $actions, $otherCondition)) {
        return 'active';
    }
    return '';
}