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