def get_table(search_start_date, server_id):
    """
        获取表格
    """
    # 获取搜索区间日志
    new_log_dict = dat_log_util.read_file_dict_with_filename(
        "USER_GENERATE_GOLD", search_start_date, server_id)
    total_generate = new_log_dict.get('total_generate', 0)  # 总产出
    total_cost = new_log_dict.get('total_cost', 0)  # 总消耗
    actions = new_log_dict.get('actions', set())

    row_generate = [
        "0总产出",
        str(total_generate),
        str(get_rate(total_generate, total_generate) * 100) + "%"
    ]
    row_cost = [
        "0总消耗",
        str(total_cost),
        str(get_rate(total_cost, total_cost) * 100) + "%"
    ]
    table_lst = [row_generate, row_cost]
    for action in actions:
        row_lst = []
        action_cost = new_log_dict.get(action, 0)
        row_lst.append(game_define.EVENT_LOG_ACTION_DICT[action])
        row_lst.append(str(action_cost))
        row_lst.append(str(get_rate(action_cost, total_generate) * 100) + "%")
        table_lst.append(row_lst)

    return table_lst
def get_cost_gold_table(search_start_date, server_id):
    """
        获取展示表格
        register_start_date 注册开始时间
        register_end_date 注册结束时间
        search_start_date 查询开始时间
        search_end_date 查询结束时间
    """
    # 获取搜索区间日志
    new_log_dict = dat_log_util.read_file_dict_with_filename("DAILY_CONSUME_DISTRIBUTED_GOLD",search_start_date, server_id)
    # 今天登录设备数
    date_str = "_"+search_start_date.strftime('%Y%m%d')
    today_device_num = mysql_util.get_today_num('dev_id','EVENT_ACTION_ROLE_LOGIN'+str(date_str),search_start_date,game_define.EVENT_ACTION_ROLE_LOGIN)
    actions = new_log_dict.get("actions", set())
    table_lst =[]
    for _action in actions:
        action_name = game_define.EVENT_LOG_ACTION_DICT[_action]
        action_generate_stone = -new_log_dict.get('action_%s_gold' % _action, 0)
        user_num = new_log_dict.get('action_%s_user_num' % _action, 0)
        action_cost_num = new_log_dict.get('action_%s_log_num'% _action, 0)
        action_stone_rate = -new_log_dict.get('action_%s_gold_rate'% _action, 0)
        cur_user_num_rate = new_log_dict.get('action_%s_user_rate' % _action, 0)
        take_part_rate = _get_rate(user_num, today_device_num)

        row = [action_name, action_generate_stone, user_num, action_cost_num, str(take_part_rate * 100)+"%", str(action_stone_rate * 100)+"%", str(cur_user_num_rate * 100)+"%"]
        table_lst.append(row)
    return table_lst
def get_table(search_start_date, server_id):
    # 获取搜索区间日志
    new_log_dict = dat_log_util.read_file_dict_with_filename("USER_HOLD_GOLD", search_start_date, server_id, 'tables')
    total_gold = str(new_log_dict.get('total_gold',0))
    total_user = str(new_log_dict.get('total_user',0))
    active_user = str(new_log_dict.get('active_user',0))

    row_lst = [[search_start_date.strftime('%m/%d/%Y'), total_gold, total_user, active_user]]
    return row_lst
Example #4
0
def get_table(search_start_date, server_id):
    # 获取搜索区间日志
    new_log_dict = dat_log_util.read_file_dict_with_filename("USER_HOLD_STONE", search_start_date, server_id, 'tables')
    total_gold = str(new_log_dict.get('total_stone',0))
    total_user = str(new_log_dict.get('total_user',0))
    active_user = str(new_log_dict.get('active_user',0))

    row_lst = [[search_start_date.strftime('%m/%d/%Y'), total_gold, total_user, active_user]]
    return row_lst
