WXTechController.py 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  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.WXTechObject import WXTechObject
  19. from Service.CommonService import CommonService
  20. LOGGER = logging.getLogger('info')
  21. # 五兴科技电信套餐编码 1G-15天流量包
  22. COMBO_ID = 'DX-DX-FDX-JCB-1G-15天-4DX-ASJ-YTC-AT-2022123020221230144615'
  23. class WXTechController(View):
  24. class SmartSocketView(View):
  25. def get(self, request, *args, **kwargs):
  26. request.encoding = 'utf-8'
  27. operation = kwargs.get('operation')
  28. return self.validation(request.GET, request, operation)
  29. def post(self, request, *args, **kwargs):
  30. request.encoding = 'utf-8'
  31. operation = kwargs.get('operation')
  32. return self.validation(request.POST, request, operation)
  33. def delete(self, request, *args, **kwargs):
  34. request.encoding = 'utf-8'
  35. operation = kwargs.get('operation')
  36. delete = QueryDict(request.body)
  37. if not delete:
  38. delete = request.GET
  39. return self.validation(delete, request, operation)
  40. def put(self, request, *args, **kwargs):
  41. request.encoding = 'utf-8'
  42. operation = kwargs.get('operation')
  43. put = QueryDict(request.body)
  44. return self.validation(put, request, operation)
  45. def validation(self, request_dict, request, operation):
  46. if operation == 'deleteCardPackage':
  47. return self.delete_card_package(request_dict, ResponseObject('cn'))
  48. token_code, user_id, response = CommonService \
  49. .verify_token_get_user_id(request_dict, request)
  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('serialNo', 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(173)
  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('serialNo', 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
  172. @classmethod
  173. def delete_card_package(cls, request_dict, response):
  174. """
  175. PC工具清空卡片的所有套餐订购记录
  176. """
  177. try:
  178. LOGGER.info('*****WXTechController.delete_card_package:params:{}'.format(request_dict))
  179. sign = request_dict.get('sign', None)
  180. serial_no = request_dict.get('serialNo', None)
  181. time_stamp = request_dict.get('timeStamp', None)
  182. if not CommonService.check_time_stamp_token(sign, time_stamp):
  183. return response.json(13)
  184. # 查询是否注册iccid
  185. unicom_device_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_no) \
  186. .values('serial_no', 'user_id', 'iccid')
  187. if not unicom_device_qs.exists():
  188. return response.json(173)
  189. iccid = unicom_device_qs[0]['iccid']
  190. data = {'iccids': iccid, 'operator': WXOperatorEnum.TELECOM.value}
  191. wx_tech = WXTechObject()
  192. res = wx_tech.delete_card_package(**data)
  193. if res['code'] == '0':
  194. UnicomComboExperienceHistory.objects.filter(iccid=iccid).delete()
  195. return response.json(0)
  196. return response.json(177)
  197. except Exception as e:
  198. LOGGER.info('*****WXTechController.delete_card_package:errLine:{}, errMsg:{}'
  199. .format(e.__traceback__.tb_lineno, repr(e)))
  200. return response.json(500, repr(e))