Browse Source

report_push: 增加排序信息

Signed-off-by: binren <zhangbr@elab-plus.com>
binren 5 years ago
parent
commit
da3306df4a
1 changed files with 77 additions and 25 deletions
  1. 77 25
      report_push.py

+ 77 - 25
report_push.py

@@ -412,12 +412,20 @@ class ReportPush(object):
         select house_id, house_name from d_house where brand_id = %s
     """
 
+    sql_5_1 = """
+        select house_id from d_house where brand_id in %s    
+    """
+
     sql_6 = """insert into report_push_log(name, mail, report_name, push_time, send_status, status) values(%s, %s, 
     %s, now(), %s, 1) """
 
     # 根据项目id获取集团id和名称
     sql_7 = """
-        select a.brand_id, a.brand_name from d_house a where a.house_id = %s;
+        select a.brand_id, a.brand_name from d_house a where a.house_id = %s
+    """
+
+    sql_8 = """
+        select DISTINCT a.brand_id from d_house a where a.house_id in %s
     """
 
     def __init__(self, db_name):
@@ -456,6 +464,7 @@ class ReportPush(object):
                     house_ids = [x for x in str(ids).split(',')]
                 else:
                     house_ids = [ids]
+                brand_id_list = self.get_brand_ids_by_house_ids(house_ids)
                 pass
             elif customer_type == 2:
                 # 集团
@@ -477,47 +486,47 @@ class ReportPush(object):
             result_data_7 = []
             result_data_8 = []
 
+            all_house_ids = self.get_house_ids_by_brand_ids(brand_id_list)
+            xcx_top_data_part = self.filter_by_house_ids(xcx_top_data, all_house_ids)
+            brand_top_data_part = self.filter_by_brand_ids(brand_top_data, brand_id_list)
+            xcx_top_data_all_part = self.filter_by_house_ids(xcx_top_data_all, all_house_ids)
+            brand_top_data_all_part = self.filter_by_brand_ids(brand_top_data_all, brand_id_list)
+
             # 1 数据总览 12个统计指标
             data_overview = self.data_overview(time_range, house_ids, xcx_top_data, brand_top_data)
             result_data_1.extend(data_overview)
             # 4:单个项目小程序数据排行榜
-            for index, x in enumerate(xcx_top_data):
+            for index, x in enumerate(xcx_top_data_part):
                 if x[0] in house_ids:
                     result_data_4.append([index, x[1], x[2], x[3], x[4], x[5]])
             # 5: 集团项目数据排行榜
             if customer_type == 2:
-                for index, x2 in enumerate(brand_top_data):
+                for index, x2 in enumerate(brand_top_data_part):
                     if x2[1] in house_ids or x2[0] in brand_id_list:
                         result_data_5.append([index, x2[2], x2[3], x2[4], x2[5], x2[5], x2[6]])
                     pass
                 pass
             else:
-                for index, x1 in enumerate(brand_top_data):
+                for index, x1 in enumerate(brand_top_data_part):
                     if x1[1] in house_ids:
                         result_data_5.append([index, x1[2], x1[3], x1[4], x1[5], x1[5], x1[6]])
             # 2: 项目数据排行榜
-            house_with_brand_data = self.house_with_brand(xcx_top_data, brand_top_data)
+            house_with_brand_data = self.house_with_brand(xcx_top_data_part, brand_top_data_part)
             for index, x in enumerate(house_with_brand_data):
-                if x[1] in house_ids or x[0] in brand_id_list:
-                    obj = [index]
-                    obj.extend(x)
-                    result_data_2.append(obj)
+                if x[2] in house_ids or x[1] in brand_id_list:
+                    result_data_2.append(x)
 
             # 3: 项目历史累计总数
             if customer_type == 2:
-                all_data_history = self.house_with_brand(xcx_top_data_all, brand_top_data_all, brand_id_list)
+                all_data_history = self.house_with_brand(xcx_top_data_all_part, brand_top_data_all_part, brand_id_list)
                 for index, x in enumerate(all_data_history):
-                    if x[1] in house_ids or x[0] in brand_id_list:
-                        obj = [index]
-                        obj.extend(x)
-                        result_data_3.append(obj)
+                    if x[2] in house_ids or x[1] in brand_id_list:
+                        result_data_3.append(x)
             else:
-                all_data_history = self.house_with_brand(xcx_top_data_all, brand_top_data_all)
+                all_data_history = self.house_with_brand(xcx_top_data_all_part, brand_top_data_all_part)
                 for index, x in enumerate(all_data_history):
-                    if x[1] in house_ids:
-                        obj = [index]
-                        obj.extend(x)
-                        result_data_3.append(obj)
+                    if x[2] in house_ids:
+                        result_data_3.append(x)
             customer_data[1] = result_data_1
             customer_data[2] = result_data_2
             customer_data[3] = result_data_3
@@ -531,6 +540,24 @@ class ReportPush(object):
             # 6: 项目获客来源场景分析
         return result
 
+    def filter_by_brand_ids(self, data, brand_ids):
+        result = []
+        for x in data:
+            if x[0] in brand_ids:
+                result.append(x)
+        result.sort(key=lambda obj: obj[3])
+        result.reverse()
+        return result
+
+    def filter_by_house_ids(self, data, house_ids):
+        result = []
+        for x in data:
+            if x[0] in house_ids:
+                result.append(x)
+        result.sort(key=lambda obj: obj[2])
+        result.reverse()
+        return result
+
     def data_overview(self, time_range, house_ids, xcx_top_data, brand_top_data):
         """
             统计数据总览
