WXTechController.py 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. # -*- encoding: utf-8 -*-
  2. """
  3. @File : WXTechController.py
  4. @Time : 2023/5/6 16:40
  5. @Author : stephen
  6. @Email : zhangdongming@asj6.wecom.work
  7. @Software: PyCharm
  8. """
  9. import logging
  10. import time
  11. from django.http import QueryDict
  12. from django.views import View
  13. from Controller.UnicomCombo.UnicomComboController import UnicomComboView
  14. from Model.models import UnicomDeviceInfo, Order_Model, UnicomComboExperienceHistory, UnicomCombo
  15. from Object.Enums.WXOperatorEnum import WXOperatorEnum
  16. from Object.Enums.WXStartTypeEnum import WXStartTypeEnum
  17. from Object.ResponseObject import ResponseObject
  18. from Object.TokenObject import TokenObject
  19. from Object.WXTechObject import WXTechObject
  20. from Service.CommonService import CommonService
  21. LOGGER = logging.getLogger('info')
  22. # 五兴科技 套餐编码 1G 15天流量包
  23. COMBO_ID = 'DX-DX-FDX-JCB-1G-15天-4DX-ASJ-YTC-AT-2022123020221230144615'
  24. class WXTechController(View):
  25. class SmartSocketView(View):
  26. def get(self, request, *args, **kwargs):
  27. request.encoding = 'utf-8'
  28. operation = kwargs.get('operation')
  29. return self.validation(request.GET, request, operation)
  30. def post(self, request, *args, **kwargs):
  31. request.encoding = 'utf-8'
  32. operation = kwargs.get('operation')
  33. return self.validation(request.POST, request, operation)
  34. def delete(self, request, *args, **kwargs):
  35. request.encoding = 'utf-8'
  36. operation = kwargs.get('operation')
  37. delete = QueryDict(request.body)
  38. if not delete:
  39. delete = request.GET
  40. return self.validation(delete, request, operation)
  41. def put(self, request, *args, **kwargs):
  42. request.encoding = 'utf-8'
  43. operation = kwargs.get('operation')
  44. put = QueryDict(request.body)
  45. return self.validation(put, request, operation)
  46. def validation(self, request_dict, request, operation):
  47. token = TokenObject(request.META.get('HTTP_AUTHORIZATION'))
  48. lang = request_dict.get('lang', token.lang)
  49. response = ResponseObject(lang)
  50. if token.code != 0:
  51. return response.json(token.code)
  52. if operation == 'getCardsInfo':
  53. return self.get_cards_info(request_dict, response)
  54. elif operation == 'getExperiencePackage':
  55. return self.get_experience_package(request_dict, response)
  56. elif operation == 'createOrder':
  57. return self.create_order_package(request_dict, response)
  58. @classmethod
  59. def get_cards_info(cls, request_dict, response):
  60. """
  61. 五兴单卡获取信息
  62. """
  63. try:
  64. LOGGER.info('*****WXTechController.get_cards_info:params:{}'.format(request_dict))
  65. iccid = request_dict.get('iccid', None)
  66. operator = int(request_dict.get('operator', 3))
  67. if not iccid:
  68. return response.json(444)
  69. data = {'iccid': iccid, 'operator': operator}
  70. wx_tech = WXTechObject()
  71. return response.json(0, wx_tech.get_cards_info(**data))
  72. except Exception as e:
  73. LOGGER.info('*****WXTechController.get_cards_info:errLine:{}, errMsg:{}'
  74. .format(e.__traceback__.tb_lineno, repr(e)))
  75. return response.json(500, repr(e))
  76. @classmethod
  77. def get_experience_package(cls, request_dict, response):
  78. """
  79. 获取体验套餐
  80. """
  81. try:
  82. LOGGER.info('*****WXTechController.get_experience_package:params'.format(request_dict))
  83. serial_no = request_dict.get('serial_no', None)
  84. if not serial_no:
  85. return response.json(444)
  86. # 查询是否注册iccid
  87. unicom_device_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_no) \
  88. .values('serial_no', 'user_id', 'iccid')
  89. if not unicom_device_qs.exists():
  90. return response.json(173)
  91. unicom_device_qs = unicom_device_qs.first()
  92. iccid = unicom_device_qs['iccid']
  93. # 查看是否体验过免费套餐
  94. experience_history_qs = UnicomComboExperienceHistory.objects.filter(iccid=iccid)
  95. if experience_history_qs.exists():
  96. return response.json(10062)
  97. combo_info_qs = UnicomCombo.objects.filter(combo_type=1, status=0, is_del=False) \
  98. .values('combo_name')
  99. if not combo_info_qs.exists():
  100. return response.json(0)
  101. result = {'comboName': combo_info_qs[0]['combo_name']}
  102. return response.json(0, result)
  103. except Exception as e:
  104. LOGGER.info('*****WXTechController.get_experience_package:errLine:{}, errMsg:{}'
  105. .format(e.__traceback__.tb_lineno, repr(e)))
  106. return response.json(500, repr(e))
  107. @classmethod
  108. def create_order_package(cls, request_dict, response):
  109. """
  110. 五兴电信领取1G15天流量体验包
  111. """
  112. try:
  113. LOGGER.info('*****WXTechController.create_order_package:params:{}'.format(request_dict))
  114. serial_no = request_dict.get('serial_no', None)
  115. operator = request_dict.get('operator', None)
  116. if not all([operator, serial_no]):
  117. return response.json(444)
  118. unicom_device_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_no) \
  119. .values('serial_no', 'user_id', 'iccid')
  120. if not unicom_device_qs.exists():
  121. return response.json(173)
  122. unicom_device_qs = unicom_device_qs.first()
  123. user_id = unicom_device_qs['user_id']
  124. iccid = unicom_device_qs['iccid']
  125. # 查看是否体验过免费套餐
  126. experience_history_qs = UnicomComboExperienceHistory.objects.filter(iccid=iccid)
  127. if experience_history_qs.exists():
  128. return response.json(10062)
  129. data = {'iccid': iccid, 'operator': WXOperatorEnum(int(operator)).value,
  130. 'startType': str(WXStartTypeEnum.EFFECTIVE_IMMEDIATELY.value), 'packageCode': COMBO_ID}
  131. wx_tech = WXTechObject()
  132. # 请求五兴API创建套餐接口
  133. res = wx_tech.create_order_package(**data)
  134. LOGGER.info('*****五兴创建体验套餐信息:{}'.format(res))
  135. if res['code'] == '0':
  136. trade_no = res['data']['orderNumber']
  137. experience_history_vo = {'iccid': iccid, 'experience_type': 0, 'do_time': int(time.time())}
  138. UnicomComboExperienceHistory.objects.create(**experience_history_vo)
  139. order_res = cls.created_order(serial_no, user_id, trade_no)
  140. LOGGER.info('*****系统创建体验订单:{}'.format(order_res))
  141. return response.json(0)
  142. return response.json(10063)
  143. except Exception as e:
  144. LOGGER.info('*****WXTechController.create_order_package:errLine:{}, errMsg:{}'
  145. .format(e.__traceback__.tb_lineno, repr(e)))
  146. return response.json(500, repr(e))
  147. @classmethod
  148. def created_order(cls, serial_no, user_id, trade_no):
  149. """
  150. 创建系统订单
  151. """
  152. combo_info_qs = UnicomCombo.objects.filter(combo_type=1, status=0, is_del=False) \
  153. .values('id', 'combo_name', 'price', 'virtual_price', 'remark').order_by('sort')
  154. if not combo_info_qs.exists():
  155. return False
  156. combo_info_vo = combo_info_qs[0]
  157. n_time = int(time.time())
  158. # 根据序列号获取UID
  159. uid = CommonService.query_uid_with_serial(serial_no)
  160. order_id = CommonService.createOrderID()
  161. # 生成订单必须添加该字段
  162. rank_id, ai_rank_id = UnicomComboView().get_cloud_or_ai_combo()
  163. order_dict = {'orderID': order_id, 'UID': uid, 'rank_id': rank_id, 'ai_rank_id': ai_rank_id,
  164. 'userID_id': user_id, 'desc': combo_info_vo['combo_name'], 'payType': 10,
  165. 'payTime': n_time, 'price': combo_info_vo['price'], 'addTime': n_time,
  166. 'updTime': n_time, 'status': 1,
  167. 'unify_combo_id': str(combo_info_vo['id']), 'order_type': 3,
  168. 'store_meal_name': combo_info_vo['combo_name'],
  169. 'trade_no': trade_no}
  170. Order_Model.objects.create(**order_dict)
  171. return True