def get_table(search_start_date, server_id):
    """
        获取展示表格
        register_start_date 注册开始时间
        register_end_date 注册结束时间
        search_start_date 查询开始时间
        search_end_date 查询结束时间
    """
    # 获取搜索区间日志
    new_log_dict = dat_log_util.read_file_dict_with_filename(
        "USER_STONE_CONSUME", search_start_date, server_id)
    # print(new_log_dict)
    # if channel_id >= 0:
    #     new_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda x: x['platform_id'] == channel_id)
    # if server_id >= 0:
    #     new_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda x: x['server_id'] == server_id)
    # #获取符合条件的日志
    # if register_start_date and register_end_date:
    #     new_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda log: register_start_date <= log['install'] <= register_end_date)

    # 获取所有钻石消耗的日志
    # cost_stone_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda log: 'cost_stone' in log)
    # level_log_dict = get_user_level_dict(cost_stone_log_lst)
    table_result = []
    for _lv in xrange(1, 121):
        # print("--------------------"+str(_lv) + "--------------------")
        row = []
        # print(""+str(new_log_dict.get('level_total_cost_%s' % _lv,0)))
        sum_cost_stone = new_log_dict.get('level_total_cost_%s' % _lv, 0)
        cur_lv_num = new_log_dict.get('level_user_cost_num_%s' % _lv, 0)
        #到达人数
        arrive_user_num = new_log_dict.get('level_user_arrive_%s' % _lv, 0)
        level_arppu = new_log_dict.get('level_arppu_%s' % _lv, 0)
        # 等级
        row.append(str(_lv))
        # 消耗人数
        row.append(str(cur_lv_num))
        # 消耗数量
        row.append(str(sum_cost_stone))
        # 到达人数
        row.append(arrive_user_num)
        # 等级消耗ARPPU
        row.append(str(level_arppu))
        # 等级消耗率
        if arrive_user_num == 0:
            row.append(str(0) + "%")
        else:
            row.append(
                str(
                    round(float(cur_lv_num) / float(arrive_user_num), 2) *
                    100) + "%")
        # row = [_lv, action_total_cost_stone, user_num, action_cost_num, take_part_rate, first_cost_stone_rate, cur_user_num_rate]
        # print("row: "+str(row))
        table_result.append(row)

    return table_result
Example #6
0
def get_table(search_end_date, register_start_date=None, register_end_date=None, server_id=-1):
    """
        获取展示表格
        register_start_date 注册开始时间
        register_end_date 注册结束时间
        search_start_date 查询开始时间
        search_end_date 查询结束时间
    """
    # new_log_lst = {}
    new_log_lst = dat_log_util.read_file_dict_with_filename("USER_DETAIL",search_end_date,server_id, 'tables')

    # sql = "SELECT * FROM USER_LEVEL_LOST_STATE"
    # result = mysql_util.query(sql)
    user_num_dict = dict()
    lost_user_num_dict = dict()
    arrive_user_num = dict()
    for dat in new_log_lst.values():
        cur_lv = dat['level']
        if register_start_date and register_end_date:
            if dat['last_play_time'].date() < (search_end_date - datetime.timedelta(days=3)) and register_start_date <= dat['install'] <= register_end_date:
                lost_user_num_dict[cur_lv] = lost_user_num_dict.get(cur_lv, 0) + 1
            if register_start_date <= dat['install'] <= register_end_date:
                user_num_dict[cur_lv] = user_num_dict.get(cur_lv, 0) + 1
        else:
            if dat['last_play_time'].date() < (search_end_date - datetime.timedelta(days=3)):
                lost_user_num_dict[cur_lv] = lost_user_num_dict.get(cur_lv, 0) + 1
            user_num_dict[cur_lv] = user_num_dict.get(cur_lv, 0) + 1

    for _table_lv in xrange(1, 121):
        if register_start_date and register_end_date:
            arrive_num = sum([user_num_dict.get(lv, 0) for lv in xrange(_table_lv, 121)])
            arrive_user_num[_table_lv] = arrive_num
        else:
            arrive_num = sum([user_num_dict.get(lv, 0) for lv in xrange(_table_lv, 121)])
            arrive_user_num[_table_lv] = arrive_num

    # 遍历全部等级
    table_row_lst = []
    for _table_lv in xrange(1, 121):
        # 停留人数
        user_num = user_num_dict.get(_table_lv, 0)
        # 流失人数
        lost_num = lost_user_num_dict.get(_table_lv, 0)
        # 留存人数
        stand_num = user_num - lost_num
        # 到达等级人数
        arrive_num = arrive_user_num[_table_lv]
        # 等级流失率
        level_lost_rate = str(_get_level_lost_rate(lost_num, arrive_num) * 100) + "%"
        # 等级	停留人数	留存人数	流失人数	到达人数	等级流失率
        content = [_table_lv, user_num, stand_num, lost_num, arrive_num, level_lost_rate]
        table_row_lst.append(content)
    return table_row_lst
