EquipmentMessagePush.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. # -*- encoding: utf-8 -*-
  2. """
  3. @File : EquipmentMessagePush.py
  4. @Time : 2022/5/16 11:46
  5. @Author : stephen
  6. @Email : zhangdongming@asj6.wecom.work
  7. @Software: PyCharm
  8. """
  9. import logging
  10. import time
  11. from django.db import transaction
  12. from django.views.generic.base import View
  13. from Model.models import AiService, UidSetModel
  14. from Object.ResponseObject import ResponseObject
  15. from Object.TokenObject import TokenObject
  16. from Service.CommonService import CommonService
  17. # 设备消息推送试图
  18. class EquipmentMessagePushView(View):
  19. def get(self, request, *args, **kwargs):
  20. request.encoding = 'utf-8'
  21. operation = kwargs.get('operation')
  22. return self.validation(request.GET, request, operation)
  23. def post(self, request, *args, **kwargs):
  24. request.encoding = 'utf-8'
  25. operation = kwargs.get('operation')
  26. return self.validation(request.POST, request, operation)
  27. def validation(self, request_dict, request, operation):
  28. token = TokenObject(request.META.get('HTTP_AUTHORIZATION'))
  29. lang = request_dict.get('lang', None)
  30. lang = lang if lang else token.lang
  31. response = ResponseObject(lang)
  32. if token.code != 0:
  33. return response.json(token.code)
  34. if operation is None:
  35. return response.json(444, 'error path')
  36. elif operation == 'update':
  37. return self.do_change_status_all(request_dict, response)
  38. elif operation == 'query':
  39. return self.do_uid_set_query(request_dict, response)
  40. @classmethod
  41. def do_uid_set_query(cls, request_dict, response):
  42. uid = request_dict.get('uid', None)
  43. if not uid:
  44. return response.json(444, 'uid')
  45. uid_set_qs = UidSetModel.objects.filter(uid=uid).order_by('-updTime')
  46. if uid_set_qs.exists():
  47. uid_set = uid_set_qs.first()
  48. data = {
  49. 'status': uid_set.is_notification,
  50. 'interval': uid_set.new_detect_interval
  51. }
  52. return response.json(0, res=data)
  53. return response.json(0)
  54. @classmethod
  55. def do_change_status_all(cls, request_dict, response):
  56. logger = logging.getLogger('info')
  57. status = request_dict.get('status', None)
  58. uid = request_dict.get('uid', None)
  59. interval = request_dict.get('interval', None)
  60. if not status:
  61. return response.json(444, 'status')
  62. if not uid:
  63. return response.json(444, 'uid')
  64. try:
  65. with transaction.atomic():
  66. n_time = int(time.time())
  67. status = int(status)
  68. uid_set_qs = UidSetModel.objects.filter(uid=uid)
  69. if not uid_set_qs.exists():
  70. qs_data = {
  71. 'uid': uid,
  72. 'addTime': n_time,
  73. 'updTime': n_time,
  74. }
  75. if interval:
  76. qs_data['new_detect_interval'] = int(interval)
  77. qs_data['is_notification'] = status
  78. UidSetModel.objects.create(**qs_data)
  79. if status == 1:
  80. if uid_set_qs.exists():
  81. qs_data = {
  82. 'updTime': n_time,
  83. }
  84. if interval:
  85. qs_data['new_detect_interval'] = int(interval)
  86. qs_data['is_notification'] = status
  87. uid_set_qs.update(**qs_data)
  88. if status == 0:
  89. ai_service_qs = AiService.objects.filter(uid=uid, use_status=1)
  90. if ai_service_qs.exists():
  91. qs_data = {'uid': uid, 'updTime': n_time, 'detect_status': status}
  92. ai_service_qs.update(**qs_data)
  93. topic_name = 'ansjer/generic/{}'.format(uid)
  94. # mqtt通知设备关闭AI识别功能
  95. msg = {'commandType': 'AIDisable'}
  96. req_success = CommonService.req_publish_mqtt_msg(uid, topic_name, msg)
  97. logger.info("推送>>>> mqtt回调:{}".format(req_success))
  98. if uid_set_qs.exists():
  99. uid_set_data = {'updTime': n_time, 'uid': uid, 'new_detect_interval': int(interval),
  100. 'detect_status': int(interval), 'is_notification': status}
  101. uid_set_qs.update(**uid_set_data)
  102. return response.json(0)
  103. except Exception as e:
  104. print(e)
  105. return response.json(500, repr(e))