Explorar o código

数据导出功能

peng %!s(int64=3) %!d(string=hai) anos
pai
achega
ca586fee1f

+ 43 - 2
AdminController/dataSystemManagement/HomeDataController.py

@@ -7,9 +7,11 @@
 @Software: PyCharm
 """
 import datetime
-
+import openpyxl
 import requests
-from django.db.models import Q, Count, Sum
+
+from django.db.models import Sum
+from django.http import HttpResponse
 from django.views.generic.base import View
 
 from Model.models import VideoPlaybackTimeModel, Device_User, Device_Info, Order_Model
@@ -41,6 +43,8 @@ class HomeDataView(View):
             return self.query_global_all_data(request, request_dict, response)
         elif operation == 'global/salesVolume':  # 查询全球销售额数据
             return self.query_global_sales_volume_data(request, request_dict, response)
+        elif operation == 'exportData':  # 查询全球销售额数据
+            return self.export_data(request_dict, response)
         else:
             return response.json(414)
 
@@ -108,6 +112,8 @@ class HomeDataView(View):
         start_time = request_dict.get('startTime', None)
         end_time = request_dict.get('endTime', None)
         time_unit = request_dict.get('timeUnit', None)
+        if not all([start_time, end_time, time_unit]):
+            return response.json(444, {'error param': 'startTime or endTime or timeUnit'})
         try:
             order_qs = Order_Model.objects.filter(addTime__range=(start_time, end_time))
             start_time = datetime.datetime.fromtimestamp(int(start_time))
@@ -222,3 +228,38 @@ class HomeDataView(View):
             return response.json(0, order_list)
         except Exception as e:
             return response.json(500, repr(e))
+
+
+    @classmethod
+    def export_data(cls, request_dict, response):
+        """
+        下载文件
+        @param request_dict:请求参数
+        @request_dict tableData:表格数据
+        @request_dict fileName:文件名
+        @param response:响应对象
+        @return:
+        """
+        table_data = request_dict.get('tableData', None)
+        sheet_name = request_dict.get('fileName', None)
+        if not all([table_data, sheet_name]):
+            return response.json(444, {'error param': 'tableData or fileName'})
+        table_data = eval(table_data)
+        file_name = sheet_name + '.xlsx'
+        file_path = 'static/static/{}'.format(file_name)
+        try:
+            wb = openpyxl.Workbook()
+            sh = wb.create_sheet(sheet_name, 0)
+            for row, data in enumerate(table_data):
+                row += 1
+                if row == 1:
+                    sh.append(list(data.keys()))
+                sh.append(list(data.values()))
+            wb.save(file_path)
+            with open(file_path, 'rb') as f:
+                res = HttpResponse(f)
+                res['Content-Type'] = 'application/octet-stream'
+                res['Content-Disposition'] = 'attachment;filename="{}"'.format(file_name)
+            return res
+        except Exception as e:
+            return response.json(500, repr(e))

+ 1 - 1
Service/CommonService.py

@@ -707,7 +707,7 @@ GCqvlyw5dfxNA+EtxNE2wCW/LW7ENJlACgcfgPlBZtpLheWoZB/maw4=
     def get_domain_name():
         """
         获取域名
-        @return: domain_name_list 切割后的时间列表
+        @return: domain_name_list 域名列表
         """
 
         if CONFIG_INFO == CONFIG_TEST: