瀏覽代碼

设备根据ip获取域名,PayPal兼容欧洲服

locky 2 年之前
父節點
當前提交
1fa4066cec
共有 2 個文件被更改,包括 90 次插入38 次删除
  1. 3 9
      Controller/DeviceConfirmRegion.py
  2. 87 29
      Controller/SerialNumberController.py

+ 3 - 9
Controller/DeviceConfirmRegion.py

@@ -30,9 +30,6 @@ class ConfirmRegion(TemplateView):
                 device_request_url = CountryModel.objects.filter(country_code=ipInfo['country_code']).values("region__api")
                 if device_request_url.exists():
                     api = device_request_url[0]['region__api']
-                    # 欧洲暂时返回美洲域名
-                    if api == 'https://api.zositeche.com/':
-                        api = 'https://www.dvema.com/'
                     device_domain_data['api'] = api
                     DeviceDomainModel.objects.create(**device_domain_data)
                     return response.json(0, {'request_api_url': api})
@@ -77,9 +74,6 @@ class ConfirmRegionV2(TemplateView):
                 if country_qs.exists():
                     api = country_qs[0]['region__api']
                     region_id = country_qs[0]['region__id']
-                    # 欧洲暂时返回美洲域名
-                    if api == 'https://api.zositeche.com/':
-                        api, region_id = self.get_default_api()
                 else:   # 默认返回美洲地区api
                     api, region_id = self.get_default_api()
             else:
@@ -97,7 +91,7 @@ class ConfirmRegionV2(TemplateView):
             return response.json(0, res)
         except Exception as e:
             print(e)
-            return response.json(500, repr(e))
+            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
     # 获取区域表美洲的相关数据
     @staticmethod
@@ -174,7 +168,7 @@ class StatisticsIpRegion(TemplateView):
             return response.json(0)
         except Exception as e:
             print(e)
