ソースを参照

增加device shadow

chenjunkai 5 年 前
コミット
029a28b147
3 ファイル変更196 行追加2 行削除
  1. 3 2
      AnsjerPush/urls.py
  2. 127 0
      Controller/ShadowController.py
  3. 66 0
      Model/models.py

+ 3 - 2
AnsjerPush/urls.py

@@ -15,10 +15,11 @@ Including another URLconf
 """
 from django.contrib import admin
 from django.urls import path
-from Controller import DetectController
+from Controller import DetectController,ShadowController
 
 
 urlpatterns = [
     path('admin/', admin.site.urls),
-    path('notify/push', DetectController.NotificationView.as_view())
+    path('notify/push', DetectController.NotificationView.as_view()),
+    path('deviceShadow/update', ShadowController.update_device_shadow),
 ]

+ 127 - 0
Controller/ShadowController.py

@@ -0,0 +1,127 @@
+#!/usr/bin/env python3  
+# -*- coding: utf-8 -*-  
+"""
+@Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
+@AUTHOR: ASJRD018
+@NAME: AnsjerPush
+@software: PyCharm
+@DATE: 2020/2/14 13:54
+@Version: python3.6
+@MODIFY DECORD:ansjer dev
+@file: ShadowController.py
+@Contact: chanjunkai@163.com
+"""
+# 测试环境
+# test.shadow.dvema.com
+# 生产环境
+# shadow.dvema.com
+# 设备影子更新
+from Object.ResponseObject import ResponseObject
+from Object.ETkObject import ETkObject
+import time
+from Model.models import Device_Info,UidSetModel
+from Service.CommonService import CommonService
+from django.http import JsonResponse
+
+
+def update_device_shadow(request):
+    request.encoding = 'utf-8'
+    response = ResponseObject()
+    if request.method == 'POST':
+        request_dict = request.POST
+    elif request.method == 'GET':
+        request_dict = request.GET
+    else:
+        return response.json(444)
+    etk = request_dict.get('etk', None)
+    eto = ETkObject(etk)
+    uid = eto.uid
+    if uid:
+        # 重置按钮
+        is_reset = request_dict.get('is_reset', None)
+        # 传1则重置设备信息
+        if is_reset == '1':
+            UidSetModel.objects.filter(uid=uid).delete()
+            # 重置设备,判断设备为已删除
+            Device_Info.objects.filter(UID=uid).update(isExist=2)
+        ucode = request_dict.get('ucode', None)
+        version = request_dict.get('version', None)
+        p2p_region = request_dict.get('p2p_region', None)
+        tz = request_dict.get('tz', None)
+        video_code = request_dict.get('video_code', None)
+        ip = CommonService.get_ip_address(request)
+        channel = request_dict.get('channel', None)
+        cloud_vod = request_dict.get('cloud_vod', None)
+        push_status = request_dict.get('push_status', None)
+        pwd = request_dict.get('pwd', None)
+        resetTime = request_dict.get('resetTime', None)
+
+        us_qs = UidSetModel.objects.filter(uid=uid)
+        # 更新
+        nowTime = int(time.time())
+
+        print('-------')
+        print(resetTime)
+        print('-------')
+
+        if us_qs.exists():
+            update_dict = {
+                'updTime': nowTime,
+                'ip': ip
+            }
+            if channel:
+                update_dict['channel'] = channel
+            if p2p_region:
+                update_dict['p2p_region'] = p2p_region
+            if ucode:
+                update_dict['ucode'] = ucode
+            if version:
+                update_dict['version'] = version
+            if tz:
+                update_dict['tz'] = tz
+            if video_code:
+                update_dict['video'] = video_code
+            if cloud_vod:
+                update_dict['cloud_vod'] = cloud_vod
+            if push_status:
+                update_dict['detect_status'] = push_status
+            if pwd:
+                update_dict['pwd'] = pwd
+            us_qs.update(**update_dict)
+            # 如果推送状态开启,返回推送url
+            data = {}
+
+            return JsonResponse(status=200, data={'code': 0, 'msg': 'success', 'data': {}})
+        # 新增
+        else:
+            create_dict = {
+                'uid': uid,
+                'addTime': nowTime,
+                'updTime': nowTime,
+                'ip': ip
+            }
+            if channel:
+                create_dict['channel'] = channel
+            if p2p_region:
+                create_dict['p2p_region'] = p2p_region
+            if ucode:
+                create_dict['ucode'] = ucode
+            if version:
+                create_dict['version'] = version
+            if tz:
+                create_dict['tz'] = tz
+            if video_code:
+                create_dict['video_code'] = video_code
+            if cloud_vod:
+                create_dict['cloud_vod'] = cloud_vod
+            if push_status:
+                create_dict['detect_status'] = push_status
+            if pwd:
+                create_dict['pwd'] = pwd
+            if resetTime:
+                create_dict['resetTime'] = resetTime
+            UidSetModel.objects.create(**create_dict)
+            # 如果推送状态开启,返回推送url
+            return JsonResponse(status=200, data={'code': 0, 'msg': 'success', 'data': {}})
+    else:
+        return JsonResponse(status=200, data={'code': 403, 'msg': 'error etk'})

+ 66 - 0
Model/models.py

@@ -200,6 +200,72 @@ class Device_User(AbstractBaseUser):
     def is_staff(self):
         return self.is_superuser
 
+class Device_Info(models.Model):
+    id = models.CharField(blank=True, max_length=32, primary_key=True)
+    userID = models.ForeignKey(Device_User, blank=True, to_field='userID', on_delete=models.CASCADE)
+    NickName = models.CharField(blank=True, max_length=32, verbose_name=u'设备名称')
+    UID = models.CharField(blank=True, max_length=32, verbose_name=u'设备UID', default='')
+    SID = models.CharField(blank=True, max_length=32, verbose_name=u'服务器ID', default='')
+    View_Account = models.CharField(blank=True, max_length=32, verbose_name=u'设备用户名称', default='')
+    View_Password = models.CharField(blank=True, max_length=32, verbose_name=u'设备密码', default='')
+    AudioFormat = models.IntegerField(blank=True, default=1, verbose_name=u'初始化影像')
+    EventNotification = models.IntegerField(blank=True, verbose_name=u'报警类型', default=0)
+    ChannelIndex = models.IntegerField(blank=True, verbose_name=u'通道号', default=0)
+    Online = models.BooleanField(blank=True, default=False, verbose_name=u'设备是否在线')
+    mMonitorIndex = models.IntegerField(blank=True, default=-1)
+    Type = models.IntegerField(blank=True, verbose_name='设备类型')
+    DebugMode = models.IntegerField(blank=True, verbose_name=u'调试模式', default=0)
+    NotificationMode = models.IntegerField(blank=True, verbose_name=u'是否报警', default=0)
+    qvgaLevel = models.BooleanField(blank=True, verbose_name=u'SD与HD画面', default=0,
+                                    help_text=u'0代表:SD、1代表:HD')
+    isShare = models.BooleanField(blank=True, verbose_name=u'共享设备',
+                                  help_text=u'是否为共享获取的设备', default=False)
+    primaryUserID = models.CharField(blank=True, verbose_name='主用户id', max_length=32, default='')
+    primaryMaster = models.CharField(max_length=64, verbose_name=u'主用户名', default='')
+    data_joined = models.DateTimeField(blank=True, verbose_name=u'设备添加时间', auto_now_add=True)
+    update_time = models.DateTimeField(blank=True, verbose_name=u'更新时间', auto_now=True, null=True)
+
+    ip = models.CharField(blank=True, max_length=20, default='', verbose_name=u'设备区域ip')
+    area = models.CharField(blank=True, max_length=100, default='', verbose_name=u'设备区域area')
+    # ios要求新增字段
+    version = models.CharField(blank=True, max_length=20, default='', verbose_name=u'版本号')
+    SpaceUsable = models.CharField(blank=True, max_length=20, default='', verbose_name=u'可用空间')
+    SpaceSum = models.CharField(blank=True, max_length=20, default='', verbose_name=u'总空间')
+    WIFIName = models.CharField(blank=True, max_length=50, default='', verbose_name=u'无线名称')
+    WIFIIP = models.CharField(blank=True, max_length=20, default='', verbose_name=u'无线ip')
+    WIFIPwd = models.CharField(blank=True, max_length=50, default='', verbose_name=u'无线密码')
+    isDetector = models.BooleanField(blank=True, verbose_name=u'侦测开关0:关闭,1:开启)', default=False)
+    DetectorRank = models.IntegerField(blank=True, default=0, verbose_name=u'侦测灵敏度 1:低,2:中,3:高4:最高')
+    iSNotification = models.BooleanField(blank=True, verbose_name=u'报警通知 0:关闭,1:开启)', default=False)
+    MirrorType = models.IntegerField(blank=True, default=0, verbose_name=u'镜像类型 0:关闭镜像,1:上下镜像,2:左右镜像,3:上下左右镜像')
+    RecordType = models.IntegerField(blank=True, default=0, verbose_name=u'录像模式(0:关闭,1:全是录像,3:报警录像)')
+    TimeZone = models.CharField(blank=True, max_length=50, default='', verbose_name=u'时区')
+    isVod = models.SmallIntegerField(blank=True, default=0, verbose_name='是否支持云存')  # 是否支持云存设备
+    isExist = models.SmallIntegerField(blank=True, default=1, verbose_name='是否被删除')  # 是否被删除了(需主用户交互) 1存在,0不存在,2设备被重置
+    ###
+    REQUIRED_FIELDS = []
+
+    def __str__(self):
+        return self.NickName
+
+    def model_to_dict(self, fields=None, exclude=None):
+        opts = self._meta
+        data = {}
+        for f in chain(opts.concrete_fields, opts.private_fields, opts.many_to_many):
+            if not getattr(f, 'editable', False):
+                continue
+            if fields and f.name not in fields:
+                continue
+            if exclude and f.name in exclude:
+                continue
+            data[f.name] = f.value_from_object(self)
+        return data
+
+    class Meta:
+        db_table = 'device_info'
+        ordering = ('-data_joined',)
+        verbose_name = u'用户设备信息表'
+        verbose_name_plural = verbose_name
 
 class Equipment_Info(models.Model):
     id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')