import time from Model.models import Device_User, RegionRestriction, UserSetStatus from django.views import View from django.db.models import Q from Object.ResponseObject import ResponseObject from Object.TokenObject import TokenObject class CampaignView(View): def get(self, request, *args, **kwargs): request.encoding = 'utf-8' operation = kwargs.get('operation') request_dict = request.GET return self.validation(request_dict, request, operation) def post(self, request, *args, **kwargs): request.encoding = 'utf-8' operation = kwargs.get('operation') request_dict = request.POST return self.validation(request_dict, request, operation) def validation(self, request_dict, request, operation): language = request_dict.get('language', 'en') response = ResponseObject(language, 'pc') if operation == 'getUserSetStatusList': # 获取用户设置广告状态列表 return self.get_user_set_status_list(request_dict, response) else: tko = TokenObject( request.META.get('HTTP_AUTHORIZATION'), returntpye='pc') if tko.code != 0: return response.json(tko.code) response.lang = tko.lang if operation == 'setStatus': return self.set_status(request_dict, response) else: return response.json(414) @staticmethod def set_status(request_dict, response): """ 编辑状态 """ try: user_status_id = request_dict.get("userSetId", None) username = request_dict.get("username", None) status = request_dict.get("status", None) now_time = int(time.time()) if user_status_id and status: UserSetStatus.objects.filter(pk=user_status_id).update(status=status) elif username: region_restriction = RegionRestriction.objects.filter(statusName="splashAdSwitchStatus").first() status = region_restriction.default_status if region_restriction else None user = Device_User.objects.filter( Q(userID=username) | Q(userEmail=username) | Q(phone=username) | Q(username=username)).first() if user: if UserSetStatus.objects.filter(user_id=user.userID, region_restriction_id=region_restriction).exists(): return response.json(174) UserSetStatus.objects.create(user_id=user.userID, status=status, region_restriction_id=region_restriction, created_time=now_time, updated_time=now_time) else: return response.json(173) else: return response.json(444) return response.json(0) except Exception as e: return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e))) @staticmethod def get_user_set_status_list(request_dict, response): """ 获取状态列表 """ try: user_id = request_dict.get("userID", None) email = request_dict.get("email", None) phone = request_dict.get("phone", None) username = request_dict.get("username", None) page = int(request_dict.get("page", 1)) page_size = int(request_dict.get("pageSize", 10)) region_restriction = RegionRestriction.objects.filter(statusName="splashAdSwitchStatus").first() user_set_qs = UserSetStatus.objects.filter(region_restriction_id=region_restriction) if user_id: user_set_qs = user_set_qs.filter(user_id=user_id) if email: user = Device_User.objects.filter(userEmail=email).first() if user: user_set_qs = user_set_qs.filter(user_id=user.userID) if phone: user = Device_User.objects.filter(phone=phone).first() if user: user_set_qs = user_set_qs.filter(user_id=user.userID) if username: user = Device_User.objects.filter(username=username).first() if user: user_set_qs = user_set_qs.filter(user_id=user.userID) if not user_set_qs.exists(): return response.json(0, {'list': [], 'total': 0}) total_count = user_set_qs.count() user_set_paginated = user_set_qs[(page - 1) * page_size:page * page_size] user_set_list = [] for user_set in user_set_paginated: status_name = user_set.region_restriction_id.statusName user = Device_User.objects.filter(userID=user_set.user_id).first() user_set_list.append({ 'userSetId': user_set.id, 'userID': user_set.user_id, 'statusName': status_name, 'setStatus': user_set.status, 'username': user.username, 'phone': user.phone, 'email': user.userEmail, 'createdTime': user_set.created_time, 'updatedTime': user_set.updated_time, }) return response.json(0, { 'list': user_set_list, 'total': total_count, }) except Exception as e: return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))