Browse Source

查询返回mac已存在数据

locky 1 week ago
parent
commit
397710289c
1 changed files with 29 additions and 20 deletions
  1. 29 20
      Controller/SerialNumberController.py

+ 29 - 20
Controller/SerialNumberController.py

@@ -1190,27 +1190,36 @@ class SerialNumberView(View):
         if not mac:
             return response.json(444)
         try:
-            # 使用事务和select_for_update来处理并发问题
-            with transaction.atomic():
-                # 使用select_for_update加锁,防止并发时多个请求获取到同一条记录
-                instavision_qs = Instavision.objects.select_for_update().filter(use_status=0).first()
-                
-                if not instavision_qs:
-                    return response.json(444, '没有可用的即时视觉数据')
-                    
-                device_id = instavision_qs.device_id
-                access_key = instavision_qs.access_key
-                
-                # 更新该条数据的mac、use_status和updated_time
-                instavision_qs.mac = mac
-                instavision_qs.use_status = 1  # 标记为已使用
-                instavision_qs.updated_time = int(time.time())
-                instavision_qs.save()
-                
+            # 查询mac是否已存在数据
+            instavision_qs = Instavision.objects.filter(mac=mac, use_status=1).values('device_id', 'access_key')
+            if instavision_qs.exists():
                 res = {
-                    'device_id': device_id,
-                    'access_key': access_key,
+                    'device_id': instavision_qs[0]['device_id'],
+                    'access_key': instavision_qs[0]['access_key'],
                 }
-                return response.json(0, res)
+            else:
+                # 使用事务和select_for_update来处理并发问题
+                with transaction.atomic():
+                    # 使用select_for_update加锁,防止并发时多个请求获取到同一条记录
+                    instavision_qs = Instavision.objects.select_for_update().filter(use_status=0).first()
+
+                    if not instavision_qs:
+                        return response.json(444, '没有可用的即时视觉数据')
+
+                    device_id = instavision_qs.device_id
+                    access_key = instavision_qs.access_key
+
+                    # 更新该条数据的mac、use_status和updated_time
+                    instavision_qs.mac = mac
+                    instavision_qs.use_status = 1  # 标记为已使用
+                    instavision_qs.updated_time = int(time.time())
+                    instavision_qs.save()
+                
+                    res = {
+                        'device_id': device_id,
+                        'access_key': access_key,
+                    }
+
+            return response.json(0, res)
         except Exception as e:
             return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))