# coding:utf-8
import os
# from log import Log
# log_ = Log()


class BaseConfig(object):
    # 产品标识
    APP_TYPE = {
        'VLOG': 0,  # vlog
        'LOVE_LIVE': 4,  # 票圈视频
        'LONG_VIDEO': 5,  # 内容精选
        'SHORT_VIDEO': 6,  # 票圈短视频
        'WAN_NENG_VIDEO': 17,  # 万能影视屋(信仰之路)
        'LAO_HAO_KAN_VIDEO': 18,  # 老好看视频
        'ZUI_JING_QI': 19,  # 票圈最惊奇
        'APP': 13,  # 票圈视频APP
        'PIAO_QUAN_VIDEO_PLUS': 21,  # 票圈视频+
        'JOURNEY': 22,  # 票圈足迹
        'BLESSING_YEAR': 3,  # 票圈福年
    }
    # 数据存放路径
    DATA_DIR_PATH = './data'

    # oss 目标Bucket
    BUCKET_NAME = 'ali-recommend'

    # ODPS服务配置
    ODPS_CONFIG = {
        'ENDPOINT': 'http://service.cn.maxcompute.aliyun.com/api',
        'ACCESSID': 'LTAIWYUujJAm7CbH',
        'ACCESSKEY': 'RfSjdiWwED1sGFlsjXv0DlfTnZTG1P',
    }

    # 飞书机器人配置
    FEISHU_ROBOT = {
        'server_robot': {
            # webhook地址
            'webhook': 'https://open.feishu.cn/open-apis/bot/v2/hook/8de4de35-30ed-4692-8854-7a154e89b2f2',
            # 自定义关键词key_word
            'key_word': '服务报警'
        },
        'feature_monitor_robot': {
            'webhook': 'https://open.feishu.cn/open-apis/bot/v2/hook/0ca66b89-5e2b-4e89-a04a-a01fda31cc89',
            'key_word': 'ROV特征监控'
        },
        'ad_threshold_auto_update_robot': {
            'webhook': 'https://open.feishu.cn/open-apis/bot/v2/hook/f2494511-18b8-4fa9-8073-91a089dd4bf3',
            'key_word': '广告模型阈值调整'
        },
        'ad_user_group_update_robot': {
            'webhook': 'https://open.feishu.cn/open-apis/bot/v2/hook/d7b29139-0656-4ec6-988e-ef593556795e',
            'key_word': '用户分组数据更新'
        },
        'ad_video_update_robot': {
            'webhook': 'https://open.feishu.cn/open-apis/bot/v2/hook/f9f6c242-c378-4dc9-8ec1-9c55dbd7fac9',
            'key_word': '广告视频数据更新'
        },
        'ad_threshold_update_robot': {
            'webhook': 'https://open.feishu.cn/open-apis/bot/v2/hook/85861132-939e-4ba7-802b-b1ba32602173',
            'key_word': '广告模型阈值更新'
        }
    }

    # 训练数据截止时间距当前日期间隔天数
    TRAIN_DIFF = 7
    # 训练数据所需数据范围天数
    TRAIN_DELTA_DAYS = 30
    # 训练数据表名
    TRAIN_PROJECT = 'usercdm'
    TRAIN_TABLE = 'rov_feature_add_v1'
    # 训练数据文件存放路径
    TRAIN_DATA_FILENAME = 'train_data.pickle'

    # 预测数据截止时间距当前日期间隔天数
    PREDICT_DIFF = 1
    # 预测数据所需数据范围天数
    PREDICT_DELTA_DAYS = 1
    # 预测数据表名
    PREDICT_PROJECT = 'usercdm'
    PREDICT_TABLE = 'rov_predict_table_add_v1'
    # 预测数据文件存放路径
    PREDICT_DATA_FILENAME = 'predict_data.pickle'

    # 模型存放文件
    MODEL_FILENAME = 'model.pickle'

    # 运营给定App小时级更新数据表名
    APP_OP_PROJECT = 'loghubods'
    APP_OP_TABLE = 'category_video_list_test1'

    # 小程序小时级规则参数
    RULE_PARAMS = {
        # 'rule1': {'return_count': 20, 'score_rule': 0.005, 'platform_return_rate': 0.001},
        # 'rule2': {'return_count': 20, 'score_rule': 0.001},  # 下线
        # 'rule3': {'view_type': 'pre-view', 'return_count': 20, 'score_rule': 0.005, 'platform_return_rate': 0.001},
        # 'rule4': {'cal_score_func': 2, 'return_count': 20, 'score_rule': 0},  # 下线
        # 'rule5': {'cal_score_func': 3, 'return_count': 20, 'score_rule': 0},  # 下线
        'rule6': {'view_type': 'video-show', 'return_count': 20, 'score_rule': 0.005, 'platform_return_rate': 0.001},
    }

    # app_type: [18, 19]预测表名
    PREDICT_PROJECT_18_19 = {
        '18': 'loghubods',  # 老好看
        '19': 'loghubods',  # 最惊奇
    }
    PREDICT_TABLE_18_19 = {
        '18': 'haokan_video_list_each_hour_update',  # 老好看
        '19': 'amazed_video_list_each_hour_update',  # 最惊奇
    }
    # 预测数据文件存放路径
    PREDICT_DATA_FILENAME_18_19 = {
        '18': 'predict_data_18.pickle',
        '19': 'predict_data_19.pickle'
    }

    # 天级规则更新使用数据
    PROJECT_DAY = 'loghubods'
    TABLE_DAY = 'video_data_each_day_dataset'

    # 小程序天级规则参数
    RULE_PARAMS_DAY = {
        # 'rule1': {'return_count': 200},
        'rule2': {'cal_score_func': 2, 'return_count': 100, 'platform_return_rate': 0.001},
    }

    REGION_CODE = {
        '北京': '110000', '天津': '120000', '河北省': '130000', '山西省': '140000', '内蒙古': '150000',
        '辽宁省': '210000', '吉林省': '220000', '黑龙江省': '230000',
        '上海': '310000', '江苏省': '320000', '浙江省': '330000', '安徽省': '340000', '福建省': '350000', '江西省': '360000', '山东省': '370000',
        '河南省': '410000', '湖北省': '420000', '湖南省': '430000', '广东省': '440000', '广西': '450000', '海南省': '460000',
        '重庆': '500000',  '四川省': '510000', '贵州省': '520000', '云南省': '530000', '西藏': '540000',
        '陕西省': '610000', '甘肃省': '620000', '青海省': '630000', '宁夏': '640000', '新疆': '650000',
        '台湾省': '710000', '香港': '810000', '澳门': '820000',
        'None': '-1'
    }

    CITY_CODE = {
        '广州': '440100', '深圳': '440300', '成都': '510100', '长沙': '430100',
    }

    REGION_CITY_MAPPING = {
        REGION_CODE['广东省']: [CITY_CODE['广州'], CITY_CODE['深圳'], ],
        REGION_CODE['四川省']: [CITY_CODE['成都'], ],
        REGION_CODE['湖南省']: [CITY_CODE['长沙'], ]
    }

    # 地域分组天级规则更新使用数据
    PROJECT_REGION_DAY = 'loghubods'
    TABLE_REGION_DAY = 'video_each_day_update_province'

    # 地域分组天级规则参数
    RULE_PARAMS_REGION_DAY = {
        'rule1': {'view_type': 'pre-view', 'return_count': 21, 'score_rule': 0},
    }

    # 本山祝福视频列表,在北京+重庆+无地域划分表中屏蔽
    PROJECT_BENSHAN_ZHUFU = 'loghubods'
    TABLE_BENSHAN_ZHUFU = 'benshanzhufu_videolist'
    # 本山祝福视频redis存储key
    BENSHAN_ZHUFU_KEY_NAME = 'benshanzf:videos'
    # 小年糕视频列表,在北京+无地域划分表中屏蔽
    PROJECT_XNG = 'loghubods'
    TABLE_XNG = 'xng_videos'
    # 小年糕视频redis存储key
    XNG_KEY_NAME = 'xng:videos'
    # 特殊地区屏蔽危险视频列表,在广州+深圳+成都+无地域划分表中屏蔽
    PROJECT_SPECIAL_AREA_LIMIT = 'loghubods'
    TABLE_SPECIAL_AREA_LIMIT = 'special_area_recommend_limit'
    # 特殊地区屏蔽危险视频redis存储key
    SPECIAL_AREA_LIMIT_KEY_NAME = 'special:area:limit:videos'
    # 屏蔽视频配置 key:region_code, value:videos key list
    SHIELD_CONFIG = {
        REGION_CODE['北京']: [XNG_KEY_NAME, ],
        REGION_CODE['None']: [XNG_KEY_NAME, ],
    }
    # 屏蔽视频配置实验组
    SHIELD_CONFIG2 = {
        REGION_CODE['北京']: [XNG_KEY_NAME, SPECIAL_AREA_LIMIT_KEY_NAME, ],
        REGION_CODE['None']: [SPECIAL_AREA_LIMIT_KEY_NAME, XNG_KEY_NAME, ],
        CITY_CODE['广州']: [SPECIAL_AREA_LIMIT_KEY_NAME, ],
        CITY_CODE['深圳']: [SPECIAL_AREA_LIMIT_KEY_NAME, ],
        # CITY_CODE['成都']: [SPECIAL_AREA_LIMIT_KEY_NAME, ],
        # CITY_CODE['长沙']: [SPECIAL_AREA_LIMIT_KEY_NAME, ],
    }

    # ##### 区分appType数据
    DATA_PARAMS = {
        'data1': {APP_TYPE['VLOG']: 0},  # vlog
        'data2': {APP_TYPE['VLOG']: 0.5, APP_TYPE['LONG_VIDEO']: 0.5},  # [vlog, 内容精选]
        'data3': {APP_TYPE['VLOG']: 0.5, APP_TYPE['LOVE_LIVE']: 0.5},  # [vlog, 票圈视频]
        'data4': {APP_TYPE['VLOG']: 0.5, APP_TYPE['SHORT_VIDEO']: 0.5},  # [vlog, 票圈短视频]
        # 'data5': [APP_TYPE['VLOG'], APP_TYPE['ZUI_JING_QI']],  # [vlog, 最惊奇]
        'data6': {APP_TYPE['VLOG']: 0.25, APP_TYPE['LOVE_LIVE']: 0.25, APP_TYPE['SHORT_VIDEO']: 0.25,
                  APP_TYPE['LONG_VIDEO']: 0.25},
        'data7': {APP_TYPE['VLOG']: 0.5, APP_TYPE['APP']: 0.5},  # [vlog, 票圈视频APP]
        'data8': {APP_TYPE['VLOG']: 0.7, APP_TYPE['LONG_VIDEO']: 0.3},  # [vlog, 内容精选]
        'data9': {APP_TYPE['VLOG']: 0.3, APP_TYPE['LONG_VIDEO']: 0.7},  # [vlog, 内容精选]
        'data10': {APP_TYPE['VLOG']: 0.2, APP_TYPE['LOVE_LIVE']: 0.8},  # [vlog, 票圈视频]
        'data11': {APP_TYPE['VLOG']: 0.3, APP_TYPE['LOVE_LIVE']: 0.7},  # [vlog, 票圈视频]
        'data12': {APP_TYPE['VLOG']: 0.4, APP_TYPE['SHORT_VIDEO']: 0.6},  # [vlog, 票圈短视频]
        'data13': {APP_TYPE['VLOG']: 0.3, APP_TYPE['SHORT_VIDEO']: 0.7},  # [vlog, 票圈短视频]
        'data14': {APP_TYPE['VLOG']: 0.78, APP_TYPE['LOVE_LIVE']: 0.11, APP_TYPE['SHORT_VIDEO']: 0.08,
                   APP_TYPE['LONG_VIDEO']: 0.03},
        'videos5': {APP_TYPE['LONG_VIDEO']: 1},  # [内容精选]

    }

    # 小时级更新过去48h数据 loghubods.video_data_each_hour_dataset_48h_total_apptype
    PROJECT_48H_APP_TYPE = 'loghubods'
    TABLE_48H_APP_TYPE = 'video_data_each_hour_dataset_48h_total_apptype'

    # 小时级更新过去48h数据规则参数
    RULE_PARAMS_48H_APP_TYPE = {
        'rule_params': {
            'rule1': {'cal_score_func': 2, 'return_count': 100, 'platform_return_rate': 0.001, 'view_type': 'preview'},
        },
        'data_params': {
            'data1': [APP_TYPE['VLOG'], ],
        },
        'params_list': [
            {'data': 'data1', 'rule': 'rule1'},
        ],
    }

    # 天级更新过去30天数据 loghubods.video_data_30days_dataset_total_apptype
    PROJECT_30DAY_APP_TYPE = 'loghubods'
    TABLE_30DAY_APP_TYPE = 'video_data_30days_dataset_total_apptype'

    # 天级更新过去30天数据规则参数
    RULE_PARAMS_30DAY_APP_TYPE = {
        'rule_params': {
            'rule1': {'top': 500, 'view_type': 'preview'},
        },
        'data_params': DATA_PARAMS,
        'params_list': [
            {'data': 'data1', 'rule': 'rule1'},
        ]
    }

    # 小时级更新过去24h数据 loghubods.video_data_each_hour_dataset_24h_total_apptype
    PROJECT_24H_APP_TYPE = 'loghubods'
    TABLE_24H_APP_TYPE = 'video_data_each_hour_dataset_24h_total_apptype'

    # 小时级更新过去24h数据规则参数
    RULE_PARAMS_24H_APP_TYPE = {
        'rule_params': {
            'rule3': {'cal_score_func': 2, 'return_count': 100, 'platform_return_rate': 0.001,
                      'view_type': 'preview'},
            'rule4': {'cal_score_func': 2, 'return_count': 100, 'platform_return_rate': 0.001,
                      'view_type': 'preview', 'merge_func': 2},
            # # 无回流人群
            # 'rule5': {'return_count': 100, 'platform_return_rate': 0.001,
            #           'view_type': 'preview', 'click_score_rate': 0.7},
            # 'rule7': {'return_count': 100, 'platform_return_rate': 0.001,
            #           'view_type': 'preview', 'click_score_rate': 0.8},
            # # 有回流人群
            # 'rule6': {'return_count': 100, 'platform_return_rate': 0.001,
            #           'view_type': 'preview', 'back_score_rate': 0.7},
            # 'rule8': {'return_count': 100, 'platform_return_rate': 0.001,
            #           'view_type': 'preview', 'back_score_rate': 0.8},
        },
        'data_params': DATA_PARAMS,
        'params_list': [
            {'data': 'data1', 'rule': 'rule3', 'notify_backend': True},
            # {'data': 'data2', 'rule': 'rule3'},
            {'data': 'data2', 'rule': 'rule4'},
            # {'data': 'data3', 'rule': 'rule4'},
            # {'data': 'data4', 'rule': 'rule4'},
            # {'data': 'data6', 'rule': 'rule4'},
            {'data': 'data7', 'rule': 'rule4'},
            # {'data': 'data1', 'rule': 'rule5'},
            # {'data': 'data1', 'rule': 'rule6'},
            # {'data': 'data8', 'rule': 'rule4'},
            # {'data': 'data9', 'rule': 'rule4'},
            {'data': 'data10', 'rule': 'rule4'},
            # {'data': 'data11', 'rule': 'rule4'},
            # {'data': 'data12', 'rule': 'rule4'},
            # {'data': 'data13', 'rule': 'rule4'},
            # # {'data': 'data14', 'rule': 'rule4'},
            # {'data': 'data1', 'rule': 'rule7'},
            # {'data': 'data1', 'rule': 'rule8'},
            {'data': 'videos5', 'rule': 'rule4'},  # [内容精选]
        ]
    }

    # 地域分组小时级更新24h使用数据  loghubods.video_each_day_update_province_24h_total_apptype
    PROJECT_REGION_24H_APP_TYPE = 'loghubods'
    TABLE_REGION_24H_APP_TYPE = 'video_each_day_update_province_24h_total_apptype'

    # 地域分组小时级更新24h规则参数
    RULE_PARAMS_REGION_24H_APP_TYPE = {
        'rule_params': {
            'rule2': {'view_type': 'video-show', 'return_count': 21, 'score_rule': 0,
                      'platform_return_rate': 0.001},
            # 'rule3': {'view_type': 'preview', 'return_count': 21, 'score_rule': 0,
            #           'platform_return_rate': 0.001},
            'rule4': {'view_type': 'video-show', 'return_count': 21, 'score_rule': 0,
                      'platform_return_rate': 0.001, 'merge_func': 2},
            'rule5': {'view_type': 'preview', 'return_count': 21, 'score_rule': 0,
                      'platform_return_rate': 0.001, 'merge_func': 2},
            # # 无回流人群
            # 'rule6': {'view_type': 'video-show', 'return_count': 21, 'score_rule': 0,
            #           'platform_return_rate': 0.001, 'click_score_rate': 0.7},
            # 'rule8': {'view_type': 'video-show', 'return_count': 21, 'score_rule': 0,
            #           'platform_return_rate': 0.001, 'click_score_rate': 0.8},
            # # 有回流人群
            # 'rule7': {'view_type': 'video-show', 'return_count': 21, 'score_rule': 0,
            #           'platform_return_rate': 0.001, 'back_score_rate': 0.7},
            # 'rule9': {'view_type': 'video-show', 'return_count': 21, 'score_rule': 0,
            #           'platform_return_rate': 0.001, 'back_score_rate': 0.8},
        },
        'data_params': DATA_PARAMS,
        'params_list': [
            {'data': 'data1', 'rule': 'rule2'},
            # {'data': 'data2', 'rule': 'rule2'},
            {'data': 'data2', 'rule': 'rule4'},
            # {'data': 'data3', 'rule': 'rule4'},
            # {'data': 'data4', 'rule': 'rule4'},
            # {'data': 'data6', 'rule': 'rule4'},
            {'data': 'data7', 'rule': 'rule5'},
            # {'data': 'data1', 'rule': 'rule6'},
            # {'data': 'data1', 'rule': 'rule7'},
            # {'data': 'data8', 'rule': 'rule4'},
            # {'data': 'data9', 'rule': 'rule4'},
            {'data': 'data10', 'rule': 'rule4'},
            # {'data': 'data11', 'rule': 'rule4'},
            # {'data': 'data12', 'rule': 'rule4'},
            # {'data': 'data13', 'rule': 'rule4'},
            # {'data': 'data14', 'rule': 'rule4'},
            # {'data': 'data1', 'rule': 'rule8'},
            # {'data': 'data1', 'rule': 'rule9'},
            {'data': 'videos5', 'rule': 'rule4'},  # [内容精选]
        ]
    }

    # 地域分组小时级规则更新使用数据
    PROJECT_REGION_APP_TYPE = 'loghubods'
    TABLE_REGION_APP_TYPE = 'video_each_hour_update_province_apptype'

    # 地域分组小时级规则参数
    RULE_PARAMS_REGION_APP_TYPE = {
        'rule_params': {
            # 'rule2': {'view_type': 'video-show', 'platform_return_rate': 0.001, 'region_24h_rule_key': 'rule2'},
            # 'rule3': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
            #           'region_24h_rule_key': 'rule2', '24h_rule_key': 'rule2'},
            'rule4': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
                      'region_24h_rule_key': 'rule2', '24h_rule_key': 'rule3'},
            # 涉政视频过滤
            'rule4-1': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
                        'region_24h_rule_key': 'rule2', '24h_rule_key': 'rule3', 'political_filter': True},
            # 特殊地域屏蔽危险视频
            'rule4-2': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
                        'region_24h_rule_key': 'rule2', '24h_rule_key': 'rule3', 'shield_config': SHIELD_CONFIG2},

            # 'rule6': {'view_type': 'preview', 'platform_return_rate': 0.001,
            #           'region_24h_rule_key': 'rule3', '24h_rule_key': 'rule2'},
            'rule7': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
                      'region_24h_rule_key': 'rule4', '24h_rule_key': 'rule4', 'merge_func': 2},
            'rule7-1': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
                        'region_24h_rule_key': 'rule4', '24h_rule_key': 'rule4', 'merge_func': 2,
                        'political_filter': True},
            'rule8': {'view_type': 'preview', 'platform_return_rate': 0.001,
                      'region_24h_rule_key': 'rule5', '24h_rule_key': 'rule4', 'merge_func': 2},
            # 'rule9': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
            #           'region_24h_rule_key': 'rule2', '24h_rule_key': 'rule3', '30day_rule_key': 'rule1'},
            # # 无回流人群
            # 'rule10': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
            #            'region_24h_rule_key': 'rule6', '24h_rule_key': 'rule5', 'click_score_rate': 0.7},
            # 'rule13': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
            #            'region_24h_rule_key': 'rule8', '24h_rule_key': 'rule7', 'click_score_rate': 0.8},
            # # 有回流人群
            # 'rule11': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
            #            'region_24h_rule_key': 'rule7', '24h_rule_key': 'rule6', 'back_score_rate': 0.7},
            # 'rule14': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
            #            'region_24h_rule_key': 'rule9', '24h_rule_key': 'rule8', 'back_score_rate': 0.8},
            # # 20点地域小时级列表中增加7点-19点地域小时级的优质视频
            # 'rule12': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
            #            'region_24h_rule_key': 'rule2', '24h_rule_key': 'rule3', 'add_videos_in_20h': True},

            # 地域小时级列表中增加 前6小时 地域小时级的优质视频
            'rule15': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
                       'region_24h_rule_key': 'rule2', '24h_rule_key': 'rule3',
                       'add_videos_with_pre_h': True, 'hour_count': 6},
            # 地域小时级列表中增加 前2小时 地域小时级的优质视频,排序优化1:半小时级列表中有的视频以本小时的分数为准
            'rule16': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
                       'region_24h_rule_key': 'rule2', '24h_rule_key': 'rule3',
                       'add_videos_with_pre_h': True, 'hour_count': 2, 'add_func': 'func2'},
            # 地域小时级列表中增加 前47小时 地域小时级的优质视频
            'rule17': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
                       'region_24h_rule_key': 'rule2', '24h_rule_key': 'rule3',
                       'add_videos_with_pre_h': True, 'hour_count': 47},
            # 地域小时级列表中增加 前3小时 地域小时级的优质视频,排序优化1:半小时级列表中有的视频以本小时的分数为准
            'rule18': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
                       'region_24h_rule_key': 'rule2', '24h_rule_key': 'rule3',
                       'add_videos_with_pre_h': True, 'hour_count': 3, 'add_func': 'func2'},
            # 其余表与地域小时级表,不做去重,召回在线去重
            'rule19': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
                       'region_24h_rule_key': 'rule4', '24h_rule_key': 'rule4', 'merge_func': 2, 'dup_remove': False},
        },
        'data_params': DATA_PARAMS,
        'params_list': [
            {'data': 'data1', 'rule': 'rule4'},  # 095 vlog
            {'data': 'data1', 'rule': 'rule4-1'},  # 095-1
            {'data': 'data1', 'rule': 'rule4-2'},  # 262 特殊地域屏蔽危险视频
            # {'data': 'data2', 'rule': 'rule4'},
            {'data': 'data2', 'rule': 'rule7-1'},  # 121 内容精选
            # {'data': 'data3', 'rule': 'rule7'},
            # {'data': 'data4', 'rule': 'rule7'},
            # {'data': 'data6', 'rule': 'rule7'},
            {'data': 'data7', 'rule': 'rule8'},  # 票圈视频APP 10003.110156
            # {'data': 'data1', 'rule': 'rule9'},
            # {'data': 'data1', 'rule': 'rule10'},
            # {'data': 'data1', 'rule': 'rule11'},
            # {'data': 'data8', 'rule': 'rule7'},
            # {'data': 'data9', 'rule': 'rule7'},
            {'data': 'data10', 'rule': 'rule7'},  # 144 票圈视频
            # {'data': 'data11', 'rule': 'rule7'},
            # {'data': 'data12', 'rule': 'rule7'},
            # {'data': 'data13', 'rule': 'rule7'},
            # {'data': 'data1', 'rule': 'rule12'},
            # {'data': 'data14', 'rule': 'rule7'},  # 159
            # {'data': 'data1', 'rule': 'rule13'},  # 161
            # {'data': 'data1', 'rule': 'rule14'},  # 162
            # {'data': 'data1', 'rule': 'rule15'},  # 200 vlog
            # {'data': 'data1', 'rule': 'rule16'},  # 214 vlog
            # {'data': 'data1', 'rule': 'rule17'},  # 215 vlog
            # {'data': 'data1', 'rule': 'rule18'},  # 224 vlog
            {'data': 'videos5', 'rule': 'rule7-1'},  # 428 [内容精选]
        ],
        'params_list_new': [
            {'data': 'data10', 'rule': 'rule19'},  # 316 票圈视频 + 召回在线去重
        ]
    }

    # 宗教视频更新使用数据
    RELIGION_VIDEOS = {
        'catholicism': {
            'project': 'loghubods',
            'table': 'catholicism_videolist',
            # 视频列表更新结果存放 redis key 前缀,完整格式:'religion:catholicism:videos:item:{date}'
            'key_name_prefix': 'religion:catholicism:videos:item:',
        },  # 天主教

        'christianity': {
            'project': 'loghubods',
            'table': 'christianity_videolist',
            # 视频列表更新结果存放 redis key 前缀,完整格式:'religion:christianity:videos:item:{date}'
            'key_name_prefix': 'religion:christianity:videos:item:',
        },  # 基督教
    }

    # 宗教用户更新使用数据
    RELIGION_USERS = {
        'catholicism': {
            'day': {
                'project': 'loghubods',
                'table': 'catholicism_midlist',
            },
            'hour': {
                'project': 'loghubods',
                'table': 'catholicism_midlist_today',
            },
            # 用户列表更新结果存放 redis key 前缀,完整格式:'religion:catholicism:users:item:{hash_tag}:{date}'
            'key_name_prefix': 'religion:catholicism:users:item:',
        },  # 天主教

        'christianity': {
            'day': {
                'project': 'loghubods',
                'table': 'christianity_midlist',
            },
            'hour': {
                'project': 'loghubods',
                'table': 'christianity_midlist_today',
            },
            # 用户列表更新结果存放 redis key 前缀,完整格式:'religion:christianity:users:item:{hash_tag}:{date}'
            'key_name_prefix': 'religion:christianity:users:item:',
        },  # 基督教
    }

    # 老好看宗教实验数据
    LHK_RULE_PARAMS = {
        'rule_params': {
            'lhk_rule1': {'initial_param': {'data': 'data1', 'rule': 'rule4-1'},
                          'religion_name': 'catholicism', 'rank_count': 2},
            'lhk_rule2': {'initial_param': {'data': 'data1', 'rule': 'rule4-1'},
                          'religion_name': 'christianity', 'rank_count': 2},
        },
        'params_list': [
            {'data': 'lhk_data', 'rule': 'lhk_rule1'},  # 天主教-2插1
            {'data': 'lhk_data', 'rule': 'lhk_rule2'},  # 基督教-2插1
        ]
    }

    # 不区分地域数据使用相对48h数据
    RULE_PARAMS_REGION_APP_TYPE_48H = {
        'rule_params': {
            'rule5': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
                      'region_24h_rule_key': 'rule2', '48h_rule_key': 'rule1'},
        },
        'data_params': {
            'data1': [APP_TYPE['VLOG'], ],
        },
        'params_list': [
            {'data': 'data1', 'rule': 'rule5'},
        ],
    }

    # 老视频更新使用数据
    OLD_VIDEOS_PROJECT = 'loghubods'
    OLD_VIDEOS_TABLE = 'xcx_test_video'

    # 完整电影更新使用数据
    WHOLE_MOVIES_PROJECT = 'loghubods'
    WHOLE_MOVIES_TABLE = 'whole_movies'

    # 完整影视资源更新结果存放 redis key 前缀,完整格式:'com.weiqu.video.recall.whole.movies.item.{date}.{h}'
    RECALL_KEY_NAME_PREFIX_WHOLE_MOVIES = 'com.weiqu.video.recall.whole.movies.item.'

    # 小程序离线ROV模型结果存放 redis key前缀,完整格式:recall:item:score:rov:applet:{date}
    RECALL_KEY_NAME_PREFIX = 'recall:item:score:rov:applet:'

    # 小程序小时级更新结果存放 redis key前缀,完整格式:com.weiqu.video.recall.item.score.h.{rule_key}.{date}.{h}
    RECALL_KEY_NAME_PREFIX_BY_H = 'com.weiqu.video.recall.item.score.h.'
    # 小程序相对24h数据更新结果与 小程序小时级更新结果 去重后 存放 redis key前缀,
    # 完整格式:com.weiqu.video.recall.hot.item.score.dup.24h.h.{rule_key}.{date}.{h}
    RECALL_KEY_NAME_PREFIX_DUP_24H_H = 'com.weiqu.video.recall.hot.item.score.dup.24h.h.'
    # 小程序离线ROV模型结果与 小程序小时级更新结果/小程序相对24h数据更新结果 去重后 存放 redis key前缀,
    # 完整格式:com.weiqu.video.recall.hot.item.score.dup.h.{rule_key}.{date}.{h}
    RECALL_KEY_NAME_PREFIX_DUP_H = 'com.weiqu.video.recall.hot.item.score.dup.h.'
    # 小时级视频状态不符合推荐要求的列表 redis key,完整格式:com.weiqu.video.filter.h.item.{rule_key}
    H_VIDEO_FILER = 'com.weiqu.video.filter.h.item.'

    # 小程序天级更新结果存放 redis key前缀,完整格式:com.weiqu.video.recall.item.score.day.{rule_key}.{date}
    RECALL_KEY_NAME_PREFIX_BY_DAY = 'com.weiqu.video.recall.item.score.day.'
    # 小程序离线ROV模型结果与小程序天级更新结果去重后 存放 redis key前缀,
    # 完整格式:com.weiqu.video.recall.hot.item.score.dup.day.now.{rule_key}.{date}
    RECALL_KEY_NAME_PREFIX_DUP_DAY_NOW = 'com.weiqu.video.recall.hot.item.score.dup.day.now.'
    # 使用前一天小程序离线ROV模型结果与小程序天级更新结果去重后 存放 redis key前缀,
    # 完整格式:com.weiqu.video.recall.hot.item.score.dup.day.pre.{rule_key}.{date}
    RECALL_KEY_NAME_PREFIX_DUP_DAY_PRE = 'com.weiqu.video.recall.hot.item.score.dup.day.pre.'

    # 小程序小时级48h数据更新结果存放 redis key前缀,
    # 完整格式:recall:item:score:48h:{data_key}:{rule_key}:{date}:{h}
    RECALL_KEY_NAME_PREFIX_BY_48H = 'recall:item:score:48h:'
    # 小程序小时级48h数据 筛选后的剩余数据 更新结果存放 redis key前缀,
    # 完整格式:recall:item:score:48h:other:{data_key}:{rule_key}:{date}:{h}
    RECALL_KEY_NAME_PREFIX_BY_48H_OTHER = 'recall:item:score:48h:other:'

    # 小程序小时级24h数据更新结果存放 redis key前缀,
    # 完整格式:recall:item:score:24h:{data_key}:{rule_key}:{date}:{h}
    RECALL_KEY_NAME_PREFIX_BY_24H = 'recall:item:score:24h:'
    # 小程序小时级24h数据 筛选后的剩余数据 更新结果存放 redis key前缀,
    # 完整格式:recall:item:score:24h:other:{data_key}:{rule_key}:{date}:{h}
    RECALL_KEY_NAME_PREFIX_BY_24H_OTHER = 'recall:item:score:24h:other:'
    # 小程序离线ROV模型结果与小程序小时级24h更新结果去重后 存放 redis key前缀,
    # 完整格式:com.weiqu.video.recall.hot.item.score.dup.24h.{rule_key}.{date}.{h}
    RECALL_KEY_NAME_PREFIX_DUP_24H = 'com.weiqu.video.recall.hot.item.score.dup.24h.'
    # 小时级视频状态不符合推荐要求的列表 redis key,完整格式:com.weiqu.video.filter.apptype.h.item.24h.{appType}.{data_key}.{rule_key}
    H_VIDEO_FILER_24H = 'com.weiqu.video.filter.apptype.h.item.24h.'

    # 小程序相对30天数据天级更新结果存放 redis key前缀,
    # 完整格式:recall:item:score:30day:{data_key}:{rule_key}:{date}
    RECALL_KEY_NAME_PREFIX_30DAY = 'recall:item:score:30day:'

    # 小程序地域分组小时级更新结果存放 redis key前缀,
    # 完整格式:recall:item:score:region:h:{region}:{data_key}:{rule_key}:{date}:{h}
    RECALL_KEY_NAME_PREFIX_REGION_BY_H = 'recall:item:score:region:h:'
    # 小程序地域分组天级更新结果与小程序地域分组小时级更新结果去重后 存放 redis key前缀,
    # 完整格式:com.weiqu.video.recall.hot.item.score.dup1.region.day.h.{region}.{rule_key}.{date}.{h}
    RECALL_KEY_NAME_PREFIX_DUP1_REGION_DAY_H = 'com.weiqu.video.recall.hot.item.score.dup1.region.day.h.'
    # 小程序地域分组小时级更新24h结果与小程序地域分组小时级更新结果去重后 存放 redis key前缀,
    # 完整格式:recall:item:score:region:dup1:region24h:{region}:{data_key}:{rule_key}:{date}:{h}
    RECALL_KEY_NAME_PREFIX_DUP1_REGION_24H_H = 'recall:item:score:region:dup1:region24h:'
    # 小程序天级更新结果与 小程序地域分组天级更新结果/小程序地域分组小时级更新结果 去重后 存放 redis key前缀,
    # 完整格式:com.weiqu.video.recall.hot.item.score.dup2.region.day.h.{region}.{rule_key}.{date}.{h}
    RECALL_KEY_NAME_PREFIX_DUP2_REGION_DAY_H = 'com.weiqu.video.recall.hot.item.score.dup2.region.day.h.'
    # 小程序24h更新结果与 小程序地域分组24h更新结果/小程序地域分组小时级更新结果 去重后 存放 redis key前缀,
    # 完整格式:recall:item:score:region:dup2:24h:{region}:{data_key}:{rule_key}:{date}:{h}
    RECALL_KEY_NAME_PREFIX_DUP2_REGION_24H_H = 'recall:item:score:region:dup2:24h:'
    # 小程序小时级24h数据 筛选后的剩余数据 更新结果 与 小程序24h更新结果/小程序地域分组24h更新结果/小程序地域分组小时级更新结果 去重后 存放 redis key前缀,
    # 完整格式:recall:item:score:region:dup3:24h:{region}:{data_key}:{rule_key}:{date}:{h}
    RECALL_KEY_NAME_PREFIX_DUP3_REGION_24H_H = 'recall:item:score:region:dup3:24h:'
    # 小程序48h更新结果与 小程序地域分组24h更新结果/小程序地域分组小时级更新结果 去重后 存放 redis key前缀,
    # 完整格式:recall:item:score:region:dup2:48h:{region}:{data_key}:{rule_key}:{date}:{h}
    RECALL_KEY_NAME_PREFIX_DUP2_REGION_48H_H = 'recall:item:score:region:dup2:48h:'
    # 小程序小时级48h数据 筛选后的剩余数据 更新结果 与 小程序48h更新结果/小程序地域分组24h更新结果/小程序地域分组小时级更新结果 去重后 存放 redis key前缀,
    # 完整格式:recall:item:score:region:dup3:48h:{region}:{data_key}:{rule_key}:{date}:{h}
    RECALL_KEY_NAME_PREFIX_DUP3_REGION_48H_H = 'recall:item:score:region:dup3:48h:'
    # 小程序离线ROV模型结果与 小程序天级更新结果/小程序地域分组天级更新结果/小程序地域分组小时级更新结果 去重后 存放 redis key前缀,
    # 完整格式:recall:item:score:region:dup4:rov:{region}:{data_key}:{rule_key}:{date}:{h}
    RECALL_KEY_NAME_PREFIX_DUP_REGION_H = 'recall:item:score:region:dup4:rov:'

    # 地域分组小时级视频状态不符合推荐要求的列表 redis key,
    # 完整格式:com.weiqu.video.filter.apptype.region.h.item.{region}.{appType}.{data_key}.{rule_key}
    REGION_H_VIDEO_FILER = 'com.weiqu.video.filter.apptype.region.h.item.'
    # 小时级视频状态不符合推荐要求的列表 redis key,完整格式:com.weiqu.video.filter.h.item.24h.{region}.{rule_key}
    # H_VIDEO_FILER_24H = 'com.weiqu.video.filter.h.item.24h.'

    # 小程序地域分组天级更新结果存放 redis key前缀,完整格式:com.weiqu.video.recall.item.score.region.day.{region}.{rule_key}.{date}
    RECALL_KEY_NAME_PREFIX_REGION_BY_DAY = 'com.weiqu.video.recall.item.score.region.day.'

    # 小程序地域分组小时级更新24h结果存放 redis key前缀,
    # 完整格式:recall:item:score:region:24h:{region}:{data_key}:{rule_key}:{date}:{h}
    RECALL_KEY_NAME_PREFIX_REGION_BY_24H = 'recall:item:score:region:24h:'
    # 小程序天级更新结果与 小程序地域分组小时级更新24h结果 去重后 存放 redis key前缀,
    # 完整格式:com.weiqu.video.recall.hot.item.score.dup.region.day.24h.{region}.{rule_key}.{date}.{h}
    RECALL_KEY_NAME_PREFIX_DUP_REGION_DAY_24H = 'com.weiqu.video.recall.hot.item.score.dup.region.day.24h.'
    # 小程序离线ROV模型结果与 小程序天级更新结果/小程序地域分组小时级更新24h结果 去重后 存放 redis key前缀,
    # 完整格式:com.weiqu.video.recall.hot.item.score.dup.region.24h.{region}.{rule_key}.{date}.{h}
    RECALL_KEY_NAME_PREFIX_DUP_REGION_24H = 'com.weiqu.video.recall.hot.item.score.dup.region.24h.'
    # 地域分组小时级更新24h视频状态不符合推荐要求的列表 redis key,
    # 完整格式:com.weiqu.video.filter.apptype.region.h.item.24h.{region}.{appType}.{data_key}.{rule_key}
    REGION_H_VIDEO_FILER_24H = 'com.weiqu.video.filter.apptype.region.h.item.24h.'

    # 小程序老视频更新结果存放 redis key 前缀,完整格式:'com.weiqu.video.recall.old.item.{date}'
    RECALL_KEY_NAME_PREFIX_OLD_VIDEOS = 'com.weiqu.video.recall.old.item.'

    # app应用 小程序离线ROV模型结果存放 redis key前缀,完整格式:recall:item:score:rov:app:{date}
    RECALL_KEY_NAME_PREFIX_APP = 'recall:item:score:rov:app:'
    # app应用 运营提供的小时级数据存放 redis key前缀,完整格式:com.weiqu.video.app.op.item.score.{date}.{h}
    APP_OP_VIDEOS_KEY_NAME_PREFIX = 'com.weiqu.video.app.op.item.score.'
    # app应用 小时级数据更新最终结果存放 redis key前缀,完整格式:com.weiqu.video.recall.hot.item.score.app.{date}.{h}
    APP_FINAL_RECALL_KEY_NAME_PREFIX = 'com.weiqu.video.recall.hot.item.score.app.'

    # appType:[18, 19]小程序离线ROV模型结果存放 redis key前缀,完整格式:recall:item:score:{appType}:{date}:{h}
    RECALL_KEY_NAME_PREFIX_APP_TYPE = 'recall:item:score:'

    # appType = 6, ROV召回池redis key前缀,完整格式:com.weiqu.video.recall.hot.apptype.h.item.score.{appType}.{h}
    # RECALL_KEY_NAME_PREFIX_APP_TYPE = 'com.weiqu.video.recall.hot.apptype.h.item.score.'

    # 流量池分发实验配置(对照组与实验组划分)存放 redis key
    FLOWPOOL_ABTEST_KEY_NAME = 'flow:pool:abtest:config'
    # 流量池离线模型结果存放 redis key前缀,完整格式 flow:pool:item:score:{appType}
    FLOWPOOL_KEY_NAME_PREFIX = 'flow:pool:item:score:'
    # 快速曝光流量池数据存放 redis key前缀,完整格式 flow:pool:quick:item:score:{appType}:{flowPool_id}
    QUICK_FLOWPOOL_KEY_NAME_PREFIX = 'flow:pool:quick:item:score:'
    # 流量池离线模型结果存放 redis key前缀,完整格式 flow:pool:item:{appType}
    FLOWPOOL_KEY_NAME_PREFIX_SET = 'flow:pool:item:'
    # 快速曝光流量池数据存放 redis key前缀,完整格式 flow:pool:quick:item:{appType}:{flowPool_id}
    QUICK_FLOWPOOL_KEY_NAME_PREFIX_SET = 'flow:pool:quick:item:'
    # 流量池视频分层存放 redis key前缀,完整格式 flow:pool:level:item:{appType}:{level}
    FLOWPOOL_KEY_NAME_PREFIX_SET_LEVEL = 'flow:pool:level:item:'
    # 流量池各层分发概率权重存放 redis key,完整格式 flow:pool:level:recommend:weight
    FLOWPOOL_LEVEL_WEIGHT_KEY_NAME = 'flow:pool:level:recommend:weight'
    # 快速曝光流量池分发概率 redis key前缀,完整格式 flow:pool:quick:distribute:rate:{flowPool_id}
    QUICK_FLOWPOOL_DISTRIBUTE_RATE_KEY_NAME_PREFIX = 'flow:pool:quick:distribute:rate:'
    # 本地记录视频的可分发数,控制分发,完整key格式:flow:pool:local:distribute:count:{videoId}:{flowPool}
    LOCAL_DISTRIBUTE_COUNT_PREFIX = 'flow:pool:local:distribute:count:'

    # 流量池videoId redis key前缀,完整格式 flow:pool:video:ids:{appType}
    FLOWPOOL_VIDEO_ID_KEY_NAME_PREFIX = 'flow:pool:video:ids:'
    # 快速曝光流量池videoId redis key前缀,完整格式 flow:pool:quick:video:ids:{appType}:{flowPool_id}
    QUICK_FLOWPOOL_VIDEO_ID_KEY_NAME_PREFIX = 'flow:pool:quick:video:ids:'
    # 流量池视频标记flowPool redis key前缀,完整格式 flow:pool:video:{appType}:{videoId}
    FLOWPOOL_VIDEO_INFO_KEY_NAME_PREFIX = 'flow:pool:video:'
    # 快速曝光流量池视频标记flowPool redis key前缀,完整格式 flow:pool:quick:video:{appType}:{flowPool_id}:{videoId}
    QUICK_FLOWPOOL_VIDEO_INFO_KEY_NAME_PREFIX = 'flow:pool:quick:video:'


    # 兜底视频redis存储key
    BOTTOM_KEY_NAME = 'bottom:videos'
    # 兜底视频数量
    BOTTOM_NUM = 1000
    # 首页兜底视频json存储 redis-key
    BOTTOM_JSON_KEY_NAME = 'com.weiqu.video.homepage.bottom.info.json.item'
    # 兜底视频redis存储key-方案2:采用流量池视频作为兜底视频
    BOTTOM2_KEY_NAME = 'bottom2:videos'

    # 修改ROV的视频 redis key
    UPDATE_ROV_KEY_NAME = 'update:rov:item:score:applet'
    UPDATE_ROV_KEY_NAME_APP = 'update:rov:item:score:app'

    # 生效中的置顶视频列表 redis key
    TOP_VIDEO_LIST_KEY_NAME = 'top:item:score:area:applet'
    TOP_VIDEO_LIST_KEY_NAME_APP = 'top:item:score:area:app'

    # rovScore公差
    ROV_SCORE_D = 0.001

    # width : height > 1 的视频列表 redis key, zset存储,value为videoId,score为w_h_rate
    W_H_RATE_UP_1_VIDEO_LIST_KEY_NAME = {
        'rov_recall': 'com.weiqu.video.rov.w.h.rate.1.item',  # rov召回池视频
        'bottom_last': 'com.weiqu.video.bottom.last.w.h.rate.1.item'  # 二次兜底视频
    }

    # 头部视频对应运营强插的相关视频 redis 存储 key 前缀, 完整key格式:com.weiqu.video.relevant.videos.item.{videoId}
    RELEVANT_VIDEOS_WITH_OP_KEY_NAME = 'com.weiqu.video.relevant.videos.item.'
    # 有设置运营强插相关视频的头部视频id redis存储key
    RELEVANT_TOP_VIDEOS_KEY_NAME = 'com.weiqu.video.relevant.top.video_ids'

    # 按位置排序redis存储key
    RECALL_POSITION1_KEY_NAME = 'com.weiqu.video.recall.hot.apptype.h.item.score.position.1'
    RECALL_POSITION2_KEY_NAME = 'com.weiqu.video.recall.hot.apptype.h.item.score.position.2'

    SIM_N_19 = 4
    # 最惊奇电影类视频相关推荐列表存放 redis key前缀,完整格式: com.weiqu.movie.relevant.list.item.{videoId}
    MOVIE_RELEVANT_LIST_KEY_NAME_PREFIX = 'com.weiqu.movie.relevant.list.item.'

    # 特殊mid 及 指定视频 数据
    SPECIAL_MID_VIDEOS_PROJECT = {
        'mid': 'loghubods',
        'videos': 'loghubods'
    }
    SPECIAL_MID_VIDEOS_TABLE = {
        'mid': 'shielded_mid',
        'videos': 'shielded_video_list'
    }

    # 特殊mid更新结果存放 redis key ,完整格式:'special:mid'
    KEY_NAME_SPECIAL_MID = 'special:mid'
    # 特殊mid对应指定视频列表更新结果存放 redis key 前缀,完整格式:'special:videos:item:{date}'
    KEY_NAME_PREFIX_SPECIAL_VIDEOS = 'special:videos:item:'

    # 限流视频集合存放 redis key前缀,完整格式:'limit:videos:{date}'
    KEY_NAME_PREFIX_LIMIT_VIDEO_SET = 'limit:videos:'
    # 限流视频最大分发数记录 redis key,完整格式:'limit:video:max:distribute:count'
    KEY_NAME_PREFIX_LIMIT_VIDEOS = 'limit:video:max:distribute:count'
    # 限流视频分发数记录 redis key前缀,完整格式:'limit:video:distribute:count:{videoId}'
    KEY_NAME_PREFIX_LIMIT_VIDEO_DISTRIBUTE_COUNT = 'limit:video:distribute:count:'

    # 涉政视频列表,除票圈vlog、票圈视频、票圈视频APP外其他端都屏蔽
    PROJECT_POLITICAL_VIDEOS = 'loghubods'
    TABLE_POLITICAL_VIDEOS = 'shielded_politics_videolist'
    # 涉政视频列表redis存储key
    POLITICAL_VIDEOS_KEY_NAME = 'political:videos'
    # 涉政视频可分发的端
    POLITICAL_RECOMMEND_APP_TYPE_LIST = [
        APP_TYPE['VLOG'],  # vlog
        APP_TYPE['LOVE_LIVE'],  # 票圈视频
        APP_TYPE['APP'],  # 票圈视频APP
    ]

    # 宗教视频更新使用数据
    RELIGION_VIDEOS_PROJECT = 'loghubods'
    RELIGION_VIDEOS_TABLE = 'religion_video'
    # 宗教视频列表更新结果存放 redis key 前缀,完整格式:'religion:videos:item:{date}'
    KEY_NAME_PREFIX_RELIGION_VIDEOS = 'religion:videos:item:'

    # 召回池分发视频在流量池中存在,该视频是否进行本地分发数-1 开关,1-开/0-关
    IN_FLOW_POOL_COUNT_SWITCH = {
        'key_name': 'recall:videos:in:flow:pool:count:switch',
        'value': 1
    }

    # ##################################### 广告模型配置 #####################################

    # 广告模型数据
    ad_model_data = {
        'user_group': {
            'project': 'loghubods',
            'table': 'user_share_return_admodel'
        },
        'users_share_rate': {
            'project': 'loghubods',
            'table': 'usergroup_sharerate_admodel'
        },
        'videos_share_rate': {
            'project': 'loghubods',
            'table': 'video_sharerate_admodel'
        },
        'videos_share_rate_7days': {
            'project': 'loghubods',
            'table': 'video_sharerate_admodel_7days'
        },
        'top10_videos': {
            'project': 'loghubods',
            'table': 'abnormal_videoid_admodel',
            'abnormal_filter_param': 1.5
        },
        'videos_share_rate_alladtype': {
            'project': 'loghubods',
            'table': 'video_sharerate_admodel_alladtype'
        },  # 所有广告类型数据
        'videos_share_rate_adtype1': {
            'project': 'loghubods',
            'table': 'video_sharerate_admodel_adtype1'
        },  # 模板插屏广告数据
        'users_data': {
            'project': 'loghubods',
            'table': 'usergroup_data_admodel'
        },  # 新的用户侧数据:按照用户分组统计(各用户组出广告的概率,各用户组的分享率,各用户组有分享的情况下出广告的概率)
        'videos_data_alladtype': {
            'project': 'loghubods',
            'table': 'video_data_admodel_alladtype'
        },  # 新的视频侧数据:所有广告类型数据,按照videoId统计(各视频出广告的概率,各视频被分享的概率,各视频被分享的情况下出广告的概率)
        'users_data_with_out': {
            'project': 'loghubods',
            'table': 'usergroup_data_with_out_admodel'
        },  # 以是否直接跳出为目标的用户侧数据:按照用户分组统计(各用户组出广告的概率,各用户组的直接跳出率,各用户组直接跳出的情况下出广告的概率)
        'videos_data_with_out_alladtype': {
            'project': 'loghubods',
            'table': 'video_data_with_out_admodel_alladtype'
        },  # 以是否直接跳出为目标的视频侧数据:所有广告类型数据,按照videoId统计(各视频出广告的概率,各视频被直接跳出的概率,各视频被直接跳出的情况下出广告的概率)
    }

    # 自动调整广告模型阈值数据
    AD_THRESHOLD_AUTO_UPDATE_DATA = {
        'project': 'loghubods',
        'table': 'ad_view_monitor_hh_report_final'
    }

    # 调用广告模型appType列表
    AD_APP_TYPE_LIST = [
        APP_TYPE['VLOG'],  # 票圈vlog
        APP_TYPE['PIAO_QUAN_VIDEO_PLUS'],  # 票圈视频+
        APP_TYPE['LOVE_LIVE'],  # 票圈视频
        APP_TYPE['SHORT_VIDEO'],  # 票圈短视频
        APP_TYPE['LONG_VIDEO'],  # 内容精选
        APP_TYPE['LAO_HAO_KAN_VIDEO'],  # 老好看视频
        APP_TYPE['ZUI_JING_QI'],  # 票圈最惊奇
        APP_TYPE['JOURNEY'],  # 票圈足迹
        APP_TYPE['BLESSING_YEAR'],  # 票圈福年
        APP_TYPE['WAN_NENG_VIDEO'],  # 信仰之路
    ]

    # 广告模型视频数据
    AD_VIDEO_DATA_PARAMS = {
        'videos_share_rate': {
            # 'data1': APP_TYPE['VLOG'],  # vlog
            # 'data2': APP_TYPE['LOVE_LIVE'],  # 票圈视频
            # 'data3': APP_TYPE['LONG_VIDEO'],  # 内容精选
            # 'data4': APP_TYPE['SHORT_VIDEO'],  # 票圈短视频
            'data5': APP_TYPE['LAO_HAO_KAN_VIDEO'],  # 老好看视频
            # 'data6': APP_TYPE['ZUI_JING_QI'],  # 票圈最惊奇
            # 'data21': APP_TYPE['PIAO_QUAN_VIDEO_PLUS'],  # 票圈视频+
        },
        # 'videos_share_rate_7days': {
        #     'data1:7days': APP_TYPE['VLOG'],  # vlog 优化4
        #     # 'data4:7days': APP_TYPE['SHORT_VIDEO'],  # 票圈短视频 优化4
        #     'data5:7days': APP_TYPE['LAO_HAO_KAN_VIDEO'],  # 老好看视频 优化4
        # },
        # 所有广告类型视频数据
        'videos_share_rate_alladtype': {
            'videos0': APP_TYPE['VLOG'],  # vlog
            'videos4': APP_TYPE['LOVE_LIVE'],  # 票圈视频
            'videos6': APP_TYPE['SHORT_VIDEO'],  # 票圈短视频
            'videos5': APP_TYPE['LONG_VIDEO'],  # 内容精选
            'videos21': APP_TYPE['PIAO_QUAN_VIDEO_PLUS'],  # 票圈视频+
            'videos3': APP_TYPE['BLESSING_YEAR'],  # 票圈福年
            'videos22': APP_TYPE['JOURNEY'],  # 票圈足迹
            'videos18': APP_TYPE['LAO_HAO_KAN_VIDEO'],  # 老好看视频
            'videos19': APP_TYPE['ZUI_JING_QI'],  # 票圈最惊奇
        },
        # 模板插屏广告视频数据
        # 'videos_share_rate_adtype1': {
        #     'videos0:adtype1': APP_TYPE['VLOG'],  # vlog
        #     'videos4:adtype1': APP_TYPE['LOVE_LIVE'],  # 票圈视频
        # },
        # 新的视频侧数据:所有广告类型视频数据
        'videos_data_alladtype': {
            'videos5new': APP_TYPE['LONG_VIDEO'],  # 内容精选
            'videos4new': APP_TYPE['LOVE_LIVE'],  # 票圈视频
            'videos0new': APP_TYPE['VLOG'],  # vlog
        },
        # 以是否直接跳出为目标的视频侧数据:所有广告类型视频数据
        'videos_data_with_out_alladtype': {
            'videos5out': APP_TYPE['LONG_VIDEO'],  # 内容精选
            'videos0out': APP_TYPE['VLOG'],  # vlog
            'videos4out': APP_TYPE['LOVE_LIVE'],  # 票圈视频
            'videos6out': APP_TYPE['SHORT_VIDEO'],  # 票圈短视频
            'videos21out': APP_TYPE['PIAO_QUAN_VIDEO_PLUS'],  # 票圈视频+
            'videos3out': APP_TYPE['BLESSING_YEAR'],  # 票圈福年
            'videos22out': APP_TYPE['JOURNEY'],  # 票圈足迹
            'videos18out': APP_TYPE['LAO_HAO_KAN_VIDEO'],  # 老好看视频
            'videos19out': APP_TYPE['ZUI_JING_QI'],  # 票圈最惊奇
        },
    }

    # 广告模型异常视频数据处理参数
    AD_ABNORMAL_VIDEOS_PARAM = {
        'data1': 17/48,  # vlog
        'data2': 15/16,  # 票圈视频
        'data3': 1/3,  # 内容精选
        'data4': 1/3,  # 票圈短视频
        'data5': 1/3,  # 老好看视频
        'data6': 1/3,  # 票圈最惊奇
        'data21': 17/48,  # 票圈视频+
        'data1:7days': 17/48,  # vlog 优化4
        'data4:7days': 1/3,  # 票圈短视频 优化4
        'data5:7days': 1/3,  # 老好看视频 优化4

        # vlog
        'videos0': 17 / 48,
        'videos0:adtype1': 17 / 48,
        'videos0new': 17 / 48,
        'videos0out': 17 / 48,
        # 票圈视频
        'videos4': 15 / 16,
        'videos4:adtype1': 15 / 16,
        'videos4new': 15 / 16,
        'videos4out': 15 / 16,
        # 内容精选
        'videos5': 1 / 3,
        'videos5new': 1 / 3,
        'videos5out': 1 / 3,
        # 票圈短视频
        'videos6': 1 / 3,
        'videos6out': 1 / 3,
        # 老好看视频
        'videos18': 1 / 3,
        'videos18out': 1 / 3,
        # 票圈最惊奇
        'videos19': 1 / 3,
        'videos19out': 1 / 3,
        # 票圈视频+
        'videos21': 17 / 48,
        'videos21out': 17 / 48,
        # 票圈足迹
        'videos22out': 17 / 48,
    }

    # 广告模型用户分组类别
    AD_MID_GROUP = {
        'class1': [
            'return1mids',
            'return2_3mids',
            'return4_8mids',
            'return9_24mids',
            'return25_nmids',
            'return0share1mids',
            'return0share2_nmids'],
        'class2': [
            'return1mids',
            'return2_3mids',
            'return4_8mids',
            'return9_24mids',
            'return25_29nmids',
            'return30_nmids',
            'return0share1mids',
            'return0share2_nmids'
        ]
    }

    # 免广告用户组列表
    NO_AD_MID_GROUP_LIST = {
        'class1': ['return25_nmids'],
        'class2': ['return30_nmids'],
    }

    # 广告模型用户数据
    AD_USER_PARAMS = {
        'data_params': {
            'user0': APP_TYPE['VLOG'],  # vlog
            'user4': APP_TYPE['LOVE_LIVE'],  # 票圈视频
            'user5': APP_TYPE['LONG_VIDEO'],  # 内容精选
            'user6': APP_TYPE['SHORT_VIDEO'],  # 票圈短视频
            'user18': APP_TYPE['LAO_HAO_KAN_VIDEO'],  # 老好看视频
            'user19': APP_TYPE['ZUI_JING_QI'],  # 票圈最惊奇
            'user21': APP_TYPE['PIAO_QUAN_VIDEO_PLUS'],  # 票圈视频+
            'user3': APP_TYPE['BLESSING_YEAR'],  # 票圈福年
            'user22': APP_TYPE['JOURNEY'],  # 票圈足迹
        },
        'rule_params': {
            'rule1': {
                'group_list': AD_MID_GROUP['class1'],
                'no_ad_mid_group_list': NO_AD_MID_GROUP_LIST['class1'],
            },
            'rule2': {
                'group_list': AD_MID_GROUP['class1'],
                'no_ad_mid_group_list': NO_AD_MID_GROUP_LIST['class1'],
                'remove_no_ad_group': True,  # mean_group 预测&计算阈值时,去除不出广告的用户组
            },  # 优化阈值计算方式
            'rule3': {
                'group_list': AD_MID_GROUP['class2'],
                'no_ad_mid_group_list': NO_AD_MID_GROUP_LIST['class2'],
                'remove_no_ad_group': True,  # mean_group 预测&计算阈值时,去除不出广告的用户组
            },  # 优化阈值计算方式 + 优化2
        },
        'params_list': [
            # {'data': 'user0', 'rule': 'rule1'},  # vlog
            {'data': 'user0', 'rule': 'rule2'},  # vlog + 优化阈值计算方式
            {'data': 'user6', 'rule': 'rule1'},  # 票圈短视频
            {'data': 'user6', 'rule': 'rule2'},  # 票圈短视频 + 优化阈值计算方式
            # {'data': 'user0', 'rule': 'rule3'},  # vlog + 优化阈值计算方式 + 优化2
            # {'data': 'user6', 'rule': 'rule3'},  # 票圈短视频 + 优化阈值计算方式 + 优化2
            # {'data': 'user4', 'rule': 'rule1'},  # 票圈视频
            # {'data': 'user5', 'rule': 'rule1'},  # 内容精选
            {'data': 'user4', 'rule': 'rule2'},  # 票圈视频 + 优化阈值计算方式
            {'data': 'user5', 'rule': 'rule2'},  # 内容精选 + 优化阈值计算方式
            {'data': 'user18', 'rule': 'rule2'},  # 老好看视频 + 优化阈值计算方式
            # {'data': 'user19', 'rule': 'rule1'},  # 票圈最惊奇
            {'data': 'user19', 'rule': 'rule2'},  # 票圈最惊奇 + 优化阈值计算方式
            # {'data': 'user21', 'rule': 'rule1'},  # 票圈视频+
            {'data': 'user21', 'rule': 'rule2'},  # 票圈视频+ + 优化阈值计算方式
            {'data': 'user3', 'rule': 'rule1'},  # 票圈福年
            {'data': 'user3', 'rule': 'rule2'},  # 票圈福年 + 优化阈值计算方式
            {'data': 'user22', 'rule': 'rule2'},  # 票圈足迹 + 优化阈值计算方式
        ]
    }

    # 新的 - 广告模型用户数据
    AD_USER_PARAMS_NEW = {
        'data_params': {
            'user5new': APP_TYPE['LONG_VIDEO'],  # 内容精选
            'user4new': APP_TYPE['LOVE_LIVE'],  # 票圈视频
            'user0new': APP_TYPE['VLOG'],  # vlog
        },
        'rule_params': {
            'rule1': {
                'group_list': AD_MID_GROUP['class1'],
                'no_ad_mid_group_list': NO_AD_MID_GROUP_LIST['class1'],
            },
            'rule2': {
                'group_list': AD_MID_GROUP['class1'],
                'no_ad_mid_group_list': NO_AD_MID_GROUP_LIST['class1'],
                'remove_no_ad_group': True,  # mean_group 预测&计算阈值时,去除不出广告的用户组
            },  # 优化阈值计算方式
            'rule3': {
                'group_list': AD_MID_GROUP['class2'],
                'no_ad_mid_group_list': NO_AD_MID_GROUP_LIST['class2'],
                'remove_no_ad_group': True,  # mean_group 预测&计算阈值时,去除不出广告的用户组
            },  # 优化阈值计算方式 + 优化2
        },
        'params_list': [
            {'data': 'user5new', 'rule': 'rule2'},  # 内容精选 + 优化阈值计算方式
            {'data': 'user4new', 'rule': 'rule2'},  # 票圈视频 + 优化阈值计算方式
            {'data': 'user0new', 'rule': 'rule2'},  # 票圈vlog + 优化阈值计算方式
        ]
    }

    # 新的 - 广告模型用户数据(直接跳出)
    AD_USER_WITH_OUT_PARAMS = {
        'data_params': {
            'user5out': APP_TYPE['LONG_VIDEO'],  # 内容精选
            'user0out': APP_TYPE['VLOG'],  # vlog
            'user4out': APP_TYPE['LOVE_LIVE'],  # 票圈视频
            'user6out': APP_TYPE['SHORT_VIDEO'],  # 票圈短视频
            'user18out': APP_TYPE['LAO_HAO_KAN_VIDEO'],  # 老好看视频
            'user19out': APP_TYPE['ZUI_JING_QI'],  # 票圈最惊奇
            'user21out': APP_TYPE['PIAO_QUAN_VIDEO_PLUS'],  # 票圈视频+
            'user3out': APP_TYPE['BLESSING_YEAR'],  # 票圈福年
            'user22out': APP_TYPE['JOURNEY'],  # 票圈足迹
        },
        'rule_params': {
            'rule1': {
                'group_list': AD_MID_GROUP['class1'],
                'no_ad_mid_group_list': NO_AD_MID_GROUP_LIST['class1'],
            },
            'rule2': {
                'group_list': AD_MID_GROUP['class1'],
                'no_ad_mid_group_list': NO_AD_MID_GROUP_LIST['class1'],
                'remove_no_ad_group': True,  # mean_group 预测&计算阈值时,去除不出广告的用户组
            },  # 优化阈值计算方式
        },
        'params_list': [
            {'data': 'user5out', 'rule': 'rule2'},  # 内容精选 + 优化阈值计算方式
            {'data': 'user0out', 'rule': 'rule2'},  # 票圈vlog + 优化阈值计算方式
            {'data': 'user4out', 'rule': 'rule2'},  # 票圈视频 + 优化阈值计算方式
            {'data': 'user6out', 'rule': 'rule2'},  # 票圈短视频 + 优化阈值计算方式
            {'data': 'user18out', 'rule': 'rule2'},  # 老好看视频 + 优化阈值计算方式
            {'data': 'user19out', 'rule': 'rule2'},  # 票圈最惊奇 + 优化阈值计算方式
            {'data': 'user21out', 'rule': 'rule2'},  # 票圈视频+ + 优化阈值计算方式
            {'data': 'user3out', 'rule': 'rule2'},  # 票圈福年 + 优化阈值计算方式
            {'data': 'user22out', 'rule': 'rule2'},  # 票圈足迹 + 优化阈值计算方式
        ]
    }

    # 广告模型abtest配置
    AD_ABTEST_CONFIG = {
        # 票圈vlog
        # '173-a': {'video': {'data': 'data1'},
        #           'user': {'data': 'user0', 'rule': 'rule1'}},
        # '173-b': {'video': {'data': 'data1'},
        #           'user': {'data': 'user0', 'rule': 'rule2'}},
        # '173-c': {'video': {'data': 'data1'},
        #           'user': {'data': 'user0', 'rule': 'rule3'}},
        # '173-d': {'video': {'data': 'data1:7days'},
        #           'user': {'data': 'user0', 'rule': 'rule1'}},
        # '173-e': {'video': {'data': 'data1'},
        #           'user': {'data': 'user0', 'rule': 'rule2'},
        #           'care_model': True, 'threshold_rate': 0.7,  # 关怀模式实验阈值
        #           },  # else关怀模式人群多出广告 + 优化阈值计算方式
        # '173-f': {'video': {'data': 'data1'},
        #           'user': {'data': 'user0', 'rule': 'rule2'},
        #           'care_model': True, 'threshold_rate': 0.7,
        #           },  # else非关怀模式人群多出广告 + 优化阈值计算方式
        # '173-g': {'video': {'data': 'data1:7days'},
        #           'user': {'data': 'user0', 'rule': 'rule2'}},
        # '173-h': {'video': {'data': 'data1'},
        #           'user': {'data': 'user0', 'rule': 'rule2'},
        #           'more_ad': {'mean_group': 0.8},
        #           },  # else人群多出广告 + 优化阈值计算方式
        # '173-i': {'video': {'data': 'data1'},
        #           'user': {'data': 'user0', 'rule': 'rule2'},
        #           'more_ad': {'mean_group': 0.9},
        #           },  # else人群多出广告 + 优化阈值计算方式
        '173-j': {'video': {'data': 'videos0'},
                  'user': {'data': 'user0', 'rule': 'rule2'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # else非关怀模式人群多出广告 + 所有广告类型数据 + 优化阈值计算方式
        # '173-k': {'video': {'data': 'videos0:adtype1'},
        #           'user': {'data': 'user0', 'rule': 'rule2'},
        #           'care_model': True, 'threshold_rate': 0.7,
        #           },  # else非关怀模式人群多出广告 + 模板插屏类型广告视频数据 + 优化阈值计算方式
        '173-l': {'video': {'data': 'videos0'},
                  'user': {'data': 'user0', 'rule': 'rule2'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # [else, return0share1mids]非关怀模式人群多出广告 + 所有广告类型数据 + 优化阈值计算方式
        # '173-m': {'video': {'data': 'videos0new'},
        #           'user': {'data': 'user0new', 'rule': 'rule2'},
        #           'care_model': True, 'threshold_rate': 0.7,
        #           },  # else非关怀模式人群多出广告 + 所有广告类型数据 + 优化阈值计算方式 + 调整计算公式(标准贝叶斯公式)
        '173-n': {'video': {'data': 'videos0out'},
                  'user': {'data': 'user0out', 'rule': 'rule2'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # else非关怀模式人群多出广告 + 所有广告类型数据 + 优化阈值计算方式 + 使用以是否直接跳出为目标的数据
        '173-o': {'video': {'data': 'videos0out'},
                  'user': {'data': 'user0out', 'rule': 'rule2'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # [else, return0share1mids]非关怀模式人群多出广告 + 所有广告类型数据 + 优化阈值计算方式 + 使用以是否直接跳出为目标的数据
        '173-p': {'share': {'video': {'data': 'videos0'}, 'user': {'data': 'user0', 'rule': 'rule2'}},
                  'out': {'video': {'data': 'videos0out'}, 'user': {'data': 'user0out', 'rule': 'rule2'}},
                  'care_model': True, 'threshold_rate': 0.7,
                  'threshold_mix_func': 'add', 'mix_param': {'share_weight': 0.2, 'out_weight': 0.8}
                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案一(加权融合: k1*p(不直接跳出|出广告) + k2*p(分享|出广告))
        '173-q': {'share': {'video': {'data': 'videos0'}, 'user': {'data': 'user0', 'rule': 'rule2'}},
                  'out': {'video': {'data': 'videos0out'}, 'user': {'data': 'user0out', 'rule': 'rule2'}},
                  'care_model': True, 'threshold_rate': 0.7,
                  'threshold_mix_func': 'multiply',
                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案二(乘积融合: p(不直接跳出|出广告) * p(分享|出广告))
        '173-r': {'share': {'video': {'data': 'videos0new'}, 'user': {'data': 'user0new', 'rule': 'rule2'}},
                  'out': {'video': {'data': 'videos0out'}, 'user': {'data': 'user0out', 'rule': 'rule2'}},
                  'care_model': True, 'threshold_rate': 0.7,
                  'threshold_mix_func': 'multiply',
                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案三(乘积融合: p(不直接跳出|出广告) * p(分享|出广告), 标准贝叶斯公式)

        # 票圈视频+
        # '190-a': {'video': {'data': 'data1'},
        #           'user': {'data': 'user0', 'rule': 'rule1'}},
        # '190-b': {'video': {'data': 'data1'},
        #           'user': {'data': 'user0', 'rule': 'rule2'}},
        # '190-c': {'video': {'data': 'data21'},
        #           'user': {'data': 'user21', 'rule': 'rule1'}},
        # '190-d': {'video': {'data': 'data21'},
        #           'user': {'data': 'user21', 'rule': 'rule2'}},
        # '190-e': {'video': {'data': 'videos21'},
        #           'user': {'data': 'user21', 'rule': 'rule2'}},  # 所有广告类型本端视频数据 + 优化阈值计算方式
        '190-f': {'video': {'data': 'videos21'},
                  'user': {'data': 'user21', 'rule': 'rule2'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告
        '190-g': {'video': {'data': 'videos21out'},
                  'user': {'data': 'user21out', 'rule': 'rule2'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + [else, return0share1mids]非关怀模式人群多出广告 + 使用以是否直接跳出为目标的数据
        '190-h': {'video': {'data': 'videos21out'},
                  'user': {'data': 'user21out', 'rule': 'rule2'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 使用以是否直接跳出为目标的数据
        '190-i': {'share': {'video': {'data': 'videos21'}, 'user': {'data': 'user21', 'rule': 'rule2'}},
                  'out': {'video': {'data': 'videos21out'}, 'user': {'data': 'user21out', 'rule': 'rule2'}},
                  'care_model': True, 'threshold_rate': 0.7,
                  'threshold_mix_func': 'add', 'mix_param': {'share_weight': 0.2, 'out_weight': 0.8}
                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案一(加权融合: k1*p(不直接跳出|出广告) + k2*p(分享|出广告))
        '190-j': {'share': {'video': {'data': 'videos21'}, 'user': {'data': 'user21', 'rule': 'rule2'}},
                  'out': {'video': {'data': 'videos21out'}, 'user': {'data': 'user21out', 'rule': 'rule2'}},
                  'care_model': True, 'threshold_rate': 0.7,
                  'threshold_mix_func': 'multiply',
                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案二(乘积融合: p(不直接跳出|出广告) * p(分享|出广告))

        # 票圈视频
        # '194-a': {'video': {'data': 'data1'},
        #           'user': {'data': 'user0', 'rule': 'rule1'}},
        # '194-b': {'video': {'data': 'data1'},
        #           'user': {'data': 'user0', 'rule': 'rule2'}},
        # '194-c': {'video': {'data': 'data2'},
        #           'user': {'data': 'user4', 'rule': 'rule1'}},  # 本端数据
        # '194-d': {'video': {'data': 'data2'},
        #           'user': {'data': 'user4', 'rule': 'rule2'}},  # 本端数据 + 优化阈值计算方式
        # '194-e': {'video': {'data': 'videos4'},
        #           'user': {'data': 'user4', 'rule': 'rule2'}},  # 所有广告类型本端数据 + 优化阈值计算方式
        # '194-f': {'video': {'data': 'videos4:adtype1'},
        #           'user': {'data': 'user4', 'rule': 'rule2'}},  # 模板插屏广告视频本端数据 + 优化阈值计算方式
        '194-g': {'video': {'data': 'videos4'},
                  'user': {'data': 'user4', 'rule': 'rule2'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # 所有广告类型本端数据 + 优化阈值计算方式 + else非关怀模式人群多出广告
        # '194-h': {'video': {'data': 'videos4new'},
        #           'user': {'data': 'user4new', 'rule': 'rule2'},
        #           'care_model': True, 'threshold_rate': 0.7,
        #           },  # 所有广告类型本端数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 调整计算公式
        '194-i': {'video': {'data': 'videos4out'},
                  'user': {'data': 'user4out', 'rule': 'rule2'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # 所有广告类型本端数据 + 优化阈值计算方式 + [else, return0share1mids]非关怀模式人群多出广告 + 使用以是否直接跳出为目标的数据
        '194-j': {'video': {'data': 'videos4out'},
                  'user': {'data': 'user4out', 'rule': 'rule2'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # 所有广告类型本端数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 使用以是否直接跳出为目标的数据
        '194-k': {'share': {'video': {'data': 'videos4'}, 'user': {'data': 'user4', 'rule': 'rule2'}},
                  'out': {'video': {'data': 'videos4out'}, 'user': {'data': 'user4out', 'rule': 'rule2'}},
                  'care_model': True, 'threshold_rate': 0.7,
                  'threshold_mix_func': 'add', 'mix_param': {'share_weight': 0.2, 'out_weight': 0.8}
                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案一(加权融合: k1*p(不直接跳出|出广告) + k2*p(分享|出广告))
        '194-l': {'share': {'video': {'data': 'videos4'}, 'user': {'data': 'user4', 'rule': 'rule2'}},
                  'out': {'video': {'data': 'videos4out'}, 'user': {'data': 'user4out', 'rule': 'rule2'}},
                  'care_model': True, 'threshold_rate': 0.7,
                  'threshold_mix_func': 'multiply',
                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案二(乘积融合: p(不直接跳出|出广告) * p(分享|出广告))
        '194-m': {'share': {'video': {'data': 'videos4new'}, 'user': {'data': 'user4new', 'rule': 'rule2'}},
                  'out': {'video': {'data': 'videos4out'}, 'user': {'data': 'user4out', 'rule': 'rule2'}},
                  'care_model': True, 'threshold_rate': 0.7,
                  'threshold_mix_func': 'multiply',
                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案三(乘积融合: p(不直接跳出 | 出广告) * p(分享 | 出广告), 标准贝叶斯公式)

        # 内容精选
        # '195-a': {'video': {'data': 'data1'},
        #           'user': {'data': 'user0', 'rule': 'rule1'}},
        # '195-b': {'video': {'data': 'data1'},
        #           'user': {'data': 'user0', 'rule': 'rule2'}},
        # '195-c': {'video': {'data': 'data3'},
        #           'user': {'data': 'user5', 'rule': 'rule1'}},  # 本端数据
        # '195-d': {'video': {'data': 'data3'},
        #           'user': {'data': 'user5', 'rule': 'rule2'}},  # 本端数据 + 优化阈值计算方式
        # '195-e': {'video': {'data': 'videos5'},
        #           'user': {'data': 'user5', 'rule': 'rule2'}},  # 所有广告类型本端数据 + 优化阈值计算方式
        '195-f': {'video': {'data': 'videos5'},
                  'user': {'data': 'user5', 'rule': 'rule2'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # 所有广告类型本端数据 + 优化阈值计算方式 + else非关怀模式人群多出广告
        # '195-g': {'video': {'data': 'videos5new'},
        #           'user': {'data': 'user5new', 'rule': 'rule2'},
        #           'care_model': True, 'threshold_rate': 0.7,
        #           },  # 所有广告类型本端数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 调整计算公式
        '195-h': {'video': {'data': 'videos5out'},
                  'user': {'data': 'user5out', 'rule': 'rule2'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # 所有广告类型本端数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 使用以是否直接跳出为目标的数据
        '195-i': {'video': {'data': 'videos5out'},
                  'user': {'data': 'user5out', 'rule': 'rule2'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # 所有广告类型本端数据 + 优化阈值计算方式 + [else, return0share1mids]非关怀模式人群多出广告 + 使用以是否直接跳出为目标的数据
        '195-j': {'share': {'video': {'data': 'videos5'}, 'user': {'data': 'user5', 'rule': 'rule2'}},
                  'out': {'video': {'data': 'videos5out'}, 'user': {'data': 'user5out', 'rule': 'rule2'}},
                  'care_model': True, 'threshold_rate': 0.7,
                  'threshold_mix_func': 'add', 'mix_param': {'share_weight': 0.2, 'out_weight': 0.8}
                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案一(加权融合: k1*p(不直接跳出|出广告) + k2*p(分享|出广告))
        '195-k': {'share': {'video': {'data': 'videos5'}, 'user': {'data': 'user5', 'rule': 'rule2'}},
                  'out': {'video': {'data': 'videos5out'}, 'user': {'data': 'user5out', 'rule': 'rule2'}},
                  'care_model': True, 'threshold_rate': 0.7,
                  'threshold_mix_func': 'multiply',
                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案二(乘积融合: p(不直接跳出|出广告) * p(分享|出广告))
        '195-l': {'share': {'video': {'data': 'videos5new'}, 'user': {'data': 'user5new', 'rule': 'rule2'}},
                  'out': {'video': {'data': 'videos5out'}, 'user': {'data': 'user5out', 'rule': 'rule2'}},
                  'care_model': True, 'threshold_rate': 0.7,
                  'threshold_mix_func': 'multiply',
                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案三(乘积融合: p(不直接跳出|出广告) * p(分享|出广告), 标准贝叶斯公式)

        # 票圈短视频
        # '196-a': {'video': {'data': 'data1'},
        #           'user': {'data': 'user0', 'rule': 'rule1'}},
        # '196-b': {'video': {'data': 'data4'},
        #           'user': {'data': 'user6', 'rule': 'rule1'}},
        # '196-c': {'video': {'data': 'data4'},
        #           'user': {'data': 'user6', 'rule': 'rule3'}},
        # '196-d': {'video': {'data': 'data4:7days'},
        #           'user': {'data': 'user6', 'rule': 'rule3'}},  # 优化4
        # '196-e': {'video': {'data': 'videos6'},
        #           'user': {'data': 'user6', 'rule': 'rule1'}},  # 所有广告类型本端数据
        '196-f': {'video': {'data': 'videos6'},
                  'user': {'data': 'user6', 'rule': 'rule1'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # 所有广告类型本端数据 + else非关怀模式人群多出广告
        '196-g': {'video': {'data': 'videos6out'},
                  'user': {'data': 'user6out', 'rule': 'rule2'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # 所有广告类型本端数据 + 优化阈值计算方式 + [else, return0share1mids]非关怀模式人群多出广告 + 使用以是否直接跳出为目标的数据
        '196-h': {'video': {'data': 'videos6out'},
                  'user': {'data': 'user6out', 'rule': 'rule2'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # 所有广告类型本端数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 使用以是否直接跳出为目标的数据
        '196-i': {'share': {'video': {'data': 'videos6'}, 'user': {'data': 'user6', 'rule': 'rule2'}},
                  'out': {'video': {'data': 'videos6out'}, 'user': {'data': 'user6out', 'rule': 'rule2'}},
                  'care_model': True, 'threshold_rate': 0.7,
                  'threshold_mix_func': 'add', 'mix_param': {'share_weight': 0.2, 'out_weight': 0.8}
                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案一(加权融合: k1*p(不直接跳出|出广告) + k2*p(分享|出广告))
        '196-j': {'share': {'video': {'data': 'videos6'}, 'user': {'data': 'user6', 'rule': 'rule2'}},
                  'out': {'video': {'data': 'videos6out'}, 'user': {'data': 'user6out', 'rule': 'rule2'}},
                  'care_model': True, 'threshold_rate': 0.7,
                  'threshold_mix_func': 'multiply',
                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案二(乘积融合: p(不直接跳出|出广告) * p(分享|出广告))

        # 老好看视频
        # '197-a': {'video': {'data': 'data1'},
        #           'user': {'data': 'user0', 'rule': 'rule1'}},
        # '197-b': {'video': {'data': 'data1'},
        #           'user': {'data': 'user0', 'rule': 'rule2'}},  # 优化阈值计算方式
        # '197-c': {'video': {'data': 'data5'},
        #           'user': {'data': 'user18', 'rule': 'rule2'}},
        # '197-d': {'video': {'data': 'data5:7days'},
        #           'user': {'data': 'user18', 'rule': 'rule2'}},  # 本端数据 + 优化阈值计算方式 + 优化4
        # '197-e': {'video': {'data': 'videos18'},
        #           'user': {'data': 'user18', 'rule': 'rule2'}},  # 所有广告类型本端数据 + 优化阈值计算方式
        '197-f': {'video': {'data': 'data5'},
                  'user': {'data': 'user18', 'rule': 'rule2'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # 本端数据 + 优化阈值计算方式 + else非关怀模式人群多出广告
        '197-g': {'video': {'data': 'videos18out'},
                  'user': {'data': 'user18out', 'rule': 'rule2'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # 所有广告类型本端数据 + 优化阈值计算方式 + [else, return0share1mids]非关怀模式人群多出广告 + 使用以是否直接跳出为目标的数据
        '197-h': {'video': {'data': 'videos18out'},
                  'user': {'data': 'user18out', 'rule': 'rule2'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # 所有广告类型本端数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 使用以是否直接跳出为目标的数据
        '197-i': {'share': {'video': {'data': 'videos18'}, 'user': {'data': 'user18', 'rule': 'rule2'}},
                  'out': {'video': {'data': 'videos18out'}, 'user': {'data': 'user18out', 'rule': 'rule2'}},
                  'care_model': True, 'threshold_rate': 0.7,
                  'threshold_mix_func': 'add', 'mix_param': {'share_weight': 0.2, 'out_weight': 0.8}
                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案一(加权融合: k1*p(不直接跳出|出广告) + k2*p(分享|出广告))
        '197-j': {'share': {'video': {'data': 'videos18'}, 'user': {'data': 'user18', 'rule': 'rule2'}},
                  'out': {'video': {'data': 'videos18out'}, 'user': {'data': 'user18out', 'rule': 'rule2'}},
                  'care_model': True, 'threshold_rate': 0.7,
                  'threshold_mix_func': 'multiply',
                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案二(乘积融合: p(不直接跳出|出广告) * p(分享|出广告))

        # 票圈最惊奇
        # '198-a': {'video': {'data': 'data1'},
        #           'user': {'data': 'user0', 'rule': 'rule1'}},
        # '198-b': {'video': {'data': 'data6'},
        #           'user': {'data': 'user19', 'rule': 'rule1'}},  # 本端数据
        # '198-c': {'video': {'data': 'data1'},
        #           'user': {'data': 'user0', 'rule': 'rule2'}},  # 优化阈值计算方式
        # '198-d': {'video': {'data': 'data6'},
        #           'user': {'data': 'user19', 'rule': 'rule2'}},  # 本端数据 + 优化阈值计算方式
        # '198-e': {'video': {'data': 'videos19'},
        #           'user': {'data': 'user19', 'rule': 'rule2'}},  # 所有广告类型本端数据 + 优化阈值计算方式
        '198-f': {'video': {'data': 'videos19'},
                  'user': {'data': 'user19', 'rule': 'rule2'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # 所有广告类型本端数据 + 优化阈值计算方式 + else非关怀模式人群多出广告
        '198-g': {'video': {'data': 'videos19out'},
                  'user': {'data': 'user19out', 'rule': 'rule2'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # 所有广告类型本端数据 + 优化阈值计算方式 + [else, return0share1mids]非关怀模式人群多出广告 + 使用以是否直接跳出为目标的数据
        '198-h': {'video': {'data': 'videos19out'},
                  'user': {'data': 'user19out', 'rule': 'rule2'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # 所有广告类型本端数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 使用以是否直接跳出为目标的数据
        '198-i': {'share': {'video': {'data': 'videos19'}, 'user': {'data': 'user19', 'rule': 'rule2'}},
                  'out': {'video': {'data': 'videos19out'}, 'user': {'data': 'user19out', 'rule': 'rule2'}},
                  'care_model': True, 'threshold_rate': 0.7,
                  'threshold_mix_func': 'add', 'mix_param': {'share_weight': 0.2, 'out_weight': 0.8}
                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案一(加权融合: k1*p(不直接跳出|出广告) + k2*p(分享|出广告))
        '198-j': {'share': {'video': {'data': 'videos19'}, 'user': {'data': 'user19', 'rule': 'rule2'}},
                  'out': {'video': {'data': 'videos19out'}, 'user': {'data': 'user19out', 'rule': 'rule2'}},
                  'care_model': True, 'threshold_rate': 0.7,
                  'threshold_mix_func': 'multiply',
                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案二(乘积融合: p(不直接跳出|出广告) * p(分享|出广告))

        # 票圈足迹(票圈|视频精选)
        # '242-a': {'video': {'data': 'data1'},
        #           'user': {'data': 'user0', 'rule': 'rule1'}},
        # '242-b': {'video': {'data': 'data1'},
        #           'user': {'data': 'user0', 'rule': 'rule2'}},
        # '242-c': {'video': {'data': 'videos22'},
        #           'user': {'data': 'user22', 'rule': 'rule2'}},  # 所有广告类型本端数据 + 优化阈值计算方式
        '242-d': {'video': {'data': 'videos22'},
                  'user': {'data': 'user22', 'rule': 'rule2'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # 所有广告类型本端数据 + 优化阈值计算方式 + else非关怀模式人群多出广告
        '242-e': {'video': {'data': 'videos22out'},
                  'user': {'data': 'user22out', 'rule': 'rule2'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # 所有广告类型本端数据 + 优化阈值计算方式 + [else, return0share1mids]非关怀模式人群多出广告 + 使用以是否直接跳出为目标的数据
        '242-f': {'video': {'data': 'videos22out'},
                  'user': {'data': 'user22out', 'rule': 'rule2'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # 所有广告类型本端数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 使用以是否直接跳出为目标的数据
        '242-g': {'share': {'video': {'data': 'videos22'}, 'user': {'data': 'user22', 'rule': 'rule2'}},
                  'out': {'video': {'data': 'videos22out'}, 'user': {'data': 'user22out', 'rule': 'rule2'}},
                  'care_model': True, 'threshold_rate': 0.7,
                  'threshold_mix_func': 'add', 'mix_param': {'share_weight': 0.2, 'out_weight': 0.8}
                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案一(加权融合: k1*p(不直接跳出|出广告) + k2*p(分享|出广告))
        '242-h': {'share': {'video': {'data': 'videos22'}, 'user': {'data': 'user22', 'rule': 'rule2'}},
                  'out': {'video': {'data': 'videos22out'}, 'user': {'data': 'user22out', 'rule': 'rule2'}},
                  'care_model': True, 'threshold_rate': 0.7,
                  'threshold_mix_func': 'multiply',
                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案二(乘积融合: p(不直接跳出|出广告) * p(分享|出广告))

        # 票圈福年
        # '243-a': {'video': {'data': 'data1'},
        #           'user': {'data': 'user0', 'rule': 'rule1'}},
        # '243-b': {'video': {'data': 'data1'},
        #           'user': {'data': 'user0', 'rule': 'rule2'}},
        # '243-c': {'video': {'data': 'videos3'},
        #           'user': {'data': 'user3', 'rule': 'rule1'}},  # 所有广告类型本端数据
        '243-d': {'video': {'data': 'videos3'},
                  'user': {'data': 'user3', 'rule': 'rule1'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # 所有广告类型本端数据 + else非关怀模式人群多出广告
        '243-e': {'video': {'data': 'videos3out'},
                  'user': {'data': 'user3out', 'rule': 'rule2'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # 所有广告类型本端数据 + 优化阈值计算方式 + [else, return0share1mids]非关怀模式人群多出广告 + 使用以是否直接跳出为目标的数据
        '243-f': {'video': {'data': 'videos3out'},
                  'user': {'data': 'user3out', 'rule': 'rule2'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # 所有广告类型本端数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 使用以是否直接跳出为目标的数据
        '243-g': {'share': {'video': {'data': 'videos3'}, 'user': {'data': 'user3', 'rule': 'rule2'}},
                  'out': {'video': {'data': 'videos3out'}, 'user': {'data': 'user3out', 'rule': 'rule2'}},
                  'care_model': True, 'threshold_rate': 0.7,
                  'threshold_mix_func': 'add', 'mix_param': {'share_weight': 0.2, 'out_weight': 0.8}
                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案一(加权融合: k1*p(不直接跳出|出广告) + k2*p(分享|出广告))
        '243-h': {'share': {'video': {'data': 'videos3'}, 'user': {'data': 'user3', 'rule': 'rule2'}},
                  'out': {'video': {'data': 'videos3out'}, 'user': {'data': 'user3out', 'rule': 'rule2'}},
                  'care_model': True, 'threshold_rate': 0.7,
                  'threshold_mix_func': 'multiply',
                  },  # 所有广告类型本端视频数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案二(乘积融合: p(不直接跳出|出广告) * p(分享|出广告))

        # 信仰之路
        '324-a': {'video': {'data': 'videos0'},
                  'user': {'data': 'user0', 'rule': 'rule2'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # vlog端所有广告类型数据 + 优化阈值计算方式 + else非关怀模式人群多出广告
        '324-b': {'video': {'data': 'videos0out'},
                  'user': {'data': 'user0out', 'rule': 'rule2'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # vlog端所有广告类型数据 + 优化阈值计算方式 + [else, return0share1mids]非关怀模式人群多出广告 + 使用以是否直接跳出为目标的数据
        '324-c': {'video': {'data': 'videos0out'},
                  'user': {'data': 'user0out', 'rule': 'rule2'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # vlog端所有广告类型数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 使用以是否直接跳出为目标的数据
        '324-d': {'share': {'video': {'data': 'videos0'}, 'user': {'data': 'user0', 'rule': 'rule2'}},
                  'out': {'video': {'data': 'videos0out'}, 'user': {'data': 'user0out', 'rule': 'rule2'}},
                  'care_model': True, 'threshold_rate': 0.7,
                  'threshold_mix_func': 'add', 'mix_param': {'share_weight': 0.2, 'out_weight': 0.8}
                  },  # vlog端所有广告类型数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案一(加权融合: k1*p(不直接跳出|出广告) + k2*p(分享|出广告))
        '324-e': {'share': {'video': {'data': 'videos0'}, 'user': {'data': 'user0', 'rule': 'rule2'}},
                  'out': {'video': {'data': 'videos0out'}, 'user': {'data': 'user0out', 'rule': 'rule2'}},
                  'care_model': True, 'threshold_rate': 0.7,
                  'threshold_mix_func': 'multiply',
                  },  # vlog端所有广告类型数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 分享与不直接跳出融合方案二(乘积融合: p(不直接跳出|出广告) * p(分享|出广告))

    }

    # 广告模型阈值计算配置
    AD_ABTEST_THRESHOLD_CONFIG = {
        # vlog
        '173': {
            'ab0': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab1': {'group': 9 / 24, 'mean_group': 9 / 24},
            'ab2': {'group': 11 / 24, 'mean_group': 11 / 24},
            'ab3': {'group': 9 / 24, 'mean_group': 9 / 24},
            'ab4': {'group': 11 / 24, 'mean_group': 11 / 24},
            'ab5': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab6': {'group': 11 / 24, 'mean_group': 11 / 24},
            'ab7': {'group': 11 / 24, 'mean_group': 11 / 24},
            'ab8': {'group': 11 / 24, 'mean_group': 11 / 24},
            'ab9': {'group': 1 / 2, 'mean_group': 1 / 2},
        },
        # 票圈视频+
        '190': {
            'ab0': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab1': {'group': 7 / 12, 'mean_group': 7 / 12},
            'ab2': {'group': 7 / 12, 'mean_group': 7 / 12},
            'ab3': {'group': 7 / 12, 'mean_group': 7 / 12},
            'ab4': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab5': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab6': {'group': 7 / 12, 'mean_group': 7 / 12},
            'ab7': {'group': 7 / 12, 'mean_group': 7 / 12},
            'ab8': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab9': {'group': 1 / 2, 'mean_group': 1 / 2},
        },
        # 票圈视频
        '194': {
            'ab0': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab1': {'group': 23 / 24, 'mean_group': 23 / 24},
            'ab2': {'group': 23 / 24, 'mean_group': 23 / 24},
            'ab3': {'group': 5 / 12, 'mean_group': 5 / 12},
            'ab4': {'group': 5 / 12, 'mean_group': 5 / 12},
            'ab5': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab6': {'group': 23 / 24, 'mean_group': 23 / 24},
            'ab7': {'group': 23 / 24, 'mean_group': 23 / 24},
            'ab8': {'group': 23 / 24, 'mean_group': 23 / 24},
            'ab9': {'group': 1 / 2, 'mean_group': 1 / 2},
        },
        # 内容精选
        '195': {
            'ab0': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab1': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab2': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab3': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab4': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab5': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab6': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab7': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab8': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab9': {'group': 1 / 2, 'mean_group': 1 / 2},
        },
        # 票圈短视频
        '196': {
            'ab0': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab1': {'group': 23 / 48, 'mean_group': 23 / 48},
            'ab2': {'group': 23 / 48, 'mean_group': 23 / 48},
            'ab3': {'group': 23 / 48, 'mean_group': 23 / 48},
            'ab4': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab5': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab6': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab7': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab8': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab9': {'group': 23 / 48, 'mean_group': 23 / 48},
        },
        # 老好看视频
        '197': {
            'ab0': {'group': 25 / 48, 'mean_group': 25 / 48},
            'ab1': {'group': 25 / 48, 'mean_group': 25 / 48},
            'ab2': {'group': 25 / 48, 'mean_group': 25 / 48},
            'ab3': {'group': 25 / 48, 'mean_group': 25 / 48},
            'ab4': {'group': 25 / 48, 'mean_group': 25 / 48},
            'ab5': {'group': 25 / 48, 'mean_group': 25 / 48},
            'ab6': {'group': 25 / 48, 'mean_group': 25 / 48},
            'ab7': {'group': 25 / 48, 'mean_group': 25 / 48},
            'ab8': {'group': 25 / 48, 'mean_group': 25 / 48},
            'ab9': {'group': 25 / 48, 'mean_group': 25 / 48},
        },
        # 票圈最惊奇
        '198': {
            'ab0': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab1': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab2': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab3': {'group': 7 / 18, 'mean_group': 7 / 18},
            'ab4': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab5': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab6': {'group': 7 / 18, 'mean_group': 7 / 18},
            'ab7': {'group': 7 / 18, 'mean_group': 7 / 18},
            'ab8': {'group': 13 / 36, 'mean_group': 13 / 36},
            'ab9': {'group': 13 / 36, 'mean_group': 13 / 36},
        },
        # 票圈足迹
        '242': {
            'ab0': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab1': {'group': 7 / 12, 'mean_group': 7 / 12},
            'ab2': {'group': 7 / 12, 'mean_group': 7 / 12},
            'ab3': {'group': 7 / 12, 'mean_group': 7 / 12},
            'ab4': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab5': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab6': {'group': 7 / 12, 'mean_group': 7 / 12},
            'ab7': {'group': 7 / 12, 'mean_group': 7 / 12},
            'ab8': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab9': {'group': 1 / 2, 'mean_group': 1 / 2},
        },
        # 票圈福年
        '243': {
            'ab0': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab1': {'group': 7 / 12, 'mean_group': 7 / 12},
            'ab2': {'group': 7 / 12, 'mean_group': 7 / 12},
            'ab3': {'group': 7 / 12, 'mean_group': 7 / 12},
            'ab4': {'group': 7 / 12, 'mean_group': 7 / 12},
            'ab5': {'group': 7 / 12, 'mean_group': 7 / 12},
            'ab6': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab7': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab8': {'group': 1 / 2, 'mean_group': 1 / 2},
            'ab9': {'group': 1 / 2, 'mean_group': 1 / 2},
        },
    }

    # 广告模型自动调整阈值配置
    AD_ABTEST_ABCODE_CONFIG = {
        # 票圈vlog
        APP_TYPE['VLOG']: {
            'ab_test_id': '173',
            'not_update': 0.01,  # 无需调整阈值的uv浮动
            'gradient': 0.05,  # 调整梯度
            'max_update_step': 5,  # 最大调整步数
            # 调整步长
            'threshold_update': {
                'ab0': 1 / 216,
                'ab1': 1 / 216,
                'ab2': 1 / 216,
                'ab3': 1 / 216,
                'ab4': 1 / 216,
                'ab5': 1 / 216,
                'ab6': 1 / 216,
                'ab7': 1 / 216,
                'ab8': 1 / 216,
                'ab9': 1 / 216,
            },
            # 分时段控制目标uv参数
            'target_uv_param': {
                'ab0': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.005,
                                              'special_max_update_step': 51}
                },  # 0-7点,uv控制在0%
                'ab1': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.005,
                                              'special_max_update_step': 51}
                },  # 0-7点,uv控制在0%
                'ab2': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.005,
                                              'special_max_update_step': 51}
                },  # 0-7点,uv控制在0%
                'ab3': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.005,
                                              'special_max_update_step': 51}
                },  # 0-7点,uv控制在0%
                'ab4': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.005,
                                              'special_max_update_step': 51}
                },  # 0-7点,uv控制在0%
                'ab5': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.005,
                                              'special_max_update_step': 51}
                },  # 0-7点,uv控制在0%
                # 'ab6': {
                #     'update_hours': list(range(9)), 'update_param': 1/2,
                #     'special_update_config': {'special_hours': [0, 1, 9, 10], 'special_gradient': 0.02,
                #                               'special_max_update_step': 15}
                # },  # 0-9点,uv控制在设定目标uv的1/2
                'ab6': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.005,
                                              'special_max_update_step': 51}
                },  # 0-7点,uv控制在设定目标uv的0%
                'ab7': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.005,
                                              'special_max_update_step': 51}
                },  # 0-9点,uv控制在0%
                'ab8': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.005,
                                              'special_max_update_step': 51}
                },  # 0-7点,uv控制在0%
                'ab9': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.005,
                                              'special_max_update_step': 51}
                },  # 0-7点,uv控制在0%
            },
        },
        # 票圈视频+
        APP_TYPE['PIAO_QUAN_VIDEO_PLUS']: {
            'ab_test_id': '190',
            'not_update': 0.01,
            'gradient': 0.05,
            'max_update_step': 5,
            'threshold_update': {
                'ab0': 1 / 72,
                'ab1': 1 / 72,
                'ab2': 1 / 72,
                'ab3': 1 / 72,
                'ab4': 1 / 72,
                'ab5': 1 / 72,
                'ab6': 1 / 72,
                'ab7': 1 / 72,
                'ab8': 1 / 72,
                'ab9': 1 / 72,
            },
            # 分时段控制目标uv参数
            'target_uv_param': {
                'ab0': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
                'ab1': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
                'ab2': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
                'ab3': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
                'ab4': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
                'ab5': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
                'ab6': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在设定目标uv的0%
                'ab7': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
                'ab8': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
                'ab9': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
            },
        },
        # 票圈视频
        APP_TYPE['LOVE_LIVE']: {
            'ab_test_id': '194',
            'not_update': 0.01,
            'gradient': 0.07,
            'max_update_step': 3,
            'threshold_update': {
                'ab0': 1 / 96,
                'ab1': 1 / 96,
                'ab2': 1 / 96,
                'ab3': 1 / 96,
                'ab4': 1 / 96,
                'ab5': 1 / 96,
                'ab6': 1 / 96,
                'ab7': 1 / 96,
                'ab8': 1 / 96,
                'ab9': 1 / 96,
            },
            # 分时段控制目标uv参数
            'target_uv_param': {
                'ab0': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 7], 'special_gradient': 0.01,
                                              'special_max_update_step': 53}
                },  # 0-7点,uv控制在0%
                'ab1': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 7], 'special_gradient': 0.01,
                                              'special_max_update_step': 53}
                },  # 0-7点,uv控制在0%
                'ab2': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 7], 'special_gradient': 0.01,
                                              'special_max_update_step': 53}
                },  # 0-7点,uv控制在0%
                'ab3': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 7], 'special_gradient': 0.01,
                                              'special_max_update_step': 53}
                },  # 0-7点,uv控制在0%
                'ab4': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 7], 'special_gradient': 0.01,
                                              'special_max_update_step': 53}
                },  # 0-7点,uv控制在0%
                'ab5': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 7], 'special_gradient': 0.01,
                                              'special_max_update_step': 53}
                },  # 0-7点,uv控制在0%
                'ab6': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 7], 'special_gradient': 0.01,
                                              'special_max_update_step': 53}
                },  # 0-7点,uv控制在0%
                'ab7': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 7], 'special_gradient': 0.01,
                                              'special_max_update_step': 53}
                },  # 0-7点,uv控制在0%
                'ab8': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 7], 'special_gradient': 0.01,
                                              'special_max_update_step': 53}
                },  # 0-7点,uv控制在0%
                'ab9': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 7], 'special_gradient': 0.01,
                                              'special_max_update_step': 53}
                },  # 0-7点,uv控制在0%
            },
        },
        # 内容精选
        APP_TYPE['LONG_VIDEO']: {
            'ab_test_id': '195',
            'not_update': 0.01,
            'gradient': 0.05,
            'max_update_step': 5,
            'threshold_update': {
                'ab0': 1 / 96,
                'ab1': 1 / 96,
                'ab2': 1 / 96,
                'ab3': 1 / 96,
                'ab4': 1 / 96,
                'ab5': 1 / 96,
                'ab6': 1 / 96,
                'ab7': 1 / 96,
                'ab8': 1 / 96,
                'ab9': 1 / 96,
            },
            # 分时段控制目标uv参数
            'target_uv_param': {
                'ab0': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 29}
                },  # 0-7点,uv控制在0%
                'ab1': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 29}
                },  # 0-7点,uv控制在0%
                'ab2': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 29}
                },  # 0-7点,uv控制在0%
                'ab3': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 29}
                },  # 0-7点,uv控制在0%
                'ab4': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 29}
                },  # 0-7点,uv控制在0%
                'ab5': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 29}
                },  # 0-7点,uv控制在0%
                'ab6': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 29}
                },  # 0-7点,uv控制在0%
                'ab7': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 29}
                },  # 0-7点,uv控制在0%
                'ab8': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 29}
                },  # 0-7点,uv控制在0%
                'ab9': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 29}
                },  # 0-7点,uv控制在0%
            },
        },
        # 票圈短视频
        APP_TYPE['SHORT_VIDEO']: {
            'ab_test_id': '196',
            'not_update': 0.01,
            'gradient': 0.05,
            'max_update_step': 5,
            'threshold_update': {
                'ab0': 1 / 72,
                'ab1': 1 / 72,
                'ab2': 1 / 72,
                'ab3': 1 / 72,
                'ab4': 1 / 72,
                'ab5': 1 / 72,
                'ab6': 1 / 72,
                'ab7': 1 / 72,
                'ab8': 1 / 72,
                'ab9': 1 / 72,
            },
            # 分时段控制目标uv参数
            'target_uv_param': {
                'ab0': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
                'ab1': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
                'ab2': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
                'ab3': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
                'ab4': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
                'ab5': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
                'ab6': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
                'ab7': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
                'ab8': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
                'ab9': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
            },
        },
        # 老好看视频
        APP_TYPE['LAO_HAO_KAN_VIDEO']: {
            'ab_test_id': '197',
            'not_update': 0.01,
            'gradient': 0.05,
            'max_update_step': 5,
            'threshold_update': {
                'ab0': 1 / 48,
                'ab1': 1 / 48,
                'ab2': 1 / 48,
                'ab3': 1 / 48,
                'ab4': 1 / 48,
                'ab5': 1 / 48,
                'ab6': 1 / 48,
                'ab7': 1 / 48,
                'ab8': 1 / 48,
                'ab9': 1 / 48,
            },
        },
        # 票圈最惊奇
        APP_TYPE['ZUI_JING_QI']: {
            'ab_test_id': '198',
            'not_update': 0.01,
            'gradient': 0.05,
            'max_update_step': 5,
            'threshold_update': {
                'ab0': 1 / 48,
                'ab1': 1 / 48,
                'ab2': 1 / 48,
                'ab3': 1 / 48,
                'ab4': 1 / 48,
                'ab5': 1 / 48,
                'ab6': 1 / 48,
                'ab7': 1 / 48,
                'ab8': 1 / 48,
                'ab9': 1 / 48,
            },
        },
        # 票圈足迹
        APP_TYPE['JOURNEY']: {
            'ab_test_id': '242',
            'not_update': 0.01,
            'gradient': 0.05,
            'max_update_step': 5,
            'threshold_update': {
                'ab0': 1 / 48,
                'ab1': 1 / 48,
                'ab2': 1 / 48,
                'ab3': 1 / 48,
                'ab4': 1 / 48,
                'ab5': 1 / 48,
                'ab6': 1 / 48,
                'ab7': 1 / 48,
                'ab8': 1 / 48,
                'ab9': 1 / 48,
            },
            # 分时段控制目标uv参数
            'target_uv_param': {
                'ab0': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 7], 'special_gradient': 0.01,
                                              'special_max_update_step': 30}
                },  # 0-7点,uv控制在0%
                'ab1': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 7], 'special_gradient': 0.01,
                                              'special_max_update_step': 30}
                },  # 0-7点,uv控制在0%
                'ab2': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 7], 'special_gradient': 0.01,
                                              'special_max_update_step': 30}
                },  # 0-7点,uv控制在0%
                'ab3': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 7], 'special_gradient': 0.01,
                                              'special_max_update_step': 30}
                },  # 0-7点,uv控制在0%
                'ab4': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 7], 'special_gradient': 0.01,
                                              'special_max_update_step': 30}
                },  # 0-7点,uv控制在0%
                'ab5': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 7], 'special_gradient': 0.01,
                                              'special_max_update_step': 30}
                },  # 0-7点,uv控制在0%
                'ab6': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 7], 'special_gradient': 0.01,
                                              'special_max_update_step': 30}
                },  # 0-7点,uv控制在设定目标uv的0%
                'ab7': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 7], 'special_gradient': 0.01,
                                              'special_max_update_step': 30}
                },  # 0-7点,uv控制在0%
                'ab8': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 7], 'special_gradient': 0.01,
                                              'special_max_update_step': 30}
                },  # 0-7点,uv控制在0%
                'ab9': {
                    'special_update_config': {'special_hours': [0, 7], 'special_gradient': 0.01,
                                              'special_max_update_step': 30}
                },  # 0-7点,uv控制在0%
            },
        },
        # 票圈福年
        APP_TYPE['BLESSING_YEAR']: {
            'ab_test_id': '243',
            'not_update': 0.01,
            'gradient': 0.05,
            'max_update_step': 5,
            'threshold_update': {
                'ab0': 1 / 72,
                'ab1': 1 / 72,
                'ab2': 1 / 72,
                'ab3': 1 / 72,
                'ab4': 1 / 72,
                'ab5': 1 / 72,
                'ab6': 1 / 72,
                'ab7': 1 / 72,
                'ab8': 1 / 72,
                'ab9': 1 / 72,
            },
            # 分时段控制目标uv参数
            'target_uv_param': {
                'ab0': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
                'ab1': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
                'ab2': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
                'ab3': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
                'ab4': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
                'ab5': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
                'ab6': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在设定目标uv的0%
                'ab7': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
                'ab8': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
                'ab9': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
            },
        },
        # 信仰之路
        APP_TYPE['WAN_NENG_VIDEO']: {
            'ab_test_id': '324',
            'not_update': 0.01,  # 无需调整阈值的uv浮动
            'gradient': 0.05,  # 调整梯度
            'max_update_step': 5,  # 最大调整步数
            # 调整步长
            'threshold_update': {
                'ab0': 1 / 96,
                'ab1': 1 / 96,
                'ab2': 1 / 96,
                'ab3': 1 / 96,
                'ab4': 1 / 96,
                'ab5': 1 / 96,
                'ab6': 1 / 96,
                'ab7': 1 / 96,
                'ab8': 1 / 96,
                'ab9': 1 / 96,
            },
            # 分时段控制目标uv参数
            'target_uv_param': {
                'ab0': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
                'ab1': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
                'ab2': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
                'ab3': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
                'ab4': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
                'ab5': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
                'ab6': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在设定目标uv的0%
                'ab7': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-9点,uv控制在0%
                'ab8': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
                'ab9': {
                    'update_hours': list(range(7)), 'update_param': 0,
                    'special_update_config': {'special_hours': [0, 1, 7, 8], 'special_gradient': 0.01,
                                              'special_max_update_step': 23}
                },  # 0-7点,uv控制在0%
            },
        },
    }

    # 用户组有广告时的分享率预测结果存放 redis key 前缀,完整格式:ad:users:group:predict:share:rate:{user_data_key}:{user_rule_key}:{date}
    KEY_NAME_PREFIX_AD_GROUP = 'ad:users:group:predict:share:rate:'
    # 视频有广告时的分享率预测结果存放 redis key 前缀,完整格式:ad:video:predict:share:rate:{video_data_key}:{date}
    KEY_NAME_PREFIX_AD_VIDEO = 'ad:video:predict:share:rate:'
    # 用户分组结果存放 redis key 前缀,完整格式:mid:group:{class_key}:{mid}
    KEY_NAME_PREFIX_MID_GROUP = 'mid:group:'
    # 广告推荐阈值结果存放 redis key 前缀,完整格式:ad:threshold:{abtestId}:{abtestConfigTag}:{abtestGroup}:{group}
    KEY_NAME_PREFIX_AD_THRESHOLD = 'ad:threshold:'
    # 广告推荐关怀模式实验阈值结果存放 redis key 前缀,完整格式:ad:threshold:care:{abtestId}:{abtestConfigTag}:{abtestGroup}:{group}
    KEY_NAME_PREFIX_AD_THRESHOLD_CARE_MODEL = 'ad:threshold:care:'
    # 广告推荐阈值计算记录存放 redis key,完整格式:ad:threshold:record
    KEY_NAME_PREFIX_AD_THRESHOLD_RECORD = 'ad:threshold:record'
    # 广告推荐自动调整阈值参数记录存放 redis key,完整格式:ad:threshold:param:record
    KEY_NAME_PREFIX_AD_THRESHOLD_PARAM_RECORD = 'ad:threshold:param:record'