def get_table(search_start_date, server_id):
    """
        获取展示表格
        register_start_date 注册开始时间
        register_end_date 注册结束时间
        search_start_date 查询开始时间
        search_end_date 查询结束时间
    """
    # 获取搜索区间日志
    new_log_dict = dat_log_util.read_file_dict_with_filename("USER_STONE_CONSUME",search_start_date, server_id)
    # print(new_log_dict)
    # if channel_id >= 0:
    #     new_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda x: x['platform_id'] == channel_id)
    # if server_id >= 0:
    #     new_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda x: x['server_id'] == server_id)
    # #获取符合条件的日志
    # if register_start_date and register_end_date:
    #     new_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda log: register_start_date <= log['install'] <= register_end_date)

    # 获取所有钻石消耗的日志
    # cost_stone_log_lst = daily_log_dat.filter_logs(new_log_lst, function=lambda log: 'cost_stone' in log)
    # level_log_dict = get_user_level_dict(cost_stone_log_lst)
    table_result = []
    for _lv in xrange(1, 121):
        # print("--------------------"+str(_lv) + "--------------------")
        row = []
        # print(""+str(new_log_dict.get('level_total_cost_%s' % _lv,0)))
        sum_cost_stone= new_log_dict.get('level_total_cost_%s' % _lv,0)
        cur_lv_num= new_log_dict.get('level_user_cost_num_%s' % _lv,0)
        #到达人数
        arrive_user_num =  new_log_dict.get('level_user_arrive_%s' % _lv,0)
        level_arppu = new_log_dict.get('level_arppu_%s' % _lv,0)
        # 等级
        row.append(str(_lv))
        # 消耗人数
        row.append(str(cur_lv_num))
        # 消耗数量
        row.append(str(sum_cost_stone))
        # 到达人数
        row.append(arrive_user_num)
        # 等级消耗ARPPU
        row.append(str(level_arppu))
        # 等级消耗率
        if arrive_user_num == 0:
            row.append(str(0) + "%")
        else:
            row.append(str(round(float(cur_lv_num) / float(arrive_user_num), 2) * 100) + "%")
        # row = [_lv, action_total_cost_stone, user_num, action_cost_num, take_part_rate, first_cost_stone_rate, cur_user_num_rate]
        # print("row: "+str(row))
        table_result.append(row)

    return table_result
