Browse Source

完善报表推送

Signed-off-by: Binren Zhnag <zhangbr@elab-plus.com>
Binren Zhnag 5 năm trước cách đây
mục cha
commit
a9614d7aa8
6 tập tin đã thay đổi với 97 bổ sung55 xóa
  1. 3 3
      apscheduler_elab.py
  2. 49 14
      email_util.py
  3. 1 1
      flask_app.py
  4. 7 4
      report_push.py
  5. 3 1
      requirements.txt
  6. 34 32
      xlwt_util.py

+ 3 - 3
apscheduler_elab.py

@@ -19,7 +19,7 @@ class Config(object):
             'trigger': 'cron',
             'day_of_week': '*',
             'hour': 8,
-            'minute': 50
+            'minute': 45
         },
         {
             'id': 'week_push_one',
@@ -28,7 +28,7 @@ class Config(object):
             'trigger': 'cron',
             'day_of_week': '1',
             'hour': 8,
-            'minute': 50
+            'minute': 45
         },
         {
             'id': 'week_push_two',
@@ -37,7 +37,7 @@ class Config(object):
             'trigger': 'cron',
             'day_of_week': '1',
             'hour': 10,
-            'minute': 50
+            'minute': 45
         }
     ]
 

+ 49 - 14
email_util.py

@@ -6,19 +6,33 @@ from email.mime.multipart import MIMEMultipart
 from email.mime.base import MIMEBase
 from email.encoders import encode_base64
 import traceback
-import os
+import os, random, sys, requests
+from requests_toolbelt.multipart.encoder import MultipartEncoder
 
 # https://blog.csdn.net/chuxu8314/article/details/100618710
 # https://blog.csdn.net/Angry_Mills/article/details/79067270
 
 
 class EmailUtil(object):
-    host_server = 'smtp.qq.com'
-    sender_email = '1285211525@qq.com'
-    pwd = 'rstydfukfpzoidgi'
+    host_server = 'smtp.exmail.qq.com'
+    sender_email = 'data_service@elab-plus.com'
+    pwd = 'elab@123A'
     send_name = 'elab'
     receiver = ['1285211525@qq.com', 'lijm@elab-plus.com', 'xuanxc@elab-plus.com']
 
+    # 开发环境
+    url_dev = "http://43.254.221.77:5555/elab-marketing-sms//mail/sendEmailForReport"  # 接口地址
+
+    # 测试环境
+    url_test = "http://gatewaytest.elab-plus.com/elab-marketing-sms//mail/sendEmailForReport"
+
+
+    # 消息头数据
+    headers = {
+        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36',
+        'Referer': url_test,
+    }
+
     def __init__(self):
         pass
 
@@ -28,15 +42,14 @@ class EmailUtil(object):
                   receivers,
                   mail_excel
                   ):
-        global smtp
         try:
-            smtp = SMTP(self.host_server, 465)
+            smtp = SMTP(self.host_server, 25)
             smtp.set_debuglevel(1)
             smtp.ehlo(self.host_server)
             smtp.login(self.sender_email, self.pwd)
             msg = MIMEMultipart('related')
             msg['From'] = self.send_name
-            msg['Subject'] = Header(mail_title, 'utf-8')
+            msg['Subject'] = Header(mail_title, 'gbk')
             msgAlternative = MIMEMultipart('alternative')
             msg.attach(msgAlternative)
             if content:
@@ -47,7 +60,8 @@ class EmailUtil(object):
                 with open(mail_excel, 'rb') as fp:
                     part.set_payload(fp.read())
                     encode_base64(part)
-                    part.add_header('Content-Disposition', f'attachment; filename="{os.path.split(mail_excel)[1]}"')
+                    print(os.path.split(mail_excel)[1])
+                    part.add_header('Content-Disposition', 'attachment', filename=('gbk', '', os.path.split(mail_excel)[1]))
                     msg.attach(part)
             for receiver in receivers:
                 msg['To'] = receiver
@@ -60,18 +74,39 @@ class EmailUtil(object):
         except Exception as e:
             print('Error:{}'.format(str(e)))
             traceback.print_exc()
