chenjunkai 5 years ago
parent
commit
2359d7d682

+ 15 - 4
Ansjer/test/kbt.py

@@ -1,11 +1,22 @@
+poio = '+08.00'
+print(float(poio))
+tt = float(poio)
+a = 2
+cc = a*tt
+print(cc)
+exit()
+
 aws_access_key_id = 'AKIA2E67UIMD45Y3HL53'
 aws_secret_access_key = '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'
 REGION_NAME = 'us-east-1'  # e.g
 from datetime import datetime
-startTime =datetime(2019, 11, 15,2,0)
-endTime =datetime(2019, 11, 15,4,0)
+
+startTime = datetime(2019, 11, 15, 2, 0)
+endTime = datetime(2019, 11, 15, 4, 0)
 print(startTime)
 print(endTime)
+
+
 def lmm():
     import boto3
     print('1234')
@@ -34,14 +45,14 @@ def lmm():
     print(url)
     exit()
 
+
 lmm()
 exit()
 import boto3
 
-
 boto3_session = boto3.Session(aws_access_key_id=aws_access_key_id, aws_secret_access_key=aws_access_key_id)
 
-kv_client = boto3_session.client('kinesisvideo',region_name='us-east-1')
+kv_client = boto3_session.client('kinesisvideo', region_name='us-east-1')
 
 STREAM_NAME = "oxoxo"
 print(STREAM_NAME)

+ 4 - 1
Ansjer/urls.py

@@ -7,7 +7,7 @@ from Controller import FeedBack, EquipmentOTA, EquipmentInfo, EquipmentSensor, S
     EquipmentManager, LogManager, PermissionManager, OTAEquipment, shareUserPermission, UidSetController, \
     UserManger, CheckUserData, \
     UserController, CloudVod, OrderContrller, VodBucket, DetectController, DeviceShare, UserBrandController, \
