ソースを参照

新增消息提醒设置API

zhangdongming 3 年 前
コミット
7eddb55445

+ 3 - 0
Ansjer/urls.py

@@ -21,6 +21,7 @@ from Controller import FeedBack, EquipmentOTA, EquipmentInfo, AdminManage, AppIn
     DetectControllerV2, ShadowController, TestDetectController, PcInfo, PctestController, DeviceDebug, PaymentCycle, \
     DeviceLogController, CouponController, AiController
 from Controller.Surveys import CloudStorageController
+from Controller.MessagePush import EquipmentMessagePush
 from Controller.Cron import CronTaskController
 from AdminController import UserManageController, RoleController, MenuController, TestServeController, \
     ServeManagementController, LogManagementController, DeviceManagementController, VersionManagementController, \
@@ -242,6 +243,8 @@ urlpatterns = [
 
     # AI服务
     url(r'^AiService/(?P<operation>.*)$', AiController.AiView.as_view()),
+    # 消息提醒
+    url(r'^app/setting/notification/(?P<operation>.*)$', EquipmentMessagePush.EquipmentMessagePushView.as_view()),
 
     # 新增解密的接口
     url(r'^v3/account/changePwd$', UserController.v3ChangePwdView.as_view()),

+ 1 - 0
Controller/AiController.py

@@ -148,6 +148,7 @@ class AiView(View):
             uid_set_qs = UidSetModel.objects.filter(uid=uid)
             if uid_set_qs.exists():
                 uid_set_id = uid_set_qs[0].id
+                interval = uid_set_qs[0].new_detect_interval if not interval else interval
                 qs_data = {
                     'updTime': nowTime,
                 }

+ 3 - 1
Controller/DetectControllerV2.py

@@ -147,7 +147,9 @@ class DetectControllerViewV2(View):
             # 检测类型
             if detect_group:
                 uid_set_data['detect_group'] = detect_group
-
+            uid_set = UidSetModel.objects.filter(uid=uid).order_by('-updTime')
+            if uid_set.exists():
+                interval = uid_set.first().new_detect_interval if not interval else interval
             # 设置消息推送间隔
             if interval:
                 interval = int(interval)

+ 113 - 0
Controller/MessagePush/EquipmentMessagePush.py

@@ -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))

+ 3 - 0
Model/models.py

@@ -1137,6 +1137,9 @@ class UidSetModel(models.Model):
     double_wifi = models.IntegerField(default=0, verbose_name='是否支持双频wifi。0:不支持,1:支持')
     is_ptz = models.IntegerField(default=0, verbose_name='是否支持云台。0:不支持,1:支持')
     is_ai = models.IntegerField(default=2, verbose_name='是否支持ai')  # 0,关闭,1开启,2,不支持
+    is_notification = models.IntegerField(blank=True, default=1, verbose_name='新加-消息提醒开关')  # 0:关闭,1:开启
+    new_detect_interval = models.IntegerField(blank=True, verbose_name='新加-消息提醒间隔', default=60)  # 秒
+
     class Meta:
         db_table = 'uid_set'
         verbose_name = u'设备配置表'