-        finally:
-            smtp.quit()
 
-    dir_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+    def send_mail_by_admin(self,
+                            mail_title,
+                            content,
+                            receiver,
+                            mail_excel,
+                            file_name
+                           ):
+
+        with open(mail_excel, 'rb') as f:
+            m = MultipartEncoder(
+                fields={
+                    "enclosure": ('file', f, 'application/octet-stream'),
+                    "mailAddressee": receiver,
+                    "mailContent": content,
+                    "mailEnclosureName": file_name,
+                    "mailTitle": mail_title,
+                    "mailType": "text/html",
+                    "time": ""
+                }
+            )
+            self.headers['Content-Type'] = m.content_type
+            r = requests.post(self.url_test, data=m, verify=False, headers=self.headers)
+            if r and r.json()['success']:
+                return True
 
     def send_test(self):
         send_email = EmailUtil()
         send_email.send_mail('elab_test', '11', ['1285211525@qq.com'],
-                             mail_excel=r'{}/elab_mvp/resources/111.xlsx'.format(self.dir_path))
+                             mail_excel=r'D:\elab-code\elab_mvp\resources\行为与模块分值汇总.xlsx')
 
 
 if __name__ == '__main__':
     send_email = EmailUtil()
-    send_email.send_test()
-    pass
+    result = send_email.send_mail_by_admin('移动案场订阅日报', '的数据报告已经准备完成', '15773153135@163.com', r'D:\elab-code\elab_mvp\resources\set-behavior-tag.xlsx', 'set-behavior-tag.xlsx')
+    print(result)

+ 1 - 1
flask_app.py

@@ -227,7 +227,7 @@ def report_test():
     try:
         task_id = request.args.get('id', default=0, type=int)
         report_push = ReportPush('bi_report')
-        result = report_push.report_data_query(task_id)
+        result = report_push.report_push(task_id)
     except Exception as e:
         print(str(e))
         result['error'] = str(e)

+ 7 - 4
report_push.py

@@ -456,7 +456,7 @@ 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']
+    mails = ['1285211525@qq.com'] # , 'lijm@elab-plus.com', 'xuanxc@elab-plus.com']
 
     def report_push(self, task_key):
         message = {}
@@ -474,8 +474,12 @@ class ReportPush(object):
                 log_data = []
                 try:
                     if value[2]:
-                        email_util.send_mail(title, content, self.mails, value[2])
-                        log_data = [value[0], value[1], value[2], 1]
+                        for mail in self.mails:
+                            result = email_util.send_mail_by_admin(title, content, mail, value[2], value[3])
+                            if result:
+                                log_data = [value[0], value[1], value[2], 1]
+                            else:
+                                log_data = [value[0], value[1], value[2], -1]
                 except Exception as e:
                     log_data = [value[0], value[1], value[2], -1]
                     print(str(e))
@@ -484,7 +488,6 @@ class ReportPush(object):
             message['data'] = send_info
             self.db.add_some(self.sql_6, logs)
             self.db.close()
-            email_util.quit_mail()
             FileUtil.remove_files(7, xu.save_path)
         except Exception as e:
             print(str(e))

+ 3 - 1
requirements.txt

@@ -8,4 +8,6 @@ flask
 tablib
 flask_apscheduler
 PyEmail
-
+flask_mail
+requests_toolbelt
+request

+ 34 - 32
xlwt_util.py

@@ -89,12 +89,11 @@ class XlwtUtil(object):
             start_col,
             end_col,
             content,
-            self.styleOK)
-            # self.set_style(
-            #     'Times New Roman',
-            #     320,
-            #     bold=True,
-            #     format_str=''))
+            self.set_style(
+                'Times New Roman',
+                320,
+                bold=True,
+                format_str=''))
 
     def horizontal_space_cells(self, ws, start_row, end_row, start_col, end_col):
         self.horizontal_cell_merge(ws, start_row, end_row, start_col, end_col, '')
@@ -116,12 +115,11 @@ class XlwtUtil(object):
             start_col,
             end_col,
             content,
