Bladeren bron

sdldsfjfs

Signed-off-by: binren <zhangbr@elab-plus.com>
binren 4 jaren geleden
bovenliggende
commit
700d7e7002
4 gewijzigde bestanden met toevoegingen van 198 en 68 verwijderingen
  1. 144 16
      jianye_report.py
  2. 32 46
      report_file_utils.py
  3. 7 6
      report_public_funs_utils.py
  4. 15 0
      sql.py

+ 144 - 16
jianye_report.py

@@ -1,13 +1,30 @@
 from mysql_db import MysqlDB
 from sql import Sql
 from report_public_funs_utils import ReportPublicFunsUtils as rpfu
-from mail_content_text import MailContentText;
+from mail_content_text import MailContentText
+from email_util import EmailUtil
+from report_file_utils import ReportFileUtils
 
 
 class JianYeReport(object):
     """
         建业报表数据处理
     """
+    customer_mails = ['plf@centralchina.com', 'liutt@elab-plus.com', 'binrenzhang@qq.com']
+
+    #
+    index_type = {
+        6: 'fenxianghuodian',
+        7: 'liebianhuodian',
+        8: 'saomadaofang',
+        9: 'quanminjingjiren',
+        10: 'laoyezhu',
+        11: 'baobeichenggong',
+        12: 'baobeidaofang'
+    }
+
+    head_1 = ['城市', '项目名称', '浏览量', '浏览人数', '新增用户', '新增获电', '推荐用户', '分享获电', '裂变获电', '扫码到访数', '全民经纪人注册数', '报备成功数', '报备到访数']
+    brand_id = '13'
 
     def __init__(self):
         self.db = MysqlDB('bi_report')
@@ -15,8 +32,8 @@ class JianYeReport(object):
     def get_city_house_id(self):
         return self.db.select(Sql.sql_1)
 
-    def get_report_customers(self):
-        return self.db.select(Sql.sql_2)
+    def get_report_customers(self, task_key):
+        return self.db.select(Sql.sql_2, [task_key])
 
     def get_mail_title(self, type, name):
         """
@@ -44,18 +61,10 @@ class JianYeReport(object):
         else:
             return '本期的数据报告已经准备完成,请点击附件查阅.'
 
-    def table_one_data(self):
-        """
-            表一中的数据是表二数据的汇总
-        :return:
-        """
-        pass
-
-    def table_two_data(self):
-        pass
-
-    def table_three_data(self):
-        pass
+    # 项目级别的统计
+    def house_data_detail(self, time_range):
+        result = self.db.select(Sql.sql_8, [time_range[0], time_range[1]])
+        return result
 
     def user_data_volume_statistics(self, time_range, house_ids):
         """
@@ -88,12 +97,131 @@ class JianYeReport(object):
         result.append(number_4)
         return result
 
+    def region_house_id(self):
+        return self.db.select(Sql.sql_11)
+
+    def get_recommend_data(self, time_range):
+        return self.db.select(Sql.sql_9, [time_range[0], time_range[1]])
+
+    def get_house_id_by_brand_id(self, brand_id):
+        result = []
+        for x in self.get_city_house_id():
+            if str(x[0]) == brand_id:
+                result.append(x[1])
+        return result
+
+    def brand_data_of_time(self, time_range):
+        result = []
+        ids = self.get_house_id_by_brand_id(self.brand_id)
+        data_1 = self.user_data_volume_statistics(time_range, ids)
+        data_2 = 0
+        for x in self.get_recommend_data(time_range):
+            if str(x[0]) == self.brand_id:
+                data_2 = x[1]
+        data_3 = []
+
+        for key in self.index_type.keys():
+            type_value = self.index_type.get(key)
+            for x in self.db.select(Sql.sql_10, [time_range[0], time_range[1]]):
+                if x[0] == type_value:
+                    data_3.append(x[1])
+
+        result.extend(data_1)
+        result.extend(data_2)
+        result.extend(data_3)
+        return result
+
+    def brand_data(self):
+        """
+            集团数据总览, 表一。
+        :return:
+        """
+        result = []
+        time_rang_1 = rpfu.get_prd_day()
+        time_rang_2 = rpfu.get_time_range_month()
+        time_range_3 = rpfu.get_all_time_data_range()
+        result.extend(self.brand_data_of_time(time_rang_1))
+        result.extend(self.brand_data_of_time(time_rang_2))
+        result.extend(self.brand_data_of_time(time_range_3))
+        return result
+
+    def house_data_of_time(self, time_range, house_ids):
+        # brand_id, house_id, house_name, city
+        city_info = self.get_city_house_id()
+        data_1 = []
+        for id in house_ids:
+            sub = [id]
+            sub.extend(self.user_data_volume_statistics(time_range, [id]))
+            data_1.append(sub)
+        data_2 = []
+        for id in house_ids:
+            for x in self.get_recommend_data(time_range):
+                if id == x[0]:
+                    sub = [id]
+                    sub.append(x[1])
+                    data_2.append(sub)
+        data_3 = []
+        for house_id in house_ids:
+            sub = []
+            for x in self.house_data_detail(time_range):
+                # house_id, type, COUNT(DISTINCT customer_mobile)
+                if house_id == x[0]:
+                    sub.append(x)
+            house_data = []
+            for key in self.index_type.keys():
+                value = self.index_type.get(key)
+                for x in sub:
+                    if value == x[1]:
+                        house_data.append(x[2])
+            data_3.append(house_data)
+        result = []
+        for id in house_ids:
+            sub = []
+            for x in city_info:
+                if id == x[1]:
+                    sub.extend([x[4], x[3]])
+            for x in data_1:
+                if id == x[0]:
+                    sub.extend(x[1:])
+            for x in data_2:
+                if id == x[0]:
+                    sub.extend(x[1:])
+            for x in data_3:
+                if id == x[0]:
+                    sub.extend(x[1:])
+            result.append(sub)
+        return result
+
+    def house_data(self, house_ids):
+        time_rang_1 = rpfu.get_prd_day()
+        time_rang_2 = rpfu.get_time_range_month()
+        time_range_3 = rpfu.get_all_time_data_range()
+        result = []
+        result.append(self.house_data_of_time(time_rang_1, house_ids))
+        result.append(self.house_data_of_time(time_rang_2, house_ids))
+        result.append(self.house_data_of_time(time_range_3, house_ids))
+        pass
+
     def send_mail_to_customer(self, task_key):
         """
-            统计数据推送给客户
+            统计数据推送给客户, 表二
         :param: task_key
         :return:
         """
