| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314 | 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 = ['plf@centralchina.com', 'liutt@elab-plus.com', 'binrenzhang@qq.com']    customer_mails = ['binrenzhang@qq.com']    #    index_type = {        6: 'fenxianghuodian',        7: 'liebianhuodian',        8: 'saomadaofang',        9: 'quanminjingjiren',        10: 'laoyezhu',        11: 'baobeichenggong',        12: '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.keys():            type_value = self.index_type.get(key)            number = 0            for x in self.db.select(Sql.sql_10, [time_range[0], time_range[1]]):                if str(x[0]) == str(type_value):                   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 = []            for key in self.index_type.keys():                value = self.index_type.get(key)                number = 0                for x in sub:                    if str(value) == 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
 |