|
@@ -7,7 +7,7 @@ import operator
|
|
|
import os
|
|
|
import threading
|
|
|
import time
|
|
|
-
|
|
|
+import csv
|
|
|
import oss2
|
|
|
import requests
|
|
|
from obs import ObsClient
|
|
@@ -27,7 +27,7 @@ from Model.models import Device_Info, UidSetModel, LogModel, UID_Bucket, Unused_
|
|
|
VodHlsModel, ExperienceContextModel, DeviceTypeModel, UidUserModel, ExperienceAiModel, AiService, \
|
|
|
AppBundle, App_Info, AppDeviceType, DeviceNameLanguage, UIDCompanySerialModel, UidPushModel, \
|
|
|
CustomCustomerOrderInfo, CustomCustomerDevice, DeviceVersionInfo, VoicePromptModel, DeviceAlgorithmExplain, BaiduBigModelLicense, \
|
|
|
- DeviceDailyReport
|
|
|
+ DeviceDailyReport, Instavision
|
|
|
from Object.AWS.AmazonS3Util import AmazonS3Util
|
|
|
from Object.Enums.RedisKeyConstant import RedisKeyConstant
|
|
|
from Object.RedisObject import RedisObject
|
|
@@ -152,6 +152,16 @@ class DeviceManagement(View):
|
|
|
elif operation == 'delBaiduBigModelLicense': # 删除大模型许可证
|
|
|
return self.del_baidu_big_model_license(request_dict, response)
|
|
|
|
|
|
+ # Instavision即时视觉
|
|
|
+ elif operation == 'getInstavision': # 查询即时视觉列表
|
|
|
+ return self.get_instavision(request_dict, response)
|
|
|
+ elif operation == 'addInstavision': # 添加即时视觉
|
|
|
+ return self.add_instavision(request, response)
|
|
|
+ elif operation == 'editInstavision': # 编辑即时视觉
|
|
|
+ return self.edit_instavision(request_dict, response)
|
|
|
+ elif operation == 'delInstavision': # 删除即时视觉
|
|
|
+ return self.del_instavision(request_dict, response)
|
|
|
+
|
|
|
elif operation == 'devicePowerDisplay':
|
|
|
return self.device_power_display(request_dict, response)
|
|
|
else:
|
|
@@ -2232,6 +2242,140 @@ class DeviceManagement(View):
|
|
|
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):
|
|
|
+ """查询即时视觉列表"""
|
|
|
+ page_no = request_dict.get('pageNo')
|
|
|
+ page_size = request_dict.get('pageSize')
|
|
|
+ device_id = request_dict.get('deviceId', '')
|
|
|
+ mac = request_dict.get('mac', '')
|
|
|
+ use_status = request_dict.get('useStatus')
|
|
|
+
|
|
|
+ if not all([page_no, page_size]):
|
|
|
+ return response.json(444)
|
|
|
+
|
|
|
+ try:
|
|
|
+ query = Instavision.objects.all()
|
|
|
+ if device_id:
|
|
|
+ query = query.filter(device_id__contains=device_id)
|
|
|
+ if mac:
|
|
|
+ query = query.filter(mac__contains=mac)
|
|
|
+ if use_status is not None:
|
|
|
+ query = query.filter(use_status=use_status)
|
|
|
+
|
|
|
+ total = query.count()
|
|
|
+ instavisions = query.order_by('-id')[
|
|
|
+ (int(page_no)-1)*int(page_size):int(page_no)*int(page_size)
|
|
|
+ ].values('id', 'mac', 'device_id', 'access_key', 'use_status', 'created_time', 'updated_time')
|
|
|
+
|
|
|
+ return response.json(0, {
|
|
|
+ 'list': list(instavisions),
|
|
|
+ 'total': total
|
|
|
+ })
|
|
|
+ except Exception as e:
|
|
|
+ return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
+
|
|
|
+ @staticmethod
|
|
|
+ def add_instavision(request, response):
|
|
|
+ """添加即时视觉
|
|
|
+ 仅支持CSV批量导入
|
|
|
+ """
|
|
|
+ file = request.FILES.get('file', None)
|
|
|
+ if not file:
|
|
|
+ return response.json(444, '请上传CSV文件')
|
|
|
+
|
|
|
+ try:
|
|
|
+ # 读取CSV文件内容
|
|
|
+ csv_content = io.StringIO(file.read().decode('utf-8'))
|
|
|
+ csv_reader = csv.DictReader(csv_content)
|
|
|
+
|
|
|
+ now_time = int(time.time())
|
|
|
+
|
|
|
+ # 获取所有已存在的device_id
|
|
|
+ existing_device_ids = set(Instavision.objects.values_list('device_id', flat=True))
|
|
|
+
|
|
|
+ # 准备批量创建的对象列表
|
|
|
+ instavision_objects = []
|
|
|
+
|
|
|
+ for row in csv_reader:
|
|
|
+ # 获取Device Id和Access Key列的数据
|
|
|
+ device_id = row.get('Device Id', '')
|
|
|
+ access_key = row.get('Access Key', '')
|
|
|
+
|
|
|
+ if not device_id or not access_key:
|
|
|
+ continue
|
|
|
+
|
|
|
+ # 检查是否已存在相同的device_id
|
|
|
+ if device_id in existing_device_ids:
|
|
|
+ continue
|
|
|
+
|
|
|
+ # 添加到待创建列表
|
|
|
+ instavision_objects.append(Instavision(
|
|
|
+ device_id=device_id,
|
|
|
+ access_key=access_key,
|
|
|
+ created_time=now_time,
|
|
|
+ updated_time=now_time
|
|
|
+ ))
|
|
|
+
|
|
|
+ # 将此device_id添加到已存在集合中,防止CSV中有重复
|
|
|
+ existing_device_ids.add(device_id)
|
|
|
+
|
|
|
+ # 使用bulk_create批量创建记录
|
|
|
+ if instavision_objects:
|
|
|
+ Instavision.objects.bulk_create(instavision_objects)
|
|
|
+
|
|
|
+ return response.json(0)
|
|
|
+ except Exception as e:
|
|
|
+ return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
+
|
|
|
+ @staticmethod
|
|
|
+ def edit_instavision(request_dict, response):
|
|
|
+ """编辑即时视觉"""
|
|
|
+ instavision_id = request_dict.get('id')
|
|
|
+ device_id = request_dict.get('deviceId')
|
|
|
+ access_key = request_dict.get('accessKey')
|
|
|
+ mac = request_dict.get('mac')
|
|
|
+ use_status = request_dict.get('useStatus')
|
|
|
+
|
|
|
+ if not instavision_id:
|
|
|
+ return response.json(444)
|
|
|
+
|
|
|
+ try:
|
|
|
+ update_data = {
|
|
|
+ 'updated_time': int(time.time())
|
|
|
+ }
|
|
|
+ if device_id:
|
|
|
+ # 检查是否与其他记录的device_id冲突
|
|
|
+ if Instavision.objects.exclude(id=instavision_id).filter(device_id=device_id).exists():
|
|
|
+ return response.json(444, '设备ID已存在')
|
|
|
+ update_data['device_id'] = device_id
|
|
|
+ if access_key:
|
|
|
+ update_data['access_key'] = access_key
|
|
|
+ if mac:
|
|
|
+ update_data['mac'] = mac
|
|
|
+ if use_status is not None:
|
|
|
+ update_data['use_status'] = int(use_status)
|
|
|
+
|
|
|
+ Instavision.objects.filter(id=instavision_id).update(**update_data)
|
|
|
+ return response.json(0)
|
|
|
+ except Exception as e:
|
|
|
+ return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
+
|
|
|
+ @staticmethod
|
|
|
+ def del_instavision(request_dict, response):
|
|
|
+ """删除即时视觉"""
|
|
|
+ instavision_id = request_dict.get('id')
|
|
|
+
|
|
|
+ if not instavision_id:
|
|
|
+ return response.json(444)
|
|
|
+
|
|
|
+ try:
|
|
|
+ # 删除数据库记录
|
|
|
+ Instavision.objects.filter(id=instavision_id).delete()
|
|
|
+ return response.json(0)
|
|
|
+ except Exception as e:
|
|
|
+ return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
+
|
|
|
@staticmethod
|
|
|
def device_power_display(request_dict, response):
|
|
|
"""
|