Cloudsum.py 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. # -*- coding: utf-8 -*-
  2. """
  3. @Time : 2021/1/8 12:00
  4. @Auth : liehaoquan
  5. @File :Cloudsum.py
  6. @IDE :PyCharm
  7. """
  8. import json
  9. from Ansjer.config import SERVER_TYPE
  10. from Model.models import Order_Model, UID_Bucket, UserExModel, EquipmentLogModel
  11. from Object.RedisObject import RedisObject
  12. from Object.ResponseObject import ResponseObject
  13. from Object.TokenObject import TokenObject
  14. from django.views import View
  15. from Service.CommonService import CommonService
  16. from Service.ModelService import Device_User, ModelService
  17. from django.db.models import Count, Sum
  18. class Cloudsum(View):
  19. def dispatch(self, requset, *args, **kwargs):
  20. return super(Cloudsum, self).dispatch(requset, *args, **kwargs)
  21. def get(self, request, *args, **kwargs):
  22. operation = kwargs.get('operation')
  23. request.encoding = 'utf-8'
  24. return self.validation(request.GET, request, operation)
  25. def post(self, request, *args, **kwargs):
  26. operation = kwargs.get('operation')
  27. request.encoding = 'utf-8'
  28. return self.validation(request.POST, request, operation)
  29. def validation(self, request_dict, request, operation):
  30. response = ResponseObject()
  31. token = request_dict.get('token', None)
  32. tko = TokenObject(token)
  33. response.lang = tko.lang
  34. userID = tko.userID
  35. print('userID:', userID)
  36. if tko.code != 0:
  37. return response.json(tko.code)
  38. if userID is None or operation is None:
  39. return response.json(444, 'operation')
  40. if operation == 'cloudservicesum':
  41. return self.cloudservicesum(userID, response)
  42. if operation == 'userappversion':
  43. return self.userappversion(userID, response)
  44. if operation == 'usercount':
  45. return self.usercount(userID, request_dict, response)
  46. if operation == 'usercloud':
  47. return self.usercloud(userID, response)
  48. if operation == 'equipment_logs':
  49. return self.equipment_logs(userID, request_dict, response)
  50. # 类型:用户手机
  51. # 统计用户手机型号 已有
  52. # 统计某段时间内新用户的增长数√
  53. # 统计一天用户打开zosi app的频率 已有
  54. # 统计用户下载zosi app数,卸载人数
  55. # 统计用户使用zosi app的版本√
  56. # 统计用户使用zosi app的版本以及使用zosi app不同版本的用户数量
  57. def userappversion(self, userID, response):
  58. own_permission = ModelService.check_perm(userID=userID, permID=30)
  59. if own_permission is not True:
  60. return response.json(404)
  61. res = UserExModel.objects.extra(tables=['app_info'],
  62. select={'appname': 'app_info.appName',
  63. 'appversion': 'app_info.newAppversion'},
  64. where=["user_ex.appBundleId=app_info.appBundleId"]). \
  65. values('appBundleId', 'appname', 'appversion').annotate(dates=Count('appBundleId')).order_by()
  66. print(res.query)
  67. print(res)
  68. return response.json(0, list(res))
  69. # 统计某段时间内新用户的增长数
  70. def usercount(self, userID, request_dict, response):
  71. own_permission = ModelService.check_perm(userID=userID, permID=30)
  72. if own_permission is not True:
  73. return response.json(404)
  74. # 优化代码
  75. # usercountyear = request_dict.get('usercountyear', None)
  76. # if usercountyear == None:
  77. # return response.json(444)
  78. # usercountyear = int(usercountyear)
  79. # count = Device_User.objects.extra(select={'dates': "DATE_FORMAT(data_joined,'%%Y-%%m')"},
  80. # where=["data_joined between '%s-01-01' and '%s-01-01' "],
  81. # params=[usercountyear, usercountyear+1]).values(
  82. # 'dates').annotate(用户合计=Count('data_joined')).order_by('dates')
  83. count = Device_User.objects.extra(select={'dates': "DATE_FORMAT(data_joined,'%%Y-%%m')"}, ).values(
  84. 'dates').annotate(用户合计=Count('data_joined')).order_by('dates')
  85. print(count.query)
  86. return response.json(0, list(count))
  87. # 类型:云存服务统计
  88. # 统计开通云存的设备有多少台√
  89. # 统计未支付,支付成功的订单√
  90. # 统计开通云存的增长率 (每个月开通云存套餐的总数)√
  91. # 统计已开通云存的各套餐总数√
  92. # 统计已支付的订单总金额√
  93. def cloudservicesum(self, userID, response):
  94. own_permission = ModelService.check_perm(userID=userID, permID=30)
  95. if own_permission is not True:
  96. return response.json(404)
  97. uid_cloud = UID_Bucket.objects.values('uid').distinct().count()
  98. cloud_sum = UID_Bucket.objects.all().count()
  99. pay_0 = Order_Model.objects.filter(status='0').count()
  100. pay_1 = Order_Model.objects.filter(status='1').count()
  101. money = Order_Model.objects.filter(status='1').aggregate(Sum('price'))
  102. data_dict = {
  103. "开通云存的设备数": uid_cloud,
  104. "已开通云存的各套餐总数": cloud_sum,
  105. "未支付的订单数": pay_0,
  106. "已支付的订单数": pay_1,
  107. "已支付的订单总金额": money['price__sum'],
  108. }
  109. return response.json(0, data_dict)
  110. # 每个月开通云存套餐的总数
  111. def usercloud(self, userID, response):
  112. own_permission = ModelService.check_perm(userID=userID, permID=30)
  113. if own_permission is not True:
  114. return response.json(404)
  115. a = Order_Model.objects.extra(select={'dates': "FROM_UNIXTIME(addTime,'%%Y-%%m')"}).values(
  116. 'dates').filter(status=1).annotate(开通云存合计=Count('addTime')).order_by('dates')
  117. return response.json(0, list(a))
  118. def equipment_logs(self, userID, request_dict, response):
  119. page = int(request_dict.get('page', None))
  120. line = int(request_dict.get('line', None))
  121. order = request_dict.get('order', '-id')
  122. if order == '':
  123. order = '-id'
  124. if not page or not line:
  125. return response.json(444, 'page,line')
  126. own_perm = ModelService.check_perm(userID=userID, permID=30)
  127. if own_perm is not True:
  128. return response.json(404)
  129. if SERVER_TYPE == 'Ansjer.formal_settings':
  130. logKey = 'logger'
  131. else:
  132. logKey = 'test_logger'
  133. # 判断redis列表长度
  134. redisObj = RedisObject()
  135. data_list = redisObj.lrange(logKey, 0, -1)
  136. redisObj.del_data(key=logKey)
  137. add_batch_log(data_list)
  138. qs = EquipmentLogModel.objects.all().order_by(order)
  139. if qs.exists():
  140. count = qs.count()
  141. res = qs[(page - 1) * line:page * line]
  142. send_json = CommonService.qs_to_dict(res)
  143. send_json['count'] = count
  144. return response.json(0, send_json)
  145. return response.json(0, {'datas': [], 'count': 0})
  146. # 访问日志批量添加
  147. def add_batch_log(data_list):
  148. try:
  149. if data_list:
  150. querysetlist = []
  151. for i in data_list:
  152. data = json.loads(i.decode('utf-8'))
  153. querysetlist.append(EquipmentLogModel(**data))
  154. EquipmentLogModel.objects.bulk_create(querysetlist)
  155. else:
  156. return
  157. except Exception as e:
  158. print('ggga')
  159. print(repr(e))
  160. return False
  161. else:
  162. return True