# -*- encoding: utf-8 -*- """ @File : WXTechController.py @Time : 2023/5/6 16:40 @Author : stephen @Email : zhangdongming@asj6.wecom.work @Software: PyCharm """ import logging import time from django.http import QueryDict from django.views import View 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.TokenObject import TokenObject from Object.WXTechObject import WXTechObject from Service.CommonService import CommonService LOGGER = logging.getLogger('info') # 五兴科技 套餐编码 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): token = TokenObject(request.META.get('HTTP_AUTHORIZATION')) lang = request_dict.get('lang', token.lang) response = ResponseObject(lang) 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('serial_no', 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(0) 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('serial_no', 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