Browse Source

AI推送保存标签

zhangdongming 2 years ago
parent
commit
9c2cf7be7a
3 changed files with 105 additions and 65 deletions
  1. 29 65
      Controller/AiController.py
  2. 45 0
      Model/models.py
  3. 31 0
      Object/enums/MessageTypeEnum.py

+ 29 - 65
Controller/AiController.py

@@ -23,11 +23,12 @@ from AnsjerPush.config import AI_IDENTIFICATION_TAGS_DICT, CONFIG_US, CONFIG_EUR
 from AnsjerPush.config import AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, APNS_MODE, APNS_CONFIG, BASE_DIR, \
 from AnsjerPush.config import AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, APNS_MODE, APNS_CONFIG, BASE_DIR, \
     JPUSH_CONFIG, FCM_CONFIG
     JPUSH_CONFIG, FCM_CONFIG
 from AnsjerPush.config import CONFIG_INFO
 from AnsjerPush.config import CONFIG_INFO
-from Model.models import UidPushModel, AiService
+from Model.models import UidPushModel, AiService, VodHlsTag, VodHlsTagType
 from Object import MergePic
 from Object import MergePic
 from Object.ETkObject import ETkObject
 from Object.ETkObject import ETkObject
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
+from Object.enums.MessageTypeEnum import MessageTypeEnum
 from Object.utils import LocalDateTimeUtil
 from Object.utils import LocalDateTimeUtil
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
 from Service.EquipmentInfoService import EquipmentInfoService
 from Service.EquipmentInfoService import EquipmentInfoService
@@ -248,12 +249,13 @@ class AiView(View):
                     logger.info(
                     logger.info(
                         "errLine={errLine}, errMsg={errMsg}".format(errLine=e.__traceback__.tb_lineno, errMsg=repr(e)))
                         "errLine={errLine}, errMsg={errMsg}".format(errLine=e.__traceback__.tb_lineno, errMsg=repr(e)))
                     continue
                     continue
+            week = LocalDateTimeUtil.date_to_week(local_date_time)
             # 分表批量存储
             # 分表批量存储
             if eq_list and len(eq_list) > 0:
             if eq_list and len(eq_list) > 0:
                 logger.info("AI存库中........")
                 logger.info("AI存库中........")
-                week = LocalDateTimeUtil.date_to_week(local_date_time)
                 result = EquipmentInfoService.equipment_info_bulk_create(week, eq_list)
                 result = EquipmentInfoService.equipment_info_bulk_create(week, eq_list)
                 logger.info("-.-存库结果{}".format(result))
                 logger.info("-.-存库结果{}".format(result))
+            AiView.save_cloud_ai_tag(uid, int(n_time), eventType, week)
             return response.json(0)
             return response.json(0)
 
 
         except Exception as e:
         except Exception as e:
@@ -428,69 +430,31 @@ class AiView(View):
             send_text = '{msg} channel:{channel} date:{date}'.format(msg=msg, channel=channel, date=n_date)
             send_text = '{msg} channel:{channel} date:{date}'.format(msg=msg, channel=channel, date=n_date)
         return send_text
         return send_text
 
 
-    def do_jpush(self, uid, channel, appBundleId, token_val, event_type, n_time, msg_title, msg_text):
-        app_key = JPUSH_CONFIG[appBundleId]['Key']
-        master_secret = JPUSH_CONFIG[appBundleId]['Secret']
-        # 此处换成各自的app_key和master_secre
-        _jpush = jpush.JPush(app_key, master_secret)
-        push = _jpush.create_push()
-        push.audience = jpush.registration_id(token_val)
-        push_data = {"alert": "Motion ", "event_time": n_time, "event_type": event_type, "msg": "",
-                     "received_at": n_time, "sound": "sound.aif", "uid": uid, "zpush": "1", "channel": channel}
-        android = jpush.android(alert=msg_text, priority=1, style=1, alert_type=7,
-                                big_text=msg_text, title=msg_title,
-                                extras=push_data)
-        push.notification = jpush.notification(android=android)
-        push.platform = jpush.all_
-        res = push.send()
-        print(res)
-        return res.status_code
-
-    def do_fcm(self, uid, channel, appBundleId, token_val, event_type, n_time, msg_title, msg_text):
-        try:
-
-            serverKey = FCM_CONFIG[appBundleId]
-            push_service = FCMNotification(api_key=serverKey)
-            data = {"alert": "Motion ", "event_time": n_time, "event_type": event_type, "msg": "",
-                    "received_at": n_time, "sound": "sound.aif", "uid": uid, "zpush": "1", "channel": channel}
-            result = push_service.notify_single_device(registration_id=token_val, message_title=msg_title,
-                                                       message_body=msg_text, data_message=data,
-                                                       extra_kwargs={
-                                                           'default_vibrate_timings': True,
-                                                           'default_sound': True,
-                                                           'default_light_settings': True
-                                                       })
-            print('fcm push ing')
-            print(result)
-            return result
-        except Exception as e:
-            return 'serverKey abnormal'
-
-    def do_apns(self, uid, channel, appBundleId, token_val, event_type, n_time, msg_title, msg_text):
-        logger = logging.getLogger('info')
-        logger.info("进来do_apns函数了")
-        logger.info(token_val)
-        logger.info(APNS_MODE)
-        logger.info(os.path.join(BASE_DIR, APNS_CONFIG[appBundleId]['pem_path']))
+    @classmethod
+    def save_cloud_ai_tag(cls, uid, event_time, types, week):
+        """
+        保存云存AI标签
+        """
         try:
         try:
-            cli = apns2.APNSClient(mode=APNS_MODE,
-                                   client_cert=os.path.join(BASE_DIR, APNS_CONFIG[appBundleId]['pem_path']))
-            push_data = {"alert": "Motion ", "event_time": n_time, "event_type": event_type, "msg": "",
-                         "received_at": n_time, "sound": "", "uid": uid, "zpush": "1", "channel": channel}
-            alert = apns2.PayloadAlert(body=msg_text, title=msg_title)
-            payload = apns2.Payload(alert=alert, custom=push_data, sound="default")
-            n = apns2.Notification(payload=payload, priority=apns2.PRIORITY_LOW)
-            res = cli.push(n=n, device_token=token_val, topic=appBundleId)
-
-            if res.status_code == 200:
-                return res.status_code
+            types = str(types)
+            if not types:
+                return False
+            n_time = int(time.time())
+            vod_hls_tag = {"uid": uid, "ai_event_time": event_time, "created_time": n_time, 'tab_num': int(week)}
+            vod_tag_vo = VodHlsTag.objects.create(**vod_hls_tag)
+            tag_list = []
+            if len(types) > 1:
+                for i in range(1, len(types) + 1):
+                    ai_type = MessageTypeEnum(int(types[i - 1:i]))
+                    vod_tag_type_vo = VodHlsTagType(tag_id=vod_tag_vo.id, created_time=n_time, type=ai_type.value)
+                    tag_list.append(vod_tag_type_vo)
             else:
             else:
-                logger.info('apns push fail')
-                logger.info(res.reason)
-                return res.status_code
-        except (ValueError, ArithmeticError):
-            return 'The program has a numeric format exception, one of the arithmetic exceptions'
+                ai_type = MessageTypeEnum(int(types))
+                vod_tag_type_vo = {"tag_id": vod_tag_vo.id, "created_time": n_time, "type": ai_type.value}
+                VodHlsTagType.objects.create(**vod_tag_type_vo)
+            if tag_list:
+                VodHlsTagType.objects.bulk_create(tag_list)
+            return True
         except Exception as e:
         except Exception as e:
