Browse Source

获取instavision数据接口

locky 1 week ago
parent
commit
049a2a90e4
1 changed files with 41 additions and 1 deletions
  1. 41 1
      Controller/SerialNumberController.py

+ 41 - 1
Controller/SerialNumberController.py

@@ -19,7 +19,7 @@ from Model.models import SerialNumberModel, CompanySerialModel, UIDCompanySerial
     iotdeviceInfoModel, LogModel, UidSetModel, UID_Bucket, \
     Unused_Uid_Meal, Order_Model, StsCrdModel, VodHlsModel, ExperienceContextModel, UidUserModel, ExperienceAiModel, \
     AiService, DeviceDomainRegionModel, RegionModel, UidPushModel, AppScannedSerial, Device_User, SerialUnbindUID, \
-    DeviceNetInfo, BaiduBigModelLicense
+    DeviceNetInfo, BaiduBigModelLicense, Instavision
 from Object.AWS.S3Email import S3Email
 from Object.RedisObject import RedisObject
 from Object.TokenObject import TokenObject
@@ -80,6 +80,8 @@ class SerialNumberView(View):
             return self.save_user_net_info(request_dict, response)
         elif operation == 'getBaiduBigModelLicenseUrl':
             return self.get_baidu_big_model_license_url(request_dict, response)
+        elif operation == 'getInstavision':
+            return self.get_instavision(request_dict, response)
         else:
             return response.json(414)
 
@@ -1174,3 +1176,41 @@ class SerialNumberView(View):
             return response.json(0, res)
         except Exception as e:
             return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+
+    @staticmethod
+    def get_instavision(request_dict, response):
+        """
+        获取instavision数据
+        @param request_dict: 请求参数
+        @param response: 响应对象
+        @request_dict mac: 设备mac地址
+        @return: response
+        """
+        mac = request_dict.get('mac', None)
+        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()
+                
+                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)))