+        send_mail_info = []
+        customers = self.get_report_customers(task_key)
+        for customer in customers:
+            name = customer[3]
+            customer_type = customer[2]
+            mail = customer[4]
+            ids = customer[5]
+            if customer_type == 2:
+                # 集团
+                
+                pass
+            else:
+                # 项目或区域
+                pass
         pass
 
 

+ 32 - 46
report_file_utils.py

@@ -128,7 +128,6 @@ class ReportFileUtils:
             sheet_name = sheet_names[index]
             header = headers[index]
             ws = self.wb.add_sheet(sheet_name, cell_overwrite_ok=True)
-            # 写入数据
             # 区域
             start_row = 0
             # 写入标题
@@ -137,60 +136,47 @@ class ReportFileUtils:
 
             # 写入表头
             self.insert_cells(ws, [headers[index]], start_row, 0, len(header))
-            start_row += 1
-            city_info = {}
-            insert_data = []
-            region_info = {}
-            data_size = 0
-            for key in d.keys():
-                region_rows = 0
-                value = d.get(key)
-                region_name = key
-                # 城市
-                for key_1 in value.keys():
-                    value_1 = value.get(key_1)
-                    city_name = key_1
-                    region_rows += len(value_1)
-                    insert_data.extend(value_1)
-                    city_info[city_name] = len(value_1)
-                    data_size = len(value_1[0])
-                region_info[region_name] = region_rows
-            # 合并区域
-            for key in region_info.keys():
-                print(key)
-                self.vertical_cell_merge(ws, start_row, start_row + region_info.get(key) - 1, 0, 0, key)
-                start_row += region_info.get(key)
-            # 城市合并
-            start_row = 2
-            for key in city_info.keys():
-                 self.vertical_cell_merge(ws, start_row, start_row + city_info.get(key) - 1, 1, 1, key)
-                 start_row += city_info.get(key)
+            # start_row += 1
+            # city_info = {}
+            # insert_data = []
+            # region_info = {}
+            # data_size = 0
+            # for key in d.keys():
+            #     region_rows = 0
+            #     value = d.get(key)
+            #     region_name = key
+            #     # 城市
+            #     for key_1 in value.keys():
+            #         value_1 = value.get(key_1)
+            #         city_name = key_1
+            #         region_rows += len(value_1)
+            #         insert_data.extend(value_1)
+            #         city_info[city_name] = len(value_1)
+            #         data_size = len(value_1[0])
+            #     region_info[region_name] = region_rows
+            # # 合并区域
+            # for key in region_info.keys():
+            #     print(key)
+            #     self.vertical_cell_merge(ws, start_row, start_row + region_info.get(key) - 1, 0, 0, key)
+            #     start_row += region_info.get(key)
+            # # 城市合并
+            # start_row = 2
+            # for key in city_info.keys():
+            #      self.vertical_cell_merge(ws, start_row, start_row + city_info.get(key) - 1, 1, 1, key)
+            #      start_row += city_info.get(key)
 
             # 写入数据
             start_row = 2
-            self.insert_cells(ws, insert_data, start_row, 2, 2 + data_size)
+            self.insert_cells(ws, d, start_row, 0, len(d[0]))
         self.wb.save(save_path + '/' + title)
 
 
 if __name__ == '__main__':
     rf = ReportFileUtils()
     data = [
-                {"华北": {"上dfsd海": [['建业1', 2, 3, 4, 5, 6, 7], ['建业2', 2, 3, 4, 5, 6, 7]],
-                        "北dfsdf京": [['建东1', 2, 3, 4, 5, 6, 7], ['建东2', 2, 3, 4, 5, 6, 7]]
-                        },
-                 "嘻嘻哈哈": {"上dfssd海": [['建业1', 2, 3, 4, 5, 6, 7], ['建业2', 2, 3, 4, 5, 6, 7]],
-                        "北dfsdssf京": [['建东1', 2, 3, 4, 5, 6, 7], ['建东2', 2, 3, 4, 5, 6, 7]]
-                        }
-                 },
-                {"华北": {"上海ss": [['建业1', 21, 31, 41, 5, 6, 7], ['建业2', 2, 3, 4, 5, 6, 7]],
-                        "北京ss": [['建东1', 2, 3, 4, 5, 6, 7], ['建东2', 2, 3, 4, 5, 6, 7]]
-                        }
-                 },
-
-                {"华北": {"上sdsfs海": [['建业1', 2, 3, 4, 5, 6, 7], ['建业2', 2, 3, 4, 5, 6, 7]],
-                        "sddss": [['建东1', 2, 3, 4, 5, 6, 7], ['建东2', 2, 3, 4, 5, 6, 7]]
-                        }
-                 }
+                [[1, 2, 3, 5, 6, 7, 8, 9, 1]],
+                [[1, 2, 3, 5, 6, 7, 8, 9, 1]],
+                [[1, 2, 3, 5, 6, 7, 8, 9, 1]]
 
         ]
 

+ 7 - 6
report_public_funs_utils.py

@@ -3,7 +3,7 @@ import datetime
 
 class ReportPublicFunsUtils:
     @staticmethod
-    def get_time_range_month(type):
+    def get_time_range_month(type=None):
         """
             获取当月一号到当前时间的时间区间
         :param type 1:y m d 2: y m d : s m m
@@ -11,26 +11,26 @@ class ReportPublicFunsUtils:
         """
         now_time = datetime.datetime.now()
         first_day_of_month = datetime.datetime.now().strftime('%Y-%M')
-        if type == 1:
+        if not type:
            return [first_day_of_month + '-01 00:00:00', now_time.strftime('%Y-%m-%d %M:%I:%S')]
         else:
             return [first_day_of_month + '-01', now_time.strftime('%Y-%m-%d')]
 
     @staticmethod
-    def get_prd_day(type):
+    def get_prd_day(type=None):
         now_time = datetime.datetime.now()
         pre_time = now_time + datetime.timedelta(days=-1)
         now_time = now_time + datetime.timedelta(days=-1)
-        if type == 1:
+        if type:
             return [pre_time.strftime('%Y-%m-%d %M:%I:%S'), now_time.strftime('%Y-%m-%d %M:%I:%S')]
         else:
             repr([pre_time.strftime('%Y-%m-%d'), now_time.strftime('%Y-%m-%d')])
 
     @staticmethod
-    def get_all_time_data_range(type):
+    def get_all_time_data_range(type=None):
         now_time = datetime.datetime.now()
         pre_time = now_time + datetime.timedelta(days=-9999)
-        if type == 1:
+        if not type:
             return [pre_time.strftime('%Y-%m-%d %M:%I:%S'), now_time.strftime('%Y-%m-%d %M:%I:%S')]
         else:
             return [pre_time.strftime('%Y-%m-%d'), now_time.strftime('%Y-%m-%d')]
@@ -58,5 +58,6 @@ class ReportPublicFunsUtils:
             return b
         return 0
 
+
 if __name__ == '__main__':
     print(ReportPublicFunsUtils.get_montho_day())

+ 15 - 0
sql.py

@@ -143,4 +143,19 @@ class Sql:
                         AND houdian_time <= %s
                 ) t1
         """
+
+    # hosue_id, type, count
+    sql_8 = """
+    select house_id, type, COUNT(DISTINCT customer_mobile) from f_dm_jianye_allagent_day where report_d >= %s and report_d <= %s group by house_id, type
+    """
+
+    sql_9 = """
+        SELECT house_id, visit_new_uv_dtd FROM a_brand_customer_share_dtd where brand_id ='13' and report_d >= %s and report_d <= %s  order by report_d
+    """
+    sql_10 = """
+    select type, COUNT(DISTINCT customer_mobile) from f_dm_jianye_allagent_day where report_d >= %s and report_d <= group by type
+    """
+    sql_11 = """"
+    select a.house_or_region, min(b.house_or_brand_id), sum(a.name) from report_push_customer_info a left join report_customer_authority_info b on a.id = b.customer_id group by house_or_region
+    """
     pass