Browse Source

设备sim状态修改使用异步API

zhangdongming 2 years ago
parent
commit
f9293fb873
2 changed files with 70 additions and 17 deletions
  1. 48 15
      Controller/UnicomCombo/UnicomComboController.py
  2. 22 2
      Object/UnicomObject.py

+ 48 - 15
Controller/UnicomCombo/UnicomComboController.py

@@ -96,8 +96,9 @@ class UnicomComboView(View):
             unicom_device_info_qs = UnicomDeviceInfo.objects.filter(iccid=iccid)
             if not unicom_device_info_qs.exists():
                 return response.json(173)
+            now_time = int(time.time())
             if not unicom_device_info_qs[0].user_id:
-                unicom_device_info_qs.update(user_id=user_id)
+                unicom_device_info_qs.update(user_id=user_id, updated_time=now_time)
             unicom_api = UnicomObjeect()
             combo_order_qs = UnicomComboOrderInfo.objects.filter(iccid=iccid, status=1, is_del=False) \
                 .values('iccid', 'status', 'combo__status', 'combo__combo_name', 'combo__combo_type',
@@ -127,9 +128,9 @@ class UnicomComboView(View):
                 flow = 0 if flow_total_usage <= 0 else flow_total_usage - activate_flow
                 # 因APP问题,usableFlow可用流量替换为,已用流量值
                 flow_details['usableFlow'] = 0 if flow == 0 else flow
-                flow_details['usableFlow'] = \
-                    flow_details['flowTotal'] if flow_details['usableFlow'] > flow_details['flowTotal'] else \
-                        flow_details['usableFlow']
+                flow_details['usableFlow'] = flow_details['flowTotal'] \
+                    if flow_details['usableFlow'] > flow_details['flowTotal'] \
+                    else flow_details['usableFlow']
                 flow_details['usableFlow'] = Decimal(flow_details['usableFlow']).quantize(Decimal('0.00'))
                 flow_details.pop('flowTotalUsage')
                 cls.update_combo_order_sort(iccid)
@@ -217,6 +218,10 @@ class UnicomComboView(View):
                 device_info_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_no)
                 if device_info_qs.exists():
                     iccid = device_info_qs.first().iccid
+                    if device_info_qs.first().card_type == 1:
+                        cls.reset_telecom_user(serial_no)
+                        device_info_qs.update(updated_time=now_time, user_id='')
+                        return response.json(0)
                     key = 'ASJ:UNICOM:RESET:{}'.format(serial_no)
                     flow_push_qs = UnicomFlowPush.objects.filter(serial_no=serial_no)
                     if flow_push_qs.exists():
@@ -241,6 +246,18 @@ class UnicomComboView(View):
             logger.info('PC工具重置异常ICCID{},msg={}'.format(iccid, ex))
             return response.json(177, ex)
 
+    @staticmethod
+    def reset_telecom_user(serial_no):
+        """
+        重置电信用户 消息记录
+        @param serial_no:
+        @return:
+        """
+        sys_msg_qs = SysMsgModel.objects.filter(uid=serial_no)
+        if sys_msg_qs.exists():
+            sys_msg_qs.delete()
+        return True
+
     @classmethod
     def update_device_card_type(cls, request_dict, response):
         """
@@ -276,10 +293,10 @@ class UnicomComboView(View):
         @param response:
         @return:
         """
-        serial_no = request_dict.get('serialNumber', None)
-        if not serial_no:
+        iccid = request_dict.get('iccid', None)
+        if not iccid:
             return response.json(444)
-        unicom_device_info_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_no).values()
+        unicom_device_info_qs = UnicomDeviceInfo.objects.filter(iccid=iccid).values()
         if not unicom_device_info_qs.exists():
             return response.json(173)
         return response.json(0, dict(unicom_device_info_qs.first()))
@@ -324,6 +341,13 @@ class UnicomComboView(View):
                 if sim == 0:
                     return response.json(0, '外置卡不保存相关信息{}'.format(serial_no))
                 unicom_obj = UnicomObjeect()
+                params = {'iccid': iccid, 'serial_no': serial_no, 'updated_time': n_time,
+                          'created_time': n_time, 'main_card': sim}
+                if cls.check_iccid(iccid):
+                    params['card_type'] = 1
+                    params['status'] = 2
+                    UnicomDeviceInfo.objects.create(**params)
+                    return response.json(0)
                 result = unicom_obj.verify_device(iccid=iccid)
                 if result.status_code == 200 and result.text:
                     res_dict = json.loads(result.text)
