|
@@ -0,0 +1,167 @@
|
|
|
+# -*- encoding: utf-8 -*-
|
|
|
+"""
|
|
|
+@File : UserDataController.py
|
|
|
+@Time : 2023/6/29 14:56
|
|
|
+@Author : peng
|
|
|
+@Email : zhangdongming@asj6.wecom.work
|
|
|
+@Software: PyCharm
|
|
|
+"""
|
|
|
+
|
|
|
+from django.db.models import Q, Sum
|
|
|
+from django.views.generic.base import View
|
|
|
+
|
|
|
+from Model.models import UnicomDeviceInfo, UnicomComboOrderInfo
|
|
|
+from Service.CommonService import CommonService
|
|
|
+from Object.RedisObject import RedisObject
|
|
|
+
|
|
|
+
|
|
|
+class UnicomDataView(View):
|
|
|
+ def get(self, request, *args, **kwargs):
|
|
|
+ request.encoding = 'utf-8'
|
|
|
+ operation = kwargs.get('operation')
|
|
|
+ return self.validation(request.GET, request, operation)
|
|
|
+
|
|
|
+ def post(self, request, *args, **kwargs):
|
|
|
+ request.encoding = 'utf-8'
|
|
|
+ operation = kwargs.get('operation')
|
|
|
+ return self.validation(request.POST, request, operation)
|
|
|
+
|
|
|
+ def validation(self, request_dict, request, operation):
|
|
|
+ token_code, user_id, response = CommonService.verify_token_get_user_id(request_dict, request)
|
|
|
+ if token_code != 0:
|
|
|
+ return response.json(token_code)
|
|
|
+ if operation == 'getFlowInfo': # 查询流量使用情况
|
|
|
+ return self.get_flow_info(request_dict, response)
|
|
|
+ elif operation == 'getMonthlyFlowInfo': # 查询流量使用情况
|
|
|
+ return self.get_monthly_flow_info(request_dict, response)
|
|
|
+ else:
|
|
|
+ return response.json(414)
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def get_flow_info(cls, request_dict, response):
|
|
|
+ """
|
|
|
+ 查询流量使用情况
|
|
|
+ @param request_dict: 请求数据
|
|
|
+ @request_dict year: 年
|
|
|
+ @request_dict month: 月
|
|
|
+ @request_dict query_type: 查询流量类型
|
|
|
+ @request_dict iccid: 卡号
|
|
|
+ @request_dict user_id: 用户id
|
|
|
+ @request_dict page: 查询分页数
|
|
|
+ @request_dict line: 查询条数
|
|
|
+ @param response:响应对象
|
|
|
+ @return:
|
|
|
+ """
|
|
|
+ query_type = request_dict.get('query_type', None)
|
|
|
+ iccid = request_dict.get('iccid', None)
|
|
|
+ user_id = request_dict.get('user_id', None)
|
|
|
+ year = request_dict.get('year', None)
|
|
|
+ month = request_dict.get('month', None)
|
|
|
+ page = request_dict.get('page', None)
|
|
|
+ line = request_dict.get('line', None)
|
|
|
+ if not all([query_type, page, line]):
|
|
|
+ return response.json(444)
|
|
|
+ page = int(page)
|
|
|
+ line = int(line)
|
|
|
+ redis_obj = RedisObject()
|
|
|
+ iccid_list = []
|
|
|
+ try:
|
|
|
+ iccid_qs = UnicomComboOrderInfo.objects.all()
|
|
|
+ if query_type == '1': # 查询联通测试流量信息
|
|
|
+ iccid_qs = iccid_qs.filter(combo__combo_type=1)
|
|
|
+ if user_id:
|
|
|
+ user_qs = UnicomDeviceInfo.objects.filter(user_id=user_id).values('iccid')
|
|
|
+ if not user_qs.exists():
|
|
|
+ return response.json(173)
|
|
|
+ iccid_qs = iccid_qs.filter(iccid=user_qs[0]['iccid'])
|
|
|
+ if iccid:
|
|
|
+ iccid_qs = iccid_qs.filter(iccid=iccid)
|
|
|
+ iccid_qs = iccid_qs.values('iccid', 'flow_total_usage')
|
|
|
+ total_flow = iccid_qs.aggregate(total=Sum('flow_total_usage'))['total']
|
|
|
+ count = iccid_qs.count()
|
|
|
+ iccid_qs = iccid_qs[(page - 1) * line:page * line]
|
|
|
+ for item in iccid_qs:
|
|
|
+ user_qs = UnicomDeviceInfo.objects.filter(iccid=item['iccid']).values('user_id')
|
|
|
+ item['user_id'] = user_qs[0]['user_id'] if user_qs.exists() else ''
|
|
|
+ iccid_list.append(item)
|
|
|
+ elif query_type == '2': # 查询联通月度流量信息
|
|
|
+ iccid_qs = iccid_qs.filter(combo__combo_type__in=[0, 1, 2])
|
|
|
+ if iccid:
|
|
|
+ iccid_qs = iccid_qs.filter(iccid=iccid)
|
|
|
+ if user_id:
|
|
|
+ user_qs = UnicomDeviceInfo.objects.filter(user_id=user_id).values('iccid')
|
|
|
+ if not user_qs.exists():
|
|
|
+ return response.json(173)
|
|
|
+ iccid_qs = iccid_qs.filter(iccid=user_qs[0]['iccid'])
|
|
|
+ iccid_qs = iccid_qs.values('iccid').distinct().order_by('iccid')
|
|
|
+ count = iccid_qs.count()
|
|
|
+ iccid_qs = iccid_qs[(page - 1) * line:page * line]
|
|
|
+ total_flow = 0
|
|
|
+ for item in iccid_qs:
|
|
|
+ item['flow_total_usage'] = 0
|
|
|
+ key = 'monthly_flow_' + item['iccid']
|
|
|
+ user_qs = UnicomDeviceInfo.objects.filter(iccid=item['iccid']).values('user_id')
|
|
|
+ item['user_id'] = user_qs[0]['user_id'] if user_qs.exists() else ''
|
|
|
+ if year and month:
|
|
|
+ file = year + '-' + month
|
|
|
+ flow = redis_obj.get_hash_data(key, file)[0]
|
|
|
+ flow = float(flow.decode()) if flow else 0
|
|
|
+ item['flow_total_usage'] = flow
|
|
|
+ else:
|
|
|
+ flow_dict = redis_obj.get_all_hash_data(key)
|
|
|
+ for k, v in flow_dict.items():
|
|
|
+ item['flow_total_usage'] += float(v)
|
|
|
+ iccid_list.append(item)
|
|
|
+ item['flow_total_usage'] = round(item['flow_total_usage'], 2)
|
|
|
+ total_flow += float(item['flow_total_usage'])
|
|
|
+ else:
|
|
|
+ return response.json(444)
|
|
|
+ res = {
|
|
|
+ 'iccidInfo': iccid_list,
|
|
|
+ 'totalFlow': round(total_flow, 2),
|
|
|
+ 'count': count
|
|
|
+ }
|
|
|
+ return response.json(0, res)
|
|
|
+ except Exception as e:
|
|
|
+ return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def get_monthly_flow_info(cls, request_dict, response):
|
|
|
+ """
|
|
|
+ 查询月度流量使用情况
|
|
|
+ @param request_dict: 请求数据
|
|
|
+ @request_dict year: 年
|
|
|
+ @request_dict month: 月
|
|
|
+ @request_dict iccid: 卡号
|
|
|
+ @param response:响应对象
|
|
|
+ @return:
|
|
|
+ """
|
|
|
+ iccid = request_dict.get('iccid', None)
|
|
|
+ year = request_dict.get('year', None)
|
|
|
+ month = request_dict.get('month', None)
|
|
|
+ page = request_dict.get('page', None)
|
|
|
+ line = request_dict.get('line', None)
|
|
|
+ redis_obj = RedisObject()
|
|
|
+ data_list = []
|
|
|
+ if not all([iccid, page, line]):
|
|
|
+ return response.json(444)
|
|
|
+ page = int(page)
|
|
|
+ line = int(line)
|
|
|
+ try:
|
|
|
+ key = 'monthly_flow_' + iccid
|
|
|
+ if year and month:
|
|
|
+ file = year + '-' + month
|
|
|
+ flow = redis_obj.get_hash_data(key, file)[0]
|
|
|
+ flow = flow.decode() if flow else 0
|
|
|
+ data_list.append({file: flow})
|
|
|
+ else:
|
|
|
+ flow_dict = redis_obj.get_all_hash_data(key)
|
|
|
+ for k, v in flow_dict.items():
|
|
|
+ data_list.append({k.decode(): float(v)})
|
|
|
+ res = {
|
|
|
+ 'list': data_list[(page - 1) * line:page * line],
|
|
|
+ 'count': len(data_list)
|
|
|
+ }
|
|
|
+ return response.json(0, res)
|
|
|
+ except Exception as e:
|
|
|
+ return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|