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

订阅扣款增加日志、修改AI消息筛选

zhangdongming 2 жил өмнө
parent
commit
f6fcb89c80

+ 17 - 11
Controller/PaymentCycle.py

@@ -21,6 +21,7 @@ import json
 from paypalrestsdk import BillingPlan
 import datetime as date_time
 
+
 # 周期扣款相关
 class Paypal:
     # 检查是否有重复订阅
@@ -305,6 +306,12 @@ class PaypalCycleNotify(View):
                 red_url = "{SERVER_DOMAIN_SSL}web/paid2/en_fail.html".format(SERVER_DOMAIN_SSL=SERVER_DOMAIN_SSL)
             return HttpResponseRedirect(red_url)
 
+    @staticmethod
+    def paypal_webhook_log(sub_id, **params):
+        params['agreement_id'] = sub_id
+        params['agreement_desc'] = 'webhook'
+        PaypalWebHookEvent.objects.create(**params)
+
     def do_paypal_webhook_notify(self, request_dict, request, response):
         logger = logging.getLogger('pay')
         logger.info('--------进入周期扣款钩子--------')
@@ -328,10 +335,19 @@ class PaypalCycleNotify(View):
             billing_agreement_id = paypal_body.get('billing_agreement_id')
             paypal_transaction_id = paypal_body.get('id')
             amount = paypal_body.get('amount')
+            PaypalWebHookEventInsert = {
+                'webhook_event_id': json_obj.get('id'),
+                'resource_type': json_obj.get('resource_type'),
+                'event_type': 1,
+                'summary': summary,
+                'trade_no': paypal_transaction_id,
+                'resource': json_agreement_str,
+                'created_time': int(time.time()),
+            }
+            self.paypal_webhook_log(billing_agreement_id, **PaypalWebHookEventInsert)
             if event_type != 'PAYMENT.SALE.COMPLETED':
                 logger.info('----钩子异常----')
             self.find_subscription_transactions(billing_agreement_id)
