Эх сурвалжийг харах

设备类型相关的接口

tanghongbin 4 жил өмнө
parent
commit
69f40ee1c3

+ 4 - 1
Ansjer/urls.py

@@ -10,7 +10,7 @@ from Controller import FeedBack, EquipmentOTA, EquipmentInfo, AdminManage, AppIn
     StsOssController, UIDPreview, OssCrd, SysMsg, UidUser, EquipmentManagerV2, EquipmentManagerV3, PushDeploy, \
     AppSetController, \
     ApplicationController, UserExController, CloudStorage, TestApi, UserBrandControllerV2, \
-    StatisticsController, Alexa, FAQController, AppLogController, EquipmentVersionLimit
+    StatisticsController, Alexa, FAQController, AppLogController, EquipmentVersionLimit, DeviceTypeController
 
 urlpatterns = [
     url(r'^testApi/(?P<operation>.*)$', TestApi.testView.as_view()),
@@ -239,6 +239,9 @@ urlpatterns = [
     # 订阅邮件
     url(r'^account/subscribe$', UserController.SubscribeEmailView.as_view()),
 
+    # 设备类型
+    url(r'^deviceType/(?P<operation>.*)$', DeviceTypeController.DeviceTypeView.as_view()),
+
     # app 设备消息模板
     # 路由加参数参考
     # url(r'^(?P<path>.*)/(?P<UID>.*)/lls$', Test.Test.as_view(), name=u'gg'),

+ 117 - 0
Controller/DeviceTypeController.py

@@ -0,0 +1,117 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+import time
+
+import oss2
+from django.views import View
+
+from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET
+from Model.models import DeviceTypeModel
+from Object.ResponseObject import ResponseObject
+from Object.TokenObject import TokenObject
+from Service.CommonService import CommonService
+from Service.ModelService import ModelService
+
+
+class DeviceTypeView(View):
+
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        request_dict = request.GET
+        operation = kwargs.get('operation', None)
+        return self.validate(request_dict, operation)
+
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        request_dict = request.POST
+        operation = kwargs.get('operation', None)
+        return self.validate(request_dict, operation)
+
+    def validate(self, request_dict, operation):
+        token = request_dict.get('token', None)
+        lang = request_dict.get('lang', None)
+
+        response = ResponseObject(lang=lang)
+        token = TokenObject(token)
+        if token.code != 0:
+            return response.json(token.code)
+
+        if operation == 'add':
+            return self.do_admin_add(token.userID, request_dict, response)
+        elif operation == 'query':
+            return self.do_query(request_dict, response)
+        elif operation == 'delete':
+            return self.do_admin_delete(token.userID, request_dict, response)
+        elif operation == 'getUploadUrl':
+            return self.get_upload_url(request_dict, response)
+        else:
+            return response.json(404)
+
+    def get_upload_url(self, request_dict, response):
+        upload_type = request_dict.get('upload_type', None)
+
+        if upload_type:
+            auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
+            bucket = oss2.Bucket(auth, 'oss-cn-shenzhen.aliyuncs.com', 'ansjer-static-resources')
+            name = CommonService.createOrderID()
+            filename = str(name) + '.' + upload_type
+            obj = 'device_type/' + filename
+            url = bucket.sign_url('PUT', obj, 7200)
+            return response.json(0, {'put_url': url, 'filename': filename})
+        else:
+            return response.json(444)
+
+    def do_admin_add(self, userID, request_dict, response):
+        own_perm = ModelService.check_perm(userID, 10)
+        if not own_perm:
+            return response.json(404)
+
+        name = request_dict.get('name', None)
+        model = request_dict.get('model', None)
+        type = request_dict.get('type', None)
+        ptz_type = request_dict.get('ptz_type', None)
+        icon = request_dict.get('icon', None)
+
+        if name and model and type and ptz_type and icon:
+            now_time = int(time.time())
+            device_type = DeviceTypeModel()
+            device_type.name = name
+            device_type.model = model
+            device_type.type = type
+            device_type.ptz_type = ptz_type
+            device_type.icon = icon
+            device_type.add_time = now_time
+            device_type.update_time = now_time
+            device_type.save()
+            return response.json(0)
+        else:
+            return response.json(444)
+
+    def do_query(self, request_dict, response):
+        device_type_qs = DeviceTypeModel.objects.filter().values('id', 'type', 'ptz_type', 'model', 'icon', 'name')
+        res = {}
+        data = []
+        res['data'] = data
+        if device_type_qs.exists():
+            for device_type in device_type_qs:
+                auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
+                bucket = oss2.Bucket(auth, 'oss-cn-shenzhen.aliyuncs.com', 'ansjer-static-resources')
+
+                icon = device_type['icon']
+                url = 'device_type/' + icon
+                device_type['icon'] = bucket.sign_url('GET', url, 3600)
+                data.append(device_type)
+
+        return response.json(0, res)
+
+    def do_admin_delete(self, userID, request_dict, response):
+        own_perm = ModelService.check_perm(userID, 10)
+        if not own_perm:
+            return response.json(404)
+
+        id = request_dict.get('id', None)
+        if id:
+            DeviceTypeModel.objects.filter(id=id).delete()
+            return response.json(0)
+        else:
+            return response.json(444)

+ 16 - 0
Model/models.py

@@ -1024,4 +1024,20 @@ class EquipmentVersionLimitModel(models.Model):
     class Meta:
         db_table = 'equipment_version_limit'
         verbose_name = '设备版本信息限制表'
+        verbose_name_plural = verbose_name
+
+
+class DeviceTypeModel(models.Model):
+    id = models.AutoField(primary_key=True)
+    name = models.CharField(max_length=64, default='', verbose_name='设备名称')
+    model = models.SmallIntegerField(default=0, verbose_name='设备大类。1:dvr,2:ipc')
+    type = models.IntegerField(default=0, verbose_name='设备类型')
+    ptz_type = models.IntegerField(default=0, verbose_name='ptz类型。1:dvr球机,2:IPCPTZ,3:同轴菜单')
+    icon = models.CharField(max_length=120, default='', verbose_name='文件名')
+    add_time = models.IntegerField(default=0, verbose_name='添加时间')
+    update_time = models.IntegerField(default=0, verbose_name='更新时间')
+
+    class Meta:
+        db_table = 'device_type'
+        verbose_name = '设备类型表'
         verbose_name_plural = verbose_name