Răsfoiți Sursa

优化统计订单成本利润

peng 1 an în urmă
părinte
comite
d11b065b37
1 a modificat fișierele cu 15 adăugiri și 14 ștergeri
  1. 15 14
      Controller/Cron/CronTaskController.py

+ 15 - 14
Controller/Cron/CronTaskController.py

@@ -17,6 +17,7 @@ import zipfile
 import paypalrestsdk
 import requests
 import csv
+import math
 from django.db import connection, connections, transaction
 from django.db.models import Q, Sum, Count
 from django.views import View
@@ -1116,13 +1117,11 @@ class CronCollectDataView(View):
             create_time = int(time.time())
             today_end_time = end_time_stamp + 86400
             operating_costs_qs_1 = OperatingCosts.objects.filter(time=start_time_stamp).exclude(
-                created_time__gte=end_time_stamp, created_time__lt=today_end_time).values('order_id', 'end_time',
-                                                                                          'uid')
+                created_time__gte=end_time_stamp, created_time__lt=today_end_time).values('order_id', 'end_time', 'uid')
             operating_costs_qs_2 = OperatingCosts.objects.filter(time=start_time_stamp,
                                                                  created_time__gte=end_time_stamp,
                                                                  created_time__lt=today_end_time, start_time=0).values(
-                'order_id', 'end_time',
-                'uid')
+                'order_id', 'end_time', 'uid')
             operating_costs_qs = operating_costs_qs_1.union(operating_costs_qs_2)
             storage_univalence = 0.023 / 30
             api_univalence = 0.005 / 1000
@@ -1132,14 +1131,15 @@ class CronCollectDataView(View):
             for item in country_qs:
                 country_dict[item['id']] = item['country_name']
             for item in operating_costs_qs:
-                order_qs = Order_Model.objects.filter(orderID=item['order_id']).values('price', 'payTime', 'order_type',
-                                                                                       'rank__expire', 'fee', 'payType',
-                                                                                       'userID__region_country')
+                order_qs = Order_Model.objects.filter(orderID=item['order_id'], order_type__in=[0, 1]).values('price',
+                                                                                                              'payTime',
+                                                                                                              'rank__expire',
+                                                                                                              'fee',
+                                                                                                              'payType',
+                                                                                                              'userID__region_country')
                 if order_qs.exists():
                     order = order_qs[0]
                     country_name = country_dict.get(order['userID__region_country'], '未知国家')
-                    if order['order_type'] not in [0, 1]:
-                        continue
                     order_type = '云存'
                     expire = str(order_qs[0]['rank__expire']) + '个月'
                     price = float(order['price'])
@@ -1149,7 +1149,7 @@ class CronCollectDataView(View):
                         fee = float(order['fee']) if order['fee'] else 0
                     order_start_time = int((datetime.datetime.fromtimestamp(item['end_time']) - relativedelta(
                         months=order['rank__expire'])).timestamp())
-                    order_days = round((item['end_time'] - order_start_time) / 86400)
+                    order_days = math.ceil((item['end_time'] - order_start_time) / 86400)
                     if item['end_time'] > end_time_stamp:  # 订单结束时间大于统计时间
                         if order_start_time <= start_time_stamp:  # 订单月初之前开始
                             settlement_days = (end_time - start_time).days  # 当月结算天数=月初-月底
@@ -1162,19 +1162,19 @@ class CronCollectDataView(View):
                                                                                        time__lt=order_start_time,
                                                                                        uid=item['uid'])
                         else:  # 订单月初和统计时间之间开始
-                            settlement_days = round((end_time_stamp - order_start_time) / 86400)
+                            settlement_days = math.ceil((end_time_stamp - order_start_time) / 86400)
                             uid_bucket_statistics = UidBucketStatistics.objects.filter(time__gte=order_start_time,
                                                                                        time__lte=end_time_stamp,
                                                                                        uid=item['uid'])
-                        remaining_usage_time = round((item['end_time'] - end_time_stamp) / 86400)  # 剩余使用时间
+                        remaining_usage_time = math.ceil((item['end_time'] - end_time_stamp) / 86400)  # 剩余使用时间
                     else:  # 订单结束时间小于统计时间
                         if order_start_time <= start_time_stamp:
-                            settlement_days = round((item['end_time'] - start_time_stamp) / 86400)
+                            settlement_days = math.ceil((item['end_time'] - start_time_stamp) / 86400)
                             uid_bucket_statistics = UidBucketStatistics.objects.filter(time__gte=start_time_stamp,
                                                                                        time__lt=item['end_time'],
                                                                                        uid=item['uid'])
                         else:
-                            settlement_days = round((item['end_time'] - order_start_time) / 86400)
+                            settlement_days = math.ceil((item['end_time'] - order_start_time) / 86400)
                             uid_bucket_statistics = UidBucketStatistics.objects.filter(time__gte=order_start_time,
                                                                                        time__lt=item['end_time'],
                                                                                        uid=item['uid'])
@@ -1218,6 +1218,7 @@ class CronCollectDataView(View):
             LOGGER.info(
                 'thread_collect_operating_costs接口异常:errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
+
     @staticmethod
     def collect_obj_size(response):
         try: