PowerWarningController.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. # -*- coding: utf-8 -*-
  2. """
  3. @Author : Rocky
  4. @Time : 2022/9/16 10:39
  5. @File :PowerWarningController.py
  6. """
  7. import logging
  8. import time
  9. from django.http import JsonResponse
  10. from django.views.generic.base import View
  11. from Model.models import UidPushModel, SysMsgModel, Device_Info
  12. from Object.RedisObject import RedisObject
  13. from Service.HuaweiPushService.HuaweiPushService import HuaweiPushObject
  14. from Service.PushService import PushObject
  15. class PowerWarningView(View):
  16. # 低电量推送接口
  17. def get(self, request, *args, **kwargs):
  18. request.encoding = 'utf-8'
  19. return self.validation(request.GET)
  20. def post(self, request, *args, **kwargs):
  21. request.encoding = 'utf-8'
  22. return self.validation(request.POST)
  23. @staticmethod
  24. def validation(request_dict):
  25. logger = logging.getLogger('info')
  26. uid = request_dict.get('uid', None)
  27. # 限制每6小时推一次
  28. redis_obj = RedisObject()
  29. is_limit = redis_obj.CONN.setnx(uid + 'limit_power_warning', 1)
  30. redis_obj.CONN.expire(uid + 'limit_power_warning', 6 * 60 * 60)
  31. if not is_limit:
  32. return JsonResponse(status=200, data={'code': 0, 'msg': 'push limited!'})
  33. channel = request_dict.get('channel', None)
  34. electricity = request_dict.get('electricity', None)
  35. logger.info('调用低电量推送接口的uid: {},electricity: {}'.format(uid, electricity))
  36. try:
  37. uid_push_qs = UidPushModel.objects.filter(uid_set__uid=uid). \
  38. values('push_type', 'appBundleId', 'token_val', 'lang', 'tz', 'userID_id')
  39. if not uid_push_qs.exists():
  40. res_data = {'code': 173, 'msg': 'uid push data not exit!'}
  41. return JsonResponse(status=200, data=res_data)
  42. uid_push_list = [uid_push for uid_push in uid_push_qs]
  43. # 查询设备数据
  44. device_info_qs = Device_Info.objects.filter(UID=uid).first()
  45. nickname = uid if device_info_qs is None else device_info_qs.NickName
  46. now_time = int(time.time())
  47. event_type = 704
  48. sys_msg_list = []
  49. user_id_list = []
  50. for uid_push in uid_push_list:
  51. push_type = uid_push['push_type']
  52. app_bundle_id = uid_push['appBundleId']
  53. token_val = uid_push['token_val']
  54. lang = uid_push['lang']
  55. tz = uid_push['tz']
  56. if tz is None or tz == '':
  57. tz = 0
  58. # 推送标题和推送内容
  59. msg_title = PushObject.get_msg_title(nickname=nickname)
  60. msg_text = PushObject.get_low_power_msg_text(channel=channel, n_time=now_time, lang=lang, tz=tz,
  61. electricity=electricity)
  62. kwargs = {
  63. 'nickname': nickname,
  64. 'app_bundle_id': app_bundle_id,
  65. 'token_val': token_val,
  66. 'n_time': now_time,
  67. 'event_type': event_type,
  68. 'msg_title': msg_title,
  69. 'msg_text': msg_text,
  70. 'uid': uid,
  71. 'channel': channel,
  72. }
  73. try:
  74. # 推送消息
  75. if push_type == 0: # ios apns
  76. PushObject.ios_apns_push(**kwargs)
  77. elif push_type == 1: # android gcm
  78. PushObject.android_fcm_push_v1(**kwargs)
  79. elif push_type == 2: # android jpush
  80. kwargs.pop('uid')
  81. PushObject.android_jpush(**kwargs)
  82. elif push_type == 3:
  83. huawei_push_object = HuaweiPushObject()
  84. huawei_push_object.send_push_notify_message(**kwargs)
  85. elif push_type == 4: # android 小米推送
  86. channel_id = 104551
  87. PushObject.android_xmpush(channel_id=channel_id, **kwargs)
  88. elif push_type == 5: # android vivo推送
  89. PushObject.android_vivopush(**kwargs)
  90. elif push_type == 6: # android oppo推送
  91. channel_id = 'VALUE_ADDED'
  92. PushObject.android_oppopush(channel_id=channel_id, **kwargs)
  93. elif push_type == 7: # android 魅族推送
  94. PushObject.android_meizupush(**kwargs)
  95. except Exception as e:
  96. logger.info('低电量推送消息异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  97. continue
  98. # 保存系统消息
  99. user_id = uid_push['userID_id']
  100. if user_id not in user_id_list:
  101. sys_msg_text = PushObject.get_low_power_msg_text(channel=channel, n_time=now_time, lang=lang, tz=tz,
  102. electricity=electricity, is_sys=1)
  103. sys_msg_list.append(SysMsgModel(
  104. userID_id=user_id,
  105. msg=sys_msg_text,
  106. addTime=now_time,
  107. updTime=now_time,
  108. uid=uid,
  109. eventType=event_type,
  110. ))
  111. user_id_list.append(user_id)
  112. SysMsgModel.objects.bulk_create(sys_msg_list)
  113. return JsonResponse(status=200, data={'code': 0})
  114. except Exception as e:
  115. logger.info('低电量推送接口异常: {}'.format(e))
  116. return JsonResponse(status=500, data={'msg': 'power warning error'})