UnicomComboTaskController.py 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. # -*- encoding: utf-8 -*-
  2. """
  3. @File : UnicomComboTaskController.py
  4. @Time : 2022/6/30 16:23
  5. @Author : stephen
  6. @Email : zhangdongming@asj6.wecom.work
  7. @Software: PyCharm
  8. """
  9. import datetime
  10. import logging
  11. import time
  12. from django.db import transaction
  13. from django.views import View
  14. from Model.models import UnicomComboOrderInfo, UnicomCombo, Order_Model
  15. from Object.ResponseObject import ResponseObject
  16. from Object.UnicomObject import UnicomObjeect
  17. class UnicomComboTaskView(View):
  18. def get(self, request, *args, **kwargs):
  19. request.encoding = 'utf-8'
  20. operation = kwargs.get('operation')
  21. return self.validation(request.GET, request, operation)
  22. def post(self, request, *args, **kwargs):
  23. request.encoding = 'utf-8'
  24. operation = kwargs.get('operation')
  25. return self.validation(request.POST, request, operation)
  26. def validation(self, request_dict, request, operation):
  27. response = ResponseObject()
  28. print(request)
  29. if operation == 'check-activate':
  30. return self.check_activate_combo(request_dict, response)
  31. if operation == 'check-flow':
  32. return self.check_flow_usage(response)
  33. @classmethod
  34. def check_activate_combo(cls, request_dict, response):
  35. """
  36. 定时检查是否有次月激活套餐
  37. @param request_dict:
  38. @param response:
  39. @return:
  40. """
  41. logger = logging.getLogger('info')
  42. print(request_dict)
  43. logger.info('定时检查是否有次月激活联通套餐')
  44. now_time = int(time.time())
  45. combo_order_info_qs = UnicomComboOrderInfo.objects.filter(status=0, next_month_activate=True,
  46. activation_time__lte=now_time,
  47. expire_time__gte=now_time, is_del=0).values()
  48. if not combo_order_info_qs.exists():
  49. return response.json(0)
  50. try:
  51. now_time = int(time.time())
  52. today = datetime.datetime.today()
  53. year = today.year
  54. month = today.month
  55. with transaction.atomic():
  56. unicom_api = UnicomObjeect()
  57. for item in combo_order_info_qs:
  58. if item['order_id']:
  59. order_id = item['order_id']
  60. order_qs = Order_Model.objects.filter(orderID=order_id, status=1)
  61. if not order_qs.exists():
  62. continue
  63. combo_order_qs = UnicomComboOrderInfo.objects.filter(status=1, iccid=item['iccid'])
  64. # 当前已有套餐正在使用则跳出当前循环
  65. if combo_order_qs.exists():
  66. continue
  67. combo_id = item['combo_id']
  68. combo_qs = UnicomCombo.objects.filter(id=combo_id).values()
  69. if not combo_qs.exists():
  70. continue
  71. flow_total_usage = unicom_api.get_flow_usage_total(year, month, item['iccid'])
  72. flow_total_usage = str(flow_total_usage)
  73. params = {'iccid': item['iccid']}
  74. result = unicom_api.query_device_status(**params)
  75. res_dict = unicom_api.get_text_dict(result)
  76. # 状态不等于1(激活)时进行激活 1:激活;2:停用
  77. if res_dict['data']['status'] != 1:
  78. re_data = {"iccid": item['iccid'], "status": 1}
  79. unicom_api.update_device_state(**re_data)
  80. UnicomComboOrderInfo.objects.filter(id=item['id']) \
  81. .update(status=1, updated_time=now_time, year=year, month=month,
  82. flow_total_usage=flow_total_usage)
  83. else:
  84. UnicomComboOrderInfo.objects.filter(id=item['id']) \
  85. .update(status=1, updated_time=now_time, year=year, month=month,
  86. flow_total_usage=flow_total_usage)
  87. logger.info('激活成功,订单编号:{}'.format(order_id))
  88. return response.json(0)
  89. except Exception as e:
  90. print(e)
  91. return response.json(177, repr(e))
  92. @classmethod
  93. def check_flow_usage(cls, response):
  94. """
  95. 检查流量使用情况
  96. @return:
  97. """
  98. logger = logging.getLogger('info')
  99. logger.info('进入检查流量使用情况')
  100. try:
  101. combo_order_qs = UnicomComboOrderInfo.objects.filter(status=1).values()
  102. if not combo_order_qs.exists():
  103. return response.json(0)
  104. today = datetime.datetime.today()
  105. year = today.year
  106. month = today.month
  107. for item in combo_order_qs:
  108. iccid = item['iccid']
  109. usage_flow = float(item['flow_total_usage']) if item['flow_total_usage'] else 0.0
  110. combo_id = item['combo_id']
  111. combo_qs = UnicomCombo.objects.filter(id=combo_id).values()
  112. if combo_qs.exists():
  113. combo_qs = combo_qs.first()
  114. flow_total = combo_qs['flow_total']
  115. if item['year'] == year and item['month'] == month:
  116. # 查询当前月用量历史
  117. month_usage_flow = UnicomObjeect.get_flow_usage_total(year, month, iccid)
  118. logger.info('账单年:{},账单月:{},实际使用流量{}'.format(year, month, month_usage_flow))
  119. if month_usage_flow > 0:
  120. # 初始套餐已使用流量 + 套餐总流量
  121. flow = usage_flow + flow_total
  122. if flow <= month_usage_flow:
  123. logger.info('当前套餐{}已用完iccid:{}'.format(combo_qs['combo_name'], iccid))
  124. # 检查是否有当月未使用套餐 没有则停卡
  125. pass
  126. else:
  127. # 如自定义天数30天 涉及到跨月 把激活月已使用流量 加流量总值
  128. # 判断大于 (激活月已使用流量 + 跨月当月已用流量)则继续使用否则停卡或激活未使用套餐
  129. pass
  130. return response.json(0)
  131. except Exception as e:
  132. print(e)
  133. return response.json(177, repr(e))