|
@@ -0,0 +1,213 @@
|
|
|
+# -*- encoding: utf-8 -*-
|
|
|
+"""
|
|
|
+@File : WXTechController.py
|
|
|
+@Time : 2023/5/6 16:40
|
|
|
+@Author : stephen
|
|
|
+@Email : zhangdongming@asj6.wecom.work
|
|
|
+@Software: PyCharm
|
|
|
+"""
|
|
|
+import time
|
|
|
+
|
|
|
+from django.http import QueryDict
|
|
|
+from django.views import View
|
|
|
+
|
|
|
+from Ansjer.config import LOGGER
|
|
|
+from Controller.UnicomCombo.UnicomComboController import UnicomComboView
|
|
|
+from Model.models import UnicomDeviceInfo, Order_Model, UnicomComboExperienceHistory, UnicomCombo
|
|
|
+from Object.Enums.WXOperatorEnum import WXOperatorEnum
|
|
|
+from Object.Enums.WXStartTypeEnum import WXStartTypeEnum
|
|
|
+from Object.ResponseObject import ResponseObject
|
|
|
+from Object.WXTechObject import WXTechObject
|
|
|
+from Service.CommonService import CommonService
|
|
|
+
|
|
|
+# 五兴科技电信套餐编码 1G-15天流量包
|
|
|
+COMBO_ID = 'DX-DX-FDX-JCB-1G-15天-4DX-ASJ-YTC-AT-2022123020221230144615'
|
|
|
+
|
|
|
+
|
|
|
+class WXTechController(View):
|
|
|
+ class SmartSocketView(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 delete(self, request, *args, **kwargs):
|
|
|
+ request.encoding = 'utf-8'
|
|
|
+ operation = kwargs.get('operation')
|
|
|
+ delete = QueryDict(request.body)
|
|
|
+ if not delete:
|
|
|
+ delete = request.GET
|
|
|
+ return self.validation(delete, request, operation)
|
|
|
+
|
|
|
+ def put(self, request, *args, **kwargs):
|
|
|
+ request.encoding = 'utf-8'
|
|
|
+ operation = kwargs.get('operation')
|
|
|
+ put = QueryDict(request.body)
|
|
|
+ return self.validation(put, request, operation)
|
|
|
+
|
|
|
+ def validation(self, request_dict, request, operation):
|
|
|
+ if operation == 'deleteCardPackage':
|
|
|
+ return self.delete_card_package(request_dict, ResponseObject('cn'))
|
|
|
+ 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 == 'getCardsInfo':
|
|
|
+ return self.get_cards_info(request_dict, response)
|
|
|
+ elif operation == 'getExperiencePackage':
|
|
|
+ return self.get_experience_package(request_dict, response)
|
|
|
+ elif operation == 'createOrder':
|
|
|
+ return self.create_order_package(request_dict, response)
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def get_cards_info(cls, request_dict, response):
|
|
|
+ """
|
|
|
+ 五兴单卡获取信息
|
|
|
+ """
|
|
|
+ try:
|
|
|
+ LOGGER.info('*****WXTechController.get_cards_info:params:{}'.format(request_dict))
|
|
|
+ iccid = request_dict.get('iccid', None)
|
|
|
+ operator = int(request_dict.get('operator', 3))
|
|
|
+ if not iccid:
|
|
|
+ return response.json(444)
|
|
|
+ data = {'iccid': iccid, 'operator': operator}
|
|
|
+ wx_tech = WXTechObject()
|
|
|
+ return response.json(0, wx_tech.get_cards_info(**data))
|
|
|
+ except Exception as e:
|
|
|
+ LOGGER.info('*****WXTechController.get_cards_info:errLine:{}, errMsg:{}'
|
|
|
+ .format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
+ return response.json(500, repr(e))
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def get_experience_package(cls, request_dict, response):
|
|
|
+ """
|
|
|
+ 获取体验套餐
|
|
|
+ """
|
|
|
+ try:
|
|
|
+ LOGGER.info('*****WXTechController.get_experience_package:params{}'.format(request_dict))
|
|
|
+ serial_no = request_dict.get('serialNo', None)
|
|
|
+ if not serial_no:
|
|
|
+ return response.json(444)
|
|
|
+ # 查询是否注册iccid
|
|
|
+ unicom_device_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_no) \
|
|
|
+ .values('serial_no', 'user_id', 'iccid')
|
|
|
+ if not unicom_device_qs.exists():
|
|
|
+ return response.json(173)
|
|
|
+ unicom_device_qs = unicom_device_qs.first()
|
|
|
+ iccid = unicom_device_qs['iccid']
|
|
|
+ # 查看是否体验过免费套餐
|
|
|
+ experience_history_qs = UnicomComboExperienceHistory.objects.filter(iccid=iccid)
|
|
|
+ if experience_history_qs.exists():
|
|
|
+ return response.json(10062)
|
|
|
+ combo_info_qs = UnicomCombo.objects.filter(combo_type=1, status=0, is_del=False) \
|
|
|
+ .values('combo_name')
|
|
|
+ if not combo_info_qs.exists():
|
|
|
+ return response.json(173)
|
|
|
+ result = {'comboName': combo_info_qs[0]['combo_name']}
|
|
|
+ return response.json(0, result)
|
|
|
+ except Exception as e:
|
|
|
+ LOGGER.info('*****WXTechController.get_experience_package:errLine:{}, errMsg:{}'
|
|
|
+ .format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
+ return response.json(500, repr(e))
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def create_order_package(cls, request_dict, response):
|
|
|
+ """
|
|
|
+ 五兴电信领取1G15天流量体验包
|
|
|
+ """
|
|
|
+ try:
|
|
|
+ LOGGER.info('*****WXTechController.create_order_package:params:{}'.format(request_dict))
|
|
|
+ serial_no = request_dict.get('serialNo', None)
|
|
|
+ operator = request_dict.get('operator', None)
|
|
|
+ if not all([operator, serial_no]):
|
|
|
+ return response.json(444)
|
|
|
+ unicom_device_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_no) \
|
|
|
+ .values('serial_no', 'user_id', 'iccid')
|
|
|
+ if not unicom_device_qs.exists():
|
|
|
+ return response.json(173)
|
|
|
+ unicom_device_qs = unicom_device_qs.first()
|
|
|
+ user_id = unicom_device_qs['user_id']
|
|
|
+ iccid = unicom_device_qs['iccid']
|
|
|
+ # 查看是否体验过免费套餐
|
|
|
+ experience_history_qs = UnicomComboExperienceHistory.objects.filter(iccid=iccid)
|
|
|
+ if experience_history_qs.exists():
|
|
|
+ return response.json(10062)
|
|
|
+ data = {'iccid': iccid, 'operator': WXOperatorEnum(int(operator)).value,
|
|
|
+ 'startType': str(WXStartTypeEnum.EFFECTIVE_IMMEDIATELY.value), 'packageCode': COMBO_ID}
|
|
|
+ wx_tech = WXTechObject()
|
|
|
+ # 请求五兴API创建套餐接口
|
|
|
+ res = wx_tech.create_order_package(**data)
|
|
|
+ LOGGER.info('*****五兴创建体验套餐信息:{}'.format(res))
|
|
|
+ if res['code'] == '0':
|
|
|
+ trade_no = res['data']['orderNumber']
|
|
|
+ experience_history_vo = {'iccid': iccid, 'experience_type': 0, 'do_time': int(time.time())}
|
|
|
+ UnicomComboExperienceHistory.objects.create(**experience_history_vo)
|
|
|
+ order_res = cls.created_order(serial_no, user_id, trade_no)
|
|
|
+ LOGGER.info('*****系统创建体验订单:{}'.format(order_res))
|
|
|
+ return response.json(0)
|
|
|
+ return response.json(10063)
|
|
|
+ except Exception as e:
|
|
|
+ LOGGER.info('*****WXTechController.create_order_package:errLine:{}, errMsg:{}'
|
|
|
+ .format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
+ return response.json(500, repr(e))
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def created_order(cls, serial_no, user_id, trade_no):
|
|
|
+ """
|
|
|
+ 创建系统订单
|
|
|
+ """
|
|
|
+ combo_info_qs = UnicomCombo.objects.filter(combo_type=1, status=0, is_del=False) \
|
|
|
+ .values('id', 'combo_name', 'price', 'virtual_price', 'remark').order_by('sort')
|
|
|
+ if not combo_info_qs.exists():
|
|
|
+ return False
|
|
|
+ combo_info_vo = combo_info_qs[0]
|
|
|
+ n_time = int(time.time())
|
|
|
+ # 根据序列号获取UID
|
|
|
+ uid = CommonService.query_uid_with_serial(serial_no)
|
|
|
+ order_id = CommonService.createOrderID()
|
|
|
+ # 生成订单必须添加该字段
|
|
|
+ rank_id, ai_rank_id = UnicomComboView().get_cloud_or_ai_combo()
|
|
|
+ order_dict = {'orderID': order_id, 'UID': uid, 'rank_id': rank_id, 'ai_rank_id': ai_rank_id,
|
|
|
+ 'userID_id': user_id, 'desc': combo_info_vo['combo_name'], 'payType': 10,
|
|
|
+ 'payTime': n_time, 'price': combo_info_vo['price'], 'addTime': n_time,
|
|
|
+ 'updTime': n_time, 'status': 1,
|
|
|
+ 'unify_combo_id': str(combo_info_vo['id']), 'order_type': 3,
|
|
|
+ 'store_meal_name': combo_info_vo['combo_name'],
|
|
|
+ 'trade_no': trade_no}
|
|
|
+ Order_Model.objects.create(**order_dict)
|
|
|
+ return True
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def delete_card_package(cls, request_dict, response):
|
|
|
+ """
|
|
|
+ PC工具清空卡片的所有套餐订购记录
|
|
|
+ """
|
|
|
+ try:
|
|
|
+ LOGGER.info('*****WXTechController.delete_card_package:params:{}'.format(request_dict))
|
|
|
+ sign = request_dict.get('sign', None)
|
|
|
+ serial_no = request_dict.get('serialNo', None)
|
|
|
+ time_stamp = request_dict.get('timeStamp', None)
|
|
|
+ if not CommonService.check_time_stamp_token(sign, time_stamp):
|
|
|
+ return response.json(13)
|
|
|
+ # 查询是否注册iccid
|
|
|
+ unicom_device_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_no) \
|
|
|
+ .values('serial_no', 'user_id', 'iccid')
|
|
|
+ if not unicom_device_qs.exists():
|
|
|
+ return response.json(173)
|
|
|
+ iccid = unicom_device_qs[0]['iccid']
|
|
|
+ data = {'iccids': iccid, 'operator': WXOperatorEnum.TELECOM.value}
|
|
|
+ wx_tech = WXTechObject()
|
|
|
+ res = wx_tech.delete_card_package(**data)
|
|
|
+ if res['code'] == '0':
|
|
|
+ UnicomComboExperienceHistory.objects.filter(iccid=iccid).delete()
|
|
|
+ return response.json(0)
|
|
|
+ return response.json(177)
|
|
|
+ except Exception as e:
|
|
|
+ LOGGER.info('*****WXTechController.delete_card_package:errLine:{}, errMsg:{}'
|
|
|
+ .format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
+ return response.json(500, repr(e))
|