Browse Source

优化统计订单成本利润

peng 1 year ago
parent
commit
d11b065b37
1 changed files with 15 additions and 14 deletions
  1. 15 14
      Controller/Cron/CronTaskController.py

+ 15 - 14
Controller/Cron/CronTaskController.py

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