-            print(repr(e))
-            logger.info(repr(e))
-            return repr(e)
+            print('AI标签存储异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return False

+ 45 - 0
Model/models.py

@@ -2489,3 +2489,48 @@ class DeviceTypeSharePermission(models.Model):
         db_table = 'device_type_share_permission'
         db_table = 'device_type_share_permission'
         verbose_name = '设备类型关联分享权限'
         verbose_name = '设备类型关联分享权限'
         verbose_name_plural = verbose_name
         verbose_name_plural = verbose_name
+
+
+class VodHlsTag(models.Model):
+    id = models.AutoField(primary_key=True, verbose_name='自增id')
+    uid = models.CharField(blank=True, db_index=True, max_length=32, verbose_name=u'设备UID')
+    vod_hls_id = models.IntegerField(default=0, db_index=True, verbose_name='云存hlsId')
+    tab_num = models.SmallIntegerField(default=0, verbose_name='所在表编号')
+    ai_event_time = models.IntegerField(default=0, db_index=True, verbose_name='ai事件事件')
+    created_time = models.IntegerField(default=0, verbose_name='创建时间')
+
+    class Meta:
+        db_table = 'vod_hls_tag'
+        verbose_name = '云存hls标签'
+        verbose_name_plural = verbose_name
+
+
+class VodHlsTagType(models.Model):
+    id = models.AutoField(primary_key=True, verbose_name='自增id')
+    tag_id = models.IntegerField(default=0, db_index=True, verbose_name='云存关联AI标签ID')
+    type = models.SmallIntegerField(default=0, db_index=True, verbose_name='标签类型')
+    created_time = models.IntegerField(default=0, verbose_name='创建时间')
+
+    class Meta:
+        db_table = 'vod_hls_tag_type'
+        verbose_name = '云存hls关联标签类型'
+        verbose_name_plural = verbose_name
+
+
+class SocketInfo(models.Model):
+    id = models.AutoField(primary_key=True, verbose_name='自增id')
+    device_id = models.CharField(max_length=32, default='', verbose_name='设备id')
+    serial_number = models.CharField(db_index=True, max_length=20,
+                                     verbose_name='序列号')
+    online = models.BooleanField(default=False, verbose_name='在线状态False:不在线,True:在线')
+    type_switch = models.SmallIntegerField(default=0,
+                                           verbose_name='开关类型 0:总开关,1:倒计时开关')
+    status = models.BooleanField(default=False, verbose_name='开关状态 0:关闭,1:开启')
+    count_down_time = models.IntegerField(default=0, verbose_name='倒计时时间戳')
+    created_time = models.IntegerField(default=0, verbose_name='创建时间')
+    updated_time = models.IntegerField(default=0, verbose_name='创建时间')
+
+    class Meta:
+        db_table = 's_socket_info'
+        verbose_name = '插座信息'
+        verbose_name_plural = verbose_name

+ 31 - 0
Object/enums/MessageTypeEnum.py

@@ -0,0 +1,31 @@
+# -*- encoding: utf-8 -*-
+"""
+@File    : MessageTypeEnum.py
+@Time    : 2023/2/13 15:50
+@Author  : stephen
+@Email   : zhangdongming@asj6.wecom.work
+@Software: PyCharm
+"""
+from enum import IntEnum, unique
+
+
+@unique
+class MessageTypeEnum(IntEnum):
+    AI_HUMAN_SHAPE = 1  # ai人形
+    AI_CAT = 2  # ai车型
+    AI_PET = 3  # ai宠物
+    AI_PARCEL = 4  # ai包裹
+    MOTION_DETECTION = 51  # 移动侦测
+    SENSOR_ALARM = 52  # 传感器报警
+    IMAGE_LOSS = 53  # 影像遗失
+    PIR = 54  # PIR
+    DOOR_MAGNETIC_ALARM = 55  # 门磁报警
+    EXTERNAL_TRANSMISSION = 56  # 外部发报
+    HUMAN_SHAPE = 57  # 人形报警
+    CAT = 58  # 车型
+    PET = 59  # 宠物
+    FACE = 60  # 人脸
+    ABNORMAL_SOUND = 61  # 异响
+    CAMERA_SLEEP = 702  # 摄像头休眠
+    CAMERA_WAKE_UP = 703  # 摄像头唤醒
+    LOW_BATTERY = 704  # 电量过低