ServiceDataController.py 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. # -*- encoding: utf-8 -*-
  2. """
  3. @File : UserDataController.py
  4. @Time : 2022/8/16 10:44
  5. @Author : peng
  6. @Email : zhangdongming@asj6.wecom.work
  7. @Software: PyCharm
  8. """
  9. import time
  10. import oss2
  11. from django.db import connection
  12. from django.db import transaction
  13. from django.db.models import Q, Count
  14. from django.views.generic.base import View
  15. import datetime
  16. from Ansjer.config import OSS_STS_ACCESS_SECRET, OSS_STS_ACCESS_KEY
  17. from Controller.DeviceConfirmRegion import Device_Region
  18. from Model.models import Device_Info, UID_Bucket, UID_Preview, UidSetModel, UidChannelSetModel, \
  19. iotdeviceInfoModel, UIDModel, Device_User, UserFamily, FamilyMember, FamilyMemberPermission, \
  20. FamilyRoomDevice, FamilyRoom, FamilyMemberJoin, GatewaySubDevice, CountryModel
  21. from Object.ResponseObject import ResponseObject
  22. from Object.TokenObject import TokenObject
  23. from Service.CommonService import CommonService
  24. # 服务数据
  25. class ServiceDataView(View):
  26. def get(self, request, *args, **kwargs):
  27. request.encoding = 'utf-8'
  28. operation = kwargs.get('operation')
  29. return self.validation(request.GET, request, operation)
  30. def post(self, request, *args, **kwargs):
  31. request.encoding = 'utf-8'
  32. operation = kwargs.get('operation')
  33. return self.validation(request.POST, request, operation)
  34. def validation(self, request_dict, request, operation):
  35. token = TokenObject(request.META.get('HTTP_AUTHORIZATION'))
  36. lang = request_dict.get('lang', None)
  37. if lang:
  38. response = ResponseObject(lang)
  39. else:
  40. response = ResponseObject(token.lang) if token.lang else ResponseObject()
  41. if token.code != 0:
  42. return response.json(token.code)
  43. user_id = token.userID
  44. if operation == 'increase': # 查询新增用户数据
  45. return self.user_increase(request_dict, response)
  46. else:
  47. return response.json(414)
  48. @classmethod
  49. def user_increase(cls, request_dict, response):
  50. """
  51. 查询用户增长数据
  52. @param request_dict:请求参数
  53. @request_dict startTime:开始时间
  54. @request_dict endTime:结束时间
  55. @param response:响应对象
  56. @return:
  57. """
  58. start_time = request_dict.get('startTime', None)
  59. end_time = request_dict.get('endTime', None)
  60. if not all([start_time, end_time]):
  61. return response.json(444, {'error param': 'startTime or endTime'})
  62. start_time = datetime.datetime.fromtimestamp(int(start_time))
  63. end_time = datetime.datetime.fromtimestamp(int(end_time))
  64. try:
  65. user_qs = Device_User.objects.filter(data_joined__range=(start_time, end_time))
  66. res = {
  67. 'total': user_qs.count(),
  68. 'region': []
  69. }
  70. if user_qs.exists():
  71. user_country_qs = user_qs.values('region_country').annotate(count=Count('region_country')).order_by('-count')
  72. region = []
  73. for item in user_country_qs:
  74. country_id = item['region_country']
  75. country_qs = CountryModel.objects.filter(id=country_id).values('country_name')
  76. country_name = country_qs[0]['country_name'] if country_qs.exists() else '未知区域'
  77. country_dict = {
  78. 'countryName': country_name,
  79. 'count': item['count']
  80. }
  81. region.append(country_dict)
  82. res['region'] = region
  83. return response.json(0, res)
  84. except Exception as e:
  85. return response.json(500, repr(e))