|
@@ -1,6 +1,10 @@
|
|
from sqlalchemy import create_engine
|
|
from sqlalchemy import create_engine
|
|
from urllib import parse
|
|
from urllib import parse
|
|
import pandas as pd
|
|
import pandas as pd
|
|
|
|
+import yaml
|
|
|
|
+
|
|
|
|
+with open('../config/config.yaml', mode='r', encoding='utf-8') as f:
|
|
|
|
+ config = yaml.load(f.read(), Loader=yaml.FullLoader)
|
|
|
|
|
|
|
|
|
|
def update_dict(x, y):
|
|
def update_dict(x, y):
|
|
@@ -21,6 +25,7 @@ def get_db_engine(db_info):
|
|
return engine
|
|
return engine
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
def is_contains_region(val1, val2):
|
|
def is_contains_region(val1, val2):
|
|
"""
|
|
"""
|
|
level1
|
|
level1
|
|
@@ -31,24 +36,25 @@ def is_contains_region(val1, val2):
|
|
:param val2: 从账户配置信息表里读取的地区信息, 如 '[]', None, '[14,15,21,22,23,31,32]'
|
|
:param val2: 从账户配置信息表里读取的地区信息, 如 '[]', None, '[14,15,21,22,23,31,32]'
|
|
:return:
|
|
:return:
|
|
"""
|
|
"""
|
|
- if val1 == '不限' or val1 is None:
|
|
|
|
- if val2 is None or val2 == '[]':
|
|
|
|
- return True, {'region': None}
|
|
|
|
- else:
|
|
|
|
- return False, -1
|
|
|
|
|
|
+ # 如果val1为空,表示该字段没有参与定向组合运算,就直接取客户投放策略里面的值
|
|
|
|
+ if val1 is None:
|
|
|
|
+ return True, {'region': val2}
|
|
|
|
+
|
|
|
|
+ sql = """
|
|
|
|
+ select t1.city_name, t2.level, t2.region_id, t2.parent from ctop_kuaishou_city_level t1
|
|
|
|
+ left join ctop_kuaishou_region_list_parent t2
|
|
|
|
+ on t1.city_name = t2.name
|
|
|
|
+ where t1.city_level in %s
|
|
|
|
+ """ % (tuple(val1.split('|')),)
|
|
|
|
+ city_df = pd.read_sql(sql, get_db_engine(config['productDB']))
|
|
|
|
+
|
|
|
|
+ if not val2 or val2 == '不限' or val2 == '[]':
|
|
|
|
+ return True, {'region': list(city_df['region_id'].values)}
|
|
else:
|
|
else:
|
|
- if val2 is None or val2 == '[]':
|
|
|
|
|
|
+ if val1 == '不限':
|
|
return False, -1
|
|
return False, -1
|
|
else:
|
|
else:
|
|
val = []
|
|
val = []
|
|
- sql = """
|
|
|
|
- select t1.city_name, t2.level, t2.region_id, t2.parent from ctop_kuaishou_city_level t1
|
|
|
|
- left join ctop_kuaishou_region_list_parent t2
|
|
|
|
- on t1.city_name = t2.name
|
|
|
|
- where t1.city_level in %s
|
|
|
|
- """ % (tuple(val1.split('|')),)
|
|
|
|
- city_df = pd.read_sql(sql, None)
|
|
|
|
-
|
|
|
|
# level1
|
|
# level1
|
|
if set(city_df[city_df.level == 1].region_id.values).issubset(set(eval(val2))):
|
|
if set(city_df[city_df.level == 1].region_id.values).issubset(set(eval(val2))):
|
|
val.extend(city_df[city_df.level == 1].region_id.values)
|
|
val.extend(city_df[city_df.level == 1].region_id.values)
|
|
@@ -129,24 +135,29 @@ def is_contains_age(val1, val2_min, val2_max, val2_range):
|
|
与age不能同时传;【18:表示18-23岁】;【24:表示24-30岁】;【31:表示31-40岁】;【41:表示41-49岁】;【50:表示50-100岁】
|
|
与age不能同时传;【18:表示18-23岁】;【24:表示24-30岁】;【31:表示31-40岁】;【41:表示41-49岁】;【50:表示50-100岁】
|
|
:return:
|
|
:return:
|
|
"""
|
|
"""
|
|
|
|
+ # 如果val1为空,表示该字段没有参与定向组合运算,就直接取客户投放策略里面的值
|
|
|
|
+ if val1 is None:
|
|
|
|
+ return True, {'age_min': val2_min, 'age_max': val2_max, 'ages_range': val2_range}
|
|
|
|
+
|
|
age_dict = {'18-23岁': 18, '24-30岁': 24, '31-40岁': 31, '41-49岁': 41, '50+岁': 50, '50-100岁': 50}
|
|
age_dict = {'18-23岁': 18, '24-30岁': 24, '31-40岁': 31, '41-49岁': 41, '50+岁': 50, '50-100岁': 50}
|
|
- if val1 == '不限' or not val1:
|
|
|
|
- if (not val2_min) and (not val2_max) and (not val2_range or val2_range == '不限'):
|
|
|
|
- return True, {'ages_range': None}
|
|
|
|
- else:
|
|
|
|
- return False, -1
|
|
|
|
|
|
+
|
|
|
|
+ if (not val2_min) and (not val2_max) and (not val2_range or val2_range == '不限'):
|
|
|
|
+ return True, {'ages_range': val1}
|
|
else:
|
|
else:
|
|
- age1 = [age_dict[item] for item in val1.split('|')]
|
|
|
|
- if (val2_min is None and val2_max is None) and val2_range:
|
|
|
|
- if set(age1).issubset(set(eval(val2_range))):
|
|
|
|
- return True, {'ages_range': age1}
|
|
|
|
- else:
|
|
|
|
- return False, -1
|
|
|
|
- if (val2_min and val2_max) and (not val2_range):
|
|
|
|
- if age1[0] >= val2_min and age1[-1] <= val2_max:
|
|
|
|
- return True, {'age_min': age1[0], 'age_max': age1[-1]}
|
|
|
|
- else:
|
|
|
|
- return False, -1
|
|
|
|
|
|
+ if val1 == '不限':
|
|
|
|
+ return False, -1
|
|
|
|
+ else:
|
|
|
|
+ age1 = [age_dict[item] for item in val1.split('|')]
|
|
|
|
+ if (val2_min is None and val2_max is None) and val2_range:
|
|
|
|
+ if set(age1).issubset(set(eval(val2_range))):
|
|
|
|
+ return True, {'ages_range': age1}
|
|
|
|
+ else:
|
|
|
|
+ return False, -1
|
|
|
|
+ if (val2_min and val2_max) and (not val2_range):
|
|
|
|
+ if age1[0] >= val2_min and age1[-1] <= val2_max:
|
|
|
|
+ return True, {'age_min': age1[0], 'age_max': age1[-1]}
|
|
|
|
+ else:
|
|
|
|
+ return False, -1
|
|
|
|
|
|
|
|
|
|
def is_contains_business_interest(val1, val2):
|
|
def is_contains_business_interest(val1, val2):
|