-    StsOssController, UIDPreview, SysMsg, UidUser
+    StsOssController, UIDPreview, SysMsg, UidUser, EquipmentManagerV2
 
 urlpatterns = [
     url(r'^account/authcode$', UserController.authCodeView.as_view()),
@@ -169,6 +169,9 @@ urlpatterns = [
     url(r'^uiduser/update', UidUser.updateInterface),
     url(r'^uiduser/delete', UidUser.deleteInterface),
 
+    # add query update delete
+    url(r'^v2/equipment/(?P<operation>.*)$', EquipmentManagerV2.EquipmentManagerV2.as_view()),
+
     # 路由加参数参考
     # url(r'^(?P<path>.*)/(?P<UID>.*)/lls$', Test.Test.as_view(), name=u'gg'),
     re_path('(?P<path>.*)', LogManager.errorPath),

+ 15 - 4
Controller/EquipmentManager.py

@@ -673,6 +673,8 @@ def queryInterface(request):
     if tko.code == 0:
         userID = tko.userID
         dvqs = Device_Info.objects.filter(userID_id=userID)
+        # # 已重置的设备
+        # dvqs = dvqs.filter(~Q(isExist=2))
         if NickName:
             dvqs = dvqs.filter(NickName__icontains=NickName)
         if uid:
@@ -836,19 +838,24 @@ def update_device_shadow(request):
     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)
-        is_reset = request_dict.get('is_reset', None)
         channel = request_dict.get('channel', None)
         cloud_vod = request_dict.get('cloud_vod', None)
         push_status = request_dict.get('push_status', None)
-        # 传1则重置设备信息
-        if is_reset == 1:
-            UidSetModel.objects.filter(uid=uid).delete()
+        pwd = request_dict.get('pwd', None)
+
         us_qs = UidSetModel.objects.filter(uid=uid)
         # 更新
         nowTime = int(time.time())
@@ -873,6 +880,8 @@ def update_device_shadow(request):
                 update_dict['cloud_vod'] = cloud_vod
             if push_status:
                 update_dict['push_status'] = push_status
+            if pwd:
+                update_dict['pwd'] = pwd
             us_qs.update(**update_dict)
             # 如果推送状态开启,返回推送url
             data = {}
@@ -902,6 +911,8 @@ def update_device_shadow(request):
                 create_dict['cloud_vod'] = cloud_vod
             if push_status:
                 create_dict['push_status'] = push_status
+            if pwd:
+                create_dict['pwd'] = pwd
             UidSetModel.objects.create(**create_dict)
             # 如果推送状态开启,返回推送url
             return JsonResponse(status=200, data={'code': 0, 'msg': 'success', 'data': {}})

+ 199 - 0
Controller/EquipmentManagerV2.py

@@ -0,0 +1,199 @@
+import re
+import threading
+import time
+import traceback
+
+import oss2
+from django.db.models import Q
+from django.views.generic.base import View
+
+from Ansjer.config import OSS_STS_ACCESS_SECRET, OSS_STS_ACCESS_KEY
+from Model.models import Device_Info, UID_Bucket, UID_Preview, UidSetModel, UidPushModel
+from Object.ResponseObject import ResponseObject
+from Object.TokenObject import TokenObject
+from Service.CommonService import CommonService
+from Service.ModelService import ModelService
+
+
+class EquipmentManagerV2(View):
+
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation')
+        return self.validation(request.GET, request, operation)
+
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation')
+        return self.validation(request.POST, request, operation)
+
+    def validation(self, request_dict, request, operation):
+        response = ResponseObject()
+        token = request_dict.get('token', None)
+        # 设备主键uid
+        tko = TokenObject(token)
+        if tko.code == 0:
+            response.lang = tko.lang
+            userID = tko.userID
+            # if operation == 'add':
+            #     return self.do_add(userID, request_dict, response)
+            if operation == 'query':
+                return self.do_query(userID, request_dict, response)
+            elif operation == 'query_reset':
+                return self.do_query_reset(userID, request_dict, response)
+            else:
+                return response.json(414)
+        else:
+            return response.json(tko.code)
+
+    def do_add(self, userID, request_dict, response, request):
+        token = request_dict.get('token', None)
+        UID = request_dict.get('UID', None)
+        NickName = request_dict.get('NickName', None)
+        View_Account = request_dict.get('View_Account', None)
+        View_Password = request_dict.get('View_Password', '')
+        Type = request_dict.get('Type', None)
+        ChannelIndex = request_dict.get('ChannelIndex', None)
+        if all([UID, NickName, View_Account, Type, ChannelIndex]):
+            tko = TokenObject(token)
+            response.lang = tko.lang
+            if tko.code == 0:
+                userID = tko.userID
+                re_uid = re.compile(r'^[A-Za-z0-9]{20}$')
+                if re_uid.match(UID):
+                    is_exist = Device_Info.objects.filter(UID=UID, userID_id=userID)
+                    if is_exist:
+                        # 判断设备是否已存在
+                        if is_exist[0].isExist == 1:
+                            return response.json(174)
+                        else:
+                            is_exist.delete()
+                    # is_bind = Device_Info.objects.filter(UID=UID, isShare=False)
+                    # # 判断是否有已绑定用户
+                    # if is_bind:
+                    #     return response.json(15)
+                    try:
+                        # 判断是否有用户绑定
+                        nowTime = int(time.time())
+                        us_qs = UidSetModel.objects.filter(uid=UID)
+                        if not us_qs.exists():
+                            uid_set_create_dict = {
+                                'uid': UID,
+                                'addTime': nowTime,
+                                'updTime': nowTime,
+                                'ip': CommonService.get_ip_address(request),
+                                'channel': ChannelIndex,
+                                'nickname': NickName,
+                            }
+                            UidSetModel.objects.create(**uid_set_create_dict)
+                        pk = CommonService.getUserID(getUser=False)
+                        userDevice = Device_Info(id=pk, userID_id=userID, UID=UID,
+                                                 NickName=NickName, View_Account=View_Account,
+                                                 View_Password=View_Password, Type=Type, ChannelIndex=ChannelIndex)
+                        userDevice.save()
+                    except Exception as e:
+                        return response.json(10, repr(e))
+                    else:
+                        dvqs = Device_Info.objects.filter(id=pk).values('id', 'userID', 'NickName', 'UID',
+                                                                        'View_Account',
+                                                                        'View_Password', 'ChannelIndex', 'Type',
+                                                                        'isShare',
+                                                                        'primaryUserID', 'primaryMaster',
+                                                                        'data_joined', 'version',
+                                                                        'isVod', 'isExist')
+                        dvql = CommonService.qs_to_list(dvqs)
+                        ubqs = UID_Bucket.objects.filter(uid=UID). \
+                            values('bucket__content', 'status', 'channel', 'endTime', 'uid')
+                        res = dvql[0]
+                        res['vod'] = list(ubqs)
+                        return response.json(0, res)
+
+                else:
+                    return response.json(444, {'param': 'UID'})
+            else:
+                return response.json(tko.code)
+        else:
+            return response.json(444, {'param': 'UID,NickName,View_Account,View_Password,Type,ChannelIndex'})
+
+    # 新查询设备字段
+    def do_query(self, userID, request_dict, response):
+        token = request_dict.get('token', None)
+        page = request_dict.get('page', None)
+        line = request_dict.get('line', None)
+        NickName = request_dict.get('NickName', None)
+        page = int(page)
+        line = int(line)
+        uid = request_dict.get('uid', None)
+        tko = TokenObject(token)
+        response.lang = tko.lang
+        if page <= 0:
+            return response.json(0)
+        if tko.code == 0:
+            userID = tko.userID
+            dvqs = Device_Info.objects.filter(userID_id=userID)
+            # # 过滤已重置的设备
+            dvqs = dvqs.filter(~Q(isExist=2))
+
+            if NickName:
+                dvqs = dvqs.filter(NickName__icontains=NickName)
+            if uid:
+                dvqs = dvqs.filter(UID=uid)
+            dvql = dvqs[(page - 1) * line:page * line]. \
+                values('id', 'userID', 'NickName', 'UID', 'View_Account',
+                       'View_Password', 'ChannelIndex', 'Type', 'isShare',
+                       'primaryUserID', 'primaryMaster', 'data_joined',
+                       'version',
+                       'isVod', 'isExist', 'NotificationMode')
+            dvls = CommonService.qs_to_list(dvql)
+            uid_list = []
+            for dvl in dvls:
+                uid_list.append(dvl['UID'])
+                # if dvl['isShare'] is False:
+                #     uid_list.append(dvl['UID'])
+            ubqs = UID_Bucket.objects.filter(uid__in=uid_list). \
+                values('bucket__content', 'status', 'channel', 'endTime', 'uid')
+            upqs = UID_Preview.objects.filter(uid__in=uid_list).order_by('channel').values('id', 'uid', 'channel')
+            auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
+            bucket = oss2.Bucket(auth, 'oss-cn-hongkong.aliyuncs.com', 'statres')
+            nowTime = int(time.time())
+            data = []
+            # 设备拓展信息表
+            us_qs = UidSetModel.objects.filter(uid__in=uid_list).values('uid', 'version', 'nickname')
+            uv_dict = {}
+            for us in us_qs:
+                uv_dict[us['uid']] = {'version': us['version'], 'nickname': us['nickname']}
+            for p in dvls:
+                p['vod'] = []
+                for dm in ubqs:
+                    if p['UID'] == dm['uid']:
+                        if dm['endTime'] > nowTime:
+                            p['vod'].append(dm)
+                p['preview'] = []
+                for up in upqs:
+                    if p['UID'] == up['uid']:
+                        obj = 'uid_preview/{uid}/channel_{channel}.png'.format(uid=up['uid'], channel=up['channel'])
+                        img_sign = bucket.sign_url('GET', obj, 300)
+                        p['preview'].append(img_sign)
+                p_uid = p['UID']
+                if p_uid in uv_dict:
+                    # 设备版本号
+                    p['uid_version'] = uv_dict[p_uid]['version']
+                    # 设备昵称 调用影子信息昵称,先阶段不可
+                    if uv_dict[p_uid]['nickname']:
+                        p['NickName'] = uv_dict[p_uid]['nickname']
+                else:
+                    # 设备版本号
+                    p['uid_version'] = ''
+                data.append(p)
+            return response.json(0, data)
+        else:
+            return response.json(tko.code)
+
+    # 新查询设备字段
+
+    def do_query_reset(self, userID, request_dict, response):
+        dvqs = Device_Info.objects.filter(userID_id=userID, isExist=2)
+        dvql = dvqs.values\
+            ('id', 'NickName', 'UID', 'ChannelIndex', 'Type', 'isShare')
+        res = CommonService.qs_to_list(dvql)
+        return response.json(0, res)

+ 5 - 1
Controller/UserController.py

@@ -27,7 +27,7 @@ from ratelimit.decorators import ratelimit
 
 from Ansjer.config import AuthCode_Expire, SERVER_DOMAIN, APNS_CONFIG, JPUSH_CONFIG, FCM_CONFIG
 from Controller.CheckUserData import DataValid, date_handler, RandomStr
-from Model.models import Device_User, Role, SysMsgModel, UidPushModel, UserOauth2Model, UserExModel
+from Model.models import Device_User, Role, SysMsgModel, UidPushModel, UserOauth2Model, UserExModel, Device_Info
 from Object.AWS.SesClassObject import SesClassObject
 from Object.AliSmsObject import AliSmsObject
 from Object.RedisObject import RedisObject
@@ -1325,7 +1325,11 @@ class InitInfoView(View):
                         'region': lang
                     }
                     UserExModel.objects.create(**create_dict)
