import re import time import traceback import simplejson as json from django.utils import timezone from Model.models import Device_User, Device_Info, UID_Bucket, UID_Preview, UidSetModel from django.db.models import Q from Object.ResponseObject import ResponseObject from Object.TokenObject import TokenObject from Service.CommonService import CommonService from Service.ModelService import ModelService from Ansjer.config import OSS_STS_ACCESS_SECRET, OSS_STS_ACCESS_KEY from Object.ETkObject import ETkObject import oss2 from django.http import JsonResponse # 查询用户设备 def queryUserEquipmentInterface(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) token = request_dict.get('token', None) tko = TokenObject(token) response.lang = tko.lang if tko.code != 0: return response.json(tko.code) userID = tko.userID if not userID: return response.json(309) dvqs = Device_Info.objects.filter(userID_id=userID) dvdict = CommonService.qs_to_dict(dvqs) uid_list = Device_Info.objects.filter(userID_id=userID, isShare=False). \ values_list('UID', flat=True) ubqs = UID_Bucket.objects.filter(uid__in=uid_list). \ values('bucket__content', 'status', 'channel', 'endTime', 'uid') res = [] nowTime = int(time.time()) for p in dvdict['datas']: p['fields']['vod'] = [] for dm in ubqs: if p['fields']['UID'] == dm['uid']: if dm['endTime'] > nowTime: p['fields']['vod'].append(dm) # dm['valid'] = 1 # else: # dm['valid'] = 0 # p['fields']['primaryUserID'] = '' res.append(p) return response.json(0, {'datas': res}) def addNewUserEquipmentInterface(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) token = request_dict.get('token', None) deviceContent = request_dict.get('content', None) if not deviceContent: return response.json(444, 'content') tko = TokenObject(token) response.lang = tko.lang if tko.code != 0: return response.json(tko.code) userID = tko.userID try: deviceData = json.loads(deviceContent) UID = deviceData.get('UID', None) if not UID: return response.json(444, 'content') dValid = Device_Info.objects.filter(userID_id=userID, UID=UID) if dValid: return response.json(174) else: UID = deviceData.get('UID', '') re_uid = re.compile(r'^[A-Za-z0-9]{20}$') if re_uid.match(UID): userDevice = Device_Info(id=CommonService.getUserID(getUser=False), userID_id=userID, **deviceData) userDevice.save() # is_bind = Device_Info.objects.filter(UID=UID, isShare=False) # # 判断是否有已绑定用户 # if not is_bind.exists(): # userDevice = Device_Info(id=CommonService.getUserID(getUser=False), userID_id=userID, # **deviceData) # userDevice.save() # else: # # 分享添加 # if 'isShare' in deviceData: # deviceData['isShare'] = True # else: # deviceData['isShare'] = True # bind_userID = is_bind[0].userID_id # userDevice = Device_Info(id=CommonService.getUserID(getUser=False), # userID_id=userID, # primaryUserID=bind_userID, # primaryMaster=ModelService.get_user_name(bind_userID), # **deviceData) # userDevice.save() else: return response.json(444, 'UID') except Exception as e: errorInfo = traceback.format_exc() print('添加设备错误: %s ' % errorInfo) return response.json(178, repr(e)) else: sqlDict = CommonService.qs_to_dict([userDevice]) return response.json(0, sqlDict) def delUserEquipmentInterface(request): ''' 删除用户设备 :param request: :return: ''' response = ResponseObject() request.encoding = 'utf-8' if request.method == 'POST': request_dict = request.POST elif request.method == 'GET': request_dict = request.GET else: return response.json(444) token = request_dict.get('token', None) id = request_dict.get('id', None) if not id: return response.json(444, 'id') tko = TokenObject(token) response.lang = tko.lang if tko.code != 0: return response.json(tko.code) userID = tko.userID # 主用户删除设备全部删除 try: Device_Info.objects.filter(userID_id=userID, id=id).delete() except Exception as e: errorInfo = traceback.format_exc() print('删除数据库记录错误: %s' % errorInfo) return response.json(176, repr(e)) else: return response.json(0) def modifyUserEquipmentInterface(request): ''' 修改用户设备 :param request: :return: ''' response = ResponseObject() if request.method == 'POST': request.encoding = 'utf-8' request_dict = request.POST elif request.method == 'GET': request.encoding = 'utf-8' request_dict = request.GET else: return response.json(444) token = request_dict.get('token', None) deviceContent = request_dict.get('content', None) id = request_dict.get('id', None) if not deviceContent or not id: return response.json(444, 'content,id') tko = TokenObject(token) response.lang = tko.lang if tko.code != 0: return response.json(tko.code) userID = tko.userID if userID is None: return response.json(309) try: deviceData = json.loads(deviceContent) Device_Info.objects.filter(userID_id=userID, id=id).update(**deviceData) except Exception as e: return response.json(177, repr(e)) else: qs = Device_Info.objects.filter(userID_id=userID, id=id) res = CommonService.qs_to_dict(qs) return response.json(0, res) def showAllUserEquipmentInterface(request, *callback_args, **callback_kwargs): request.encoding = 'utf-8' response = ResponseObject() if request.method == 'POST': fieldDict = request.POST elif request.method == 'GET': fieldDict = request.GET else: return response.json(444) token = request.POST.get('token', None) type = request.POST.get('type', None) tko = TokenObject(token) response.lang = tko.lang if tko.code != 0: return response.json(tko.code) userID = tko.userID if not userID: return response.json(309) own_perm = ModelService.check_perm(userID=userID, permID=30) if not own_perm: return response.json(404) if type == 'PC': page = int(fieldDict['page']) line = int(fieldDict['line']) qs = Device_Info.objects.all() count = qs.count() res = qs[(page - 1) * line:page * line] sqlDict = CommonService.qs_to_dict(query_set=res) sqlDict['count'] = count return response.json(0, sqlDict) else: qs = Device_Info.objects.all() res = CommonService.qs_to_dict(qs) return response.json(0, res) def findEquipmentInfoInterface(request, *callback_args, **callback_kwargs): request.encoding = 'utf-8' response = ResponseObject() if request.method == 'GET': fieldDict = request.GET elif request.method == 'POST': fieldDict = request.POST else: return response.json(444) deviceContent = fieldDict.get('content', None) token = fieldDict.get('token', None) tko = TokenObject(token) response.lang = tko.lang if tko.code != 0: return response.json(tko.code) if deviceContent: try: searchCondition = json.loads(deviceContent) except Exception as e: print(repr(e)) return response.json(10, repr(e)) else: kwargs = CommonService.get_kwargs(data=searchCondition) qs = Device_Info.objects.filter(**kwargs) page = int(fieldDict['page']) line = int(fieldDict['line']) count = qs.count() res = qs[(page - 1) * line:page * line] send_dict = CommonService.qs_to_dict(query_set=res) for k, v in enumerate(send_dict["datas"]): for val in res: if v['pk'] == val.id: username = ModelService.get_user_name(send_dict["datas"][k]['fields']['userID']) send_dict["datas"][k]['fields']['username'] = username primary = ModelService.get_user_name(send_dict["datas"][k]['fields']['primaryUserID']) send_dict["datas"][k]['fields']['primaryusername'] = primary send_dict['count'] = count return response.json(0, send_dict) else: qs = Device_Info.objects.all() page = int(fieldDict['page']) line = int(fieldDict['line']) count = qs.count() res = qs[(page - 1) * line:page * line] send_dict = CommonService.qs_to_dict(query_set=res) for k, v in enumerate(send_dict["datas"]): for val in res: if v['pk'] == val.id: username = ModelService.get_user_name(send_dict["datas"][k]['fields']['userID']) send_dict["datas"][k]['fields']['username'] = username primary = ModelService.get_user_name(send_dict["datas"][k]['fields']['primaryUserID']) send_dict["datas"][k]['fields']['primaryusername'] = primary send_dict['count'] = count return response.json(0, send_dict) # 添加设备字段 def addInterface(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) 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: return response.json(174) else: # is_bind = Device_Info.objects.filter(UID=UID, isShare=False) # # 判断是否有已绑定用户 # if is_bind: # return response.json(15) try: 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 admin_addInterface(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) token = request_dict.get('token', None) deviceContent = request_dict.get('content', None) username = request_dict.get('username', None) if not username: return response.json(444, 'username') if not deviceContent: return response.json(444, 'content') tko = TokenObject(token) response.lang = tko.lang if tko.code != 0: return response.json(tko.code) userID = tko.userID own_perm = ModelService.check_perm(userID, 40) # 权限判断 if own_perm is not True: return response.json(404) # 查询id user = Device_User.objects.filter(Q(username=username) | Q(phone=username) | Q(userEmail=username)) if user.exists(): user_dict = CommonService.qs_to_dict(user) userID = user_dict.get('datas')[0].get('pk') else: return response.json(104) print(deviceContent) try: deviceData = json.loads(deviceContent) UID = deviceData.get('UID', None) if not UID: return response.json(444, 'content') dValid = Device_Info.objects.filter(userID_id=userID, UID=UID) if dValid: return response.json(174) else: UID = deviceData.get('UID', '') re_uid = re.compile(r'^[A-Za-z0-9]{20}$') if re_uid.match(UID): userDevice = Device_Info(id=CommonService.getUserID(getUser=False), userID_id=userID, **deviceData) userDevice.save() # is_bind = Device_Info.objects.filter(UID=UID, isShare=False) # # 判断是否有已绑定用户 # if not is_bind.exists(): # userDevice = Device_Info(id=CommonService.getUserID(getUser=False), userID_id=userID, # **deviceData) # userDevice.save() # else: # # 分享添加 # if 'isShare' in deviceData: # deviceData['isShare'] = True # else: # deviceData['isShare'] = True # bind_userID = is_bind[0].userID_id # userDevice = Device_Info(id=CommonService.getUserID(getUser=False), # userID_id=userID, # primaryUserID=bind_userID, # primaryMaster=ModelService.get_user_name(bind_userID), # **deviceData) # userDevice.save() else: return response.json(444, 'UID') except Exception as e: errorInfo = traceback.format_exc() print('添加设备错误: %s ' % errorInfo) return response.json(178, repr(e)) else: sqlDict = CommonService.qs_to_dict([userDevice]) return response.json(0, sqlDict) # 超级管理员修改设备 def admin_modifyInterface(request): response = ResponseObject() if request.method == 'POST': request.encoding = 'utf-8' request_dict = request.POST elif request.method == 'GET': request.encoding = 'utf-8' request_dict = request.GET else: return response.json(444) token = request_dict.get('token', None) deviceContent = request_dict.get('content', None) username = request_dict.get('username', None) if not username: 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) response.lang = tko.lang if tko.code != 0: return response.json(tko.code) userID = tko.userID if userID is None: return response.json(309) own_perm = ModelService.check_perm(userID, 50) # 权限判断 if own_perm is not True: return response.json(404) deviceData = json.loads(deviceContent) print(deviceData['UID']) dValid = Device_Info.objects.filter(userID_id=userID, UID=deviceData['UID']) if dValid.exists(): dValid_dict = CommonService.qs_to_dict(dValid) print(dValid_dict.get('datas')[0].get('pk')) if dValid_dict.get('datas')[0].get('pk') == id: print('可以编辑') else: return response.json(174) # 查询id user = Device_User.objects.filter(Q(username=username) | Q(phone=username) | Q(userEmail=username)) if user.exists(): user_dict = CommonService.qs_to_dict(user) userID = user_dict.get('datas')[0].get('pk') try: # 更改的时间 update_time = timezone.localtime(timezone.now()) Device_Info.objects.filter(userID_id=userID, id=id).update(update_time=update_time, **deviceData) except Exception as e: return response.json(177, repr(e)) else: qs = Device_Info.objects.filter(userID_id=userID, id=id) res = CommonService.qs_to_dict(qs) return response.json(0, res) else: # 查询id user = Device_User.objects.filter(Q(username=username) | Q(phone=username) | Q(userEmail=username)) if user.exists(): user_dict = CommonService.qs_to_dict(user) userID = user_dict.get('datas')[0].get('pk') try: # 更改的时间 update_time = timezone.localtime(timezone.now()) Device_Info.objects.filter(userID_id=userID, id=id).update(update_time=update_time, **deviceData) except Exception as e: return response.json(177, repr(e)) else: qs = Device_Info.objects.filter(userID_id=userID, id=id) res = CommonService.qs_to_dict(qs) return response.json(0, res) # 新删除设备 def deleteInterface(request): ''' 删除用户设备 :param request: :return: ''' response = ResponseObject() request.encoding = 'utf-8' if request.method == 'POST': request_dict = request.POST elif request.method == 'GET': request_dict = request.GET else: return response.json(444) token = request_dict.get('token', None) id = request_dict.get('id', None) if not id: return response.json(444, 'id') tko = TokenObject(token) response.lang = tko.lang if tko.code != 0: return response.json(tko.code) userID = tko.userID # 主用户删除设备全部删除 if not userID: return response.json(309) try: dv_qs = Device_Info.objects.filter(userID_id=userID, id=id) uid = dv_qs[0].UID if dv_qs[0].isShare: dv_qs.delete() else: # 主用户删除设备 dv_qs.delete() # 分享获得用户假删除 ud_dv_qs = Device_Info.objects.filter(UID=uid, isShare=True, primaryUserID=userID) if ud_dv_qs.exists(): ud_dv_qs.update(isExist=0) except Exception as e: errorInfo = traceback.format_exc() print('删除数据库记录错误: %s' % errorInfo) return response.json(176, repr(e)) else: return response.json(0) # 新查询设备字段 def queryInterface(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) 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) tko = TokenObject(token) response.lang = tko.lang if tko.code == 0: userID = tko.userID dvqs = Device_Info.objects.filter(userID_id=userID) if NickName: dvqs.filter(NickName__icontains=NickName) # count = dvqs.count() 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: 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) # uidPreview_bucket = oss2.Bucket(auth, 'oss-cn-shenzhen.aliyuncs.com', 'apg') 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') uv_dict = {} for us in us_qs: uv_dict[us['uid']] = us['version'] 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_version'] = uv_dict[p['UID']] if p['UID'] in uv_dict else '' data.append(p) return response.json(0, data) else: return response.json(tko.code) def uid_status(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) token = request_dict.get('token', None) uid = request_dict.get('uid', None) tko = TokenObject(token) response.lang = tko.lang if tko.code != 0: return response.json(tko.code) qs = UidSetModel.objects.filter(uid=uid).values('uid', 'detect_status', 'detect_interval', 'version', 'ucode','p2p_region') # 判断uid配置表信息是否存在 if qs.exists(): data = { 'push_status': qs[0]['detect_status'], # 推送状态 'push_interval': qs[0]['detect_interval'], # 推送间隔 'ucode': qs[0]['ucode'], 'version': qs[0]['version'], 'p2p_region':qs[0]['p2p_region'] } # 查询云存储相关信息 ubqs = UID_Bucket.objects.filter(uid=uid). \ values('bucket__content', 'status', 'channel', 'endTime', 'uid') nowTime = int(time.time()) if ubqs.exists(): if ubqs[0]['endTime'] > nowTime: data['vod'] = list(ubqs) return response.json(0, data) else: return response.json(0) def update_uid_set(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) token = request_dict.get('token', None) uid = request_dict.get('uid', None) version = request_dict.get('version', '') ucode = request_dict.get('ucode', '') tko = TokenObject(token) response.lang = tko.lang if tko.code == 0: userID = tko.userID nowTime = int(time.time()) dvqs = Device_Info.objects.filter(userID_id=userID) if dvqs.exists(): us_qs = UidSetModel.objects.filter(uid=uid) if us_qs.exists(): uid_set_update_dict = { 'updTime': nowTime, 'version': version, 'ucode': ucode, } us_qs.update(**uid_set_update_dict) else: uid_set_create_dict = { 'uid': uid, 'addTime': nowTime, 'updTime': nowTime, 'version': version, 'ucode': ucode, } UidSetModel.objects.create(**uid_set_create_dict) return response.json(0) else: return response.json(14) else: return response.json(tko.code) # 设备影子更新 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: ucode = request_dict.get('ucode', None) version = request_dict.get('version', None) p2p_region = request_dict.get('p2p_region', None) us_qs = UidSetModel.objects.filter(uid=uid) # 更新 nowTime = int(time.time()) if us_qs.exists(): update_dict = {'updTime':nowTime} if p2p_region: update_dict['p2p_region'] = p2p_region if ucode: update_dict['ucode'] = ucode if version: update_dict['version'] = version us_qs.update(**update_dict) return JsonResponse(status=200, data={'code': 0, 'msg': 'success', 'data': {}}) # 新增 else: create_dict = { 'uid': uid, 'addTime': nowTime, 'updTime': nowTime, } if p2p_region: create_dict['p2p_region'] = p2p_region if ucode: create_dict['ucode'] = ucode if version: create_dict['version'] = version UidSetModel.objects.create(**create_dict) return JsonResponse(status=200, data={'code': 0, 'msg': 'success', 'data': {}}) else: return JsonResponse(status=200, data={'code': 403, 'msg': 'error etk'})