Selaa lähdekoodia

Merge branch 'dev' of http://192.168.136.45:3000/SERVER/AnsjerServer into dev

# Conflicts:
#	Ansjer/urls.py
chanjunkai 5 vuotta sitten
vanhempi
commit
00a628a6ef

+ 3 - 7
Ansjer/urls.py

@@ -7,7 +7,7 @@ from Controller import FeedBack, EquipmentOTA, EquipmentInfo, AdminManage, AppIn
     EquipmentManager, LogManager, PermissionManager, OTAEquipment, shareUserPermission, UidSetController, \
     UserManger, CheckUserData, \
     UserController, CloudVod, OrderContrller, VodBucket, DetectController, DeviceShare, UserBrandController, \
-    StsOssController, UIDPreview, OssCrd, SysMsg, UidUser, EquipmentManagerV2, PushDeploy, AppSetController,\
+    StsOssController, UIDPreview, OssCrd, SysMsg, UidUser, EquipmentManagerV2,EquipmentManagerV3, PushDeploy, AppSetController,\
     ApplicationController, UserExController, CloudStorage
 
 urlpatterns = [
@@ -185,12 +185,8 @@ urlpatterns = [
     url(r'^login/oauth/(?P<operation>.*)$', ApplicationController.AuthView.as_view()),
     url(r'^grant/code/(?P<operation>.*)$', ApplicationController.GrantCodeView.as_view()),
     url(r'^user/ex/(?P<operation>.*)$', UserExController.UserExView.as_view()),
-
-    # url(r'^cloudstorage/query', CloudStorage.query_cloud_storage),
-    # url(r'^cloudstorage/query', CloudStorage.query_cloud_storage),
-    # url(r'^cloudstorage/query', CloudStorage.query_cloud_storage),
-    url(r'^cloudstorage/(?P<operation>.*)$', CloudStorage.CloudStorageView.as_view()),
-
+	url(r'^v3/equipment/(?P<operation>.*)$', EquipmentManagerV3.EquipmentManagerV3.as_view()),
+	url(r'^cloudstorage/(?P<operation>.*)$', CloudStorage.CloudStorageView.as_view()),
 
     # app 设备消息模板
     # 路由加参数参考

+ 3 - 0
Controller/DeviceManage.py

@@ -21,6 +21,7 @@ from Service.CommonService import CommonService
 from Model.models import Device_Info
 import traceback,datetime
 from django.utils import timezone
+from Object.RedisObject import RedisObject
 '''
 http://192.168.136.40:8077/device/manage?operation=query&token=test&page=1&line=10
 http://192.168.136.40:8077/device/manage?operation=delete&id=1&id=2
@@ -101,6 +102,8 @@ class DeviceManage(View):
 
     def delete(self, request_dict, userID, response):
         own_perm = ModelService.check_perm(userID=userID, permID=10)
+        redisObj = RedisObject(db=8)
+        redisObj.del_data(key='uid_qs_' + userID)
         if own_perm is True:
             id = request_dict.get('id', None)
             if id:

+ 14 - 1
Controller/EquipmentManager.py

@@ -14,7 +14,7 @@ from Ansjer.config import OSS_STS_ACCESS_SECRET, OSS_STS_ACCESS_KEY
 from Object.ETkObject import ETkObject
 import oss2
 from django.http import JsonResponse
-
+from Object.RedisObject import RedisObject
 
 #     查询用户设备
 def queryUserEquipmentInterface(request):
@@ -84,6 +84,8 @@ def addNewUserEquipmentInterface(request):
         if dValid:
             return response.json(174)
         else:
+            redisObj = RedisObject(db=8)
+            redisObj.del_data(key='uid_qs_' + userID)
             UID = deviceData.get('UID', '')
             re_uid = re.compile(r'^[A-Za-z0-9]{20}$')
             if re_uid.match(UID):
@@ -148,8 +150,12 @@ def delUserEquipmentInterface(request):
     # 主用户删除设备全部删除
     try:
         dv_qs = Device_Info.objects.filter(userID_id=userID, id=id)
+        redisObj = RedisObject(db=8)
+        redisObj.del_data(key='uid_qs_' + userID)
         if dv_qs.exists():
             uid = dv_qs[0].UID
+            print('删除')
+            UID_Preview.objects.filter(uid=uid).delete()
             dv_qs.delete()
             asy = threading.Thread(target=ModelService.del_eq_info, args=(userID, uid))
             asy.start()
@@ -367,6 +373,8 @@ def addInterface(request):
                                              NickName=NickName, View_Account=View_Account,
                                              View_Password=View_Password, Type=Type, ChannelIndex=ChannelIndex)
                     userDevice.save()
+                    redisObj = RedisObject(db=8)
+                    redisObj.del_data(key='uid_qs_' + userID)
                 except Exception as e:
                     return response.json(10, repr(e))
                 else:
@@ -480,6 +488,8 @@ def admin_addInterface(request):
         else:
             UID = deviceData.get('UID', '')
             re_uid = re.compile(r'^[A-Za-z0-9]{20}$')
+            redisObj = RedisObject(db=8)
+            redisObj.del_data(key='uid_qs_' + userID)
             if re_uid.match(UID):
                 userDevice = Device_Info(id=CommonService.getUserID(getUser=False), userID_id=userID,
                                          **deviceData)
@@ -534,6 +544,7 @@ def admin_modifyInterface(request):
         return response.json(444, 'username')
     id = request_dict.get('id', None)
     print(deviceContent)
+
     if not deviceContent or not id:
         return response.json(444, 'content,id')
     tko = TokenObject(token)
@@ -551,6 +562,8 @@ def admin_modifyInterface(request):
 
     deviceData = json.loads(deviceContent)
     print(deviceData['UID'])
+    redisObj = RedisObject(db=8)
+    redisObj.del_data(key='uid_qs_' + userID)
     dValid = Device_Info.objects.filter(userID_id=userID, UID=deviceData['UID'])
     if dValid.exists():
         dValid_dict = CommonService.qs_to_dict(dValid)

+ 212 - 0
Controller/EquipmentManagerV3.py

@@ -0,0 +1,212 @@
+import re
+import threading
+import time
+import traceback
+
+import oss2
+from django.db.models import Q
+from django.views.generic.base import View
+from Object.RedisObject import RedisObject
+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
+import time,json
+
+class EquipmentManagerV3(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:
+            redisObj = RedisObject(db=8)
+            redis_value = redisObj.get_data(key='uid_qs_'+userID)
+            if redis_value == False:
+                print('缓存不存在就开始添加到缓存')
+                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'])
+                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','ucode')
+                uv_dict = {}
+                for us in us_qs:
+                    uv_dict[us['uid']] = {'version': us['version'], 'nickname': us['nickname'],'ucode':us['ucode']}
+                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']
+                        p['ucode'] = uv_dict[p_uid]['ucode']
+                        # 设备昵称 调用影子信息昵称,先阶段不可
+                        if uv_dict[p_uid]['nickname']:
+                            p['NickName'] = uv_dict[p_uid]['nickname']
+                    else:
+                        # 设备版本号
+                        p['uid_version'] = ''
+                        p['ucode'] = ''
+                    data.append(p)
+                # 缓存时间为一个钟
+                redisObj.set_data(key='uid_qs_'+userID, val=data, expire=3600)
+                return response.json(0, data)
+            else:
+                print('去缓存找数据')
+                redis_value = redis_value.replace("'", '"')
+                redis_value = redis_value.replace("True", 'true')
+                redis_value = redis_value.replace("False", 'false')
+                # 返回固定值
+                return response.json(0, json.loads(redis_value))
+        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/UIDPreview.py

@@ -28,7 +28,7 @@ import time
 
 import oss2
 from django.views.generic.base import View
-
+from Object.RedisObject import RedisObject
 from Ansjer.config import OSS_STS_ACCESS_SECRET, OSS_STS_ACCESS_KEY
 from Model.models import UID_Preview, Device_Info
 from Object.ResponseObject import ResponseObject
@@ -79,6 +79,8 @@ class UIDPreview(View):
             bucket = oss2.Bucket(auth, 'oss-cn-hongkong.aliyuncs.com', 'statres')
 
             dvqs = Device_Info.objects.filter(UID=uid, userID_id=userID)
+            redisObj = RedisObject(db=8)
+            redisObj.del_data(key='uid_qs_'+userID)
             upqs = UID_Preview.objects.filter(uid=uid, channel=channel)
             if dvqs.exists():
                 if upqs.exists():
@@ -145,6 +147,8 @@ class UIDPreview(View):
         own_perm = ModelService.check_perm(userID, 20)
         if own_perm is True:
             id = request_dict.get('id')
+            redisObj = RedisObject(db=8)
+            redisObj.del_data(key='uid_qs_' + userID)
             UID_Preview.objects.filter(id=id).delete()
             return response.json(0)
         else:

+ 5 - 0
Controller/UidUser.py

@@ -27,6 +27,7 @@ from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Service.CommonService import CommonService
 from Service.ModelService import ModelService
+from Object.RedisObject import RedisObject
 '''
 http://192.168.136.40:8077/uiduser/add?token=local&UID=z123asdfqwerzxcvqw12&NickName=xxoxox&View_Account=user&View_Password=password&ChannelIndex=8&is_ap=1&Type=5&NickName=1234zcxv
 http://192.168.136.40:8077/uiduser/query?token=local&page=1&line=10&is_ap=1&NickName=1234zcxv&uid=zxcvasdfqwerzxcvqwer
@@ -127,6 +128,8 @@ def queryInterface(request):
     response.lang = tko.lang
     if page <= 0:
         return response.json(0)
+    redisObj = RedisObject(db=8)
+    redisObj.del_data(key='uid_qs_' + userID)
     if tko.code == 0:
         userID = tko.userID
         uid_user_qs = UidUserModel.objects.filter(userID_id=userID)
@@ -252,6 +255,8 @@ def deleteInterface(request):
         response.lang = tko.lang
         if tko.code == 0:
             userID = tko.userID
+            redisObj = RedisObject(db=8)
+            redisObj.del_data(key='uid_qs_' + userID)
             uid_user_qs = UidUserModel.objects.filter(userID_id=userID, id=id)
             if uid_user_qs.exists():
                 uid_user_qs.delete()

+ 1 - 0
Controller/UserController.py

@@ -1254,6 +1254,7 @@ class v2LoginView(TemplateView):
 class v3LoginView(TemplateView):
     @method_decorator(csrf_exempt)  # @csrf_exempt
     def dispatch(self, *args, **kwargs):
+        #chong 
         return super(v3LoginView, self).dispatch(*args, **kwargs)
 
     @ratelimit(key='ip', rate='5/m')

+ 4 - 1
Object/mongodb.py

@@ -36,14 +36,17 @@ class mongodb(object):
             self.myclient = pymongo.MongoClient()
             self.db = self.myclient['ansjer']
 
-
+    # 创建mongodb的数据库名称
     def check_db_exist(self, database):
         dblist = self.myclient.database_names()
         if database in dblist:
+            print("数据库存在")
             return True
         else:
+            print("数据库不存在")
             return False
 
+
     def insert_one(self, col, data):
         column = self.db[col]
         res = column.insert_one(data)