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 email_util import EmailUtil from file_util import FileUtil from report_file_utils import ReportFileUtils class JianYeReport(object): """ 建业报表数据处理 """ # customer_mails = ['plf@centralchina.com', 'liutt@elab-plus.com', 'binrenzhang@qq.com'] customer_mails = ['binrenzhang@qq.com'] # index_type = [ 'fenxianghuodian', 'liebianhuodian', 'saomadaofang', 'quanminjingjiren', 'laoyezhu', 'baobeichenggong', 'baobeidaofang' ] head_1 = ['城市', '项目名称', '浏览量', '浏览人数', '新增用户', '新增获电', '推荐用户', '分享获电', '裂变获电', '扫码到访数', '全民经纪人注册数', '报备成功数', '报备到访数'] brand_id = '13' sheet_names_1 = ['当日数据', '当月数据', '上线以来所有数据'] def __init__(self): self.db = MysqlDB('bi_report') def get_city_house_id(self): return self.db.select(Sql.sql_1) def get_report_customers(self, task_key): return self.db.select(Sql.sql_2, [task_key]) def get_mail_title(self, type, region_name,name): """ 获取邮件名称 :param type:1:项目,2:集团,3:区域 :param name: 项目 区域名称 :return: """ month_day = rpfu.get_montho_day() if type == 1: return '[{}]{}数据报表_{}'.format(month_day, region_name,name) elif type == 2: return '[{}]建业云集团数据报表_{}'.format(month_day, name) elif type == 3: return '[{}]建业云{}数据报表_{}'.format(month_day, region_name, name) def get_mail_content(self, customer_type): """ 根据客户类型获取邮件正文 :param customer_type: :return: """ if customer_type == 2: return MailContentText.text_1 else: return '本期数据报告已经准备完成,请点击附件查阅.' # 项目级别的统计 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): """ 用户浏览量,人数,新增获客,新增获点数据统计 :param time_range: :param house_ids: :return: """ # 1:总浏览量 result = [] data_1_1 = self.db.select(Sql.sql_3, [time_range[0], time_range[1], house_ids]) number_1_1 = data_1_1[0][0] data_1_2 = self.db.select(Sql.sql_4, [time_range[0], time_range[1], house_ids]) number_1_2 = data_1_2[0][0] number_1 = rpfu.add(number_1_1, number_1_2) result.append(number_1) # 2: 总浏览人数 data_2 = self.db.select(Sql.sql_5, [time_range[0], time_range[1], house_ids, time_range[0], time_range[1], house_ids]) number_2 = data_2[0][0] result.append(number_2) # 3:新增获客 time_1 = time_range[0] + ' 00:00:00' time_2 = time_range[1] + ' 23:59:59' data_3 = self.db.select(Sql.sql_6, [time_1, time_2, house_ids, time_1, time_2, house_ids]) number_3 = data_3[0][0] result.append(number_3) # 4:新增获电 data_4 = self.db.select(Sql.sql_7, [time_1, time_2, house_ids, house_ids, time_1, time_2]) number_4 = data_4[0][0] 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]) == str(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 = [] number_2 = 0 for x in self.get_recommend_data(time_range): if str(x[0]) == str(self.brand_id): number_2 = x[1] data_2.append(number_2) data_3 = [] for key in self.index_type: number = 0 for x in self.db.select(Sql.sql_10, [time_range[0], time_range[1]]): if str(x[0]) == str(key): number = x[1] data_3.append(number) 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: sub = [id] number = 0 for x in self.get_recommend_data(time_range): if str(id) == str(x[0]): number = x[1] sub.append(number) 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 str(house_id) == str(x[0]): sub.append(x) house_data = [house_id] for key in self.index_type: number = 0 for x in sub: if str(key) == str(x[1]): number = x[2] house_data.append(number) data_3.append(house_data) result = [] for id in house_ids: sub = [] for x in city_info: if str(id) == str(x[1]): sub.extend([x[3], x[2]]) for x in data_1: if str(id) == str(x[0]): sub.extend(x[1:]) for x in data_2: if str(id) == str(x[0]): sub.extend(x[1:]) for x in data_3: if str(id) == str(x[0]): sub.extend(x[1:]) result.append(sub) return result def house_data(self, house_ids): time_range_1 = rpfu.get_prd_day() time_range_2 = rpfu.get_time_range_month() time_range_3 = rpfu.get_all_time_data_range() result = [] result.append(self.house_data_of_time(time_range_1, house_ids)) result.append(self.house_data_of_time(time_range_2, house_ids)) result.append(self.house_data_of_time(time_range_3, house_ids)) return result def send_mail_to_customer(self, task_key): """ 统计数据推送给客户, 表二 :param: task_key :return: """ # 邮件发送参数 # mail_title, # content, # receiver, # mail_excel, # file_name, # mail_excel_1=None, # file_name_1=None message = {} send_mail_info = [] mail_util = EmailUtil() rfu = ReportFileUtils() customers = self.get_report_customers(task_key) message[0] = '客户信息获取成功' try: for customer in customers: # a.task_key, b.customer_type, b.name, b.mail, b.house_or_region, a.customer_id, GROUP_CONCAT(c.house_or_brand_id) as ids name = customer[2] customer_type = customer[1] mail = customer[3] ids = customer[6] region_name = customer[4] title = self.get_mail_title(customer_type, region_name, name) content = self.get_mail_content(customer_type) save_path = FileUtil().save_path_create() file_path = save_path + '/' + title message[11] = '邮件信息生成成功' if customer_type == 2: # 集团 message['99'] = '集团' table_1 = self.brand_data() message[33] = 'brand_data' house_ids = self.get_house_id_by_brand_id(ids) message[55] = 'get_house_id_by_brand_id' table_2 = self.house_data(house_ids) message[66] = 'house_data' # data, sheet_names, title, headers, save_path content = content.format(table_1[0], table_1[1], table_1[2], table_1[3], table_1[4], table_1[5], table_1[6], table_1[7], table_1[8], table_1[9], table_1[10], table_1[11], table_1[12],table_1[13], table_1[14], table_1[15], table_1[16], table_1[17], table_1[18], table_1[19], table_1[20], table_1[21], table_1[22], table_1[23], table_1[24], table_1[25], table_1[26], table_1[27], table_1[28], table_1[29], table_1[30], table_1[31], table_1[32], table_1[33], table_1[34], table_1[35] ) rfu.create_excel_file(table_2, self.sheet_names_1, title, [self.head_1, self.head_1, self.head_1], save_path) elif customer_type == 1: # 项目 message[111] = '项目' table_2 = self.house_data(self.get_house_ids(ids)) message[222] = 'house_data' message[99999] = table_2 rfu.create_excel_file(table_2, self.sheet_names_1, title, [self.head_1, self.head_1, self.head_1], save_path) elif customer_type == 3: # 区域 message[333] = '区域' table_2 = self.house_data(self.get_house_ids(ids)) message[444] = 'self.house_data' rfu.create_excel_file(table_2, self.sheet_names_1, title, [self.head_1, self.head_1, self.head_1], save_path) else: pass send_mail_info.append([title, content, mail, file_path, title + '.xlsx', name]) message[1] = '数据查询和excel生成完毕' break # 发送邮件 send_mail_log = [] for mail in send_mail_info: try: for m in self.customer_mails: result = mail_util.send_mail_by_admin(mail[0], mail[1], m, mail[3], mail[4]) if result: # name, mail, report_name, push_time, send_status, status, error_message send_mail_log.append([mail[5], mail[2], mail[3], 1, 'success']) else: send_mail_log.append([mail[5], mail[2], mail[3], -1, 'fail']) except Exception as e: print(str(e)) send_mail_log.append([mail[5], mail[2], mail[3], -1, str(e)]) self.db.add_some(send_mail_info, Sql.sql_12) message[2] = '遇见发送完毕, 共:{}份邮件'.format(len(send_mail_info)) except Exception as e: message['error'] = str(e) finally: return message def get_house_ids(self, ids_str): if str(ids_str).find(',') == -1: return [ids_str] else: return [x for x in str(ids_str).split(',')] if __name__ == '__main__': pass