+        # 获取设备是否存在有已被删除
+        uid_reset_count = Device_Info.objects.filter(userID_id=userID, isExist=2).count()
+
         res = {
+            'uid_reset_count': uid_reset_count,
             'usmsg': sm_count
         }
         return response.json(0, res)

+ 4 - 7
Model/models.py

@@ -242,7 +242,7 @@ class Device_Info(models.Model):
     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不存在
+    isExist = models.SmallIntegerField(blank=True, default=1, verbose_name='是否被删除')  # 是否被删除了(需主用户交互) 1存在,0不存在,2设备被重置
     ###
     REQUIRED_FIELDS = []
 
@@ -667,17 +667,15 @@ class UidSetModel(models.Model):
     detect_interval = models.IntegerField(verbose_name='推送间隔', default=60)  # 秒
     addTime = models.IntegerField(verbose_name='添加时间', default=0)
     updTime = models.IntegerField(verbose_name='更新时间', default=0)
-    # addTime 2019年 05月 27日 星期一 16:52:55 CST
     ucode = models.CharField(max_length=32, verbose_name='设备产品码', default='')
     version = models.CharField(max_length=32, verbose_name='设备版本', default='')
     p2p_region = models.CharField(max_length=16, verbose_name='设备区域', default='ALL')  # ALL CN EU US
