StatisticsController.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. import json
  4. import time
  5. from django.db.models import Count
  6. from django.views.decorators.csrf import csrf_exempt
  7. from Model.models import UserAppFrequencyModel, AppFrequencyStatisticsModel, Device_User, \
  8. AppFrequencyYearStatisticsModel
  9. from Object.ResponseObject import ResponseObject
  10. from Object.TokenObject import TokenObject
  11. @csrf_exempt
  12. def statistcsAppFrequency(request):
  13. request.encoding = 'utf-8'
  14. response = ResponseObject()
  15. if request.method == 'POST':
  16. request_dict = request.POST
  17. elif request.method == 'GET':
  18. request_dict = request.GET
  19. else:
  20. return response.json(444)
  21. token = TokenObject(request_dict.get('token', None))
  22. if token.code != 0:
  23. return response.json(token.code)
  24. target_year = request_dict.get('year', None)
  25. target_month = request_dict.get('month', None)
  26. localtime = time.localtime()
  27. current_month = localtime.tm_mon
  28. current_year = localtime.tm_year
  29. if target_year and target_month:
  30. current_year = int(target_year)
  31. current_month = int(target_month)
  32. time_struct = [current_year, 1, 1, 0, 0, 0, 0, 0, 0]
  33. # 该月的开始时间
  34. time_struct[1] = current_month
  35. start_time = time.mktime(tuple(time_struct))
  36. # 该月的结束时间
  37. time_struct[1] = current_month + 1
  38. end_time = time.mktime(tuple(time_struct))
  39. # 统计该月的数据
  40. uaf_qs = UserAppFrequencyModel.objects.filter(data_time__gte=start_time, data_time__lt=end_time) \
  41. .values('type').annotate(quantity=Count('id')).order_by()
  42. afs_qs = AppFrequencyStatisticsModel.objects.filter(year=current_year, month=current_month)
  43. if afs_qs.exists():
  44. afs_qs.update(data=json.dumps(uaf_qs))
  45. else:
  46. data = {
  47. 'data': json.dumps(list(uaf_qs)),
  48. 'month': current_month,
  49. 'year': current_year
  50. }
  51. AppFrequencyStatisticsModel.objects.create(**data)
  52. return response.json(0)
  53. @csrf_exempt
  54. def statistcsAppFrequencyYear(request):
  55. request.encoding = 'utf-8'
  56. response = ResponseObject()
  57. if request.method == 'POST':
  58. request_dict = request.POST
  59. elif request.method == 'GET':
  60. request_dict = request.GET
  61. else:
  62. return response.json(444)
  63. token = TokenObject(request_dict.get('token', None))
  64. if token.code != 0:
  65. return response.json(token.code)
  66. year = request_dict.get('year', None)
  67. localtime = time.localtime()
  68. current_year = localtime.tm_year
  69. if year:
  70. current_year = int(year)
  71. afs_qs = AppFrequencyStatisticsModel.objects.filter(year=current_year).values('data', 'month')
  72. # num = Device_User.objects.count()
  73. num = 300000
  74. res = []
  75. result = {
  76. 0: 0,
  77. 1: 0,
  78. 2: 0,
  79. 3: 0,
  80. 4: 0,
  81. 5: 0,
  82. 6: 0
  83. }
  84. quantity = 0
  85. for afs in afs_qs:
  86. data = json.loads(afs['data'])
  87. for item in data:
  88. result[item['type']] += item['quantity']
  89. quantity += item['quantity']
  90. tmps = []
  91. for k, v in result.items():
  92. tmp = {
  93. 'type': k,
  94. 'value': round(v / 12 / num, 3)
  95. }
  96. tmps.append(tmp)
  97. res.append({
  98. 'year': current_year,
  99. 'data': tmps
  100. })
  101. print(res)
  102. afys_qs = AppFrequencyYearStatisticsModel.objects.filter(year=current_year)
  103. #
  104. if afys_qs.exists():
  105. afys_qs.update(data=json.dumps(res))
  106. else:
  107. data = {
  108. 'data': json.dumps(res),
  109. 'year': current_year,
  110. 'num': num
  111. }
  112. AppFrequencyYearStatisticsModel.objects.create(**data)
  113. return response.json(0)