class DevelopmentConfig(BaseConfig):
    """开发环境配置"""
    # 报警内容 环境区分
    ENV_TEXT = "开发环境"
    # 项目存放目录
    PROJECT_PATH = '/data2/rov-offline'

    # 测试环境redis地址
    REDIS_INFO = {
        'host': 'r-bp1ps6my7lzg8rdhwx682.redis.rds.aliyuncs.com',
        'port': 6379,
        'password': 'Wqsd@2019',
    }

    # Hologres连接参数,本地使用
    HOLOGRES_INFO = {
        'host': 'hgprecn-cn-7pp28y18c00c-cn-hangzhou.hologres.aliyuncs.com',
        'port': 80,
        'dbname': 'dssm',
        'user': 'LTAI5tMPqPy9yboQAf1mBCCN',
        'password': '4BEcOgxREOPq7t3A7EWkjciVULeQGj'
    }

    # 测试环境mysql地址
    MYSQL_INFO = {
        'host': 'rm-bp1k5853td1r25g3n690.mysql.rds.aliyuncs.com',
        'port': 3306,
        'user': 'wx2016_longvideo',
        'password': 'wx2016_longvideoP@assword1234',
        'db': 'longvideo',
        'charset': 'utf8'
    }

    # 测试环境 过滤用mysql地址
    FILTER_MYSQL_INFO = {
        'host': 'am-bp1g3ys9u00u483uc131930.ads.aliyuncs.com',
        'port': 3306,
        'user': 'lv_manager',
        'password': 'lv_manager@2020',
        'db': 'longvideo',
        'charset': 'utf8'
    }

    # 日志服务配置
    ALIYUN_LOG = {
        'ENDPOINT': 'cn-hangzhou.log.aliyuncs.com',
        'ACCESSID': 'LTAIWYUujJAm7CbH',
        'ACCESSKEY': 'RfSjdiWwED1sGFlsjXv0DlfTnZTG1P',
        'PROJECT': 'rov-server-test',
    }

    # Hologres视频状态存储表名
    VIDEO_STATUS = 'longvideo_test.dwd_mdm_item_video_stat'

    # 快速曝光流量池ID
    QUICK_FLOW_POOL_ID = 3

    # 获取流量池分发配置接口地址
    GET_FLOW_POOL_RECOMMEND_CONFIG_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/getConfig'
    # 从流量池获取视频接口地址
    GET_VIDEOS_FROM_POOL_URL = 'http://testapi-internal.piaoquantv.com/flowpool/video/getAllVideo'
    # 获取视频在流量池中的剩余可分发数接口地址
    GET_REMAIN_VIEW_COUNT_URL = 'http://testapi-internal.piaoquantv.com/flowpool/video/remainViewCount'
    # 计算完ROV通知后端接口地址
    NOTIFY_BACKEND_UPDATE_ROV_SCORE_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/updateRovScore'
    # 获取置顶视频列表接口地址
    TOP_VIDEO_LIST_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/topVideoList'
    # 获取首页兜底视频json接口地址
    BOTTOM_JSON_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/video/distribute/structure/video/list'
    # 通知后端更新兜底视频接口地址
    NOTIFY_BACKEND_updateFallBackVideoList_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/updateFallBackVideoList'
    # 获取限流视频接口地址
    GET_VIDEO_LIMIT_LIST_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/getVideoLimitList'
    # 获取管理后台设置的广告目标uv值接口地址
    GET_AD_TARGET_UV_URL = 'https://testadmin.piaoquantv.com/manager/ad/algo/threshold/productUvTargetList'

    # # logs 上传oss 目标Bucket指定目录
    # OSS_FOLDER_LOGS = 'rov-offline/dev/logs/'
    # # data 上传oss 目标Bucket指定目录
    # OSS_FOLDER_DATA = 'rov-offline/dev/data/'


