#!/usr/bin/env python3 # -*- coding: utf-8 -*- import json import time from aioredis.commands import transaction from Object.ResponseObject import ResponseObject from Object.TokenObject import TokenObject from django.views.generic.base import View from Service.ModelService import ModelService from Service.CommonService import CommonService from Model.models import Device_Info, UidSetModel, LogModel, UID_Bucket, Unused_Uid_Meal, Order_Model, StsCrdModel, \ VodHlsModel, ExperienceContextModel import datetime from django.utils import timezone class DeviceManagement(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): language = request_dict.get('language', 'en') response = ResponseObject(language, 'pc') tko = TokenObject( request.META.get('HTTP_AUTHORIZATION'), returntpye='pc') if tko.code != 0: return response.json(tko.code) response.lang = tko.lang userID = tko.userID if userID is not None: if operation == 'query': return self.query(request_dict, userID, response) elif operation == 'findByUser': return self.findByUser(request_dict, userID, response) elif operation == 'delete': return self.delete(request_dict, userID, response) elif operation == 'uidSetQuery': return self.uidSetQuery(request_dict, userID, response) elif operation == 'vod_reset': return self.vod_reset(request, request_dict, response) elif operation == 'primary_user_reset': return self.primary_user_reset(request, request_dict, response) return response.json(444, 'operation') def query(self, request_dict, userID, response): own_perm = ModelService.check_perm(userID=userID, permID=30) if not own_perm : return response.json(404) pageNo = request_dict.get('pageNo', None) pageSize = request_dict.get('pageSize', None) UID = request_dict.get('UID', None) if not all([pageNo, pageSize]): return response.json(444) page = int(pageNo) line = int(pageSize) queryset = Device_Info.objects.all() if UID: queryset = queryset.filter(UID__contains=UID) if queryset.exists(): count = queryset.count() res = queryset[(page - 1) * line:page * line] send_dict = CommonService.qs_to_dict(res) for k, v in enumerate(send_dict["datas"]): for val in res: if v['pk'] == val.id: if send_dict["datas"][k]['fields']['Online'] is True: dl_time = val.update_time+datetime.timedelta(minutes=60) now_time = timezone.localtime(timezone.now()) if now_time > dl_time: pass # send_dict["datas"][k]['fields']['Online'] = False 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 return response.json( 0, {'list': send_dict, 'total': count}) return response.json( 0, {'list': {}, 'total': 0}) # 管理员查询接口 def uidSetQuery(self, request_dict, userID, response): pageNo = request_dict.get('pageNo', None) pageSize = request_dict.get('pageSize', None) UID = request_dict.get('UID', None) if not all([pageNo, pageSize]): return response.json(444) page = int(pageNo) line = int(pageSize) omqs = UidSetModel.objects.all().order_by('-id') if UID: omqs = omqs.filter(uid__contains=UID) count = omqs.count() order_ql = omqs[(page - 1) * line:page * line] uidset_json = CommonService.qs_to_dict(order_ql) uidset_json['count'] = count return response.json( 0, {'list': uidset_json, 'total': count}) # 重置设备云存 def vod_reset(self, request, request_dict, response): uid = request_dict.get('uid', None) if uid: try: # 记录操作日志 ip = CommonService.get_ip_address(request) content = json.loads(json.dumps(request_dict)) log = { 'ip': ip, 'user_id': 1, 'status': 200, 'time': int(datetime.time.time()), 'url': 'uidset/vod_reset', 'content': json.dumps(content), 'operation': '{}重置设备云存'.format(uid), } with transaction.atomic(): LogModel.objects.create(**log) # 删除和更新设备云存相关数据 UID_Bucket.objects.filter(uid=uid).delete() Unused_Uid_Meal.objects.filter(uid=uid).delete() Order_Model.objects.filter(UID=uid).delete() StsCrdModel.objects.filter(uid=uid).delete() VodHlsModel.objects.filter(uid=uid).delete() ExperienceContextModel.objects.filter(uid=uid).delete() # UIDMainUser.objects.filter(UID=uid).delete() Device_Info.objects.filter(UID=uid).update(vodPrimaryUserID='', vodPrimaryMaster='') except Exception as e: print(e) return response.json(500, repr(e)) else: return response.json(0) # 重置设备主用户 def primary_user_reset(self, request, request_dict, response): uid = request_dict.get('uid', None) if not uid: return response.json(404) try: # 记录操作日志 ip = CommonService.get_ip_address(request) content = json.loads(json.dumps(request_dict)) log = { 'ip': ip, 'user_id': 1, 'status': 200, 'time': int(time.time()), 'url': 'uidset/primary_user_reset', 'content': json.dumps(content), 'operation': '{}重置设备主用户'.format(uid), } LogModel.objects.create(**log) Device_Info.objects.filter(UID=uid).update(vodPrimaryUserID='', vodPrimaryMaster='') return response.json(0) except Exception as e: return response.json(500, repr(e))