EquipmentMessagePush.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  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. logger = logging.getLogger('info')
  31. logger.info("传参语言{}".format(lang))
  32. lang = lang if lang else token.lang
  33. response = ResponseObject(lang)
  34. if token.code != 0:
  35. return response.json(token.code)
  36. if operation is None:
  37. return response.json(444, 'error path')
  38. elif operation == 'update':
  39. return self.do_change_status_all(request_dict, response)
  40. elif operation == 'query':
  41. return self.do_uid_set_query(request_dict, response)
  42. @classmethod
  43. def do_uid_set_query(cls, request_dict, response):
  44. logger = logging.getLogger('info')
  45. uid = request_dict.get('uid', None)
  46. logger.info("----查询状态打印uid{}".format(uid))
  47. if not uid:
  48. return response.json(444, 'uid')
  49. uid_set_qs = UidSetModel.objects.filter(uid=uid).order_by('-updTime')
  50. if uid_set_qs.exists():
  51. uid_set = uid_set_qs.first()
  52. data = {
  53. 'status': uid_set.is_notification,
  54. 'interval': uid_set.new_detect_interval
  55. }
  56. return response.json(0, res=data)
  57. return response.json(0)
  58. @classmethod
  59. def do_change_status_all(cls, request_dict, response):
  60. logger = logging.getLogger('info')
  61. status = request_dict.get('status', None)
  62. uid = request_dict.get('uid', None)
  63. interval = request_dict.get('interval', None)
  64. if not status:
  65. return response.json(444, 'status')
  66. if not uid:
  67. return response.json(444, 'uid')
  68. try:
  69. with transaction.atomic():
  70. n_time = int(time.time())
  71. status = int(status)
  72. uid_set_qs = UidSetModel.objects.filter(uid=uid)
  73. if not uid_set_qs.exists():
  74. qs_data = {
  75. 'uid': uid,
  76. 'addTime': n_time,
  77. 'updTime': n_time,
  78. }
  79. if interval:
  80. qs_data['new_detect_interval'] = int(interval)
  81. qs_data['is_notification'] = status
  82. UidSetModel.objects.create(**qs_data)
  83. if status == 1:
  84. if uid_set_qs.exists():
  85. qs_data = {
  86. 'updTime': n_time,
  87. }
  88. if interval:
  89. qs_data['new_detect_interval'] = int(interval)
  90. qs_data['is_notification'] = status
  91. uid_set_qs.update(**qs_data)
  92. if status == 0:
  93. ai_service_qs = AiService.objects.filter(uid=uid, use_status=1)
  94. if ai_service_qs.exists():
  95. qs_data = {'uid': uid, 'updTime': n_time, 'detect_status': status}
  96. ai_service_qs.update(**qs_data)
  97. topic_name = 'ansjer/generic/{}'.format(uid)
  98. # mqtt通知设备关闭AI识别功能
  99. msg = {'commandType': 'AIDisable'}
  100. req_success = CommonService.req_publish_mqtt_msg(uid, topic_name, msg)
  101. logger.info("推送>>>> mqtt回调:{}".format(req_success))
  102. if uid_set_qs.exists():
  103. uid_set_data = {'updTime': n_time, 'uid': uid, 'new_detect_interval': int(interval),
  104. 'detect_status': int(interval), 'is_notification': status}
  105. uid_set_qs.update(**uid_set_data)
  106. return response.json(0)
  107. except Exception as e:
  108. print(e)
  109. return response.json(500, repr(e))