|
@@ -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):
|
|
|
|