Quellcode durchsuchen

优化查询每月订单成本利润

peng vor 1 Jahr
Ursprung
Commit
772276cc65

+ 17 - 19
AdminController/dataSystemManagement/OperatingCostsDataController.py

@@ -68,30 +68,27 @@ class OperatingCostsDataView(View):
             else:
                 operating_costs_qs = OperatingCosts.objects.all()
             count = operating_costs_qs.count()
-            operating_qs = operating_costs_qs.filter(~Q(order_id='')).values('order_id', 'uid', 'day_average_price',
-                                                                             'month_average_price',
-                                                                             'purchase_quantity', 'actual_storage',
-                                                                             'actual_api',
-                                                                             'monthly_income', 'settlement_days',
-                                                                             'remaining_usage_time',
-                                                                             'end_time', 'created_time',
-                                                                             'time').order_by('order_id')[
-                           (page - 1) * line:page * line]
+            order_list = list(operating_costs_qs.values_list('order_id', flat=True).order_by('-order_id'))[:page * line]
+            operating_qs = operating_costs_qs.values('order_id', 'uid', 'day_average_price', 'month_average_price',
+                                                     'purchase_quantity', 'actual_storage', 'actual_api',
+                                                     'monthly_income', 'settlement_days', 'remaining_usage_time',
+                                                     'end_time', 'created_time', 'time').order_by('-order_id')[
+                           :page * line]
+            all_order_qs = Order_Model.objects.filter(orderID__in=order_list)
+            country_qs = CountryModel.objects.values('id', 'country_name')
+            country_dict = {}
+            for item in country_qs:
+                country_dict[item['id']] = item['country_name']
             res = []
             storage_univalence = 0.023 / 30
             api_univalence = 0.005 / 1000
             for item in operating_qs:
-                order_qs = Order_Model.objects.filter(orderID=item['order_id'], UID=item['uid']).values('price',
-                                                                                                        'order_type',
-                                                                                                        'fee',
-                                                                                                        'userID__region_country',
-                                                                                                        'rank__expire',
-                                                                                                        'payType')
+                order_qs = all_order_qs.filter(orderID=item['order_id']).values('price', 'order_type', 'fee',
+                                                                                'userID__region_country',
+                                                                                'rank__expire', 'payType')
                 if not order_qs.exists():
                     continue
-                country_qs = CountryModel.objects.filter(id=order_qs[0]['userID__region_country']).values(
-                    'country_name')
-                country_name = country_qs[0]['country_name'] if country_qs.exists() else '未知国家'
+                country_name = country_dict.get(order_qs[0]['userID__region_country'], '未知国家')
                 region = '国内' if CONFIG_INFO == CONFIG_CN else '国外'
                 if order_qs[0]['order_type'] in [0, 1]:
                     order_type = '云存'
@@ -150,6 +147,7 @@ class OperatingCostsDataView(View):
                     if eur_result['result_code'] == 0:
                         res += eur_result['result']['res']
                         count += eur_result['result']['count']
-            return response.json(0, {'count': count, 'res': CommonService.list_sort_v2(res, 'order_id')})
+            return response.json(0, {'count': count,
+                                     'res': CommonService.list_sort_v2(res, 'order_id')[(page - 1) * line:page * line]})
         except Exception as e:
             return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))

+ 2 - 6
Controller/Cron/CronTaskController.py

@@ -1108,12 +1108,8 @@ class CronCollectDataView(View):
                                                                                              'uid')
             create_time = int(time.time())
             for item in operating_costs_qs:
-                order_qs = Order_Model.objects.filter(orderID=item['order_id'], UID=item['uid']).values('price',
-                                                                                                        'payTime',
-                                                                                                        'order_type',
-                                                                                                        'rank__expire',
-                                                                                                        'fee',
-                                                                                                        'payType')
+                order_qs = Order_Model.objects.filter(orderID=item['order_id']).values('price', 'payTime', 'order_type',
+                                                                                       'rank__expire', 'fee', 'payType')
                 if order_qs.exists():
                     order = order_qs[0]
                     if order['order_type'] not in [0, 1]:

+ 1 - 1
Service/CommonService.py

@@ -743,7 +743,7 @@ GCqvlyw5dfxNA+EtxNE2wCW/LW7ENJlACgcfgPlBZtpLheWoZB/maw4=
         @param e: 列表元素
         @param order_by: 排序对象
         """
-        return sorted(e, key=lambda item: item[order_by])
+        return sorted(e, key=lambda item: -int(item[order_by]))
 
     @staticmethod
     def Package_Type(order_type, content):