Example #8
0
def get_table(search_start_date, server_id):
    """
        获取表格
    """
    # 获取搜索区间日志
    new_log_dict = dat_log_util.read_file_dict_with_filename(
        "USER_GENERATE_STONE", search_start_date, server_id)
    # head_name_lst = []
    total_generate = new_log_dict.get('total_generate', 0)
    total_cost = new_log_dict.get('total_cost', 0)
    actions = new_log_dict.get('actions', set())
    # 获取消耗
    # row_lst = [
    #     search_start_date.strftime('%m/%d/%Y'),
    #     str(total_generate),
    #     str(total_cost),
    # ]
    # for action in actions:
    #     action_cost = new_log_dict.get(action, 0)
    #     head_name_lst.append(game_define.EVENT_LOG_ACTION_DICT[action])
    #     row_lst.append(str(action_cost))

    ###新增比率部分
    # row_lst_two = ['比率', str(get_rate(total_generate, total_generate) * 100) + "%",
    #                str(get_rate(total_cost, total_cost) * 100) + "%"]
    # for action in actions:
    #     action_cost = new_log_dict.get(action, 0)
    #     row_lst_two.append(str(get_rate(action_cost, total_generate) * 100) + "%")
    #
    # row_sum_lst = [row_lst, row_lst_two]

    row_generate = [
        "0总产出",
        str(total_generate),
        str(get_rate(total_generate, total_generate) * 100) + "%"
    ]
    row_cost = [
        "0总消耗",
        str(total_cost),
        str(get_rate(total_cost, total_cost) * 100) + "%"
    ]
    table_lst = [row_generate, row_cost]
    for action in actions:
        row_lst = []
        action_cost = new_log_dict.get(action, 0)
        row_lst.append(game_define.EVENT_LOG_ACTION_DICT[action])
        row_lst.append(str(action_cost))
        row_lst.append(str(get_rate(action_cost, total_generate) * 100) + "%")
        table_lst.append(row_lst)

    return table_lst
Example #9
0
def get_table(search_start_date, server_id=-1):
    """
        获取展示表格
        register_start_date 注册开始时间
        register_end_date 注册结束时间
        search_start_date 查询开始时间
        search_end_date 查询结束时间
    """
    new_log_lst = dat_log_util.read_file_dict_with_filename(
        "USER_DETAIL", search_start_date, server_id, 'tables')
    user_num_dict = dict()
    lost_user_num_dict = dict()
    for dat in new_log_lst.values():
        cur_lv = dat['level']
        if search_start_date == dat['install']:
            user_num_dict[cur_lv] = user_num_dict.get(cur_lv, 0) + 1
        #这里再查第二天的new_log_lst
        if search_start_date == dat['install'] and dat['last_play_time'].date(
        ) == dat['install']:
            lost_user_num_dict[cur_lv] = lost_user_num_dict.get(cur_lv, 0) + 1

    num_total = 0
    for _table_lv in xrange(1, 121):
        num_total += user_num_dict.get(_table_lv, 0)

    # 遍历全部等级
    table_row_lst = []
    for _table_lv in xrange(1, 121):
        # 停留人数
        user_num = user_num_dict.get(_table_lv, 0)
        # 流失人数
        lost_num = lost_user_num_dict.get(int(_table_lv), 0)

        # 留存人数
        stand_num = user_num - lost_num

        # 等级比率
        level_rate = str(_get_rate(user_num, num_total) * 100) + "%"
        # 留存人数比率
        level_lost_rate = str(_get_rate(stand_num, num_total) * 100) + "%"
        #todo:
        # if _t
        # 等级	停留人数	留存人数比率	等级流存率
        content = [_table_lv, user_num, level_rate, level_lost_rate]
        table_row_lst.append(content)

    return table_row_lst
def get_table(search_start_date, server_id=-1):
    """
        获取展示表格
        register_start_date 注册开始时间
        register_end_date 注册结束时间
        search_start_date 查询开始时间
        search_end_date 查询结束时间
    """
    new_log_lst = dat_log_util.read_file_dict_with_filename("USER_DETAIL",search_start_date,server_id,'tables')
    user_num_dict = dict()
    lost_user_num_dict = dict()
    for dat in new_log_lst.values():
        cur_lv = dat['level']
        if search_start_date == dat['install']:
            user_num_dict[cur_lv] = user_num_dict.get(cur_lv, 0) + 1
        #这里再查第二天的new_log_lst
        if search_start_date == dat['install'] and dat['last_play_time'].date() == dat['install']:
            lost_user_num_dict[cur_lv] = lost_user_num_dict.get(cur_lv, 0) + 1

    num_total = 0
    for _table_lv in xrange(1, 121):
        num_total += user_num_dict.get(_table_lv, 0)

    # 遍历全部等级
    table_row_lst = []
    for _table_lv in xrange(1, 121):
        # 停留人数
        user_num = user_num_dict.get(_table_lv, 0)
        # 流失人数
        lost_num = lost_user_num_dict.get(int(_table_lv), 0)

        # 留存人数
        stand_num = user_num - lost_num

        # 等级比率
        level_rate = str(_get_rate(user_num, num_total)* 100) + "%"
        # 留存人数比率
        level_lost_rate = str(_get_rate(stand_num , num_total) * 100) + "%"
        #todo:
        # if _t
        # 等级	停留人数	留存人数比率	等级流存率
        content = [_table_lv, user_num, level_rate, level_lost_rate]
        table_row_lst.append(content)

    return table_row_lst
def get_table(search_start_date, server_id):
    """
        获取表格
    """
    # 获取搜索区间日志
    new_log_dict = dat_log_util.read_file_dict_with_filename("USER_GENERATE_STONE", search_start_date, server_id)
    # head_name_lst = []
    total_generate = new_log_dict.get('total_generate', 0)
    total_cost = new_log_dict.get('total_cost', 0)
    actions = new_log_dict.get('actions', set())
    # 获取消耗
    # row_lst = [
    #     search_start_date.strftime('%m/%d/%Y'),
    #     str(total_generate),
    #     str(total_cost),
    # ]
    # for action in actions:
    #     action_cost = new_log_dict.get(action, 0)
    #     head_name_lst.append(game_define.EVENT_LOG_ACTION_DICT[action])
    #     row_lst.append(str(action_cost))

    ###新增比率部分
    # row_lst_two = ['比率', str(get_rate(total_generate, total_generate) * 100) + "%",
    #                str(get_rate(total_cost, total_cost) * 100) + "%"]
    # for action in actions:
    #     action_cost = new_log_dict.get(action, 0)
    #     row_lst_two.append(str(get_rate(action_cost, total_generate) * 100) + "%")
    #
    # row_sum_lst = [row_lst, row_lst_two]

    row_generate = ["0总产出", str(total_generate), str(get_rate(total_generate, total_generate) * 100) + "%"]
    row_cost = ["0总消耗", str(total_cost), str(get_rate(total_cost, total_cost) * 100) + "%"]
    table_lst = [row_generate, row_cost]
    for action in actions:
        row_lst = []
        action_cost = new_log_dict.get(action, 0)
        row_lst.append(game_define.EVENT_LOG_ACTION_DICT[action])
        row_lst.append(str(action_cost))
        row_lst.append(str(get_rate(action_cost, total_generate) * 100) + "%")
        table_lst.append(row_lst)

    return table_lst
Example #12
0
def get_table(search_start_date, server_id):
    """
        获取展示表格
        register_start_date 注册开始时间
        register_end_date 注册结束时间
        search_start_date 查询开始时间
        search_end_date 查询结束时间
    """
    # 获取搜索区间日志
    new_log_dict = dat_log_util.read_file_dict_with_filename(
        "USER_GOLD_CONSUME", search_start_date, server_id)
    table_result = []

    for _lv in xrange(1, 121):
        row = []
        sum_cost_stone = new_log_dict.get('level_total_cost_%s' % _lv, 0)
        cur_lv_num = new_log_dict.get('level_user_cost_num_%s' % _lv, 0)
        #到达人数
        arrive_user_num = new_log_dict.get('level_user_arrive_%s' % _lv, 0)
        level_arppu = new_log_dict.get('level_arppu_%s' % _lv, 0)
        # 等级
        row.append(_lv)
        # 消耗人数
        row.append(str(cur_lv_num))
        # 消耗数量
        row.append(str(sum_cost_stone))
        # 到达人数
        row.append(arrive_user_num)
        # 等级消耗ARPPU
        row.append(str(level_arppu))
        # 等级消耗率
        if arrive_user_num == 0:
            row.append(str(0) + "%")
        else:
            row.append(
                str(
                    round(float(cur_lv_num) / float(arrive_user_num), 2) *
                    100) + "%")
        table_result.append(row)
    return table_result