@@ -331,8 +355,6 @@ class UnicomComboView(View):
                         if res_dict['data']['status'] == 0:
                             logger.info('--->设备请求绑定{}验证不存在{}'.format(iccid, res_dict))
                             return response.json(173)
-                        params = {'iccid': iccid, 'serial_no': serial_no, 'updated_time': n_time,
-                                  'created_time': n_time, 'main_card': sim}
                         unicom_obj.change_device_to_activate(iccid)
                         UnicomDeviceInfo.objects.create(**params)
                     return response.json(0)
@@ -345,6 +367,20 @@ class UnicomComboView(View):
             logger.info('--->设备调用4G注册接口异常:{}'.format(ex))
             return response.json(177, repr(e))
 
+    @classmethod
+    def check_iccid(cls, iccid):
+        """
+        检查ICCID是否是五兴科技卡
+        @return: True or False
+        """
+        if not iccid:
+            return False
+        iccid = iccid[0:6]
+        arr_list = ['898603', '898611']
+        if iccid in arr_list:
+            return True
+        return False
+
     @classmethod
     def user_activate_flow(cls, iccid):
         """
@@ -647,13 +683,10 @@ class UnicomComboView(View):
                 now_time = int(time.time())
                 re_data = {
                     'iccid': dict_data['iccid'],
-                    'serial_no': dict_data['serialNo'],
                     'sign': sign,
-                    'type': dict_data['type'],
-                    'previous_val': dict_data['previousVal'],
-                    'current_val': dict_data['currentVal'],
-                    'reason': dict_data['reason'],
+                    'type': dict_data['status'],
                     'time': dict_data['time'],
+                    'serial_no': dict_data['operationId'],
                     'updated_time': now_time,
                     'created_time': now_time
                 }
@@ -661,7 +694,7 @@ class UnicomComboView(View):
             r_data = {'success': True, 'msg': '成功'}
             return HttpResponse(json.dumps(r_data, ensure_ascii=False), content_type="application/json,charset=utf-8")
         except Exception as e:
-            print(repr(e))
+            logger.info('异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
             r_data = {'success': False, 'msg': '失败'}
             return HttpResponse(json.dumps(r_data, ensure_ascii=False), content_type="application/json,charset=utf-8")
 

+ 22 - 2
Object/UnicomObject.py

@@ -14,7 +14,7 @@ import requests
 from Crypto.Cipher import AES
 
 from Ansjer.config import unicomAppUrl, unicomAppId, unicomAppSecret, unicomTenantId, \
-    unicomEncodeKey, unicomIvKey, unicomUserName, unicomPassword, unicomPushKey
+    unicomEncodeKey, unicomIvKey, unicomUserName, unicomPassword, unicomPushKey, SERVER_DOMAIN_SSL
 from Object.RedisObject import RedisObject
 from Object.utils import SM3Util
 from Object.utils.SymmetricCryptoUtil import AESencrypt
@@ -159,9 +159,10 @@ class UnicomObjeect:
         @param re_data:
         @return:
         """
-        url = self.appUrl + '/platform/api/device/device-state'
+        url = self.appUrl + '/platform/api/device/async-device-state'
         headers = self.business_unify_headers()
         headers['content-type'] = 'application/json'
+        re_data['callbackUrl'] = SERVER_DOMAIN_SSL + 'unicom/api/device-status-change'
         return requests.post(url, data=json.dumps(re_data), headers=headers)
 
     def query_device_usage_history(self, **re_params):
@@ -306,3 +307,22 @@ class UnicomObjeect:
                 logger.info('再次停卡:{}'.format(response.text))
             return True
         return None
+
+
+if __name__ == '__main__':
+    unicom_api = UnicomObjeect()
+    # result = unicom_api.generate_token()
+    # result = unicom_api.refresh_token('5d0c0f30-99bd-4f17-9614-3524495b05d4')
+    params = {'iccid': '89860620170009631443', 'status': 1}
+    # response = unicom_api.verify_device(**params)
+    # response = unicom_api.query_device_status(**params)
+    response = unicom_api.update_device_state(**params)
+    # response = unicom_api.query_device_usage_history(**params)
+    # response = unicom_api.query_current_renew_list_usage_details(**params)
+    # unicom_api.get_device_batch_detail()
+    # response = unicom_api.query_package_list(**params)
+    # response = unicom_api.query_renewal_list(**params)
+
+    if response.status_code == 200:
+        res = json.loads(response.text)
+        print(res)