#!/usr/bin/env python3 # -*- coding: utf-8 -*- import json import time from django.db.models import Count from django.views.decorators.csrf import csrf_exempt from Model.models import UserAppFrequencyModel, AppFrequencyStatisticsModel, Device_User, \ AppFrequencyYearStatisticsModel from Object.ResponseObject import ResponseObject from Object.TokenObject import TokenObject @csrf_exempt def statistcsAppFrequency(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 = TokenObject(request_dict.get('token', None)) if token.code != 0: return response.json(token.code) target_year = request_dict.get('year', None) target_month = request_dict.get('month', None) localtime = time.localtime() current_month = localtime.tm_mon current_year = localtime.tm_year if target_year and target_month: current_year = int(target_year) current_month = int(target_month) time_struct = [current_year, 1, 1, 0, 0, 0, 0, 0, 0] # 该月的开始时间 time_struct[1] = current_month start_time = time.mktime(tuple(time_struct)) # 该月的结束时间 time_struct[1] = current_month + 1 end_time = time.mktime(tuple(time_struct)) # 统计该月的数据 uaf_qs = UserAppFrequencyModel.objects.filter(data_time__gte=start_time, data_time__lt=end_time) \ .values('type').annotate(quantity=Count('id')).order_by() afs_qs = AppFrequencyStatisticsModel.objects.filter(year=current_year, month=current_month) if afs_qs.exists(): afs_qs.update(data=json.dumps(uaf_qs)) else: data = { 'data': json.dumps(list(uaf_qs)), 'month': current_month, 'year': current_year } AppFrequencyStatisticsModel.objects.create(**data) return response.json(0) @csrf_exempt def statistcsAppFrequencyYear(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 = TokenObject(request_dict.get('token', None)) if token.code != 0: return response.json(token.code) year = request_dict.get('year', None) localtime = time.localtime() current_year = localtime.tm_year if year: current_year = int(year) afs_qs = AppFrequencyStatisticsModel.objects.filter(year=current_year).values('data', 'month') # num = Device_User.objects.count() num = 300000 res = [] result = { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0 } quantity = 0 for afs in afs_qs: data = json.loads(afs['data']) for item in data: result[item['type']] += item['quantity'] quantity += item['quantity'] tmps = [] for k, v in result.items(): tmp = { 'type': k, 'value': round(v / 12 / num, 3) } tmps.append(tmp) res.append({ 'year': current_year, 'data': tmps }) print(res) afys_qs = AppFrequencyYearStatisticsModel.objects.filter(year=current_year) # if afys_qs.exists(): afys_qs.update(data=json.dumps(res)) else: data = { 'data': json.dumps(res), 'year': current_year, 'num': num } AppFrequencyYearStatisticsModel.objects.create(**data) return response.json(0)