Example #13
0
def get_cost_stone_table(search_start_date, server_id):
    """
        获取展示表格
        register_start_date 注册开始时间
        register_end_date 注册结束时间
        search_start_date 查询开始时间
        search_end_date 查询结束时间
    """
    # 获取搜索区间日志
    new_log_dict = dat_log_util.read_file_dict_with_filename(
        "DAILY_CONSUME_DISTRIBUTED_STONE", search_start_date, server_id)
    # print new_log_dict
    # 今天登录设备数
    date_str = "_" + search_start_date.strftime('%Y%m%d')
    today_device_num = mysql_util.get_today_num(
        'dev_id', 'EVENT_ACTION_ROLE_LOGIN' + str(date_str), search_start_date,
        game_define.EVENT_ACTION_ROLE_LOGIN)
    actions = new_log_dict.get("actions", set())
    table_lst = []
    for _action in actions:
        action_name = game_define.EVENT_LOG_ACTION_DICT[_action]
        action_generate_stone = -new_log_dict.get('action_%s_stone' % _action,
                                                  0)
        user_num = new_log_dict.get('action_%s_user_num' % _action, 0)
        action_cost_num = new_log_dict.get('action_%s_log_num' % _action, 0)
        action_stone_rate = -new_log_dict.get('action_%s_stone_rate' % _action,
                                              0)
        cur_user_num_rate = new_log_dict.get('action_%s_user_rate' % _action,
                                             0)
        take_part_rate = _get_rate(user_num, today_device_num)

        row = [
            action_name, action_generate_stone, user_num, action_cost_num,
            str(take_part_rate * 100) + "%",
            str(action_stone_rate * 100) + "%",
            str(cur_user_num_rate * 100) + "%"
        ]
        table_lst.append(row)
    return table_lst
def get_table(search_start_date, server_id):
    """
        获取表格
    """
    # 获取搜索区间日志
    new_log_dict = dat_log_util.read_file_dict_with_filename("USER_GENERATE_GOLD", search_start_date, server_id)
    total_generate = new_log_dict.get('total_generate', 0)  # 总产出
    total_cost = new_log_dict.get('total_cost', 0)  # 总消耗
    actions = new_log_dict.get('actions', set())

    row_generate = ["0总产出", str(total_generate), str(get_rate(total_generate, total_generate) * 100) + "%"]
    row_cost = ["0总消耗", str(total_cost), str(get_rate(total_cost, total_cost) * 100) + "%"]
    table_lst = [row_generate, row_cost]
    for action in actions:
        row_lst = []
        action_cost = new_log_dict.get(action, 0)
        row_lst.append(game_define.EVENT_LOG_ACTION_DICT[action])
        row_lst.append(str(action_cost))
        row_lst.append(str(get_rate(action_cost, total_generate) * 100) + "%")
        table_lst.append(row_lst)

    return table_lst
def get_table(search_start_date, server_id):
    """
        获取展示表格
        register_start_date 注册开始时间
        register_end_date 注册结束时间
        search_start_date 查询开始时间
        search_end_date 查询结束时间
    """
    # 获取搜索区间日志
    new_log_dict = dat_log_util.read_file_dict_with_filename("USER_GOLD_CONSUME",search_start_date, server_id)
    table_result = []

    for _lv in xrange(1, 121):
        row = []
        sum_cost_stone= new_log_dict.get('level_total_cost_%s' % _lv,0)
        cur_lv_num= new_log_dict.get('level_user_cost_num_%s' % _lv,0)
        #到达人数
        arrive_user_num =  new_log_dict.get('level_user_arrive_%s' % _lv,0)
        level_arppu = new_log_dict.get('level_arppu_%s' % _lv,0)
        # 等级
        row.append(_lv)
           # 消耗人数
        row.append(str(cur_lv_num))
        # 消耗数量
        row.append(str(sum_cost_stone))
        # 到达人数
        row.append(arrive_user_num)
        # 等级消耗ARPPU
        row.append(str(level_arppu))
        # 等级消耗率
        if arrive_user_num == 0:
            row.append(str(0) + "%")
        else:
            row.append(str(round(float(cur_lv_num) / float(arrive_user_num), 2) * 100) + "%")
        table_result.append(row)
    return table_result
