|
@@ -7,6 +7,7 @@ import time
|
|
|
from django.db import transaction
|
|
|
from django.views import View
|
|
|
|
|
|
+from Controller.DeviceConfirmRegion import Device_Region
|
|
|
from Model.models import SerialNumberModel, CompanySerialModel, UIDCompanySerialModel, CompanyModel, RegionModel, \
|
|
|
CountryModel, UIDModel, Device_Info, iotdeviceInfoModel
|
|
|
from Object.RedisObject import RedisObject
|
|
@@ -23,15 +24,15 @@ class SerialNumberView(View):
|
|
|
request.encoding = 'utf-8'
|
|
|
operation = kwargs.get('operation', None)
|
|
|
request_dict = request.GET
|
|
|
- return self.validate(request_dict, operation)
|
|
|
+ return self.validate(request_dict, operation, request)
|
|
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
|
request.encoding = 'utf-8'
|
|
|
operation = kwargs.get('operation', None)
|
|
|
request_dict = request.POST
|
|
|
- return self.validate(request_dict, operation)
|
|
|
+ return self.validate(request_dict, operation, request)
|
|
|
|
|
|
- def validate(self, request_dict, operation):
|
|
|
+ def validate(self, request_dict, operation, request):
|
|
|
token = TokenObject(request_dict.get('token', None))
|
|
|
response = uidManageResponseObject()
|
|
|
|
|
@@ -39,6 +40,8 @@ class SerialNumberView(View):
|
|
|
return self.do_get_uid(request_dict, response)
|
|
|
elif operation == 'getSerial':
|
|
|
return self.do_get_serial_number(request_dict, response)
|
|
|
+ elif operation == 'attachUID':
|
|
|
+ return self.do_attach_uid(request_dict, response, request)
|
|
|
else:
|
|
|
if token.code != 0:
|
|
|
return response.json(token.code)
|
|
@@ -49,8 +52,6 @@ class SerialNumberView(View):
|
|
|
return self.do_list(token.userID, request_dict, response)
|
|
|
elif operation == 'update':
|
|
|
return self.do_update(token.userID, request_dict, response)
|
|
|
- elif operation == 'attachUID':
|
|
|
- return self.do_attach_uid(request_dict, response)
|
|
|
elif operation == 'detachUID':
|
|
|
return self.do_detach_uid(token.userID, request_dict, response)
|
|
|
else:
|
|
@@ -190,18 +191,33 @@ class SerialNumberView(View):
|
|
|
return response.json(444)
|
|
|
|
|
|
@transaction.atomic
|
|
|
- def do_attach_uid(self, request_dict, response):
|
|
|
+ def do_attach_uid(self, request_dict, response, request):
|
|
|
serial_number = request_dict.get('serial_number', None)
|
|
|
country_id = request_dict.get('country_id', None)
|
|
|
company_id = request_dict.get('company_id', None)
|
|
|
+ token = request_dict.get('token', None)
|
|
|
+ time_stamp = request_dict.get('time_stamp', None)
|
|
|
+
|
|
|
+ if serial_number and len(serial_number) == 9 and company_id:
|
|
|
+
|
|
|
+ token = int(CommonService.decode_data(token))
|
|
|
+ time_stamp = int(time_stamp)
|
|
|
+
|
|
|
+ now_time = int(time.time())
|
|
|
+ distance = now_time - time_stamp
|
|
|
+
|
|
|
+ if token != time_stamp or distance > 60000 or distance < 0:
|
|
|
+ return response.json(404)
|
|
|
|
|
|
- if serial_number and len(serial_number) == 9 and country_id and company_id:
|
|
|
mark = serial_number[6:9]
|
|
|
serial = serial_number[0:6]
|
|
|
|
|
|
savePoint = transaction.savepoint()
|
|
|
try:
|
|
|
try:
|
|
|
+ if not country_id :
|
|
|
+ ip = CommonService.get_ip_address(request)
|
|
|
+ country_id = Device_Region().get_device_region(ip)
|
|
|
|
|
|
# 判断序列号是否已和企业关联
|
|
|
company_serial_qs = CompanySerialModel.objects.filter(company__secret=company_id,
|
|
@@ -248,7 +264,10 @@ class SerialNumberView(View):
|
|
|
company_serial.status = 2
|
|
|
company_serial.save()
|
|
|
|
|
|
- Device_Info.objects.filter(UID=uid.uid).update(serial_number=serial_number)
|
|
|
+ dev = Device_Info.objects.filter(UID=uid.uid)
|
|
|
+ if dev.exists():
|
|
|
+ dev.update(serial_number=serial_number)
|
|
|
+
|
|
|
|
|
|
res = {
|
|
|
'uid': CommonService.encode_data(uid.uid),
|
|
@@ -350,7 +369,9 @@ class SerialNumberView(View):
|
|
|
uid.save()
|
|
|
uid_serial.delete()
|
|
|
|
|
|
- Device_Info.objects.filter(UID=uid.uid).update(serial_number='')
|
|
|
+ dev = Device_Info.objects.filter(UID=uid.uid)
|
|
|
+ if dev.exists():
|
|
|
+ dev.update(serial_number='')
|
|
|
return response.json(0)
|
|
|
else:
|
|
|
return response.json(173)
|