#!/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, EquipmentInfoExModel, EquipmentInfoExDayStatisticsModel 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) @csrf_exempt def statistcsPushDay(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) localtime = time.localtime() current_day = localtime.tm_mday+1 print(current_day) time_struct = [localtime.tm_year, localtime.tm_mon, current_day - 1, 0, 0, 0, 0, 0, 0] start_time = int(time.mktime(tuple(time_struct))) print(start_time) time_struct[2] = current_day end_time = int(time.mktime(tuple(time_struct))) print(end_time) eq_qs = EquipmentInfoExModel.objects.filter(add_time__gte=start_time, add_time__lte=end_time) print(eq_qs.values()) # 0:APNS推送,1:谷歌推送,2:极光推送 now_time = int(time.time()) jpush = EquipmentInfoExDayStatisticsModel(push_type=2, statistics_date=start_time, add_time=now_time, date_type=0) apns = EquipmentInfoExDayStatisticsModel(push_type=0, statistics_date=start_time, add_time=now_time, date_type=0) gcm = EquipmentInfoExDayStatisticsModel(push_type=1, statistics_date=start_time, add_time=now_time, date_type=0) total = EquipmentInfoExDayStatisticsModel(push_type=-1, statistics_date=start_time, add_time=now_time, date_type=0) for eq in eq_qs: if eq.push_type == 0: do_sum(eq, apns) elif eq.push_type == 1: do_sum(eq, gcm) elif eq.push_type == 2: do_sum(eq, jpush) do_sum(eq, total) datas = [] datas.append(apns) datas.append(gcm) datas.append(jpush) datas.append(total) EquipmentInfoExDayStatisticsModel.objects.bulk_create(datas) return response.json(0) @csrf_exempt def statistcsPushMonth(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) localtime = time.localtime() current_month = localtime.tm_mon time_struct = [localtime.tm_year, localtime.tm_mon, 1, 0, 0, 0, 0, 0, 0] start_time = int(time.mktime(tuple(time_struct))) time_struct[1] = current_month + 1 end_time = int(time.mktime(tuple(time_struct))) eq_qs = EquipmentInfoExDayStatisticsModel.objects.filter(statistics_date__gte=start_time, statistics_date__lte=end_time, date_type=0) # 0:APNS推送,1:谷歌推送,2:极光推送 now_time = int(time.time()) jpush = EquipmentInfoExDayStatisticsModel(push_type=2, statistics_date=start_time, add_time=now_time, date_type=1) apns = EquipmentInfoExDayStatisticsModel(push_type=0, statistics_date=start_time, add_time=now_time, date_type=1) gcm = EquipmentInfoExDayStatisticsModel(push_type=1, statistics_date=start_time, add_time=now_time, date_type=1) total = EquipmentInfoExDayStatisticsModel(push_type=-1, statistics_date=start_time, add_time=now_time, date_type=1) for eq in eq_qs: if eq.push_type == 0: do_sum_two(eq, apns) elif eq.push_type == 1: do_sum_two(eq, gcm) elif eq.push_type == 2: do_sum_two(eq, jpush) do_sum_two(eq, total) datas = [] datas.append(apns) datas.append(gcm) datas.append(jpush) datas.append(total) EquipmentInfoExDayStatisticsModel.objects.bulk_create(datas) return response.json(0) def do_sum(eq: EquipmentInfoExModel, target: EquipmentInfoExDayStatisticsModel): if eq.push_server_status == 200: target.number_of_successes += 1 else: target.number_of_failures += 1 if eq.push_device_status == 1: target.number_of_arrival += 1 def do_sum_two(eq: EquipmentInfoExDayStatisticsModel, target: EquipmentInfoExDayStatisticsModel): target.number_of_successes += eq.number_of_successes target.number_of_failures += eq.number_of_failures target.number_of_arrival += eq.number_of_arrival