|
@@ -0,0 +1,113 @@
|
|
|
+# -*- encoding: utf-8 -*-
|
|
|
+"""
|
|
|
+@File : EquipmentMessagePush.py
|
|
|
+@Time : 2022/5/16 11:46
|
|
|
+@Author : stephen
|
|
|
+@Email : zhangdongming@asj6.wecom.work
|
|
|
+@Software: PyCharm
|
|
|
+"""
|
|
|
+
|
|
|
+import logging
|
|
|
+import time
|
|
|
+
|
|
|
+from django.db import transaction
|
|
|
+from django.views.generic.base import View
|
|
|
+
|
|
|
+from Model.models import AiService, UidSetModel
|
|
|
+from Object.ResponseObject import ResponseObject
|
|
|
+from Object.TokenObject import TokenObject
|
|
|
+from Service.CommonService import CommonService
|
|
|
+
|
|
|
+
|
|
|
+# 设备消息推送试图
|
|
|
+class EquipmentMessagePushView(View):
|
|
|
+ def get(self, request, *args, **kwargs):
|
|
|
+ request.encoding = 'utf-8'
|
|
|
+ operation = kwargs.get('operation')
|
|
|
+ return self.validation(request.GET, request, operation)
|
|
|
+
|
|
|
+ def post(self, request, *args, **kwargs):
|
|
|
+ request.encoding = 'utf-8'
|
|
|
+ operation = kwargs.get('operation')
|
|
|
+ return self.validation(request.POST, request, operation)
|
|
|
+
|
|
|
+ def validation(self, request_dict, request, operation):
|
|
|
+ token = TokenObject(request.META.get('HTTP_AUTHORIZATION'))
|
|
|
+ lang = request_dict.get('lang', None)
|
|
|
+ lang = lang if lang else token.lang
|
|
|
+ response = ResponseObject(lang)
|
|
|
+ if token.code != 0:
|
|
|
+ return response.json(token.code)
|
|
|
+ if operation is None:
|
|
|
+ return response.json(444, 'error path')
|
|
|
+ elif operation == 'update':
|
|
|
+ return self.do_change_status_all(request_dict, response)
|
|
|
+ elif operation == 'query':
|
|
|
+ return self.do_uid_set_query(request_dict, response)
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def do_uid_set_query(cls, request_dict, response):
|
|
|
+ uid = request_dict.get('uid', None)
|
|
|
+ if not uid:
|
|
|
+ return response.json(444, 'uid')
|
|
|
+ uid_set_qs = UidSetModel.objects.filter(uid=uid).order_by('-updTime')
|
|
|
+ if uid_set_qs.exists():
|
|
|
+ uid_set = uid_set_qs.first()
|
|
|
+ data = {
|
|
|
+ 'status': uid_set.is_notification,
|
|
|
+ 'interval': uid_set.new_detect_interval
|
|
|
+ }
|
|
|
+ return response.json(0, res=data)
|
|
|
+ return response.json(0)
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def do_change_status_all(cls, request_dict, response):
|
|
|
+ logger = logging.getLogger('info')
|
|
|
+ status = request_dict.get('status', None)
|
|
|
+ uid = request_dict.get('uid', None)
|
|
|
+ interval = request_dict.get('interval', None)
|
|
|
+ if not status:
|
|
|
+ return response.json(444, 'status')
|
|
|
+ if not uid:
|
|
|
+ return response.json(444, 'uid')
|
|
|
+ try:
|
|
|
+ with transaction.atomic():
|
|
|
+ n_time = int(time.time())
|
|
|
+ status = int(status)
|
|
|
+ uid_set_qs = UidSetModel.objects.filter(uid=uid)
|
|
|
+ if not uid_set_qs.exists():
|
|
|
+ qs_data = {
|
|
|
+ 'uid': uid,
|
|
|
+ 'addTime': n_time,
|
|
|
+ 'updTime': n_time,
|
|
|
+ }
|
|
|
+ if interval:
|
|
|
+ qs_data['new_detect_interval'] = int(interval)
|
|
|
+ qs_data['is_notification'] = status
|
|
|
+ UidSetModel.objects.create(**qs_data)
|
|
|
+ if uid_set_qs.exists() and status == 1:
|
|
|
+ qs_data = {
|
|
|
+ 'updTime': n_time,
|
|
|
+ }
|
|
|
+ if interval:
|
|
|
+ qs_data['new_detect_interval'] = int(interval)
|
|
|
+ qs_data['is_notification'] = status
|
|
|
+ uid_set_qs.update(**qs_data)
|
|
|
+ if status == 0:
|
|
|
+ ai_service_qs = AiService.objects.filter(uid=uid, use_status=1)
|
|
|
+ if ai_service_qs.exists():
|
|
|
+ qs_data = {'uid': uid, 'updTime': n_time, 'detect_status': status}
|
|
|
+ ai_service_qs.update(**qs_data)
|
|
|
+ topic_name = 'ansjer/generic/{}'.format(uid)
|
|
|
+ # mqtt通知设备关闭AI识别功能
|
|
|
+ msg = {'commandType': 'AIDisable'}
|
|
|
+ req_success = CommonService.req_publish_mqtt_msg(uid, topic_name, msg)
|
|
|
+ logger.info("推送>>>> mqtt回调:{}".format(req_success))
|
|
|
+ if uid_set_qs.exists():
|
|
|
+ uid_set_data = {'updTime': n_time, 'uid': uid, 'new_detect_interval': int(interval),
|
|
|
+ 'detect_status': int(interval)}
|
|
|
+ uid_set_qs.update(**uid_set_data)
|
|
|
+ return response.json(0)
|
|
|
+ except Exception as e:
|
|
|
+ print(e)
|
|
|
+ return response.json(500, repr(e))
|