Эх сурвалжийг харах

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	Controller/EquipmentManagerV3.py
locky 1 жил өмнө
parent
commit
fab3d15653

+ 10 - 11
AdminController/dataSystemManagement/OperatingCostsDataController.py

@@ -36,15 +36,14 @@ class OperatingCostsDataView(View):
         if token_code != 0:
             return response.json(token_code)
         if operation == 'getOperatingCosts':  # 查询订单成本利润
-            return self.get_operating_costs(request, request_dict, response)
+            return self.get_operating_costs(request_dict, response)
         else:
             return response.json(414)
 
-    @classmethod
-    def get_operating_costs(cls, request, request_dict, response):
+    @staticmethod
+    def get_operating_costs(request_dict, response):
         """
         查询订单成本利润
-        @param request:请求参数
         @param request_dict:请求参数
         @request_dict startTime:开始时间
         @request_dict endTime:结束时间
@@ -53,12 +52,8 @@ class OperatingCostsDataView(View):
         """
         start_time = request_dict.get('startTime', None)
         end_time = request_dict.get('endTime', None)
-        page = request_dict.get('page', 1)
-        line = request_dict.get('line', 10)
-        if not all([page, line]):
-            return response.json(444, {'error param': 'page or line'})
-        page = int(page)
-        line = int(line)
+        page = request_dict.get('page', None)
+        line = request_dict.get('line', None)
         try:
             if start_time and end_time:
                 operating_costs_qs = OperatingCosts.objects.filter(time__gte=start_time, time__lt=end_time)
@@ -71,7 +66,11 @@ class OperatingCostsDataView(View):
                                                      'end_time', 'created_time', 'start_time', 'time', 'storage_cost',
                                                      'api_cost', 'profit', 'profit_margin', 'fee', 'flow_cost',
                                                      'real_income', 'price', 'region', 'country_name', 'actual_flow',
-                                                     'order_type', 'expire')[(page - 1) * line:page * line]
+                                                     'order_type', 'expire')
+            if page and line:
+                page = int(page)
+                line = int(line)
+                operating_qs = operating_qs[(page - 1) * line:page * line]
             return response.json(0, {'count': count, 'res': list(operating_qs)})
         except Exception as e:
             print('error')

+ 7 - 9
Controller/CloudStorage.py

@@ -843,8 +843,7 @@ class CloudStorageView(View):
                 channel = order_list[0]['channel']
                 rank = order_list[0]['rank']
 
-                store_qs = Store_Meal.objects.filter(id=rank).values('day', 'bucket_id', 'expire',
-                                                                     'icloud_store_meal_id')
+                store_qs = Store_Meal.objects.filter(id=rank).values('day', 'bucket_id', 'expire')
                 if not store_qs.exists():
                     return response.json(173)
                 bucket_id = store_qs[0]['bucket_id']
@@ -916,13 +915,12 @@ class CloudStorageView(View):
                     return HttpResponseRedirect(red_url)
             return response.json(0, signature)
         except Exception as e:
-            logger = logging.getLogger('info')
-            logger.info('alipay----notify---------')
-            logger.info(repr(e))
-            logger.info(sys.exc_info())
-            logger.info('alipay支付失败:----')
-            logger.info("错误行数:{errLine}".format(errLine=e.__traceback__.tb_lineno))
-            logger.info(repr(e))
+            LOGGER.info('alipay----notify---------')
+            LOGGER.info(repr(e))
+            LOGGER.info(sys.exc_info())
+            LOGGER.info('alipay支付失败:----')
+            LOGGER.info("错误行数:{errLine}".format(errLine=e.__traceback__.tb_lineno))
+            LOGGER.info(repr(e))
             if order_qs:
                 order_qs.update(status=10, promotion_rule_id=promotion_rule_id)
             redis_obj.del_data(key=order_id + 'do_notify')

+ 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:

+ 11 - 5
Controller/InAppPurchaseController.py

@@ -4,6 +4,8 @@
 import logging
 import time
 import json
+
+import requests
 from appstoreserverlibrary.api_client import AppStoreServerAPIClient, GetTransactionHistoryVersion
 from appstoreserverlibrary.models.Environment import Environment
 from appstoreserverlibrary.receipt_utility import ReceiptUtility
@@ -18,7 +20,7 @@ from django.db.models import Q
 from django.views import View
 from django.http import HttpResponse
 
-from Ansjer.config import LOGGER, CONFIG_INFO, CONFIG_TEST, PAY_TYPE_IN_APP_PURCHASE, BASE_DIR
+from Ansjer.config import LOGGER, CONFIG_INFO, CONFIG_TEST, PAY_TYPE_IN_APP_PURCHASE, BASE_DIR, CONFIG_US
 from Controller.CheckUserData import DataValid
 from Model.models import Order_Model, Store_Meal, Device_Info, UID_Bucket, Unused_Uid_Meal, AiService, Device_User, \
     SysMsgModel
@@ -306,6 +308,7 @@ class InAppPurchaseView(View):
             root_certificates, enable_online_checks, environment, bundle_id, app_apple_id)
         decoded_payload = verifier.verify_and_decode_notification(signed_payload)
         logger.info('App Store服务器通知decoded_payload: {}'.format(decoded_payload))
+        status_code = 200
         if str(decoded_payload.rawNotificationType) == "REFUND":
             # 一种通知类型,表示 App Store 成功退还了消耗性应用内购买、非消耗性应用内购买、自动续订或不可续订的交易。
             # revocationDate 包含退款交易的时间戳。originalTransactionId 和 productId 用于标识原始交易和产品。revocationReason 包含原因。
@@ -340,9 +343,12 @@ class InAppPurchaseView(View):
                     LOGGER.info(f'App Store服务器通知用户退款, 关闭AI:{req_success}')
 
                 # 4.发送邮件告知用户退款
-                email_content = f'用户{user_id}, 订单:{orderID}, 设备{uid}退款'
+                email_content = f'{CONFIG_INFO}用户{user_id}, 订单:{orderID}, 设备{uid}退款'
+                S3Email().faEmail(email_content, 'servers@ansjer.com')
             else:
-                email_content = f'transaction_id:{transaction_id}退款, 未查询到订单'
-            S3Email().faEmail(email_content, 'servers@ansjer.com')
+                if CONFIG_INFO == CONFIG_US:
+                    url = "https://api.zositeche.com/inAppPurchase/AppStoreServerNotifications"
+                    eur_response = requests.post(url=url, json=json.loads(request.body))
+                    status_code = eur_response.status_code
 
-        return HttpResponse(status=200)
+        return HttpResponse(status=status_code)