| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340 | from mysql_db import MysqlDBfrom sql import Sqlfrom report_public_funs_utils import ReportPublicFunsUtils as rpfufrom mail_content_text import MailContentTextfrom email_util import EmailUtilfrom file_util import FileUtilfrom report_file_utils import ReportFileUtilsclass JianYeReport(object):    """        建业报表数据处理    """    # customer_mails = ['liutt@elab-plus.com', 'binrenzhang@qq.com', 'plf@centralchina.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)        result.sort(key=lambda obj: obj[2], reverse=True)        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:            save_path = FileUtil().save_path_create()            send_data = []            error_customer = []            # 查询数据            for customer in customers:                try:                    # 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)                    file_path = save_path + '/' + title + '.xlsx'                    if customer_type == 2:                        # 集团                        table_1 = self.brand_data()                        house_ids = self.get_house_id_by_brand_id(ids)                        table_2 = self.house_data(house_ids)                        # 总浏览量:xx ,总浏览人数:xx                        #                        # 新增获客: xx, 新增获电:xx                        #                        # 推荐用户数:xx,分享获电:xx,裂变获电:xx                        #                        # 全民经纪人注册数:xx                        #                        # 报备成功数:xx,报备到访数:xx                        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[8], 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[20], 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[32], table_1[34], table_1[35]                                                 )                        send_data.append(                            [table_2, self.sheet_names_1, title, [self.head_1, self.head_1, self.head_1], file_path,                             content, name, mail])                        # rfu.create_excel_file(table_2, self.sheet_names_1, title, [self.head_1, self.head_1, self.head_1], file_path)                    elif customer_type == 1:                        # 项目                        table_2 = self.house_data(self.get_house_ids(ids))                        send_data.append(                            [table_2, self.sheet_names_1, title, [self.head_1, self.head_1, self.head_1], file_path,                             content, name, mail])                        # rfu.create_excel_file(table_2, self.sheet_names_1, title, [self.head_1, self.head_1, self.head_1], file_path)                    elif customer_type == 3:                        # 区域                        table_2 = self.house_data(self.get_house_ids(ids))                        send_data.append(                            [table_2, self.sheet_names_1, title, [self.head_1, self.head_1, self.head_1], file_path,                             content, name, mail])                        # rfu.create_excel_file(table_2, self.sheet_names_1, title, [self.head_1, self.head_1, self.head_1], file_path)                    else:                        pass                except Exception as e:                    print(str(e))                    error_customer.append(str(e))            message['errors'] = e            message['query_data'] = 'success'            # 生成文件            for data in send_data:                try:                    rfu.create_excel_file(data[0], data[1], data[2], data[3], data[4])                    # [title, content, mail, file_path, title + '.xlsx', name]                    send_mail_info.append([data[2], data[5], data[7], data[4], data[2] + '.xlsx', data[6]])                except Exception as e:                    print(e)            message['file'] = 'success'            # 发送邮件            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))                    message['error1'] = str(e)                    send_mail_log.append([mail[5], mail[2], mail[3], -1, str(e)])            message['mail'] = 'success'            # 写入日志            self.db.add_some(send_mail_log, Sql.sql_12)            message['log'] = 'success'        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
 |