# 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,  # 票圈福年
        'PIAO_QUAN_BLESSING': 2,  # 票圈 | 祝福
        'PIAO_QUAN_HAOKAN_VIDEO': 23  # 票圈好看视频
        # 2 3 4 5 6 11 17 18 19 21-36
        , "APP_TYPE_11": 11
        , "APP_TYPE_24": 24
        , "APP_TYPE_25": 25
        , "APP_TYPE_26": 26
        , "APP_TYPE_27": 27
        , "APP_TYPE_28": 28
        , "APP_TYPE_29": 29
        , "APP_TYPE_30": 30
        , "APP_TYPE_31": 31
        , "APP_TYPE_32": 32
        , "APP_TYPE_33": 33
        , "APP_TYPE_34": 34
        , "APP_TYPE_35": 35
        , "APP_TYPE_36": 36

    }
    # 供给质量评估 appType
    SUPPLY_APP_TYPE = {
        'PIAO_QUAN_HAOKAN_VIDEO': 23
    }
    # 数据存放路径
    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},  # [内容精选]
        'data66': {
            APP_TYPE['VLOG']: 0.3,
            APP_TYPE['LOVE_LIVE']: 0.2,
            APP_TYPE['LONG_VIDEO']: 0.2,
            APP_TYPE['SHORT_VIDEO']: 0.05,
            APP_TYPE['WAN_NENG_VIDEO']: 0.05,
            # APP_TYPE['LAO_HAO_KAN_VIDEO']: 1,
            # APP_TYPE['ZUI_JING_QI']: 1,
            APP_TYPE['APP']: 0.05,
            APP_TYPE['PIAO_QUAN_VIDEO_PLUS']: 0.05,
            APP_TYPE['JOURNEY']: 0.05,
            APP_TYPE['BLESSING_YEAR']: 0.04,
            APP_TYPE['PIAO_QUAN_BLESSING']: 0.01

        },

    }

    # 小时级更新过去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},
            'rule66': {'cal_score_func': 2, 'return_count': 100, 'platform_return_rate': 0.001,
                      'view_type': 'preview'},
        },
        'data_params': DATA_PARAMS,
        'params_list': [
            {'data': 'data1', 'rule': 'rule3', 'notify_backend': True},
            {'data': 'data2', 'rule': 'rule4'},
            {'data': 'data7', 'rule': 'rule4'},
            {'data': 'data10', 'rule': 'rule4'},
            {'data': 'videos5', 'rule': 'rule4'},  # [内容精选]
            {'data': 'data66', 'rule': 'rule66'},
        ]
    }

    # 地域分组小时级更新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},
            '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},
            'rule66': {'view_type': 'video-show', 'return_count': 21, 'score_rule': 0,
                      'platform_return_rate': 0.001},
        },
        'data_params': DATA_PARAMS,
        'params_list': [
            {'data': 'data1', 'rule': 'rule2'},
            {'data': 'data2', 'rule': 'rule4'},
            {'data': 'data7', 'rule': 'rule5'},
            {'data': 'data10', 'rule': 'rule4'},
            {'data': 'videos5', 'rule': 'rule4'},  # [内容精选]
            {'data': 'data66', 'rule': 'rule66'},
        ]
    }

    # 小时级更新过去1h数据 loghubods.video_each_hour_update_no_province_apptype（不区分地域）
    PROJECT_H_APP_TYPE = 'loghubods'
    TABLE_H_APP_TYPE = 'video_each_hour_update_no_province_apptype'
    # 小时级规则参数
    RULE_PARAMS_H_APP_TYPE = {
        'rule_params': {
            'rule1': {'view_type': 'video-show', 'platform_return_rate': 0.001, 'merge_func': 2},
        },
        'data_params': DATA_PARAMS,
        'params_list': [
            {'data': 'data10', 'rule': 'rule1'},
        ],
    }

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

    # 地域分组小时级规则参数
    RULE_PARAMS_REGION_APP_TYPE = {
        'rule_params': {
            '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},

            '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},

            # 地域小时级列表中增加 前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},
            # 分值计算公式2 增加h-2分享当前小时回流数据、h-3分享当前小时回流数据特征
            # score = k2 * sharerate * (backrate * LOG(lastonehour_return+1) + backrate_2 * LOG(lasttwohour_return_now+1) + backrate_3 * LOG(lastthreehour_return_now+1))
            'rule20': {'view_type': 'video-show-region', 'platform_return_rate': 0.001, 'region_24h_rule_key': 'rule2',
                       '24h_rule_key': 'rule3', 'score_func': 'add_backrate*log(return+1)'},
            # 分值计算公式3 增加[h-3,h-2]之间的回流留存特征
            # score = k2 * sharerate * backrate * LOG(lastonehour_return+1) * 前两小时回流留存
            'rule21': {'view_type': 'video-show-region', 'platform_return_rate': 0.001, 'region_24h_rule_key': 'rule2',
                       '24h_rule_key': 'rule3', 'score_func': 'multiply_return_retention'},
            # 分值计算公式4 增加h-2分享当前小时回流/h-2分享、h-3分享当前小时回流/h-3分享 特征
            # score = k2 * sharerate * (backrate + backrate * backrate_2 * backrate_3) * LOG(lastonehour_return+1)
            'rule22': {'view_type': 'video-show-region', 'platform_return_rate': 0.001, 'region_24h_rule_key': 'rule2',
                       '24h_rule_key': 'rule3', 'score_func': 'update_backrate'},
            # 回流数据使用 分享限制地域，回流不限制地域 统计数据
            'rule23': {'view_type': 'video-show-region', 'platform_return_rate': 0.001, 'region_24h_rule_key': 'rule2',
                       '24h_rule_key': 'rule3', 'return_data': 'share_region_return'},
            # 分值计算公式3 增加[h-3,h-2]之间的回流留存特征 + 回流数据使用 分享限制地域，回流不限制地域 统计数据
            # score = k2 * sharerate * backrate * LOG(lastonehour_return_new+1) * 前两小时回流留存
            'rule24': {'view_type': 'video-show-region', 'platform_return_rate': 0.001, 'region_24h_rule_key': 'rule2',
                       '24h_rule_key': 'rule3', 'score_func': 'multiply_return_retention',
                       'return_data': 'share_region_return'},
            # score = sharerate*backrate*log(return+1)*CTR,
            # sharerate=(lastonehour_share+1)/(lastonehour_play+1000)
            # backrate=(lastonehour_return+1)/(lastonehour_share+10)
            # CTR=(lastonehour_play+1)/(lastonehour_view+100), ctr不进行校正
            'rule25': {'view_type': 'video-view', 'platform_return_rate': 0.001, 'ctr_check': False,
                       'region_24h_rule_key': 'rule4', '24h_rule_key': 'rule4', 'merge_func': 2,
                       'score_func': 'back_view0'},
            # score = back_play_rate*log(return+1)*CTR,
            # back_play_rate=(lastonehour_return+1)/(lastonehour_play+1000)
            # CTR=(lastonehour_play+1)/(lastonehour_view+100), ctr不进行校正
            'rule26': {'view_type': 'video-view', 'platform_return_rate': 0.001, 'ctr_check': False,
                       'region_24h_rule_key': 'rule4', '24h_rule_key': 'rule4', 'merge_func': 2,
                       'score_func': 'back_view1'},

            # score = sharerate * backrate ^ 2 * LOG(lastonehour_return + 1) * K2
            # sharerate = lastonehour_share / (lastonehour_play + 1000)
            # backrate = lastonehour_return / (lastonehour_share + 10)
            # ctr = lastonehour_play / (lastonehour_show + 1000), 对ctr限最大值：K2 = 0.6 if ctr > 0.6 else ctr
            'rule27': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
                       'region_24h_rule_key': 'rule4', '24h_rule_key': 'rule4', 'merge_func': 2,
                       'score_func': 'back_rate_exponential_weighting1'},
            # score = sharerate ^ 0.5 * backrate ^ 2 * LOG(lastonehour_return + 1) * K2 ^ 0.5
            # sharerate = lastonehour_share / (lastonehour_play + 1000)
            # backrate = lastonehour_return / (lastonehour_share + 10)
            # ctr = lastonehour_play / (lastonehour_show + 1000), 对ctr限最大值：K2 = 0.6 if ctr > 0.6 else ctr
            'rule28': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
                       'region_24h_rule_key': 'rule4', '24h_rule_key': 'rule4', 'merge_func': 2,
                       'score_func': 'back_rate_exponential_weighting2'},
            # 增加不区分地域小时级列表
            'rule30': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
                       'region_24h_rule_key': 'rule4', '24h_rule_key': 'rule4', 'h_rule_key': 'rule1', 'merge_func': 2},

            'rule29': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
                       'region_24h_rule_key': 'rule4', '24h_rule_key': 'rule4', 'merge_func': 2,
                       'score_func': 'back_rate_rank_weighting'},
            'rule66': {
                # 'view_type': 'video-show-region', 'platform_return_rate': 0.001,
                # 'view_type': 'video-show-region', "return_countv2": 1, 'platform_return_ratev2': 0.001,
                'view_type': 'video-show-region',
                'region_24h_rule_key': 'rule66', '24h_rule_key': 'rule66'
            },
            'rule68': {
                 'view_type': 'video-show-region','region_24h_rule_key': 'rule66', '24h_rule_key': 'rule66',
                 'score_func': '20240322', '20240322':''
            },
        },
        'data_params': DATA_PARAMS,
        'params_list': [
            {'data': 'data1', 'rule': 'rule4'},  # 095 vlog
            {'data': 'data1', 'rule': 'rule4-1'},  # 095-1
            # {'data': 'data2', 'rule': 'rule7-1'},  # 121 内容精选
            {'data': 'data7', 'rule': 'rule8'},  # 票圈视频APP 10003.110156
            {'data': 'data10', 'rule': 'rule7'},  # 144 票圈视频
            # {'data': 'videos5', 'rule': 'rule7-1'},  # 428 [内容精选]
            {'data': 'data10', 'rule': 'rule27'},  # 502
            {'data': 'data10', 'rule': 'rule28'},  # 503
            {'data': 'data10', 'rule': 'rule30'},  # 510
            {'data': 'data66', 'rule': 'rule66'}, # 520
            {'data': 'data66', 'rule': 'rule68'},
        ],
        '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:h:{data_key}:{rule_key}:{date}:{h}
    RECALL_KEY_NAME_PREFIX_BY_H_H = 'recall:item:score:h:'
    # 小程序小时级更新结果与小程序地域分组小时级更新结果去重后 存放 redis key前缀，
    # 完整格式：recall:item:score:region:dup:h:{region}:{data_key}:{rule_key}:{date}:{h}
    RECALL_KEY_NAME_PREFIX_DUP_H_H = 'recall:item:score:region:dup:h:'

    # 小程序地域分组小时级更新结果存放 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:item:supply:{appType}:{level}
    FLOWPOOL_KEY_NAME_PREFIX_SET_LEVEL_SUPPLY = 'flow:pool:level:item:supply:'
    # 流量池各层分发概率权重存放 redis key，完整格式 flow:pool:level:recommend:weight
    FLOWPOOL_LEVEL_WEIGHT_KEY_NAME = 'flow:pool:level:recommend:weight'
    # 流量池视频分层存放(按分数排序) redis key前缀，完整格式 flow:pool:level:item:score:{appType}:{level}
    FLOWPOOL_KEY_NAME_PREFIX_SET_LEVEL_SCORE = 'flow:pool:level:item:score:'
    # 快速曝光流量池分发概率 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:'
    SUPPLY_LOCAL_DISTRIBUTE_COUNT_PREFIX = 'flow:pool:supply: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
    }

    # 各召回池数据更新状态
    RULE_24H_DATA_STATUS = 'rule:24h:data:status'
    REGION_24H_DATA_STATUS = 'region:24h:data:status'
    RULE_H_DATA_STATUS = 'rule:h:data:status'
    REGION_H_DATA_STATUS = 'region:h:data:status'



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

    # 广告模型数据
    ad_model_data = {
        'ad_out_v1': {
            'project': 'loghubods',
            'table': 'user_video_features_data_final'
        },
        'ad_out_v1_user': {
            'project': 'loghubods',
            'table': 'alg_recsys_user_info'
        },
        'ad_out_v1_item': {
            'project': 'loghubods',
            'table': 'alg_recsys_video_info'
        },
        '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统计（各视频出广告的概率，各视频被直接跳出的概率，各视频被直接跳出的情况下出广告的概率）

        'videos_share_rate_new_strategy': {
            'project': 'loghubods',
            'table': 'video_data_with_ad_sharerate_adtype'
        },  # 新策略使用视频侧数据：所有广告类型数据，按照videoId统计（各视频被分享的概率，各视频出广告的概率，各视频被分享的情况下出广告的概率，各视频不出广告的概率，各视频被分享的情况下不出广告的概率）
        'users_share_rate_new_strategy': {
            'project': 'loghubods',
            'table': 'usergroup_data_with_ad_sharerate_adtype'
        },  # 新策略使用用户侧数据：按照用户分组统计（各用户组的分享率，各用户组出广告的概率，各用户组有分享的情况下出广告的概率，各用户组不出广告的概率，各用户组有分享的情况下不出广告的概率）
    }

    # 自动调整广告模型阈值数据
    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_VIDEO_DATA_PARAMS_NEW_STRATEGY = {
        # 所有广告类型视频数据
        'videos_share_rate_new_strategy': {
            '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'],  # 票圈最惊奇
        },
    }

    # 广告模型异常视频数据处理参数
    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'],
        'class3': ['return25_nmids', 'return9_24mids'],
    }

    # 广告模型用户数据
    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 预测&计算阈值时，去除不出广告的用户组
            },  # 优化阈值计算方式
            'rule3': {
                'group_list': AD_MID_GROUP['class1'],
                'no_ad_mid_group_list': NO_AD_MID_GROUP_LIST['class3'],
                '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'},  # 票圈足迹 + 优化阈值计算方式
            {'data': 'user0out', 'rule': 'rule3'},  # 票圈vlog + 优化阈值计算方式
            {'data': 'user4out', 'rule': 'rule3'},  # 票圈视频 + 优化阈值计算方式
            {'data': 'user5out', 'rule': 'rule3'},  # 内容精选 + 优化阈值计算方式
        ]
    }

    # 新策略使用 - 广告模型用户数据
    AD_USER_PARAMS_NEW_STRATEGY = {
        'data_params': {
            'user0': APP_TYPE['VLOG'],  # vlog
            'user3': APP_TYPE['BLESSING_YEAR'],  # 票圈福年
            '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'],  # 票圈视频+
            'user22': APP_TYPE['JOURNEY'],  # 票圈足迹
        },
        'rule_params': {
            'rule1': {
                'group_list': AD_MID_GROUP['class1'],
            },
        },
        'params_list': [
            {'data': 'user0', 'rule': 'rule1'},  # 票圈vlog + 优化阈值计算方式
            {'data': 'user4', 'rule': 'rule1'},  # 票圈视频 + 优化阈值计算方式
            {'data': 'user5', 'rule': 'rule1'},  # 内容精选 + 优化阈值计算方式
        ]
    }

    # 广告模型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(分享|出广告), 标准贝叶斯公式)
        '173-s': {'video': {'data': 'videos0out'},
                  'user': {'data': 'user0out', 'rule': 'rule3'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # else非关怀模式人群多出广告 + 所有广告类型数据 + 优化阈值计算方式 + 使用以是否直接跳出为目标的数据 + ['return25_nmids', 'return9_24mids']用户不出广告
        '173-t': {'video': {'data': 'videos0out'},
                  'user': {'data': 'user0out', 'rule': 'rule2'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # 所有广告类型数据 + 优化阈值计算方式 + else未开启关怀模式人群多出广告 + 使用以是否直接跳出为目标的数据 + return25_nmids用户不出广告 + 所有用户组top3不出广告
        '173-u': {'video': {'data': 'videos0out'},
                  'user': {'data': 'user0out', 'rule': 'rule2'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # else非关怀模式人群多出广告 + 所有广告类型数据 + 优化阈值计算方式 + 使用以是否直接跳出为目标的数据
        '173-v': {'video': {'data': 'videos0out'},
                  'user': {'data': 'user0out', 'rule': 'rule2'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # else非关怀模式人群多出广告 + 所有广告类型数据 + 优化阈值计算方式 + 使用以是否直接跳出为目标的数据
        # 票圈视频+
        # '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(分享 | 出广告), 标准贝叶斯公式)
        '194-n': {'video': {'data': 'videos4out'},
                  'user': {'data': 'user4out', 'rule': 'rule3'},
                  'care_model': True, 'threshold_rate': 0.7,
                  }, # 所有广告类型本端数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 使用以是否直接跳出为目标的数据 + ['return25_nmids', 'return9_24mids']用户不出广告
        '194-o': {'video': {'data': 'videos4out'},
                  'user': {'data': 'user4out', 'rule': 'rule2'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # 所有广告类型本端数据 + 优化阈值计算方式 + else未开启关怀模式人群多出广告 + 使用以是否直接跳出为目标的数据 + return25_nmids用户不出广告 + 所有用户组top3不出广告

        # 内容精选
        # '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(分享|出广告), 标准贝叶斯公式)
        '195-m': {'video': {'data': 'videos5out'},
                  'user': {'data': 'user5out', 'rule': 'rule3'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # 所有广告类型本端数据 + 优化阈值计算方式 + else非关怀模式人群多出广告 + 使用以是否直接跳出为目标的数据 + ['return25_nmids', 'return9_24mids']用户不出广告
        '195-n': {'video': {'data': 'videos5out'},
                  'user': {'data': 'user5out', 'rule': 'rule2'},
                  'care_model': True, 'threshold_rate': 0.7,
                  },  # 所有广告类型本端数据 + 优化阈值计算方式 + else未开启关怀模式人群多出广告 + 使用以是否直接跳出为目标的数据 + return25_nmids用户不出广告 + 所有用户组top3不出广告

        # 票圈短视频
        # '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 / 648,
                'ab1': 1 / 648,
                'ab2': 1 / 648,
                'ab3': 1 / 648,
                'ab4': 1 / 648,
                'ab5': 1 / 648,
                'ab6': 1 / 648,
                'ab7': 1 / 648,
                'ab8': 1 / 648,
                'ab9': 1 / 648,
            },
            # 分时段控制目标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.005,
                                              'special_max_update_step': 71}
                },  # 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': 71}
                },  # 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': 71}
                },  # 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': 71}
                },  # 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': 71}
                },  # 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': 71}
                },  # 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': 71}
                },  # 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': 71}
                },  # 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': 71}
                },  # 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 / 144,
                'ab1': 1 / 144,
                'ab2': 1 / 144,
                'ab3': 1 / 144,
                'ab4': 1 / 144,
                'ab5': 1 / 144,
                'ab6': 1 / 144,
                'ab7': 1 / 144,
                'ab8': 1 / 144,
                'ab9': 1 / 144,
            },
            # 分时段控制目标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 / 432,
                'ab1': 1 / 432,
                'ab2': 1 / 432,
                'ab3': 1 / 432,
                'ab4': 1 / 432,
                'ab5': 1 / 432,
                'ab6': 1 / 432,
                'ab7': 1 / 432,
                'ab8': 1 / 432,
                'ab9': 1 / 432,
            },
            # 分时段控制目标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.005,
                                              'special_max_update_step': 71}
                },  # 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 / 288,
                'ab1': 1 / 288,
                'ab2': 1 / 288,
                'ab3': 1 / 288,
                'ab4': 1 / 288,
                'ab5': 1 / 288,
                'ab6': 1 / 288,
                'ab7': 1 / 288,
                'ab8': 1 / 288,
                'ab9': 1 / 288,
            },
            # 分时段控制目标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.005,
                                              'special_max_update_step': 71}
                },  # 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:out:model:score:user:{model_key}:{mid}
    KEY_NAME_PREFIX_AD_OUT_MODEL_SCORE_USER = 'ad:out:model:score:user:'
    # 有广告时的视频跳出模型离线分数 redis key 前缀，完整格式：ad:out:model:score:video:{model_key}:{videoid}
    KEY_NAME_PREFIX_AD_OUT_MODEL_SCORE_ITEM = 'ad:out:model:score:item:'
    # 有广告时的视频跳出模型策略配置  redis key 前缀，完整格式：ad:out:model:config:{model_key}:{abtest_id}:{abtest_config_tag}:{config}
    KEY_NAME_PREFIX_AD_OUT_MODEL_CONFIG = 'ad:out:model:config:'

    # 用户组有广告时的分享率预测结果存放 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'

    # 特定视频不出广告配置
    no_ad_videos = {
        'topN': {
            'project': 'loghubods',
            'table': 'top_return_videolist_hh',
            'n_list': [3]
        }
    }
    # 特定视频不出广告视频列表存放 redis key 前缀，完整格式：no:ad:videos:{appType}
    KEY_NAME_PREFIX_NO_AD_VIDEOS = 'no:ad:videos:'

    # 新策略使用
    # 视频有广告时的分享率预测结果存放 redis key 前缀，完整格式：video:predict:share:rate:with:ad:{video_data_key}:{date}
    KEY_NAME_PREFIX_VIDEO_WITH_AD = 'video:predict:share:rate:with:ad:'
    # 视频无广告时的分享率预测结果存放 redis key 前缀，完整格式：video:predict:share:rate:no:ad:{video_data_key}:{date}
    KEY_NAME_PREFIX_VIDEO_NO_AD = 'video:predict:share:rate:no:ad:'
    # 用户组有广告时的分享率预测结果存放 redis key 前缀，完整格式：users:group:predict:share:rate:with:ad:{user_data_key}:{user_rule_key}:{date}
    KEY_NAME_PREFIX_GROUP_WITH_AD = 'users:group:predict:share:rate:with:ad:'
    # 用户组无广告时的分享率预测结果存放 redis key 前缀，完整格式：users:group:predict:share:rate:no:ad:{user_data_key}:{user_rule_key}:{date}
    KEY_NAME_PREFIX_GROUP_NO_AD = 'users:group:predict:share:rate:no:ad:'

    # 自营广告及微信广告ecpm值存放 redis key
    KEY_NAME_AD_ECPM = 'ad:ecpm'
    # 上一周期arpu值结果存放 redis key
    KEY_NAME_AD_ARPU = 'ad:arpu'
    # 计算roi使用参数存放 redis key
    KEY_NAME_AD_ROI_PARAM = 'ad:roi:param'


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'
        '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-bp1g3ys9u00u483uc131930.ads.aliyuncs.com',
        # 'port': 3306,
        # 'user': 'lv_manager',
        # 'password': 'lv_manager@2020',
        # 'db': 'longvideo',
        # 'charset': 'utf8'

       '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-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_VIDEOS_FROM_POOL_URL = 'http://api-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'
    # 获取广告ecpm值接口地址
    GET_AD_ECPM_URL = 'https://testapi.piaoquantv.com/ad/getAdEcpmInfo'

    # # 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'
        '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-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_VIDEOS_FROM_POOL_URL = 'http://api-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'
    # 获取广告ecpm值接口地址
    GET_AD_ECPM_URL = 'https://testapi.piaoquantv.com/ad/getAdEcpmInfo'

    # # 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'
    # 获取广告ecpm值接口地址
    GET_AD_ECPM_URL = 'https://preapi.piaoquantv.com/ad/getAdEcpmInfo'

    # # 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'
    # 获取广告ecpm值接口地址
    GET_AD_ECPM_URL = 'https://api.piaoquantv.com/ad/getAdEcpmInfo'

    # # 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')
    # print("ROV_OFFLINE_ENV:{}".format(str(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
