WXTechController.py 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  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 time
  10. from django.http import QueryDict
  11. from django.views import View
  12. from Ansjer.config import LOGGER
  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. # 五兴科技电信套餐编码 1G-15天流量包
  21. COMBO_ID = 'DX-DX-FDX-JCB-1G-15天-4DX-ASJ-YTC-AT-2022123020221230144615'
  22. class WXTechController(View):
  23. class SmartSocketView(View):
  24. def get(self, request, *args, **kwargs):
  25. request.encoding = 'utf-8'
  26. operation = kwargs.get('operation')
  27. return self.validation(request.GET, request, operation)
  28. def post(self, request, *args, **kwargs):
  29. request.encoding = 'utf-8'
  30. operation = kwargs.get('operation')
  31. return self.validation(request.POST, request, operation)
  32. def delete(self, request, *args, **kwargs):
  33. request.encoding = 'utf-8'
  34. operation = kwargs.get('operation')
  35. delete = QueryDict(request.body)
  36. if not delete:
  37. delete = request.GET
  38. return self.validation(delete, request, operation)
  39. def put(self, request, *args, **kwargs):
  40. request.encoding = 'utf-8'
  41. operation = kwargs.get('operation')
  42. put = QueryDict(request.body)
  43. return self.validation(put, request, operation)
  44. def validation(self, request_dict, request, operation):
  45. if operation == 'deleteCardPackage':
  46. return self.delete_card_package(request_dict, ResponseObject('cn'))
  47. token_code, user_id, response = CommonService \
  48. .verify_token_get_user_id(request_dict, request)
  49. if token_code != 0:
  50. return response.json(token_code)
  51. if operation == 'getCardsInfo':
  52. return self.get_cards_info(request_dict, response)
  53. elif operation == 'getExperiencePackage':
  54. return self.get_experience_package(request_dict, response)
  55. elif operation == 'createOrder':
  56. return self.create_order_package(request_dict, response)
  57. @classmethod
  58. def get_cards_info(cls, request_dict, response):
  59. """
  60. 五兴单卡获取信息
  61. """
  62. try:
  63. LOGGER.info('*****WXTechController.get_cards_info:params:{}'.format(request_dict))
  64. iccid = request_dict.get('iccid', None)
  65. operator = int(request_dict.get('operator', 3))
  66. if not iccid:
  67. return response.json(444)
  68. data = {'iccid': iccid, 'operator': operator}
  69. wx_tech = WXTechObject()
  70. return response.json(0, wx_tech.get_cards_info(**data))
  71. except Exception as e:
  72. LOGGER.info('*****WXTechController.get_cards_info:errLine:{}, errMsg:{}'
  73. .format(e.__traceback__.tb_lineno, repr(e)))
  74. return response.json(500, repr(e))
  75. @classmethod
  76. def get_experience_package(cls, request_dict, response):
  77. """
  78. 获取体验套餐
  79. """
  80. try:
  81. LOGGER.info('*****WXTechController.get_experience_package:params{}'.format(request_dict))
  82. serial_no = request_dict.get('serialNo', None)
  83. if not serial_no:
  84. return response.json(444)
  85. # 查询是否注册iccid
  86. unicom_device_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_no) \
  87. .values('serial_no', 'user_id', 'iccid')
  88. if not unicom_device_qs.exists():
  89. return response.json(173)
  90. unicom_device_qs = unicom_device_qs.first()
  91. iccid = unicom_device_qs['iccid']
  92. # 查看是否体验过免费套餐
  93. experience_history_qs = UnicomComboExperienceHistory.objects.filter(iccid=iccid)
  94. if experience_history_qs.exists():
  95. return response.json(10062)
  96. combo_info_qs = UnicomCombo.objects.filter(combo_type=1, status=0, is_del=False) \
  97. .values('combo_name')
  98. if not combo_info_qs.exists():
  99. return response.json(173)
  100. result = {'comboName': combo_info_qs[0]['combo_name']}
  101. return response.json(0, result)
  102. except Exception as e:
  103. LOGGER.info('*****WXTechController.get_experience_package:errLine:{}, errMsg:{}'
  104. .format(e.__traceback__.tb_lineno, repr(e)))
  105. return response.json(500, repr(e))
  106. @classmethod
  107. def create_order_package(cls, request_dict, response):
  108. """
  109. 五兴电信领取1G15天流量体验包
  110. """
  111. try:
  112. LOGGER.info('*****WXTechController.create_order_package:params:{}'.format(request_dict))
  113. serial_no = request_dict.get('serialNo', None)
  114. operator = request_dict.get('operator', None)
  115. if not all([operator, serial_no]):
  116. return response.json(444)
  117. unicom_device_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_no) \
  118. .values('serial_no', 'user_id', 'iccid')
  119. if not unicom_device_qs.exists():
  120. return response.json(173)
  121. unicom_device_qs = unicom_device_qs.first()
  122. user_id = unicom_device_qs['user_id']
  123. iccid = unicom_device_qs['iccid']
  124. # 查看是否体验过免费套餐
  125. experience_history_qs = UnicomComboExperienceHistory.objects.filter(iccid=iccid)
  126. if experience_history_qs.exists():
  127. return response.json(10062)
  128. data = {'iccid': iccid, 'operator': WXOperatorEnum(int(operator)).value,
  129. 'startType': str(WXStartTypeEnum.EFFECTIVE_IMMEDIATELY.value), 'packageCode': COMBO_ID}
  130. wx_tech = WXTechObject()
  131. # 请求五兴API创建套餐接口
  132. res = wx_tech.create_order_package(**data)
  133. LOGGER.info('*****五兴创建体验套餐信息:{}'.format(res))
  134. if res['code'] == '0':
  135. trade_no = res['data']['orderNumber']
  136. experience_history_vo = {'iccid': iccid, 'experience_type': 0, 'do_time': int(time.time())}
  137. UnicomComboExperienceHistory.objects.create(**experience_history_vo)
  138. order_res = cls.created_order(serial_no, user_id, trade_no)
  139. LOGGER.info('*****系统创建体验订单:{}'.format(order_res))
  140. return response.json(0)
  141. return response.json(10063)
  142. except Exception as e:
  143. LOGGER.info('*****WXTechController.create_order_package:errLine:{}, errMsg:{}'
  144. .format(e.__traceback__.tb_lineno, repr(e)))
  145. return response.json(500, repr(e))
  146. @classmethod
  147. def created_order(cls, serial_no, user_id, trade_no):
  148. """
  149. 创建系统订单
  150. """
  151. combo_info_qs = UnicomCombo.objects.filter(combo_type=1, status=0, is_del=False) \
  152. .values('id', 'combo_name', 'price', 'virtual_price', 'remark').order_by('sort')
  153. if not combo_info_qs.exists():
  154. return False
  155. combo_info_vo = combo_info_qs[0]
  156. n_time = int(time.time())
  157. # 根据序列号获取UID
  158. uid = CommonService.query_uid_with_serial(serial_no)
  159. order_id = CommonService.createOrderID()
  160. # 生成订单必须添加该字段
  161. rank_id, ai_rank_id = UnicomComboView().get_cloud_or_ai_combo()
  162. order_dict = {'orderID': order_id, 'UID': uid, 'rank_id': rank_id, 'ai_rank_id': ai_rank_id,
  163. 'userID_id': user_id, 'desc': combo_info_vo['combo_name'], 'payType': 10,
  164. 'payTime': n_time, 'price': combo_info_vo['price'], 'addTime': n_time,
  165. 'updTime': n_time, 'status': 1,
  166. 'unify_combo_id': str(combo_info_vo['id']), 'order_type': 3,
  167. 'store_meal_name': combo_info_vo['combo_name'],
  168. 'trade_no': trade_no}
  169. Order_Model.objects.create(**order_dict)
  170. return True
  171. @classmethod
  172. def delete_card_package(cls, request_dict, response):
  173. """
  174. PC工具清空卡片的所有套餐订购记录
  175. """
  176. try:
  177. LOGGER.info('*****WXTechController.delete_card_package:params:{}'.format(request_dict))
  178. sign = request_dict.get('sign', None)
  179. serial_no = request_dict.get('serialNo', None)
  180. time_stamp = request_dict.get('timeStamp', None)
  181. if not CommonService.check_time_stamp_token(sign, time_stamp):
  182. return response.json(13)
  183. # 查询是否注册iccid
  184. unicom_device_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_no) \
  185. .values('serial_no', 'user_id', 'iccid')
  186. if not unicom_device_qs.exists():
  187. return response.json(173)
  188. iccid = unicom_device_qs[0]['iccid']
  189. data = {'iccids': iccid, 'operator': WXOperatorEnum.TELECOM.value}
  190. wx_tech = WXTechObject()
  191. res = wx_tech.delete_card_package(**data)
  192. if res['code'] == '0':
  193. UnicomComboExperienceHistory.objects.filter(iccid=iccid).delete()
  194. return response.json(0)
  195. return response.json(177)
  196. except Exception as e:
  197. LOGGER.info('*****WXTechController.delete_card_package:errLine:{}, errMsg:{}'
  198. .format(e.__traceback__.tb_lineno, repr(e)))
  199. return response.json(500, repr(e))