class TestConfig(BaseConfig):
    """测试环境配置"""
    # 报警内容 环境区分
    ENV_TEXT = "测试环境"
    # 项目存放目录
    PROJECT_PATH = '/data2/rov-offline'

    # 测试环境redis地址
    REDIS_INFO = {
        'host': 'r-bp1ps6my7lzg8rdhwx682.redis.rds.aliyuncs.com',
        'port': 6379,
        'password': 'Wqsd@2019',
    }

    # Hologres连接参数,服务器使用
    HOLOGRES_INFO = {
        'host': 'hgprecn-cn-7pp28y18c00c-cn-hangzhou-vpc.hologres.aliyuncs.com',
        'port': 80,
        'dbname': 'dssm',
        'user': 'LTAI5tMPqPy9yboQAf1mBCCN',
        'password': '4BEcOgxREOPq7t3A7EWkjciVULeQGj'
    }

    # 测试环境mysql地址
    MYSQL_INFO = {
        'host': 'rm-bp1k5853td1r25g3n690.mysql.rds.aliyuncs.com',
        'port': 3306,
        'user': 'wx2016_longvideo',
        'password': 'wx2016_longvideoP@assword1234',
        'db': 'longvideo',
        'charset': 'utf8'
    }

    # 测试环境 过滤用mysql地址
    FILTER_MYSQL_INFO = {
        'host': 'am-bp1g3ys9u00u483uc131930.ads.aliyuncs.com',
        'port': 3306,
        'user': 'lv_manager',
        'password': 'lv_manager@2020',
        'db': 'longvideo',
        'charset': 'utf8'
    }

    # 日志服务配置
    ALIYUN_LOG = {
        'ENDPOINT': 'cn-hangzhou.log.aliyuncs.com',
        'ACCESSID': 'LTAIWYUujJAm7CbH',
        'ACCESSKEY': 'RfSjdiWwED1sGFlsjXv0DlfTnZTG1P',
        'PROJECT': 'rov-server-test',
    }

    # Hologres视频状态存储表名
    VIDEO_STATUS = 'longvideo_test.dwd_mdm_item_video_stat'

    # 快速曝光流量池ID
    QUICK_FLOW_POOL_ID = 3

    # 获取流量池分发配置接口地址
    GET_FLOW_POOL_RECOMMEND_CONFIG_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/getConfig'
    # 从流量池获取视频接口地址
    GET_VIDEOS_FROM_POOL_URL = 'http://testapi-internal.piaoquantv.com/flowpool/video/getAllVideo'
    # 获取视频在流量池中的剩余可分发数接口地址
    GET_REMAIN_VIEW_COUNT_URL = 'http://testapi-internal.piaoquantv.com/flowpool/video/remainViewCount'
    # 计算完ROV通知后端接口地址
    NOTIFY_BACKEND_UPDATE_ROV_SCORE_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/updateRovScore'
    # 获取置顶视频列表接口地址
    TOP_VIDEO_LIST_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/topVideoList'
    # 获取首页兜底视频json接口地址
    BOTTOM_JSON_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/video/distribute/structure/video/list'
    # 通知后端更新兜底视频接口地址
    NOTIFY_BACKEND_updateFallBackVideoList_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/updateFallBackVideoList'
    # 获取限流视频接口地址
    GET_VIDEO_LIMIT_LIST_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/getVideoLimitList'
    # 获取管理后台设置的广告目标uv值接口地址
    GET_AD_TARGET_UV_URL = 'https://testadmin.piaoquantv.com/manager/ad/algo/threshold/productUvTargetList'

    # # logs 上传oss 目标Bucket指定目录
    # OSS_FOLDER_LOGS = 'rov-offline/test/logs/'
    # # data 上传oss 目标Bucket指定目录
    # OSS_FOLDER_DATA = 'rov-offline/test/data/'


