UnicomDataController.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. # -*- encoding: utf-8 -*-
  2. """
  3. @File : UserDataController.py
  4. @Time : 2023/6/29 14:56
  5. @Author : peng
  6. @Email : zhangdongming@asj6.wecom.work
  7. @Software: PyCharm
  8. """
  9. from django.db.models import Q, Sum
  10. from django.views.generic.base import View
  11. from Model.models import UnicomDeviceInfo, UnicomComboOrderInfo
  12. from Service.CommonService import CommonService
  13. from Object.RedisObject import RedisObject
  14. class UnicomDataView(View):
  15. def get(self, request, *args, **kwargs):
  16. request.encoding = 'utf-8'
  17. operation = kwargs.get('operation')
  18. return self.validation(request.GET, request, operation)
  19. def post(self, request, *args, **kwargs):
  20. request.encoding = 'utf-8'
  21. operation = kwargs.get('operation')
  22. return self.validation(request.POST, request, operation)
  23. def validation(self, request_dict, request, operation):
  24. token_code, user_id, response = CommonService.verify_token_get_user_id(request_dict, request)
  25. if token_code != 0:
  26. return response.json(token_code)
  27. if operation == 'getFlowInfo': # 查询流量使用情况
  28. return self.get_flow_info(request_dict, response)
  29. else:
  30. return response.json(414)
  31. @classmethod
  32. def get_flow_info(cls, request_dict, response):
  33. """
  34. 查询流量使用情况
  35. @param request_dict: 请求数据
  36. @request_dict year: 年
  37. @request_dict month: 月
  38. @request_dict query_type: 查询流量类型
  39. @request_dict iccid: 卡号
  40. @request_dict user_id: 用户id
  41. @request_dict page: 查询分页数
  42. @request_dict line: 查询条数
  43. @param response:响应对象
  44. @return:
  45. """
  46. query_type = request_dict.get('query_type', None)
  47. iccid = request_dict.get('iccid', None)
  48. user_id = request_dict.get('user_id', None)
  49. year = request_dict.get('year', None)
  50. month = request_dict.get('month', None)
  51. page = request_dict.get('page', None)
  52. line = request_dict.get('line', None)
  53. if not all([query_type, page, line]):
  54. return response.json(444)
  55. page = int(page)
  56. line = int(line)
  57. redis_obj = RedisObject()
  58. iccid_list = []
  59. try:
  60. iccid_qs = UnicomComboOrderInfo.objects.all()
  61. if query_type == '1': # 查询联通测试流量信息
  62. iccid_qs = iccid_qs.filter(combo__combo_type=1)
  63. if user_id:
  64. user_qs = UnicomDeviceInfo.objects.filter(user_id=user_id).values('iccid')
  65. if not user_qs.exists():
  66. return response.json(173)
  67. iccid_qs = iccid_qs.filter(iccid=user_qs[0]['iccid'])
  68. if iccid:
  69. iccid_qs = iccid_qs.filter(iccid=iccid)
  70. iccid_qs = iccid_qs.values('iccid', 'flow_total_usage')
  71. total_flow = iccid_qs.aggregate(total=Sum('flow_total_usage'))['total']
  72. count = iccid_qs.count()
  73. iccid_qs = iccid_qs[(page - 1) * line:page * line]
  74. for item in iccid_qs:
  75. user_qs = UnicomDeviceInfo.objects.filter(iccid=item['iccid']).values('user_id')
  76. item['user_id'] = user_qs[0]['user_id'] if user_qs.exists() else ''
  77. iccid_list.append(item)
  78. res = {
  79. 'iccidInfo': iccid_list,
  80. 'totalFlow': round(total_flow, 2),
  81. 'count': count
  82. }
  83. return response.json(0, res)
  84. elif query_type == '2': # 查询联通月度流量信息
  85. iccid_qs = iccid_qs.filter(combo__combo_type__in=[0, 1, 2])
  86. if iccid:
  87. iccid_qs = iccid_qs.filter(iccid=iccid)
  88. if user_id:
  89. user_qs = UnicomDeviceInfo.objects.filter(user_id=user_id).values('iccid')
  90. if not user_qs.exists():
  91. return response.json(173)
  92. iccid_qs = iccid_qs.filter(iccid=user_qs[0]['iccid'])
  93. iccid_qs = iccid_qs.values('iccid')[(page - 1) * line:page * line]
  94. count = iccid_qs.count()
  95. total_flow = 0
  96. for item in iccid_qs:
  97. item['flow_total_usage'] = 0
  98. item['flow_info'] = []
  99. key = 'monthly' + item['iccid']
  100. user_qs = UnicomDeviceInfo.objects.filter(iccid=item['iccid']).values('user_id')
  101. item['user_id'] = user_qs[0]['user_id'] if user_qs.exists() else ''
  102. if year and month:
  103. file = year + '-' + month
  104. flow = redis_obj.get_hash_data(key, file)
  105. item['flow_total_usage'] = flow
  106. item['flow_info'].append({file: flow})
  107. else:
  108. flow_dict = redis_obj.get_all_hash_data(key)
  109. for k, v in flow_dict.items():
  110. item['flow_total_usage'] += float(v)
  111. item['flow_info'].append({k.decode(): float(v)})
  112. iccid_list.append(item)
  113. total_flow += float(item['flow_total_usage'])
  114. res = {
  115. 'iccidInfo': iccid_list,
  116. 'totalFlow': round(total_flow, 2),
  117. 'count': count
  118. }
  119. return response.json(0, res)
  120. else:
  121. return response.json(444)
  122. except Exception as e:
  123. return response.json(500, repr(e))