# -*- encoding: utf-8 -*- """ @File : UserDataController.py @Time : 2022/8/16 10:44 @Author : peng @Email : zhangdongming@asj6.wecom.work @Software: PyCharm """ import time import oss2 from django.db import connection from django.db import transaction from django.db.models import Q, Count from django.views.generic.base import View import datetime from Ansjer.config import OSS_STS_ACCESS_SECRET, OSS_STS_ACCESS_KEY from Controller.DeviceConfirmRegion import Device_Region from Model.models import Device_Info, UID_Bucket, UID_Preview, UidSetModel, UidChannelSetModel, \ iotdeviceInfoModel, UIDModel, Device_User, UserFamily, FamilyMember, FamilyMemberPermission, \ FamilyRoomDevice, FamilyRoom, FamilyMemberJoin, GatewaySubDevice, CountryModel from Object.ResponseObject import ResponseObject from Object.TokenObject import TokenObject from Service.CommonService import CommonService # 服务数据 class ServiceDataView(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): token = TokenObject(request.META.get('HTTP_AUTHORIZATION')) lang = request_dict.get('lang', None) if lang: response = ResponseObject(lang) else: response = ResponseObject(token.lang) if token.lang else ResponseObject() if token.code != 0: return response.json(token.code) user_id = token.userID if operation == 'increase': # 查询新增用户数据 return self.user_increase(request_dict, response) else: return response.json(414) @classmethod def user_increase(cls, request_dict, response): """ 查询用户增长数据 @param request_dict:请求参数 @request_dict startTime:开始时间 @request_dict endTime:结束时间 @param response:响应对象 @return: """ start_time = request_dict.get('startTime', None) end_time = request_dict.get('endTime', None) if not all([start_time, end_time]): return response.json(444, {'error param': 'startTime or endTime'}) start_time = datetime.datetime.fromtimestamp(int(start_time)) end_time = datetime.datetime.fromtimestamp(int(end_time)) try: user_qs = Device_User.objects.filter(data_joined__range=(start_time, end_time)) res = { 'total': user_qs.count(), 'region': [] } if user_qs.exists(): user_country_qs = user_qs.values('region_country').annotate(count=Count('region_country')).order_by('-count') region = [] for item in user_country_qs: country_id = item['region_country'] country_qs = CountryModel.objects.filter(id=country_id).values('country_name') country_name = country_qs[0]['country_name'] if country_qs.exists() else '未知区域' country_dict = { 'countryName': country_name, 'count': item['count'] } region.append(country_dict) res['region'] = region return response.json(0, res) except Exception as e: return response.json(500, repr(e))