EquipmentMessagePush.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  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, Device_Info
  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. device_qs = Device_Info.objects.filter(UID=uid)
  74. if not uid_set_qs.exists():
  75. qs_data = {
  76. 'uid': uid,
  77. 'addTime': n_time,
  78. 'updTime': n_time,
  79. 'device_type': device_qs[0].Type if device_qs.exists() else 0
  80. }
  81. if interval:
  82. qs_data['new_detect_interval'] = int(interval)
  83. qs_data['is_notification'] = status
  84. UidSetModel.objects.create(**qs_data)
  85. if status == 1:
  86. if uid_set_qs.exists():
  87. qs_data = {
  88. 'updTime': n_time,
  89. }
  90. if interval:
  91. qs_data['new_detect_interval'] = int(interval)
  92. qs_data['is_notification'] = status
  93. uid_set_qs.update(**qs_data)
  94. if status == 0:
  95. ai_service_qs = AiService.objects.filter(uid=uid, use_status=1)
  96. if ai_service_qs.exists():
  97. qs_data = {'uid': uid, 'updTime': n_time, 'detect_status': status}
  98. ai_service_qs.update(**qs_data)
  99. topic_name = 'ansjer/generic/{}'.format(uid)
  100. # mqtt通知设备关闭AI识别功能
  101. msg = {'commandType': 'AIDisable'}
  102. req_success = CommonService.req_publish_mqtt_msg(uid, topic_name, msg)
  103. logger.info("推送>>>> mqtt回调:{}".format(req_success))
  104. if uid_set_qs.exists():
  105. uid_set_data = {'updTime': n_time, 'uid': uid, 'new_detect_interval': int(interval),
  106. 'detect_status': int(interval), 'is_notification': status}
  107. uid_set_qs.update(**uid_set_data)
  108. return response.json(0)
  109. except Exception as e:
  110. print(e)
  111. return response.json(500, repr(e))