Browse Source

instavision后台CRUD接口

locky 1 month ago
parent
commit
fa88da92e9
2 changed files with 161 additions and 2 deletions
  1. 146 2
      AdminController/DeviceManagementController.py
  2. 15 0
      Model/models.py

+ 146 - 2
AdminController/DeviceManagementController.py

@@ -7,7 +7,7 @@ import operator
 import os
 import os
 import threading
 import threading
 import time
 import time
-
+import csv
 import oss2
 import oss2
 import requests
 import requests
 from obs import ObsClient
 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, \
     VodHlsModel, ExperienceContextModel, DeviceTypeModel, UidUserModel, ExperienceAiModel, AiService, \
     AppBundle, App_Info, AppDeviceType, DeviceNameLanguage, UIDCompanySerialModel, UidPushModel, \
     AppBundle, App_Info, AppDeviceType, DeviceNameLanguage, UIDCompanySerialModel, UidPushModel, \
     CustomCustomerOrderInfo, CustomCustomerDevice, DeviceVersionInfo, VoicePromptModel, DeviceAlgorithmExplain, BaiduBigModelLicense, \
     CustomCustomerOrderInfo, CustomCustomerDevice, DeviceVersionInfo, VoicePromptModel, DeviceAlgorithmExplain, BaiduBigModelLicense, \
-    DeviceDailyReport
+    DeviceDailyReport, Instavision
 from Object.AWS.AmazonS3Util import AmazonS3Util
 from Object.AWS.AmazonS3Util import AmazonS3Util
 from Object.Enums.RedisKeyConstant import RedisKeyConstant
 from Object.Enums.RedisKeyConstant import RedisKeyConstant
 from Object.RedisObject import RedisObject
 from Object.RedisObject import RedisObject
@@ -152,6 +152,16 @@ class DeviceManagement(View):
             elif operation == 'delBaiduBigModelLicense':   # 删除大模型许可证
             elif operation == 'delBaiduBigModelLicense':   # 删除大模型许可证
                 return self.del_baidu_big_model_license(request_dict, response)
                 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':
             elif operation == 'devicePowerDisplay':
                 return self.device_power_display(request_dict, response)
                 return self.device_power_display(request_dict, response)
             else:
             else:
@@ -2232,6 +2242,140 @@ class DeviceManagement(View):
         except Exception as e:
         except Exception as e:
             return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(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
     @staticmethod
     def device_power_display(request_dict, response):
     def device_power_display(request_dict, response):
         """
         """

+ 15 - 0
Model/models.py

@@ -5805,6 +5805,21 @@ class BaiduBigModelLicense(models.Model):
         verbose_name = '百度大模型许可证'
         verbose_name = '百度大模型许可证'
 
 
 
 
+class Instavision(models.Model):
+    id = models.AutoField(primary_key=True, verbose_name='自增标记ID')
+    mac = models.CharField(default='', max_length=32, verbose_name='设备mac地址')
+    device_id = models.CharField(default='', max_length=32, verbose_name='设备id')
+    access_key = models.CharField(default='', max_length=32, verbose_name='访问密钥')
+    # 使用状态,0: 未使用, 1: 已使用
+    use_status = models.PositiveSmallIntegerField(default=0, verbose_name='使用状态')
+    created_time = models.IntegerField(default=0, verbose_name='创建时间')
+    updated_time = models.IntegerField(default=0, verbose_name='更新时间')
+
+    class Meta:
+        db_table = 'instavision'
+        verbose_name = '即时视觉'
+
+
 class DictCategory(models.Model):
 class DictCategory(models.Model):
     id = models.AutoField(primary_key=True, verbose_name='自增标记ID')
     id = models.AutoField(primary_key=True, verbose_name='自增标记ID')
     code = models.CharField(max_length=50, unique=True, verbose_name="类别编码")
     code = models.CharField(max_length=50, unique=True, verbose_name="类别编码")