-    # addTime Thu Jun 27 02:32:45 UTC 2019
     cloud_vod = models.SmallIntegerField(default=2, verbose_name='云存开关')  # 0,关闭,1开启,2,不支持
-    tz = models.CharField(default='', max_length=16, verbose_name='设备时区')  # utc+8
+    tz = models.CharField(default='', max_length=16, verbose_name='设备时区')  # +8
     video_code = models.SmallIntegerField(default=0, verbose_name='编码类型')  # 0:264,1:265
-
     nickname = models.CharField(default='', max_length=64, verbose_name='设备昵称')
-    ip = models.CharField(blank=True, max_length=20, default='', verbose_name=u'设备ip')
+    ip = models.CharField(max_length=20, default='', verbose_name=u'设备ip')
+    pwd = models.CharField(max_length=32, default='', verbose_name=u'设备密码')
 
     class Meta:
         db_table = 'uid_set'
@@ -780,7 +778,6 @@ class UidUserModel(models.Model):
     isExist = models.SmallIntegerField(default=1, verbose_name='是否被删除')  # 是否被删除了(需主用户交互) 1存在,0不存在
     is_ap = models.SmallIntegerField(default=1, verbose_name='是否为ap模式添加')  # 1为ap模式添加,0为非ap模式添加
 
-
     class Meta:
         db_table = 'uid_user'
         ordering = ('-data_joined',)

+ 31 - 0
Object/ETkObject.py

@@ -14,6 +14,7 @@
 
 import base64
 import urllib.parse
+from random import Random
 
 
 class ETkObject(object):
@@ -33,4 +34,34 @@ class ETkObject(object):
         except Exception as e:
             print(repr(e))
 
+    def encrypt(self,data):
+        s = data.encode()
+        s = base64.b64encode(s)
+        startStr = self.randomParam()
+        endStr = self.randomParam()
+        s = '{startStr}{s}{endStr}'.format(startStr=startStr,s=s.decode('utf-8'),endStr=endStr)
+        s = base64.b64encode(s.encode())
+        s=s.decode('utf-8')
+        return s
+
+    def randomParam(self):
+        characterSet = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsT' \
+                       'tUuVvWwXxYyZz0123456789'
+        length = len(characterSet) - 1
+
+        random = Random()
+        ss = ''
+        for index in range(2):
+            ss += characterSet[random.randint(0, length)]
+        return ss
+
+
+# etkObj = ETkObject(etk='')
+# PP = etkObj.encrypt('jLBDSU9547NTRSMF111A')
+# print('encode_data:')
+# print(PP)
+# print('decode_data:')
+# eobj = ETkObject(etk=PP)
+# uid = eobj.uid
+# print(uid)
 

+ 7 - 0
Object/UidTokenObject.py

@@ -44,5 +44,12 @@ class UidTokenObject:
 # uidToken = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1aWQiOiJNVUo4ODdOTFI4SzhHQk05MTExQSJ9.NHYNwmcRLCRBv2FUMA-FlM1Gtx4ir8rrwfoz7QQ67bM'
 # utko = UidTokenObject(uidToken)
 #
+# utko = UidTokenObject()
+# rr = utko.generate(data={'uid':'JW3684H8BSHG9TTM111A','channel':1})
+# print(rr)
+
 # print(utko)
 
+'''
+
+'''