-            self.styleOK)
-            # self.set_style(
-            #     'Times New Roman',
-            #     320,
-            #     bold=True,
-            #     format_str=''))  # 合并单元格
+            self.set_style(
+                'Times New Roman',
+                320,
+                bold=True,
+                format_str=''))  # 合并单元格
 
     def get_file_name(self, task_key, time_range, name):
         """
@@ -130,11 +128,15 @@ class XlwtUtil(object):
         :param time_range:
         :return:
         """
+        day = '移动案场订阅日报_{}_{}.xls'
+        week = '移动案场订阅周报_{}_{}至{}.xls'
         new_file_name = self.save_path_create()
         if task_key == 1:
-            return '{}/移动案场订阅日报{}_{}.xlsx'.format(new_file_name, time_range[0], name)
+            day = day.format(name, time_range[0])
+            return ['{}/{}'.format(new_file_name, day), day]
         elif task_key in (2, 3):
-            return '{}/移动案场订阅周报_{}至{}.xlsx'.format(new_file_name, time_range[0], time_range[1])
+            week = week.format(name, time_range[0], time_range[1])
+            return ['{}/{}'.format(new_file_name, week), week]
 
     def save_path_create(self):
         tm = datetime.datetime.now().strftime('%Y-%m-%d')
@@ -188,11 +190,11 @@ class XlwtUtil(object):
             for col in [1, 3, 5]:
                 for row in [1, 2, 3, 4]:
                     ws.col(col).width = 150 * 30  # 定义列宽
-                    ws.write(row, col, data_1[col_index], self.styleOK)
-                    # style = self.set_style('Times New Roman',
-                    #                        200,
-                    #                        bold=False,
-                    #                        format_str='', align='')
+                    ws.write(row, col, str(data_1[col_index]),
+                    style=self.set_style('Times New Roman',
+                                           200,
+                                           bold=False,
+                                           format_str='', align=''))
                     col_index += 1
 
             # 插入空白
@@ -307,8 +309,8 @@ class XlwtUtil(object):
             else:
                 pass
             file_path = self.get_file_name(task_key, time_rang, key)
-            self.wb.save(file_path)  # 保存xls
-            result.append([key, mail, file_path])
+            self.wb.save(file_path[0])  # 保存xls
+            result.append([key, mail, file_path, file_path[1]])
         return result
 
     def insert_module_data(self, ws, title, header, data, start_row, start_col, end_col):
@@ -328,11 +330,11 @@ class XlwtUtil(object):
                 if value is None:
                     value = 0
                 ws.col(col).width = 150 * 30  # 定义列宽
-                ws.write(start_row, col, value, self.styleOK)
-                # style = self.set_style('Times New Roman',
-                #                        200,
-                #                        bold=False,
-                #                        format_str='', align='')
+                ws.write(start_row, col, str(value),
+                style=self.set_style('Times New Roman',
+                                       200,
+                                       bold=False,
+                                       format_str='', align=''))
             start_row += 1
 
     def sceptical_insert_cells(self, ws, data, start_row, cols):
@@ -340,11 +342,11 @@ class XlwtUtil(object):
             col_index = 0
             for col in cols:
                 ws.col(col).width = 150 * 30  # 定义列宽
-                ws.write(start_row, col, x[col_index], self.styleOK)
-                # style = self.set_style('Times New Roman',
-                #                        200,
-                #                        bold=False,
-                #                        format_str='', align='')
+                ws.write(start_row, col, str(x[col_index]),
+                style=self.set_style('Times New Roman',
+                                       200,
+                                       bold=False,
+                                       format_str='', align=''))
                 col_index += 1
             start_row += 1
 
@@ -352,5 +354,5 @@ class XlwtUtil(object):
 if __name__ == '__main__':
     xu = XlwtUtil()
     data = {}
-    for x in xu.create_excel(data, ['2020-03-01', '2020-03-07'], 1):
+    for x in xu.create_excel(data, ['2020-03-12', '2020-03-13'], 2):
         print(x)