Ver Fonte

判断地域是否包含的函数

liyuyi@c-top.com.cn há 4 anos atrás
pai
commit
cf395c8b85
1 ficheiros alterados com 45 adições e 26 exclusões
  1. 45 26
      commonFunc.py

+ 45 - 26
commonFunc.py

@@ -31,35 +31,54 @@ def is_contains_region(val1, val2):
     region	long[]	可选	地域  传值为[]表示不限;传递上一级ID时,childrenID可以不传;不允许同时传parentID和childrenID;
                                 仅计划的campaign_type为5时,支持设置三级地域(例:山西-大同-左云,左云是三级地域)
 
-    :param val1:
-    :param val2:
+    :param val1: 推荐的城市等级组合,如 "一线城市|新一线城市|二线城市|三线城市"  , "不限"
+    :param val2: 从账户配置信息表里读取的地区信息
     :return:
     """
-    is_contains = False
-    val = None
-    city_lst = []
-    sql = """
-    select t1.city_name, t2.level, t2.region_id 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
-    if city_df[city_df.level == 1].region_id.values in eval(val2):
-        val.extend(city_df[city_df.level == 1].region_id.values)
+    if val1 == '不限' or val1 is None:
+        if val2 is None:
+            return True, {'region': None}
+        else:
+            return False, -1
     else:
-        return False, -1
-
-    # level2
-    while not is_contains:
-        pass
-
-
-    # level3
-    pass
-
+        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
+        if city_df[city_df.level == 1].region_id.values in eval(val2):
+            val.extend(city_df[city_df.level == 1].region_id.values)
+        else:
+            return False, -1
+
+        # level2
+        # 元素的父级是否存在于 val2,如果存在则为包含于的关系
+        # 元素本身是否存在于 val2 ,如果存在则为包含于的关系
+        # 以上都不满足,val1 不包含于 val2
+        for item in city_df[city_df.level == 2].region_id.values:
+            parent = city_df[city_df.region_id == item].parent.values[0]
+            if parent in eval(val2):
+                val.append(item)
+            elif item in eval(val2):
+                val.append(item)
+            else:
+                return False, -1
+
+        # level3
+        for item in city_df[city_df.level == 3].region_id.values:
+            parent = city_df[city_df.region_id == item].parent.values[0]
+            if parent in eval(val2):
+                val.append(item)
+            elif item in eval(val2):
+                val.append(item)
+            else:
+                return False, -1
+    return True, {'region': val}
 
 
 def is_contains_gender(val1, val2):