@@ -609,30 +636,39 @@ class ReportPush(object):
                 house_ids.append(x[1])
         for house_id in house_ids:
             a = []
+            a_order = 0
             for index, x in enumerate(xcx_top_data):
                 if str(house_id) == str(x[0]):
                     a.extend(x)
+                    a_order = index
             b = []
+            b_order = 0
             for index, y in enumerate(brand_top_data):
                 if str(house_id) == str(y[1]):
                     b.extend(y)
+                    b_order = index
 
+            order = b_order if b_order > 0 else a_order
             if len(a) > 0 and len(b) > 0:
-                result.append([b[0], a[0], a[1], self.add(a[2], b[3]), self.add(a[3], b[4]), self.add(a[4], b[5]), self.add(a[5], b[6])])
+                result.append([order, b[0], a[0], a[1], self.add(a[2], b[3]), self.add(a[3], b[4]), self.add(a[4], b[5]), self.add(a[5], b[6])])
             elif len(a) > 0 and len(b) == 0:
-                _a = [1]
+                _a = [order, 1]
                 for x in a:
                     _a.append(x)
                 result.append(_a)
             elif len(a) == 0 and len(b) > 0:
-                result.append(b)
+                _b = [order]
+                _b.extend(b)
+                result.append(_b)
             else:
                 pass
         if brands:
-            for x in brand_top_data:
+            for index, x in enumerate(brand_top_data):
                 if x[0] in brands and x[1] is not None and int(x[1]) < 300:
-                    result.append(x)
-        result.sort(key=lambda obj: obj[2])
+                    _x = [index]
+                    _x.extend(x)
+                    result.append(_x)
+        result.sort(key=lambda obj: obj[3])
         result.reverse()
         return result
 
@@ -767,6 +803,22 @@ class ReportPush(object):
             return brand_info[0][0]
         return
 
+    def get_brand_ids_by_house_ids(self, house_ids):
+        brand_ids = self.db.select(self.sql_8, [house_ids])
+        ids = []
+        for x in brand_ids:
+            if x:
+               ids.append(x)
+        return ids
+
+    def get_house_ids_by_brand_ids(self, brand_ids):
+        result = []
+        ids = self.db.select(self.sql_5_1, [brand_ids])
+        for x in ids:
+            if x not in result:
+                result.append(x)
+        return result
+
     def get_time_range(self, task_key):
         """
          根据定时任务id获取时间区间