feat: 增加事件等级等字段并进行相应处理

This commit is contained in:
caoqianming 2023-09-01 09:37:38 +08:00
parent 8e0724bbec
commit 83957c8e9c
4 changed files with 49 additions and 2 deletions

View File

@ -0,0 +1,33 @@
# Generated by Django 3.2.12 on 2023-09-01 01:27
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('ecm', '0011_event_global_img_compressed'),
]
operations = [
migrations.AddField(
model_name='event',
name='current_level',
field=models.PositiveSmallIntegerField(choices=[(10, '低风险'), (20, '一般风险'), (30, '较大风险'), (40, '重大风险')], default=10, help_text="((10, '低风险'), (20, '一般风险'), (30, '较大风险'), (40, '重大风险'))", verbose_name='当前等级'),
),
migrations.AddField(
model_name='eventcate',
name='is_auto_escalate',
field=models.BooleanField(default=False, verbose_name='是否自动升级'),
),
migrations.AddField(
model_name='eventcate',
name='origin_level',
field=models.PositiveSmallIntegerField(choices=[(10, '低风险'), (20, '一般风险'), (30, '较大风险'), (40, '重大风险')], default=10, help_text="((10, '低风险'), (20, '一般风险'), (30, '较大风险'), (40, '重大风险'))", verbose_name='初始等级'),
),
migrations.AlterField(
model_name='eventcate',
name='trigger',
field=models.PositiveSmallIntegerField(choices=[(10, '监控'), (20, '定位'), (30, '其他')], default=10, verbose_name='触发方式'),
),
]

View File

@ -6,6 +6,12 @@ from apps.utils.models import BaseModel, CommonADModel, CommonAModel, CommonBMod
from apps.system.models import Post, User
from apps.third.models import TDevice
# Create your models here.
LEVEL_CHOICES = (
(10, '低风险'),
(20, '一般风险'),
(30, '较大风险'),
(40, '重大风险')
)
class EventCate(CommonAModel):
@ -14,11 +20,13 @@ class EventCate(CommonAModel):
"""
EVENT_TRIGGER_CHOICES = (
(10, '监控'),
(20, '定位')
(20, '定位'),
(30, '其他')
)
code = models.CharField('标识', max_length=20)
name = models.CharField('名称', max_length=20, unique=True)
priority = models.PositiveSmallIntegerField('优先级', default=1, help_text='1-99')
origin_level = models.PositiveSmallIntegerField('初始等级', default = 10, choices=LEVEL_CHOICES, help_text=str(LEVEL_CHOICES))
trigger = models.PositiveSmallIntegerField('触发方式', default=10, choices=EVENT_TRIGGER_CHOICES)
self_algo = models.BooleanField('识别算法', default=False)
speaker_on = models.BooleanField('开启喇叭报警', default=True)
@ -31,6 +39,7 @@ class EventCate(CommonAModel):
handle_minute = models.PositiveSmallIntegerField('处理时间', default=0, help_text='超过处理时间事件状态变为超时未处理,0代表未配置')
same_allow_minute = models.PositiveSmallIntegerField('允许时间', default=0, help_text='同一对象同事件多长时间内不再触发, 0代表一直触发')
opl_cates = models.ManyToManyField(OplCate, verbose_name='关联许可证', blank=True)
is_auto_escalate = models.BooleanField('是否自动升级', default=False)
def __str__(self):
return self.name
@ -80,6 +89,7 @@ class Event(CommonBDModel):
(10, '正常'),
(20, '误报'),
)
current_level = models.PositiveSmallIntegerField('当前等级', default=10, choices=LEVEL_CHOICES, help_text=str(LEVEL_CHOICES))
cates = models.ManyToManyField(EventCate, verbose_name='关联事件种类', through='ecm.eventdo', related_name='event_cates')
face_img = models.CharField('人脸照', max_length=1000, null=True, blank=True)
global_img = models.CharField('全景照', max_length=1000, null=True, blank=True)

View File

@ -33,7 +33,7 @@ class EventCateUpdateSerializer(CustomModelSerializer):
class Meta:
model = EventCate
fields = ['speaker_on', 'speakers', 'filter_area_level',
'voice_person', 'handle_minute', 'voice_num', 'priority', 'same_allow_minute']
'voice_person', 'handle_minute', 'voice_num', 'priority', 'same_allow_minute', 'origin_level', 'is_auto_escalate']
class NotifySettingsSerializer(CustomModelSerializer):

View File

@ -361,12 +361,16 @@ def dispatch_dahua_event(data: dict):
event.employee = ep
event.happen_time = happen_time
event.save()
current_level = 10
for i in cates:
cate = EventCate.objects.get(id=i)
if cate.origin_level>current_level:
event.current_level = current_level
Eventdo.objects.get_or_create(cate=cate, event=event, defaults={
'cate': cate,
'event': event
})
event.save()
if event:
notify_event(event)