|
|
@@ -82,6 +82,8 @@ class SerialNumberView(View):
|
|
|
return self.get_baidu_big_model_license_url(request_dict, response)
|
|
|
elif operation == 'getInstavision':
|
|
|
return self.get_instavision(request_dict, response, request)
|
|
|
+ elif operation == 'getInstaVisionV2':
|
|
|
+ return self.get_insta_vision_v2(request_dict, response, request)
|
|
|
else:
|
|
|
return response.json(414)
|
|
|
|
|
|
@@ -121,6 +123,7 @@ class SerialNumberView(View):
|
|
|
is_verify = request_dict.get('is_verify', None)
|
|
|
|
|
|
if not all([serial_number, token, time_stamp]):
|
|
|
+ LOGGER.error(f'{serial_number}请求绑定uid参数缺失')
|
|
|
return response.json(444)
|
|
|
|
|
|
# 时间戳token校验
|
|
|
@@ -1189,9 +1192,10 @@ class SerialNumberView(View):
|
|
|
if not mac:
|
|
|
return response.json(444)
|
|
|
try:
|
|
|
+ scheme_code = request_dict.get('scheme_code', 'INST01350WA')
|
|
|
ip = CommonService.get_ip_address(request)
|
|
|
# 查询mac是否已存在数据
|
|
|
- instavision_qs = Instavision.objects.filter(mac=mac, use_status=1).values('device_id', 'access_key')
|
|
|
+ instavision_qs = Instavision.objects.filter(mac=mac, scheme_code=scheme_code, use_status=1).values('device_id', 'access_key')
|
|
|
if instavision_qs.exists():
|
|
|
res = {
|
|
|
'device_id': instavision_qs[0]['device_id'],
|
|
|
@@ -1203,7 +1207,7 @@ class SerialNumberView(View):
|
|
|
# 使用事务和select_for_update来处理并发问题
|
|
|
with transaction.atomic():
|
|
|
# 使用select_for_update加锁,防止并发时多个请求获取到同一条记录
|
|
|
- instavision_qs = Instavision.objects.select_for_update().filter(use_status=0).first()
|
|
|
+ instavision_qs = Instavision.objects.select_for_update().filter(use_status=0, scheme_code=scheme_code).first()
|
|
|
|
|
|
if not instavision_qs:
|
|
|
return response.json(444, '没有可用的即时视觉数据')
|
|
|
@@ -1226,3 +1230,83 @@ class SerialNumberView(View):
|
|
|
except Exception as e:
|
|
|
LOGGER.error('获取DID error:{},mac:{}'.format(repr(e), mac))
|
|
|
return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
+
|
|
|
+ @staticmethod
|
|
|
+ def get_insta_vision_v2(request_dict, response, request):
|
|
|
+ """
|
|
|
+ 获取insta_vision数据
|
|
|
+ @param request_dict: 请求参数
|
|
|
+ @param response: 响应对象
|
|
|
+ @request_dict mac: 设备mac地址
|
|
|
+ @request_dict code: 设备code
|
|
|
+ @request_dict scheme_code: 设备scheme_code
|
|
|
+ @request_dict time_stamp: 时间戳
|
|
|
+ @request_dict token: token
|
|
|
+ @return: response
|
|
|
+ """
|
|
|
+ mac = request_dict.get('mac', None)
|
|
|
+ token = request_dict.get('token', None)
|
|
|
+ time_stamp = request_dict.get('time_stamp', None)
|
|
|
+ scheme_code = request_dict.get('scheme_code', None)
|
|
|
+ try:
|
|
|
+ if not all([mac, token, time_stamp, scheme_code]):
|
|
|
+ LOGGER.error(f'ins获取DID参数缺失,mac:{mac}')
|
|
|
+ return response.json(444)
|
|
|
+ # 时间戳token校验
|
|
|
+ if not CommonService.check_time_stamp_token(token, time_stamp):
|
|
|
+ LOGGER.error(f'ins获取DID{scheme_code}时间戳校验失败time:{time_stamp},token:{token}')
|
|
|
+ return response.json(13)
|
|
|
+ ip = CommonService.get_ip_address(request)
|
|
|
+ content = json.loads(json.dumps(request_dict))
|
|
|
+ # 查询mac是否已存在数据
|
|
|
+ ins_qs = (Instavision.objects.filter(mac=mac, scheme_code=scheme_code, use_status=1)
|
|
|
+ .values('device_id', 'access_key'))
|
|
|
+ log = {
|
|
|
+ 'ip': ip,
|
|
|
+ 'user_id': 1,
|
|
|
+ 'status': 200,
|
|
|
+ 'time': int(time.time()),
|
|
|
+ 'content': json.dumps(content),
|
|
|
+ 'url': 'serialNumber/getInstaVisionV2',
|
|
|
+ }
|
|
|
+
|
|
|
+ if ins_qs.exists():
|
|
|
+ res = {
|
|
|
+ 'device_id': ins_qs[0]['device_id'],
|
|
|
+ 'access_key': ins_qs[0]['access_key'],
|
|
|
+ }
|
|
|
+ did = ins_qs[0]['device_id']
|
|
|
+ log['operation'] = f'MAC:{mac}获取uid: {did}'
|
|
|
+ LogModel.objects.create(**log)
|
|
|
+ return response.json(0, res)
|
|
|
+ else:
|
|
|
+ # 使用事务和select_for_update来处理并发问题
|
|
|
+ with (transaction.atomic()):
|
|
|
+ # 使用select_for_update加锁,防止并发时多个请求获取到同一条记录
|
|
|
+ ins_qs = Instavision.objects.select_for_update(
|
|
|
+ ).filter(use_status=0, scheme_code=scheme_code).first()
|
|
|
+
|
|
|
+ if not ins_qs:
|
|
|
+ LOGGER.error(f'ins获取DID{mac}没有可用的即时视觉数据,code:{scheme_code}')
|
|
|
+ return response.json(444, '没有可用的即时视觉数据')
|
|
|
+
|
|
|
+ device_id = ins_qs.device_id
|
|
|
+ access_key = ins_qs.access_key
|
|
|
+
|
|
|
+ # 更新该条数据的mac、use_status和updated_time
|
|
|
+ ins_qs.mac = mac
|
|
|
+ ins_qs.use_status = 1 # 标记为已使用
|
|
|
+ ins_qs.updated_time = int(time.time())
|
|
|
+ ins_qs.save()
|
|
|
+
|
|
|
+ res = {
|
|
|
+ 'device_id': device_id,
|
|
|
+ 'access_key': access_key,
|
|
|
+ }
|
|
|
+ log['operation'] = f'MAC:{mac}绑定uid: {device_id}'
|
|
|
+ LogModel.objects.create(**log)
|
|
|
+ return response.json(0, res)
|
|
|
+ except Exception as e:
|
|
|
+ LOGGER.error('ins获取DID,error:{},mac:{}'.format(repr(e), mac))
|
|
|
+ return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
+
|