class PreProductionConfig(BaseConfig):
    """预发布环境配置"""
    # 报警内容 环境区分
    ENV_TEXT = "预发布环境"
    # 项目存放目录
    PROJECT_PATH = '/data/rov-offline'

    # redis地址
    REDIS_INFO = {
        'host': 'r-bp1fogs2mflr1ybfot.redis.rds.aliyuncs.com',
        'port': 6379,
        'password': 'Wqsd@2019',
    }

    # Hologres连接参数,服务器使用
    HOLOGRES_INFO = {
        'host': 'hgprecn-cn-7pp28y18c00c-cn-hangzhou-vpc.hologres.aliyuncs.com',
        'port': 80,
        'dbname': 'dssm',
        'user': 'LTAI5tMPqPy9yboQAf1mBCCN',
        'password': '4BEcOgxREOPq7t3A7EWkjciVULeQGj'
    }

    # 生产环境mysql地址
    MYSQL_INFO = {
        'host': 'rr-bp1x9785e8h5452bi157.mysql.rds.aliyuncs.com',
        'port': 3306,
        'user': 'wx2016_longvideo',
        'password': 'wx2016_longvideoP@assword1234',
        'db': 'longvideo',
        'charset': 'utf8'
    }

    # 生产环境 过滤用mysql地址
    FILTER_MYSQL_INFO = {
        'host': 'am-bp15tqt957i3b3sgi131950.ads.aliyuncs.com',
        'port': 3306,
        'user': 'lv_manager',
        'password': 'lv_manager@2020',
        'db': 'longvideo',
        'charset': 'utf8'
    }

    # 日志服务配置
    ALIYUN_LOG = {
        'ENDPOINT': 'cn-hangzhou.log.aliyuncs.com',
        'ACCESSID': 'LTAIWYUujJAm7CbH',
        'ACCESSKEY': 'RfSjdiWwED1sGFlsjXv0DlfTnZTG1P',
        'PROJECT': 'rov-server',
    }

    # Hologres视频状态存储表名
    VIDEO_STATUS = 'longvideo.dwd_mdm_item_video_stat'

    # 快速曝光流量池ID
    QUICK_FLOW_POOL_ID = 3

    # 获取流量池分发配置接口地址
    GET_FLOW_POOL_RECOMMEND_CONFIG_URL = 'http://prespeed-internal.piaoquantv.com/longvideoapi/openapi/recommend/getConfig'
    # 从流量池获取视频接口地址
    GET_VIDEOS_FROM_POOL_URL = 'http://preapi-internal.piaoquantv.com/flowpool/video/getAllVideo'
    # 获取视频在流量池中的剩余可分发数接口地址
    GET_REMAIN_VIEW_COUNT_URL = 'http://preapi-internal.piaoquantv.com/flowpool/video/remainViewCount'
    # 计算完ROV通知后端接口地址
    NOTIFY_BACKEND_UPDATE_ROV_SCORE_URL = 'http://videopre-internal.piaoquantv.com/longvideoapi/openapi/recommend/updateRovScore'
    # 获取置顶视频列表接口地址
    TOP_VIDEO_LIST_URL = 'http://speedpre.wx.com/longvideoapi/openapi/recommend/topVideoList'
    # 获取首页兜底视频json接口地址
    BOTTOM_JSON_URL = 'http://speedpre.wx.com/longvideoapi/openapi/video/distribute/structure/video/list'
    # 通知后端更新兜底视频接口地址
    NOTIFY_BACKEND_updateFallBackVideoList_URL = 'http://videopre-internal.piaoquantv.com/longvideoapi/openapi/recommend/updateFallBackVideoList'
    # 获取限流视频接口地址
    GET_VIDEO_LIMIT_LIST_URL = 'http://prespeed-internal.piaoquantv.com/longvideoapi/openapi/recommend/getVideoLimitList'
    # 获取管理后台设置的广告目标uv值接口地址
    GET_AD_TARGET_UV_URL = 'https://preadmin.piaoquantv.com/manager/ad/algo/threshold/productUvTargetList'

    # # logs 上传oss 目标Bucket指定目录
    # OSS_FOLDER_LOGS = 'rov-offline/pre/logs/'
    # # data 上传oss 目标Bucket指定目录
    # OSS_FOLDER_DATA = 'rov-offline/pre/data/'