-            # self.get_plan_desc('P-4CG284532S612303METMEINY')
             if resource_type == 'sale' and paypal_body.get('state') == 'completed':
                 paypalrestsdk.configure(PAYPAL_CRD)
                 response = paypalrestsdk.WebhookEvent.verify(
@@ -348,15 +364,6 @@ class PaypalCycleNotify(View):
                 logger.info(paypal_body.get('state'))
                 return HttpResponse('Fail', status=500)
 
-            PaypalWebHookEventInsert = {
-                'webhook_event_id': json_obj.get('id'),
-                'resource_type': json_obj.get('resource_type'),
-                'event_type': 1,
-                'summary': summary,
-                'trade_no': paypal_transaction_id,
-                'resource': json_agreement_str,
-                'created_time': int(time.time()),
-            }
             if not billing_agreement_id:
                 # 记录钩子日志
                 PaypalWebHookEvent.objects.create(**PaypalWebHookEventInsert)
@@ -552,7 +559,6 @@ class PaypalCycleNotify(View):
         except Exception as e:
             logger.info('出错了~查询订阅的事务异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
-
     def do_subscription_break_notify(self, request_dict, request, response):
         logger = logging.getLogger('pay')
         logger.info('--------进入订阅失败,付款失败,暂停--------')

+ 24 - 22
Service/EquipmentInfoService.py

@@ -7,9 +7,10 @@
 @Software: PyCharm
 """
 import datetime
+import itertools
 import logging
 import time
-import itertools
+
 from django.db.models import Value, CharField
 
 from Model.models import EquipmentInfoMonday, EquipmentInfoTuesday, EquipmentInfoWednesday, EquipmentInfoThursday, \
@@ -162,19 +163,15 @@ class EquipmentInfoService:
         # 获取七天前时间戳
         seven_days_before_time = LocalDateTimeUtil.get_before_days_timestamp(now_time, 7)
         # 默认查询当前表event_time大于七天前时间
+        qs = qs.filter(event_time__gt=seven_days_before_time)
         if user_id:
             qs = qs.filter(device_user_id=user_id)
         if event_type:
             # 多类型查询
-            if ',' in event_type:
-                eventTypeList = cls.get_comb_event_type(event_type)
-                qs = qs.filter(event_type__in=eventTypeList)
-            else:
-                qs = qs.filter(event_type=event_type)
+            eventTypeList = cls.get_comb_event_type(event_type)
+            qs = qs.filter(event_type__in=eventTypeList)
         if start_time and end_time:
-            qs = qs.filter(event_time__range=(int(start_time), int(end_time)))
-        else:
-            qs = qs.filter(event_time__range=(seven_days_before_time, now_time))
+            qs = qs.filter(event_time__range=(start_time, end_time))
         if uid_list:
             uid_list = uid_list.split(',')
             qs = qs.filter(device_uid__in=uid_list)
@@ -229,21 +226,26 @@ class EquipmentInfoService:
         @param event_type: 消息类型
         @return: event_type_list 消息类型数组
         """
-        event_type_list = event_type.split(',')
-        event_type_list = [int(i.strip()) for i in event_type_list]
+        if ',' in event_type:
+            event_type_list = event_type.split(',')
+            event_type_list = [int(i.strip()) for i in event_type_list]
+        else:
+            event_type_list = [int(event_type)]
         ai_event_type_list = []
-        for key, val in enumerate(event_type_list):
+        normal_event_type_list = []
+        for val in event_type_list:
             if val <= 4:  # 分离出ai类型,以便后续组合ai标签,目前只存在4个ai类型1,2,3,4
                 ai_event_type_list.append(val)
-                del (event_type_list[key])
+            else:
+                normal_event_type_list.append(val)
         if len(ai_event_type_list) < 1:
-            return event_type_list
+            return normal_event_type_list
         ai_event_type_list.sort()
-        type = [1, 2, 3, 4]  # AI目前所有的标签,1人,2车,3宠物,4包裹,后续有新类型需要这里加, 后续会优化,存在表里,包裹存对应的aws标签
+        ai_type = [1, 2, 3, 4]  # AI目前所有的标签,1人,2车,3宠物,4包裹,后续有新类型需要这里加, 后续会优化,存在表里,包裹存对应的aws标签
         comb_ai_event_type = []
         seen = set()
-        for i in range(1, len(type) + 1):  # 计算所有组合,如[1, 2, 3, 4], 4取1,4取2,4取3,4取4
-            for s in itertools.combinations(type, i):
+        for i in range(1, len(ai_type) + 1):  # 计算所有组合,如[1, 2, 3, 4], 4取1,4取2,4取3,4取4
+            for s in itertools.combinations(ai_type, i):
                 if s not in seen:  # 去除重复项, 如a=[1,2,3,4,4],会有两个[1,2,3,4,4],[1,2,3,4,4]的组合
                     seen.add(s)
                     s_list = list(s)
@@ -256,8 +258,8 @@ class EquipmentInfoService:
         for val in comb_ai_event_type:  # 组合ai类型组合,如[[2,3],[1,3]] -> [23, 13]
             val = ''.join(val)
             regroup_list.append(int(val))
-        event_type_list = regroup_list + event_type_list  # 加上普通移动消息类型
-        return event_type_list
+        group_list = regroup_list + normal_event_type_list  # 加上普通移动消息类型
+        return group_list
 
     @classmethod
     def get_all_comb_event_type(cls):
@@ -265,10 +267,10 @@ class EquipmentInfoService:
         计算ai消息类型全组合
         @return: event_type_list ai所有消息类型数组
         """
-        type = [1, 2, 3, 4]  # AI目前所有的标签,1人,2车,3宠物,4包裹,后续有新类型需要这里加, 后续会优化,存在表里,包裹存对应的aws标签
+        ai_type = [1, 2, 3, 4]  # AI目前所有的标签,1人,2车,3宠物,4包裹,后续有新类型需要这里加, 后续会优化,存在表里,包裹存对应的aws标签
         comb_ai_event_type = []
-        for i in range(1, len(type) + 1):  # 计算所有组合,如[1, 2, 3, 4], 4取1,4取2,4取3,4取4
-            for s in itertools.combinations(type, i):
+        for i in range(1, len(ai_type) + 1):  # 计算所有组合,如[1, 2, 3, 4], 4取1,4取2,4取3,4取4
+            for s in itertools.combinations(ai_type, i):
                 s_list = list(s)
                 s_list = [str(v) for v in s_list]
                 comb_ai_event_type.append(s_list)