Selaa lähdekoodia

新增检查是否有次月激活联通套餐

zhangdongming 3 vuotta sitten
vanhempi
commit
92514f0cb9

+ 2 - 1
Ansjer/server_urls/unicom_url.py

@@ -8,9 +8,10 @@
 """
 from django.urls import re_path
 
-from Controller.UnicomCombo import UnicomComboController, UnicomComboPayNotifyController
+from Controller.UnicomCombo import UnicomComboController, UnicomComboPayNotifyController, UnicomComboTaskController
 
 urlpatterns = [
     re_path(r'^api/(?P<operation>.*)$', UnicomComboController.UnicomComboView.as_view()),
     re_path(r'^wap/pay/(?P<operation>.*)$', UnicomComboPayNotifyController.UnicomComboPayNotifyView.as_view()),
+    re_path(r'^combo/cron/(?P<operation>.*)$', UnicomComboTaskController.UnicomComboTaskView.as_view()),
 ]

+ 92 - 0
Controller/UnicomCombo/UnicomComboTaskController.py

@@ -0,0 +1,92 @@
+# -*- encoding: utf-8 -*-
+"""
+@File    : UnicomComboTaskController.py
+@Time    : 2022/6/30 16:23
+@Author  : stephen
+@Email   : zhangdongming@asj6.wecom.work
+@Software: PyCharm
+"""
+import logging
+import time
+
+from django.db import transaction
+from django.views import View
+
+from Model.models import UnicomComboOrderInfo, UnicomCombo, Order_Model
+from Object.ResponseObject import ResponseObject
+from Object.UnicomObject import UnicomObjeect
+
+
+class UnicomComboTaskView(View):
+
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation')
+        return self.validation(request.GET, request, operation)
+
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation')
+        return self.validation(request.POST, request, operation)
+
+    def validation(self, request_dict, request, operation):
+        response = ResponseObject()
+        print(request)
+        if operation == 'check-activate':
+            return self.check_activate_combo(request_dict, response)
+
+    @classmethod
+    def check_activate_combo(cls, request_dict, response):
+        """
+        定时检查是否有次月激活套餐
+        @param request_dict:
+        @param response:
+        @return:
+        """
+        logger = logging.getLogger('info')
+        print(request_dict)
+        logger.info('定时检查是否有次月激活联通套餐')
+        now_time = int(time.time())
+        combo_order_info_qs = UnicomComboOrderInfo.objects.filter(status=0, next_month_activate=True,
+                                                                  activation_time__lte=now_time,
+                                                                  expire_time__gte=now_time, is_del=0).values()
+        if not combo_order_info_qs.exists():
+            return response.json(0)
+        try:
+            now_time = int(time.time())
+            with transaction.atomic():
+                unicom_api = UnicomObjeect()
+
+                for item in combo_order_info_qs:
+                    if item['order_id']:
+                        order_id = item['order_id']
+                        order_qs = Order_Model.objects.filter(orderID=order_id, status=1)
+                        if not order_qs.exists():
+                            logger.info('当前已付款联通订单套餐不存在:orderId={}'.format(order_id))
+                            continue
+                        combo_id = item['combo_id']
+                        combo_qs = UnicomCombo.objects.filter(id=combo_id).values()
+                        if combo_qs.exists():
+                            item['status'] = 1
+                            item['updated_time'] = now_time
+                            params = {'iccid': item['iccid']}
+                            result = unicom_api.verify_device(**params)
+                            result = unicom_api.get_text_dict(result)
+                            if result and result['success']:
+                                # 1:已激活;2:可激活;3:已停用;4:已失效;5:可测试;6:库存;7:已更换;8:已清除;
+                                status = result['data']['status']
+                                if status != 1:
+                                    up_data = {'iccid': item['iccid'], 'status': 1}
+                                    device_result = UnicomObjeect.update_device_state(**up_data)
+                                    device_result = UnicomObjeect.get_text_dict(device_result)
+                                    if device_result and device_result['success']:
+                                        UnicomComboOrderInfo.objects.filter(id=item['id']) \
+                                            .update(status=1, updated_time=now_time)
+                                else:
+                                    UnicomComboOrderInfo.objects.filter(id=item['id']) \
+                                        .update(status=1, updated_time=now_time)
+                                logger.info('激活成功,订单编号:{}'.format(order_id))
+            return response.json(0)
+        except Exception as e:
+            print(e)
+            return response.json(177, repr(e))

+ 13 - 2
Object/UnicomObject.py

@@ -8,14 +8,14 @@
 """
 import base64
 import json
+from decimal import Decimal
 
 import requests
 from Crypto.Cipher import AES
-from decimal import Decimal
-from Object.utils import SM3Util
 
 from Ansjer.config import unicomAppUrl, unicomAppId, unicomAppSecret, unicomTenantId, \
     unicomEncodeKey, unicomIvKey, unicomUserName, unicomPassword, unicomPushKey
+from Object.utils import SM3Util
 from Object.utils.SymmetricCryptoUtil import AESencrypt
 
 """
@@ -216,6 +216,17 @@ class UnicomObjeect:
         headers['content-type'] = 'application/json'
         return requests.post(url, data=json.dumps(re_data), headers=headers)
 
+    @staticmethod
+    def get_text_dict(result):
+        """
+        响应结果转字典
+        @param result:
+        @return:
+        """
+        if result.status_code == 200:
+            return json.loads(result.text)
+        return None
+
 
 if __name__ == '__main__':
     price = '12.13'