Browse Source

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	Controller/EquipmentManagerV3.py
locky 1 year ago
parent
commit
fab3d15653

+ 10 - 11
AdminController/dataSystemManagement/OperatingCostsDataController.py

@@ -36,15 +36,14 @@ class OperatingCostsDataView(View):
         if token_code != 0:
         if token_code != 0:
             return response.json(token_code)
             return response.json(token_code)
         if operation == 'getOperatingCosts':  # 查询订单成本利润
         if operation == 'getOperatingCosts':  # 查询订单成本利润
-            return self.get_operating_costs(request, request_dict, response)
+            return self.get_operating_costs(request_dict, response)
         else:
         else:
             return response.json(414)
             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:请求参数
         @param request_dict:请求参数
         @request_dict startTime:开始时间
         @request_dict startTime:开始时间
         @request_dict endTime:结束时间
         @request_dict endTime:结束时间
@@ -53,12 +52,8 @@ class OperatingCostsDataView(View):
         """
         """
         start_time = request_dict.get('startTime', None)
         start_time = request_dict.get('startTime', None)
         end_time = request_dict.get('endTime', 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:
         try:
             if start_time and end_time:
             if start_time and end_time:
                 operating_costs_qs = OperatingCosts.objects.filter(time__gte=start_time, time__lt=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',
                                                      'end_time', 'created_time', 'start_time', 'time', 'storage_cost',
                                                      'api_cost', 'profit', 'profit_margin', 'fee', 'flow_cost',
                                                      'api_cost', 'profit', 'profit_margin', 'fee', 'flow_cost',
                                                      'real_income', 'price', 'region', 'country_name', 'actual_flow',
                                                      '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)})
             return response.json(0, {'count': count, 'res': list(operating_qs)})
         except Exception as e:
         except Exception as e:
             print('error')
             print('error')

+ 7 - 9
Controller/CloudStorage.py

@@ -843,8 +843,7 @@ class CloudStorageView(View):
                 channel = order_list[0]['channel']
                 channel = order_list[0]['channel']
                 rank = order_list[0]['rank']
                 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():
                 if not store_qs.exists():
                     return response.json(173)
                     return response.json(173)
                 bucket_id = store_qs[0]['bucket_id']
                 bucket_id = store_qs[0]['bucket_id']
@@ -916,13 +915,12 @@ class CloudStorageView(View):
                     return HttpResponseRedirect(red_url)
                     return HttpResponseRedirect(red_url)
             return response.json(0, signature)
             return response.json(0, signature)
         except Exception as e:
         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:
             if order_qs:
                 order_qs.update(status=10, promotion_rule_id=promotion_rule_id)
                 order_qs.update(status=10, promotion_rule_id=promotion_rule_id)
             redis_obj.del_data(key=order_id + 'do_notify')
             redis_obj.del_data(key=order_id + 'do_notify')

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

+ 11 - 5
Controller/InAppPurchaseController.py

@@ -4,6 +4,8 @@
 import logging
 import logging
 import time
 import time
 import json
 import json
+
+import requests
 from appstoreserverlibrary.api_client import AppStoreServerAPIClient, GetTransactionHistoryVersion
 from appstoreserverlibrary.api_client import AppStoreServerAPIClient, GetTransactionHistoryVersion
 from appstoreserverlibrary.models.Environment import Environment
 from appstoreserverlibrary.models.Environment import Environment
 from appstoreserverlibrary.receipt_utility import ReceiptUtility
 from appstoreserverlibrary.receipt_utility import ReceiptUtility
@@ -18,7 +20,7 @@ from django.db.models import Q
 from django.views import View
 from django.views import View
 from django.http import HttpResponse
 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 Controller.CheckUserData import DataValid
 from Model.models import Order_Model, Store_Meal, Device_Info, UID_Bucket, Unused_Uid_Meal, AiService, Device_User, \
 from Model.models import Order_Model, Store_Meal, Device_Info, UID_Bucket, Unused_Uid_Meal, AiService, Device_User, \
     SysMsgModel
     SysMsgModel
@@ -306,6 +308,7 @@ class InAppPurchaseView(View):
             root_certificates, enable_online_checks, environment, bundle_id, app_apple_id)
             root_certificates, enable_online_checks, environment, bundle_id, app_apple_id)
         decoded_payload = verifier.verify_and_decode_notification(signed_payload)
         decoded_payload = verifier.verify_and_decode_notification(signed_payload)
         logger.info('App Store服务器通知decoded_payload: {}'.format(decoded_payload))
         logger.info('App Store服务器通知decoded_payload: {}'.format(decoded_payload))
+        status_code = 200
         if str(decoded_payload.rawNotificationType) == "REFUND":
         if str(decoded_payload.rawNotificationType) == "REFUND":
             # 一种通知类型,表示 App Store 成功退还了消耗性应用内购买、非消耗性应用内购买、自动续订或不可续订的交易。
             # 一种通知类型,表示 App Store 成功退还了消耗性应用内购买、非消耗性应用内购买、自动续订或不可续订的交易。
             # revocationDate 包含退款交易的时间戳。originalTransactionId 和 productId 用于标识原始交易和产品。revocationReason 包含原因。
             # revocationDate 包含退款交易的时间戳。originalTransactionId 和 productId 用于标识原始交易和产品。revocationReason 包含原因。
@@ -340,9 +343,12 @@ class InAppPurchaseView(View):
                     LOGGER.info(f'App Store服务器通知用户退款, 关闭AI:{req_success}')
                     LOGGER.info(f'App Store服务器通知用户退款, 关闭AI:{req_success}')
 
 
                 # 4.发送邮件告知用户退款
                 # 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:
             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)