diff --git a/apps/ecm/migrations/0012_auto_20230901_0927.py b/apps/ecm/migrations/0012_auto_20230901_0927.py new file mode 100644 index 00000000..20dfbdb7 --- /dev/null +++ b/apps/ecm/migrations/0012_auto_20230901_0927.py @@ -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='触发方式'), + ), + ] diff --git a/apps/ecm/models.py b/apps/ecm/models.py index a05a9332..3cfd947a 100644 --- a/apps/ecm/models.py +++ b/apps/ecm/models.py @@ -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) diff --git a/apps/ecm/serializers.py b/apps/ecm/serializers.py index c74674dd..3e66b383 100644 --- a/apps/ecm/serializers.py +++ b/apps/ecm/serializers.py @@ -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): diff --git a/apps/ecm/service.py b/apps/ecm/service.py index f4b2f06a..2caa8095 100644 --- a/apps/ecm/service.py +++ b/apps/ecm/service.py @@ -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)