-            return response.json(500, repr(e))
+            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
 def confirm_country_with_ip(request):
     '''
@@ -197,4 +191,4 @@ def confirm_country_with_ip(request):
         return response.json(0)
     except Exception as e:
         print(e)
-        return response.json(500, repr(e))
+        return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))

+ 87 - 29
Controller/SerialNumberController.py

@@ -2,6 +2,7 @@ import json
 import logging
 import threading
 import time
+from datetime import datetime
 
 import requests
 from django.db import transaction
@@ -13,7 +14,7 @@ from Ansjer.config import CRCKey, CONFIG_INFO, CONFIG_US, CONFIG_EUR, \
 from Model.models import SerialNumberModel, CompanySerialModel, UIDCompanySerialModel, UIDModel, Device_Info, \
     iotdeviceInfoModel, LogModel, UidSetModel, UID_Bucket, \
     Unused_Uid_Meal, Order_Model, StsCrdModel, VodHlsModel, ExperienceContextModel, UidUserModel, ExperienceAiModel, \
-    AiService, DeviceDomainRegionModel, RegionModel
+    AiService, DeviceDomainRegionModel, RegionModel, UidPushModel
 from Object.AWS.S3Email import S3Email
 from Object.RedisObject import RedisObject
 from Object.TokenObject import TokenObject
@@ -59,12 +60,14 @@ class SerialNumberView(View):
             return self.get_domain(request_dict, response)
         elif operation == 'resetRegionId':  # 重置地区id
             return self.reset_region_id(request_dict, response)
-        elif operation == 'get-status':  # 重置地区id
+        elif operation == 'get-status':  # 获取序列号绑定信息
             return self.check_serial_status(request_dict, response)
         elif operation == 'getUidRegion':  # 根据序列号获取uid地区
             return self.get_uid_region(request_dict, response)
         elif operation == 'getGlobalUidRegion':  # 获取序列号在全球服绑定uid的地区
             return self.get_global_uid_region(request_dict, response)
+        elif operation == 'getIoTCoreBySerialNumber':  # 根据序列号获取iot core
+            return self.get_iot_core_by_serial_number(request_dict, response)
         else:
             return response.json(414)
 
@@ -95,7 +98,7 @@ class SerialNumberView(View):
             return response.json(0)
         except Exception as e:
             print(e)
-            return response.json(500, repr(e))
+            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
     def do_attach_uid(self, request_dict, response, request):
         serial_number = request_dict.get('serial_number', None)
@@ -339,17 +342,17 @@ class SerialNumberView(View):
                 warning_count = 2000
                 if unused_uid_count < warning_count:
                     # 限制一天提醒一次
-                    redis_obj.set_data('uid_count_warning_time_limit', 1, 60*60*24)
+                    redis_obj.set_data('uid_count_warning_time_limit', 1, 60 * 60 * 24)
                     platform = '尚云' if p2p_type == 1 else 'tutk'
                     email_content = '{}服{}的uid数量少于{}个,请及时处理'.format(CONFIG_INFO, platform, warning_count)
                     S3Email().faEmail(email_content, 'servers@ansjer.com')
             except Exception as e:
-                LOGGER.info('发送提醒邮件异常: error_ine:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+                LOGGER.info('发送提醒邮件异常: error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
     @staticmethod
     def log_and_send_email(request, company_serial_id, serial, now_time):
         """
-        记录序列号占用操作日志及发送邮件通知
+        记录序列号占用操作日志及发送邮件通知,(美服、欧服已占用序列号将执行数据同步)
         @param company_serial_id: 企业关联序列号 ID
         @param request: 请求
         @param serial: 序列号
@@ -357,18 +360,20 @@ class SerialNumberView(View):
         """
         send_email = S3Email()
         try:
-            if CONFIG_INFO != 'us':
+            if CONFIG_INFO == 'cn' or CONFIG_INFO == 'test':
                 return {}
             # 判断当前序列号是否绑定UID
             uid_serial_qs = UIDCompanySerialModel.objects.filter(company_serial_id=company_serial_id)
             if uid_serial_qs.exists():
                 email_content = '{}序列号已占用当前数据库已绑定UID: {}'.format(CONFIG_INFO, serial)
                 send_email.faEmail(email_content, 'servers@ansjer.com')
-                send_email.faEmail(email_content, 'antony@ansjer.com')
                 return {}
-            # 请求国内服获取UID数据
-            response = requests.post("https://www.zositechc.cn/serialNumber/get-status",
-                                     data={'serial_number': serial}, timeout=3)
+            if CONFIG_INFO == 'eur':  # 查美服
+                response = requests.get("https://www.dvema.com/serialNumber/get-status",
+                                        params={'serial_number': serial}, timeout=3)
+            else:  # 查国服
+                response = requests.get("https://www.zositechc.cn/serialNumber/get-status",
+                                        params={'serial_number': serial}, timeout=3)
             ip = CommonService.get_ip_address(request)
             operation = '{}序列号占用:{}'.format(CONFIG_INFO, serial)
             log = {
@@ -380,18 +385,13 @@ class SerialNumberView(View):
                 'url': 'serialNumber/attachUID',
             }
             if not response.status_code == 200:
-                operation += '国内UID数据异常响应状态:{}'.format(response.status_code)
+                operation += '查询其它服UID数据异常响应状态:{}'.format(response.status_code)
                 log['operation'] = operation
                 LogModel.objects.create(**log)
                 return {}
             results = json.loads(response.text)
-            if not results:
-                operation += '查询UID数据解析为空'
-                log['operation'] = operation
-                LogModel.objects.create(**log)
-                return {}
             if not results['result_code'] == 0:
-                operation += '国内绑定UID数据result_code: {}'.format(results['result_code'])
+                operation += '其它服绑定UID数据result_code: {}'.format(results['result_code'])
                 log['operation'] = operation
                 LogModel.objects.create(**log)
                 return {}
@@ -402,7 +402,6 @@ class SerialNumberView(View):
                     # 邮件通知
                     email_content = '国内uid同步国外服类型为尚云不操作: {}'.format(serial)
                     send_email.faEmail(email_content, 'servers@ansjer.com')
-                    send_email.faEmail(email_content, 'antony@ansjer.com')
                 else:
                     # 同步UID数据
                     uid_vo = UIDModel.objects.create(**uid_info)
@@ -412,16 +411,15 @@ class SerialNumberView(View):
                     # 成功后 修改企业序列号状态为2(已分配)
                     CompanySerialModel.objects.filter(id=company_serial_id) \
                         .update(status=2, update_time=now_time)
-                    email_content = '{}序列号已占用已将国内UID数据同步完成: {}'.format(CONFIG_INFO, serial)
+                    SerialNumberView.sync_iot_core_data(serial)
+                    email_content = '{}序列号已占用已将其它服UID数据同步完成: {}'.format(CONFIG_INFO, serial)
                     send_email.faEmail(email_content, 'servers@ansjer.com')
-                    send_email.faEmail(email_content, 'antony@ansjer.com')
                     operation += '同步成功'
                     log['operation'] = operation
                     LogModel.objects.create(**log)
                     return 'success'
-            email_content = '序列号已占用国内没有绑定UID: {}'.format(serial)
+            email_content = '{}序列号已占用其它服没有绑定UID: {}'.format(CONFIG_INFO, serial)
             send_email.faEmail(email_content, 'servers@ansjer.com')
-            send_email.faEmail(email_content, 'antony@ansjer.com')
             return {}
         except Exception as e:
             email_content = '序列号占用同步数据异常: {},errLine:{}, errMsg:{}' \
@@ -501,6 +499,7 @@ class SerialNumberView(View):
                 Device_Info.objects.filter(UID=uid).delete()
                 UidSetModel.objects.filter(uid=uid).delete()
                 UidUserModel.objects.filter(UID=uid).delete()
+                UidPushModel.objects.filter(uid_set__uid=uid).delete()
                 iotdeviceInfoModel.objects.filter(serial_number=serial).delete()
                 # 删除推送消息
                 for val in range(1, 8):
@@ -708,7 +707,7 @@ class SerialNumberView(View):
                         device_domain_region_qs.update(**data)
             return response.json(0)
         except Exception as e:
-            return response.json(500, repr(e))
+            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
     @staticmethod
     def get_domain(request_dict, response):
@@ -725,7 +724,7 @@ class SerialNumberView(View):
         time_stamp_token = request_dict.get('time_stamp_token', None)
         time_stamp = request_dict.get('time_stamp', None)
         if not all([serial_number, time_stamp_token, time_stamp]):
-            return response(444)
+            return response.json(444)
         # 时间戳token校验
         if not CommonService.check_time_stamp_token(time_stamp_token, time_stamp):
             return response.json(13)
@@ -747,7 +746,7 @@ class SerialNumberView(View):
             }
             return response.json(0, res)
         except Exception as e:
-            return response.json(500, repr(e))
+            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
     @staticmethod
     def reset_region_id(request_dict, response):
@@ -766,7 +765,7 @@ class SerialNumberView(View):
             DeviceDomainRegionModel.objects.filter(serial_number=serial_number).update(region_id=0)
             return response.json(0)
         except Exception as e:
-            return response.json(500, repr(e))
+            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
     @staticmethod
     def get_uid_region(request_dict, response):
@@ -789,7 +788,7 @@ class SerialNumberView(View):
                 res.append({'uid': item['uid__uid']})
             return response.json(0, res)
         except Exception as e:
-            return response.json(500, repr(e))
+            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
     @staticmethod
     def get_global_uid_region(request_dict, response):
@@ -825,4 +824,63 @@ class SerialNumberView(View):
                         uid_list.append(item)
             return response.json(0, uid_list)
         except Exception as e:
-            return response.json(500, repr(e))
+            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+
+    @classmethod
+    def get_iot_core_by_serial_number(cls, request_dict, response):
+        """
+        根据序列号查询iot core
+        """
+        try:
+            serial_number = request_dict.get('serialNumber', None)
+            if not serial_number:
+                return response.json(444)
+            serial = serial_number[0:6]
+            LOGGER.info('根据序列号查询IoTC:{}'.format(serial_number))
+            device_iot_qs = iotdeviceInfoModel.objects.filter(serial_number=serial)
+            if not device_iot_qs.exists():
+                return response.json(173)
+            iot_vo = device_iot_qs.first()
+            iot_dto = {
+                'serial_number': iot_vo.serial_number,
+                'uid': iot_vo.uid,
+                'certificate_id': iot_vo.certificate_id,
+                'certificate_pem': iot_vo.certificate_pem,
+                'public_key': iot_vo.public_key,
+                'private_key': iot_vo.private_key,
+                'thing_name': iot_vo.thing_name,
+                'thing_groups': iot_vo.thing_groups,
+                'endpoint': iot_vo.endpoint,
+                'token_iot_number': iot_vo.token_iot_number,
+                'add_time': iot_vo.add_time.strftime("%Y-%m-%d %H:%M:%S"),
+                'update_time': iot_vo.update_time.strftime("%Y-%m-%d %H:%M:%S")
+            }
+            return response.json(0, {'iotInfo': iot_dto})
+        except Exception as e:
+            LOGGER.info('查询序列号异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(176, str(e))
+
+    @staticmethod
+    def sync_iot_core_data(serial_number):
+        """
+        同步iot core 数据,目前只同步美服到欧服
+        @param serial_number: 序列号
+        """
+        try:
+            if not CONFIG_INFO == 'eur':
+                return False
+            response = requests.get("https://www.dvema.com/serialNumber/getIoTCoreBySerialNumber",
+                                    params={'serialNumber': serial_number}, timeout=3)
+            if response.status_code != 200:
+                return False
+            results = json.loads(response.text)
+            if results['result_code'] != 0:
+                return False
+            iot_vo = results['result']['iotInfo']
+            iot_vo['add_time'] = datetime.strptime(iot_vo['add_time'], "%Y-%m-%d %H:%M:%S")
+            iot_vo['update_time'] = datetime.strptime(iot_vo['update_time'], "%Y-%m-%d %H:%M:%S")
+            iotdeviceInfoModel.objects.create(**iot_vo)
+            return True
+        except Exception as e:
+            LOGGER.info('{}同步iot异常,errLine:{}, errMsg:{}'.format(serial_number, e.__traceback__.tb_lineno, repr(e)))
+            return False