class ProductionConfig(BaseConfig):
    """生产环境配置"""
    # 报警内容 环境区分
    ENV_TEXT = "生产环境"
    # 项目存放目录
    PROJECT_PATH = '/data/rov-offline'

    # 线上环境redis地址
    REDIS_INFO = {
        'host': 'r-bp1fogs2mflr1ybfot.redis.rds.aliyuncs.com',
        'port': 6379,
        'password': 'Wqsd@2019',
    }

    # Hologres连接参数,服务器使用
    HOLOGRES_INFO = {
        'host': 'hgprecn-cn-7pp28y18c00c-cn-hangzhou-vpc.hologres.aliyuncs.com',
        'port': 80,
        'dbname': 'dssm',
        'user': 'LTAI5tMPqPy9yboQAf1mBCCN',
        'password': '4BEcOgxREOPq7t3A7EWkjciVULeQGj'
    }

    # 生产环境mysql地址
    MYSQL_INFO = {
        'host': 'rr-bp1x9785e8h5452bi157.mysql.rds.aliyuncs.com',
        'port': 3306,
        'user': 'wx2016_longvideo',
        'password': 'wx2016_longvideoP@assword1234',
        'db': 'longvideo',
        'charset': 'utf8'
    }

    # 生产环境 过滤用mysql地址
    FILTER_MYSQL_INFO = {
        'host': 'am-bp15tqt957i3b3sgi131950.ads.aliyuncs.com',
        'port': 3306,
        'user': 'lv_manager',
        'password': 'lv_manager@2020',
        'db': 'longvideo',
        'charset': 'utf8'
    }

    # 日志服务配置
    ALIYUN_LOG = {
        'ENDPOINT': 'cn-hangzhou.log.aliyuncs.com',
        'ACCESSID': 'LTAIWYUujJAm7CbH',
        'ACCESSKEY': 'RfSjdiWwED1sGFlsjXv0DlfTnZTG1P',
        'PROJECT': 'rov-server',
    }

    # Hologres视频状态存储表名
    VIDEO_STATUS = 'longvideo.dwd_mdm_item_video_stat'

    # 快速曝光流量池ID
    QUICK_FLOW_POOL_ID = 3

    # 获取流量池分发配置接口地址
    GET_FLOW_POOL_RECOMMEND_CONFIG_URL = 'http://recommend-common-internal.piaoquantv.com/longvideoapi/openapi/recommend/getConfig'
    # 从流量池获取视频接口地址
    GET_VIDEOS_FROM_POOL_URL = 'http://api-internal.piaoquantv.com/flowpool/video/getAllVideo'
    # 获取视频在流量池中的剩余可分发数接口地址
    GET_REMAIN_VIEW_COUNT_URL = 'http://api-internal.piaoquantv.com/flowpool/video/remainViewCount'
    # 计算完ROV通知后端接口地址
    NOTIFY_BACKEND_UPDATE_ROV_SCORE_URL = 'http://recommend-common-internal.piaoquantv.com/longvideoapi/openapi/recommend/updateRovScore'
    # 获取置顶视频列表接口地址
    TOP_VIDEO_LIST_URL = 'http://recommend-common-internal.piaoquantv.com/longvideoapi/openapi/recommend/topVideoList'
    # 获取首页兜底视频json接口地址
    BOTTOM_JSON_URL = 'http://recommend-common-internal.piaoquantv.com/longvideoapi/openapi/video/distribute/structure/video/list'
    # 通知后端更新兜底视频接口地址
    NOTIFY_BACKEND_updateFallBackVideoList_URL = 'http://recommend-common-internal.piaoquantv.com/longvideoapi/openapi/recommend/updateFallBackVideoList'
    # 获取限流视频接口地址
    GET_VIDEO_LIMIT_LIST_URL = 'http://recommend-common-internal.piaoquantv.com/longvideoapi/openapi/recommend/getVideoLimitList'
    # 获取管理后台设置的广告目标uv值接口地址
    GET_AD_TARGET_UV_URL = 'https://admin.piaoquantv.com/manager/ad/algo/threshold/productUvTargetList'

    # # logs 上传oss 目标Bucket指定目录
    # OSS_FOLDER_LOGS = 'rov-offline/pro/logs/'
    # # data 上传oss 目标Bucket指定目录
    # OSS_FOLDER_DATA = 'rov-offline/pro/data/'


def set_config():
    # 获取环境变量 ROV_OFFLINE_ENV
    env = os.environ.get('ROV_OFFLINE_ENV')
    # env = 'dev'
    if env is None:
        # log_.error('ENV ERROR: is None!')
        return
    if env == 'dev':
        return DevelopmentConfig(), env
    elif env == 'test':
        return TestConfig(), env
    elif env == 'pre':
        return PreProductionConfig(), env
    elif env == 'pro':
        return ProductionConfig(), env
    else:
        # log_.error('ENV ERROR: is {}'.format(env))
        return