Example #16
0
def get_table(search_start_date, search_end_date, register_start_date=None, register_end_date=None, channel_id=-1,
              server_id=-1):
    """
        获取各等级充值状况表格
    """
    # 获取搜索区间日志
    now_date = datetime.date.today()
    if search_end_date >= now_date:
        search_end_date = search_end_date-datetime.timedelta(days=1)
    total_recharge_log_lst = []
    total_days = (search_end_date - search_start_date).days + 1
    for i in xrange(total_days):
        search_date = search_start_date + datetime.timedelta(days=i)
        date_str = "_" + search_date.strftime('%Y%m%d')
        recharge_log_lst = mysql_util.get_role_action_lst('EVENT_ACTION_RECHARGE_PLAYER' + str(date_str), search_date,
                                                          search_date, channel_id, server_id, register_start_date,
                                                          register_end_date)
        total_recharge_log_lst.extend(recharge_log_lst)

    channel_server_str = ""
    if channel_id >= 0:
        channel_server_str += "platform_id = " + str(channel_id) + " and "
    if server_id >= 0:
        channel_server_str += " server_id = " + str(server_id) + " and "
    if register_start_date:
        channel_server_str += "  '%s' <= install and " % register_start_date
    if register_end_date:
        channel_server_str += " install  <= '%s'  " % register_end_date

    # if channel_server_str:
    #     sql = "SELECT * FROM user_detail WHERE %s " % channel_server_str
    # else:
    #     sql = "SELECT * FROM user_detail"
    # print sql
    # result = mysql_util.query(sql)
    # if channel_server_str:
    old_log_dict = dat_log_util.read_file_dict_with_filename("USER_DETAIL", search_end_date, server_id, 'tables')
    if register_start_date and register_end_date:
        new_log_dict = dict()
        for uid, detail in old_log_dict.items():
            if register_start_date <= detail['install'] <= register_end_date:
                new_log_dict[uid] = detail
    else:
        new_log_dict = old_log_dict

    user_num_dict = dict()
    lost_user_num_dict = dict()
    arrive_user_num = dict()
    for dat in new_log_dict.values():
        cur_lv = dat['level']
        user_num_dict[cur_lv] = user_num_dict.get(cur_lv, 0) + 1
        if dat['last_play_time'].date() < (search_end_date - datetime.timedelta(days=3)):
            lost_user_num_dict[cur_lv] = lost_user_num_dict.get(cur_lv, 0) + 1

    for _table_lv in xrange(1, 121):
        arrive_num = sum([user_num_dict.get(lv, 0) for lv in xrange(_table_lv, 121)])
        arrive_user_num[_table_lv] = arrive_num

    # 获取所有等级停留人数
    table_row_lst = []
    for _table_lv in xrange(1, 121):
        level_recharge_lst = daily_log_dat.get_recharge_lst_with_user_level(total_recharge_log_lst, _table_lv)
        recharge_uid_lst = daily_log_dat.get_user_uid_lst(level_recharge_lst)
        # 停留人数
        user_num = user_num_dict.get(_table_lv, 0)
        # 流失人数
        lost_num = lost_user_num_dict.get(_table_lv, 0)
        # 留存人数
        stand_num = user_num - lost_num
        # 到达等级人数
        arrive_num = arrive_user_num[_table_lv]
        # 充值金额
        recharge_money = daily_log_dat.get_recharge_total_money(level_recharge_lst)
        # 充值次数
        recharge_num = len(level_recharge_lst)
        # 充值人数
        recharge_user_num = len(recharge_uid_lst)
        # 等级付费率
        level_pay_rate = _get_level_pay_rate(recharge_user_num, arrive_num)
        # 等级流失率 流失人数/到达人数
        level_lost_rate = _get_level_lost_rate(lost_num, arrive_num)

        content = [_table_lv, user_num, stand_num, lost_num, arrive_num, recharge_money, recharge_num,
                   recharge_user_num, str(level_pay_rate * 100) + "%", str(level_lost_rate * 100) + "%"]
        table_row_lst.append(content)

    return table_row_lst