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

同步序列号数据接口

locky 1 жил өмнө
parent
commit
a301a14b4a

+ 84 - 3
AdminController/SerialManageController.py

@@ -10,16 +10,18 @@
 import json
 import time
 
+import requests
 from django.db import transaction
 from django.utils.decorators import method_decorator
 from django.views.decorators.csrf import csrf_exempt
 from django.views.generic.base import View
 
 from Model.models import CompanyModel, VPGModel, UIDModel, UIDCompanySerialModel, CompanySerialModel, \
-    LogModel
+    LogModel, iotdeviceInfoModel
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Service.CommonService import CommonService
+from Ansjer.config import SERVER_DOMAIN_TEST, SERVER_DOMAIN_CN, SERVER_DOMAIN_US, SERVER_DOMAIN_EUR
 
 
 class SerialView(View):
@@ -41,6 +43,8 @@ class SerialView(View):
         response = ResponseObject()
         if operation == 'uploadUid':
             return self.uploadUid(request, request_dict, response)
+        elif operation == 'getSerialData':
+            return self.getSerialData(request_dict, response)
         else:
             token = TokenObject(request.META.get('HTTP_AUTHORIZATION'))
             if token.code != 0:
@@ -50,7 +54,7 @@ class SerialView(View):
                 return self.company_page(request_dict, response)
             if operation == 'number/page':
                 return self.serial_page(request_dict, response)
-            if operation == 'syncSerial':
+            if operation == 'syncSerial':   # 同步序列号数据
                 return self.sync_serial(request_dict, response)
             if operation == 'vpg-info/page':
                 return self.vpg_page(request_dict, response)
@@ -191,12 +195,89 @@ class SerialView(View):
             print(e)
             return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
-    def sync_serial(self, request_dict, response):
+    @staticmethod
+    def sync_serial(request_dict, response):
         serial = request_dict.get('serial', None)
         sync_region = request_dict.get('syncRegion', None)
         if not all([serial, sync_region]):
             return response.json(444)
 
+        url = ''
+        if sync_region == 'test':
+            url = SERVER_DOMAIN_TEST
+        elif sync_region == 'cn':
+            url = SERVER_DOMAIN_CN
+        elif sync_region == 'us':
+            url = SERVER_DOMAIN_US
+        elif sync_region == 'eu':
+            url = SERVER_DOMAIN_EUR
+
+        try:
+            # 请求需要同步的地区获取数据
+            url = url + 'serial/getSerialData'
+            data = {'serial': serial}
+            req = requests.post(url=url, data=data, timeout=5)
+            if req.status_code != 200:
+                return response.json(503)
+            req = req.json()
+            if req['result_code'] != 0:
+                return response.json(173)
+            res_data = req['result']['res_data']
+            return response.json(0)
+        except Exception as e:
+            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+
+    @staticmethod
+    def getSerialData(request_dict, response):
+        serial = request_dict.get('serial', None)
+        if not serial:
+            return response.json(444)
+
+        try:
+            # 查询绑定的uid数据
+            uid_company_serial_qs = UIDCompanySerialModel.objects.filter(company_serial__serial_number=serial).\
+                values('uid__uid', 'uid__mac', 'uid__uid_extra', 'uid__status', 'uid__add_time', 'uid__update_time',
+                       'uid__area', 'uid__vpg', 'uid__p2p_type', 'uid__full_uid_code', 'uid__platform', 'uid__init_string',
+                       'uid__init_string_app')
+            if not uid_company_serial_qs.exists():
+                return response.json(173)
+
+            res_data = {
+                'uid': uid_company_serial_qs[0]['uid__uid'],
+                'mac': uid_company_serial_qs[0]['uid__mac'],
+                'uid_extra': uid_company_serial_qs[0]['uid__uid_extra'],
+                'status': uid_company_serial_qs[0]['uid__status'],
+                'add_time': uid_company_serial_qs[0]['uid__add_time'],
+                'update_time': uid_company_serial_qs[0]['uid__update_time'],
+                'area': uid_company_serial_qs[0]['uid__area'],
+                'vpg': uid_company_serial_qs[0]['uid__vpg'],
+                'p2p_type': uid_company_serial_qs[0]['uid__p2p_type'],
+                'full_uid_code': uid_company_serial_qs[0]['uid__full_uid_code'],
+                'platform': uid_company_serial_qs[0]['uid__platform'],
+                'init_string': uid_company_serial_qs[0]['uid__init_string'],
+                'init_string_app': uid_company_serial_qs[0]['uid__init_string_app']
+            }
+
+            # 查询iot数据
+            iot_device_info_qs = iotdeviceInfoModel.objects.filter(serial_number=serial).values(
+                'certificate_id', 'certificate_pem', 'public_key', 'private_key', 'thing_name',
+                'thing_groups', 'endpoint', 'token_iot_number')
+            if iot_device_info_qs.exists():
+                res_data['certificate_id'] = iot_device_info_qs[0]['certificate_id']
+                res_data['certificate_pem'] = iot_device_info_qs[0]['certificate_pem']
+                res_data['public_key'] = iot_device_info_qs[0]['public_key']
+                res_data['private_key'] = iot_device_info_qs[0]['private_key']
+                res_data['thing_name'] = iot_device_info_qs[0]['thing_name']
+                res_data['thing_groups'] = iot_device_info_qs[0]['thing_groups']
+                res_data['endpoint'] = iot_device_info_qs[0]['endpoint']
+                res_data['token_iot_number'] = iot_device_info_qs[0]['token_iot_number']
+
+            # 修改序列号状态为占用
+            CompanySerialModel.objects.filter(serial_number=serial).update(status=3)
+            return response.json(0, {'res_data': res_data})
+        except Exception as e:
+            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+
     @classmethod
     def vpg_page(cls, request_dict, response):