Cloudsum.py 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. # -*- coding: utf-8 -*-
  2. """
  3. @Time : 2021/1/8 12:00
  4. @Auth : liehaoquan
  5. @File :Cloudsum.py
  6. @IDE :PyCharm
  7. """
  8. from Model.models import Order_Model, UID_Bucket, UserExModel, App_Info
  9. from Object.ResponseObject import ResponseObject
  10. from Object.TokenObject import TokenObject
  11. from django.views import View
  12. from Service.ModelService import Device_User,ModelService
  13. from django.db.models import Count, Sum
  14. class Cloudsum(View):
  15. def dispatch(self, requset, *args, **kwargs):
  16. return super(Cloudsum, self).dispatch(requset, *args, **kwargs)
  17. def get(self, request, *args, **kwargs):
  18. operation = kwargs.get('operation')
  19. request.encoding = 'utf-8'
  20. return self.validation(request.GET, request, operation)
  21. def post(self, request, *args, **kwargs):
  22. operation = kwargs.get('operation')
  23. request.encoding = 'utf-8'
  24. return self.validation(request.POST, request, operation)
  25. def validation(self, request_dict, request, operation):
  26. response = ResponseObject()
  27. token = request_dict.get('token', None)
  28. tko = TokenObject(token)
  29. response.lang = tko.lang
  30. userID = tko.userID
  31. print('userID:', userID)
  32. if tko.code != 0:
  33. return response.json(tko.code)
  34. if userID is None or operation is None:
  35. return response.json(444, 'operation')
  36. if operation == 'cloudservicesum':
  37. return self.cloudservicesum(userID, response)
  38. if operation == 'userappversion':
  39. return self.userappversion(userID, response)
  40. if operation == 'usercount':
  41. return self.usercount(userID, request_dict, response)
  42. if operation == 'usercloud':
  43. return self.usercloud(userID, response)
  44. # 类型:用户手机
  45. # 统计用户手机型号 已有
  46. # 统计某段时间内新用户的增长数√
  47. # 统计一天用户打开zosi app的频率 已有
  48. # 统计用户下载zosi app数,卸载人数
  49. # 统计用户使用zosi app的版本√
  50. # 统计用户使用zosi app的版本以及使用zosi app不同版本的用户数量
  51. def userappversion(self, userID, response):
  52. own_permission = ModelService.check_perm(userID=userID, permID=30)
  53. if own_permission is not True:
  54. return response.json(404)
  55. res = UserExModel.objects.extra(tables=['app_info'],
  56. select={'appname':'App_Info.appName',
  57. 'appversion':'App_Info.newAppversion'},
  58. where=["user_ex.appBundleId=app_Info.appBundleId"]).\
  59. values('appBundleId','appname','appversion').annotate(dates=Count('appBundleId')).order_by()
  60. print(res.query)
  61. print(res)
  62. return response.json(0, list(res))
  63. # 统计某段时间内新用户的增长数
  64. def usercount(self, userID, request_dict, response):
  65. own_permission = ModelService.check_perm(userID=userID, permID=30)
  66. if own_permission is not True:
  67. return response.json(404)
  68. # 优化代码
  69. # usercountyear = request_dict.get('usercountyear', None)
  70. # if usercountyear == None:
  71. # return response.json(444)
  72. # usercountyear = int(usercountyear)
  73. # count = Device_User.objects.extra(select={'dates': "DATE_FORMAT(data_joined,'%%Y-%%m')"},
  74. # where=["data_joined between '%s-01-01' and '%s-01-01' "],
  75. # params=[usercountyear, usercountyear+1]).values(
  76. # 'dates').annotate(用户合计=Count('data_joined')).order_by('dates')
  77. count = Device_User.objects.extra(select={'dates': "DATE_FORMAT(data_joined,'%%Y-%%m')"},).values(
  78. 'dates').annotate(用户合计=Count('data_joined')).order_by('dates')
  79. print(count.query)
  80. return response.json(0, list(count))
  81. # 类型:云存服务统计
  82. # 统计开通云存的设备有多少台√
  83. # 统计未支付,支付成功的订单√
  84. # 统计开通云存的增长率 (每个月开通云存的总数)√
  85. # 统计已开通云存的各套餐总数√
  86. # 统计已支付的订单总金额√
  87. def cloudservicesum(self, userID, response):
  88. own_permission = ModelService.check_perm(userID=userID, permID=30)
  89. if own_permission is not True:
  90. return response.json(404)
  91. uid_cloud = UID_Bucket.objects.values('uid').distinct().count()
  92. cloud_sum = UID_Bucket.objects.all().count()
  93. pay_0 = Order_Model.objects.filter(status='0').count()
  94. pay_1 = Order_Model.objects.filter(status='1').count()
  95. money = Order_Model.objects.filter(status='1').aggregate(Sum('price'))
  96. data_dict = {
  97. "开通云存的设备数": uid_cloud,
  98. "已开通云存的各套餐总数": cloud_sum,
  99. "未支付的订单数": pay_0,
  100. "已支付的订单数": pay_1,
  101. "已支付的订单总金额": money['price__sum'],
  102. }
  103. return response.json(0, data_dict)
  104. # 每个月开通云存的总数
  105. def usercloud(self, userID, response):
  106. own_permission = ModelService.check_perm(userID=userID, permID=30)
  107. if own_permission is not True:
  108. return response.json(404)
  109. a = Order_Model.objects.extra(select={'dates': "FROM_UNIXTIME(addTime,'%%Y-%%m')"}).values(
  110. 'dates').filter(status=1).annotate(开通云存合计=Count('addTime')).order_by('dates')
  111. return response.json(0, list(a))