Procházet zdrojové kódy

周报推送服务开发

Signed-off-by: Binren Zhnag <zhangbr@elab-plus.com>
Binren Zhnag před 5 roky
rodič
revize
672a990f23
4 změnil soubory, kde provedl 413 přidání a 21 odebrání
  1. 21 20
      email_util.py
  2. 1 1
      flask_app.py
  3. 34 0
      report_push.py
  4. 357 0
      xlwt_util.py

+ 21 - 20
email_util.py

@@ -14,24 +14,24 @@ class EmailUtil(object):
     sender_email = 'zhangbr@elab-plus.com'
     pwd = '306492mnA'
     send_name = 'elab'
-    receiver = ['1285211525@qq.com', '15773153135@163.com']
+    receiver = ['1285211525@qq.com', 'lijm@elab-plus.com', 'xuanxc@elab-plus.com']
 
     def __init__(self):
-        pass
+        self.smtp = SMTP(self.host_server)
+        self.smtp.set_debuglevel(1)
+        self.smtp.ehlo(self.host_server)
+        self.smtp.login(self.sender_email, self.pwd)
 
     def send_mail(self,
-                  mail_title='elab-test',
-                  content=None,
-                  mail_excel=None
+                  mail_title,
+                  content,
+                  receivers,
+                  mail_excel
                   ):
         try:
-            smtp = SMTP(self.host_server)
-            smtp.set_debuglevel(1)
-            smtp.ehlo(self.host_server)
-            smtp.login(self.sender_email, self.pwd)
             msg = MIMEMultipart('related')
-            msg['Subject'] = Header(mail_title, 'utf-8')
             msg['From'] = self.send_name
+            msg['Subject'] = Header(mail_title, 'utf-8')
             msgAlternative = MIMEMultipart('alternative')
             msg.attach(msgAlternative)
             if content:
@@ -44,22 +44,23 @@ class EmailUtil(object):
                     encode_base64(part)
                     part.add_header('Content-Disposition', f'attachment; filename="{os.path.split(mail_excel)[1]}"')
                     msg.attach(part)
-            for mail in self.receiver:
-                msg['To'] = mail
+            for receiver in receivers:
+                msg['To'] = receiver
                 try:
-                    print(mail)
-                    smtp.sendmail(self.sender_email, mail, msg.as_string())
+                    self.smtp.sendmail(self.sender_email, receiver, msg.as_string())
                 except Exception as e:
-                    smtp.sendmail(self.sender_email, mail, msg.as_string())
                     print(str(e))
-            smtp.quit()
-            print('Success!')
-        except:
-            print('Error!')
+                    self.smtp.sendmail(self.sender_email, receiver, msg.as_string())
+                print('Success!')
+        except Exception as e:
+            print('Error:{}'.format(str(e)))
             traceback.print_exc()
 
+    def quit_mail(self):
+        self.smtp.quit()
+
 
 if __name__ == '__main__':
-    send_email = EmailUtils()
+    send_email = EmailUtil()
     send_email.send_mail('elab_test', mail_excel=r'D:\elab-code\elab_mvp\resources\tongce1.xlsx')
     pass

+ 1 - 1
flask_app.py

@@ -220,7 +220,7 @@ def report_test():
     try:
         task_id = request.args.get('id', default=None, type=int)
         report_push = ReportPush('bi_report')
-        result = report_push.report_data_query(task_id)
+        result = report_push.report_push(task_id)
         return json.dumps(result, ensure_ascii=False, cls=DecimalEncoder)
     except Exception as e:
         return str(e)

+ 34 - 0
report_push.py

@@ -1,6 +1,9 @@
 from mysql_db import MysqlDB
 import datetime
 from itertools import groupby
+from xlwt_util import XlwtUtil
+from file_util import FileUtil
+from email_util import EmailUtil
 
 
 class ReportPush(object):
@@ -432,6 +435,35 @@ class ReportPush(object):
     def __init__(self, db_name):
         self.db = MysqlDB(db_name)
 
+    mails = ['1285211525@qq.com', 'lijm@elab-plus.com', 'xuanxc@elab-plus.com']
+
+    def report_push(self, task_key):
+        report_data = self.report_data_query(task_key)
+        time_rang = self.get_time_range(task_key)
+        xu = XlwtUtil()
+        send_info = xu.create_excel(report_data, time_rang, task_key)
+        email_util = EmailUtil()
+        title, content = self.get_title(task_key, time_rang)
+        logs = []
+        for value in send_info:
+            try:
+                email_util.send_mail(title, content, self.mails, value[2])
+                log_data = [value[0], value[1], value[3], 1]
+            except Exception as e:
+                log_data = [value[0], value[1], value[3], -1]
+                print(str(e))
+            logs.append(log_data)
+        self.db.add_some(self.sql_6, logs)
+        self.db.close()
+        email_util.quit_mail()
+        FileUtil.remove_files(7, xu.save_path)
+
+    def get_title(self, task_key, time_range):
+        if task_key == 1:
+            return '移动案场订阅日报[{}]'.format(time_range[0]), '本期间内【{}】至【{}】的数据报告已经准备完成。请点击附件查阅。'.format(time_range[0], time_range[1])
+        elif task_key in (2, 3):
+            return '移动案场订阅周报[{}]至[{}]'.format(time_range[0], time_range[1]), '本期间内【{}】至【{}】的数据报告已经准备完成。请点击附件查阅.'.format(time_range[0], time_range[1])
+
     def report_data_query(self, task_key):
         """
             定时任务推送数据准备
@@ -455,6 +487,7 @@ class ReportPush(object):
         for customer in customers:
             customer_data = {}
             name = customer[3]
+            mail = customer[4]
             customer_type = customer[2]
             house_ids = []
             brand_id_list = []
@@ -593,6 +626,7 @@ class ReportPush(object):
                 result_data_8_format.append(ele)
             self.sort(result_data_8_format, 1)
             customer_data[8] = result_data_8_format
+            customer_data[0] = mail
             result[name] = customer_data
         return result
 

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 357 - 0
xlwt_util.py