Cloudsum.py 5.4 KB

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