| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 | 
							- #!/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, Equipment_Info, EquipmentInfoExStatisticsModel
 
- 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
 
-     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 = Equipment_Info.objects.filter(addTime__gte=start_time, addTime__lte=end_time)
 
-     print(eq_qs.values())
 
-     # 0:APNS推送,1:谷歌推送,2:极光推送
 
-     now_time = int(time.time())
 
-     jpush = EquipmentInfoExStatisticsModel(push_type=2, statistics_date=start_time, add_time=now_time, date_type=0)
 
-     apns = EquipmentInfoExStatisticsModel(push_type=0, statistics_date=start_time, add_time=now_time, date_type=0)
 
-     gcm = EquipmentInfoExStatisticsModel(push_type=1, statistics_date=start_time, add_time=now_time, date_type=0)
 
-     total = EquipmentInfoExStatisticsModel(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)
 
-     EquipmentInfoExStatisticsModel.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 = EquipmentInfoExStatisticsModel.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 = EquipmentInfoExStatisticsModel(push_type=2, statistics_date=start_time, add_time=now_time, date_type=1)
 
-     apns = EquipmentInfoExStatisticsModel(push_type=0, statistics_date=start_time, add_time=now_time, date_type=1)
 
-     gcm = EquipmentInfoExStatisticsModel(push_type=1, statistics_date=start_time, add_time=now_time, date_type=1)
 
-     total = EquipmentInfoExStatisticsModel(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)
 
-     EquipmentInfoExStatisticsModel.objects.bulk_create(datas)
 
-     return response.json(0)
 
- def do_sum(eq: Equipment_Info, target: EquipmentInfoExStatisticsModel):
 
-     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: EquipmentInfoExStatisticsModel, target: EquipmentInfoExStatisticsModel):
 
-     target.number_of_successes += eq.number_of_successes
 
-     target.number_of_failures += eq.number_of_failures
 
-     target.number_of_arrival += eq.number_of_arrival
 
 
  |