瀏覽代碼

更新设备也可以绑定UID

chenshibin 4 年之前
父節點
當前提交
6b1b35d9c7
共有 1 個文件被更改,包括 30 次插入9 次删除
  1. 30 9
      Controller/SerialNumberController.py

+ 30 - 9
Controller/SerialNumberController.py

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