摄像头设置加载算法

This commit is contained in:
曹前明 2022-07-01 11:38:38 +08:00
parent 0f87ebf263
commit 9889ba3475
12 changed files with 216 additions and 19 deletions

View File

@ -1,7 +1,6 @@
from django.db import models
from apps.hrm.models import Employee
from apps.system.models import Dept, Post, User
from apps.utils.constants import ObjCate
from apps.utils.models import CommonADModel, CommonBModel
# Create your models here.

View File

@ -0,0 +1,93 @@
# Generated by Django 3.2.12 on 2022-07-01 01:15
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('system', '0005_auto_20220627_0836'),
('ecm', '0005_auto_20220620_1517'),
]
operations = [
migrations.RemoveField(
model_name='event',
name='cate',
),
migrations.AddField(
model_name='event',
name='mark',
field=models.PositiveSmallIntegerField(default=10, verbose_name='事件标记'),
),
migrations.AddField(
model_name='event',
name='msg',
field=models.TextField(blank=True, null=True, verbose_name='事件文本'),
),
migrations.AddField(
model_name='event',
name='state',
field=models.PositiveSmallIntegerField(default=10, verbose_name='事件状态'),
),
migrations.AddField(
model_name='eventcate',
name='hanle_minute',
field=models.PositiveSmallIntegerField(default=0, help_text='超过处理时间事件状态变为超时未处理,0代表未配置', verbose_name='处理时间'),
),
migrations.AddField(
model_name='eventcate',
name='voice_person',
field=models.PositiveSmallIntegerField(default=0, help_text='0女声3男声', verbose_name='声音选择'),
),
migrations.AddField(
model_name='notifysetting',
name='obj_cate',
field=models.CharField(default='post', help_text='post岗位/user用户/var变量', max_length=20, verbose_name='提醒对象'),
preserve_default=False,
),
migrations.AddField(
model_name='notifysetting',
name='user',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='提醒用户'),
),
migrations.AddField(
model_name='notifysetting',
name='var',
field=models.CharField(blank=True, max_length=20, null=True, verbose_name='提醒变量'),
),
migrations.AlterField(
model_name='remind',
name='dept',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.dept', verbose_name='部门'),
),
migrations.AlterField(
model_name='remind',
name='notify_setting',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ecm.notifysetting', verbose_name='通过哪个配置'),
),
migrations.AlterField(
model_name='remind',
name='post',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.post', verbose_name='岗位'),
),
migrations.CreateModel(
name='Eventdo',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('handle_time', models.DateTimeField(blank=True, null=True, verbose_name='处理时间')),
('handle_desc', models.TextField(blank=True, null=True, verbose_name='处理描述')),
('cate', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ecm.eventcate', verbose_name='关联事件种类')),
('event', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ecm.event', verbose_name='关联事件')),
('handle_user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='处理人')),
],
),
migrations.AddField(
model_name='event',
name='cates',
field=models.ManyToManyField(through='ecm.Eventdo', to='ecm.EventCate', verbose_name='关联事件种类'),
),
]

View File

@ -0,0 +1,52 @@
# Generated by Django 3.2.12 on 2022-07-01 03:37
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('ecm', '0006_auto_20220701_0915'),
]
operations = [
migrations.RenameField(
model_name='event',
old_name='people',
new_name='employee',
),
migrations.RemoveField(
model_name='event',
name='peope_type',
),
migrations.RemoveField(
model_name='event',
name='state',
),
migrations.AddField(
model_name='event',
name='obj_cate',
field=models.CharField(default='people', help_text='people(人员)/...', max_length=20, verbose_name='发生对象'),
preserve_default=False,
),
migrations.AddField(
model_name='event',
name='voice',
field=models.TextField(blank=True, null=True, verbose_name='语音地址'),
),
migrations.AddField(
model_name='eventcate',
name='self_algo',
field=models.BooleanField(default=False, verbose_name='识别算法'),
),
migrations.AlterField(
model_name='event',
name='mark',
field=models.PositiveSmallIntegerField(default=10, help_text='10(正常)/20(误报)', verbose_name='事件标记'),
),
migrations.AlterField(
model_name='notifysetting',
name='var',
field=models.CharField(blank=True, help_text='self(本人)/area_manager(区域负责人)/visit_receptionist(访客接待人)', max_length=20, null=True, verbose_name='提醒变量'),
),
]

View File

@ -1,6 +1,7 @@
from django.db import models
from apps.am.models import Area
from apps.hrm.models import Employee
from apps.utils.constants import Algo
from apps.utils.models import BaseModel, CommonAModel, CommonBModel
from apps.system.models import Dept, File, Post, User
from apps.third.models import TDevice
@ -19,7 +20,9 @@ class EventCate(CommonAModel):
code = models.CharField('标识', max_length=10, unique=True)
name = models.CharField('名称', max_length=20, unique=True)
trigger = models.PositiveSmallIntegerField('触发方式', default=10, choices=EVENT_TRIGGER_CHOICES)
self_algo = models.BooleanField('识别算法', default=False)
speaker_on = models.BooleanField('开启音响报警', default=True)
voice_person = models.PositiveSmallIntegerField('声音选择', default=0, help_text='0女声3男声')
speakers = models.ManyToManyField(TDevice, verbose_name='固定音响', blank=True)
filter_area_level = models.PositiveSmallIntegerField('固定音响区域级别过滤', choices=Area.AREA_LEVEL_CHOICES,
default=Area.AREA_1)
@ -45,7 +48,8 @@ class NotifySetting(CommonAModel):
on_delete=models.CASCADE, null=True, blank=True)
user = models.ForeignKey(User, verbose_name='提醒用户',
on_delete=models.CASCADE, null=True, blank=True)
var = models.CharField('提醒变量', max_length=20, null=True, blank=True)
var = models.CharField('提醒变量', max_length=20, null=True, blank=True,
help_text='self(本人)/area_manager(区域负责人)/visit_receptionist(访客接待人)')
filter_recipient = models.PositiveSmallIntegerField('提醒人员过滤', null=True, blank=True)
filter_area_level = models.PositiveSmallIntegerField('区域级别过滤', null=True, blank=True)
sms_enable = models.BooleanField('短信通知', default=False)
@ -66,13 +70,12 @@ class Event(CommonBModel):
imgs = models.ManyToManyField(File, verbose_name='事件图片', blank=True)
area = models.ForeignKey(Area, verbose_name='发生区域', on_delete=models.CASCADE)
location = models.JSONField('事件点位坐标', default=dict, null=False, blank=True)
peope_type = models.CharField('当事人员类型', choices=Employee.PEOPLE_TYPE_CHOICES,
max_length=20, null=True, blank=True)
people = models.ForeignKey(Employee, verbose_name='当事人',
on_delete=models.CASCADE, null=True, blank=True)
state = models.PositiveSmallIntegerField('事件状态', default=10)
obj_cate = models.CharField('发生对象', max_length=20, help_text='people(人员)/...')
employee = models.ForeignKey(Employee, verbose_name='当事人',
on_delete=models.CASCADE, null=True, blank=True)
msg = models.TextField('事件文本', null=True, blank=True)
mark = models.PositiveSmallIntegerField('事件标记', default=10)
voice = models.TextField('语音地址', null=True, blank=True)
mark = models.PositiveSmallIntegerField('事件标记', default=10, help_text='10(正常)/20(误报)')
handle_time = models.DateTimeField('处理时间', null=True, blank=True)
handle_user = models.ForeignKey(User, verbose_name='处理人',
on_delete=models.CASCADE, null=True, blank=True)

View File

@ -27,12 +27,13 @@ class EventCateListSerializer(CustomModelSerializer):
class EventCateUpdateSerializer(CustomModelSerializer):
class Meta:
model = EventCate
fields = ['speaker_on', 'speakers', 'filter_area_level']
fields = ['speaker_on', 'speakers', 'filter_area_level', 'voice_person', 'handle_minute']
class NotifySettingsSerializer(CustomModelSerializer):
post_name = serializers.CharField(source='post.name', read_only=True)
user_name = serializers.CharField(source='user.name', read_only=True)
class Meta:
model = NotifySetting
fields = '__all__'
@ -40,7 +41,7 @@ class NotifySettingsSerializer(CustomModelSerializer):
class EventSerializer(serializers.ModelSerializer):
area_name = serializers.CharField(source='area.name', read_only=True)
cate_name = serializers.CharField(source='cate.name', read_only=True)
cate_ = EventCateSimpleSerializer(source='cate', read_only=True)
people_name = serializers.CharField(source='people.name', read_only=True)
handle_user_name = serializers.CharField(source='handle_user.name', read_only=True)

View File

@ -19,6 +19,7 @@ class EventCateViewSet(CreateModelMixin, UpdateModelMixin, ListModelMixin, Custo
create_serializer_class = EventCateCreateUpdateSerializer
update_serializer_class = EventCateCreateUpdateSerializer
serializer_class = EventCateListSerializer
filterset_fields = ['self_algo']
class NotifySettingViewSet(CustomModelViewSet):

View File

@ -0,0 +1,35 @@
# Generated by Django 3.2.12 on 2022-07-01 03:37
from django.db import migrations, models
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('ecm', '0007_auto_20220701_1137'),
('third', '0005_alter_tdevice_code'),
]
operations = [
migrations.AddField(
model_name='tdevice',
name='algos',
field=models.ManyToManyField(blank=True, to='ecm.EventCate', verbose_name='启用算法'),
),
migrations.AddField(
model_name='tlog',
name='create_time',
field=models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间'),
),
migrations.AddField(
model_name='tlog',
name='is_deleted',
field=models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记'),
),
migrations.AddField(
model_name='tlog',
name='update_time',
field=models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间'),
),
]

View File

@ -2,7 +2,7 @@ from django.db import models
from apps.am.models import Area
import uuid
from apps.hrm.models import Employee
from apps.utils.constants import ObjCate
from apps.utils.constants import Algo
from apps.utils.models import BaseModel
# Create your models here.
@ -35,6 +35,7 @@ class TDevice(BaseModel):
code = models.CharField('设备唯一标识', max_length=50, db_index=True)
location = models.JSONField('位置信息', default=dict,
null=False, blank=True)
algos = models.ManyToManyField('ecm.eventcate', verbose_name='启用算法', blank=True)
area = models.ForeignKey(Area, on_delete=models.CASCADE,
verbose_name='所在区', null=True, blank=True)
areas = models.ManyToManyField(Area, verbose_name='覆盖区',
@ -46,7 +47,7 @@ class TDevice(BaseModel):
null=False, blank=True)
class Tlog(models.Model):
class Tlog(BaseModel):
"""第三方请求与处理日志
"""
id = models.UUIDField(primary_key=True, default=uuid.uuid4)

View File

@ -1,7 +1,7 @@
from rest_framework import serializers
from apps.am.models import Area
from apps.third.models import TDevice
from apps.third.models import TDevice, Tlog
from apps.utils.serializers import CustomModelSerializer
@ -47,3 +47,9 @@ class BindAreasSerializer(serializers.Serializer):
areas = serializers.PrimaryKeyRelatedField(queryset=Area.objects.all(),
label="区域ID列表",
required=False, many=True)
class TlogSerializer(CustomModelSerializer):
class Meta:
model = Tlog
fields = '__all__'

View File

@ -1,7 +1,7 @@
from django.urls import path, include
from rest_framework import routers
from apps.third.views import DahuaTestView, DhCommonViewSet, SpTestView, XxCommonViewSet, XxTestView
from apps.third.views_d import TDeviceViewSet
from apps.third.views_d import TDeviceViewSet, TlogViewSet
API_BASE_URL = 'api/third/'
HTML_BASE_URL = 'third/'
@ -10,6 +10,7 @@ router = routers.DefaultRouter()
router.register('xunxi', XxCommonViewSet, basename='api_xunxi')
router.register('dahua', DhCommonViewSet, basename='api_dahua')
router.register('tdevice', TDeviceViewSet, basename='tdevice')
router.register('tlog', TlogViewSet, basename='tlog')
urlpatterns = [
path(API_BASE_URL, include(router.urls)),
path(API_BASE_URL + 'dahua/test/', DahuaTestView.as_view()),

View File

@ -1,5 +1,5 @@
from apps.third.models import TDevice
from apps.third.serializers import BindAreaSerializer, LabelLocationSerializer, TDeviceSerializer
from apps.third.models import TDevice, Tlog
from apps.third.serializers import BindAreaSerializer, LabelLocationSerializer, TDeviceSerializer, TlogSerializer
from apps.utils.viewsets import CustomGenericViewSet
from rest_framework.mixins import ListModelMixin
from apps.third.clients import xxClient, dhClient, spClient
@ -79,7 +79,7 @@ class TDeviceViewSet(CustomGenericViewSet):
td.save()
td.areas.clear()
for i in vdata['areas']:
td.areas.add(i)
td.areas.add(i)
else:
td = TDevice()
td.type = vdata['type']
@ -122,4 +122,5 @@ class TDeviceViewSet(CustomGenericViewSet):
class TlogViewSet(ListModelMixin, CustomGenericViewSet):
pass
queryset = Tlog.objects.all()
serializer_class = TlogSerializer

View File

@ -7,3 +7,7 @@ EXCLUDE_FIELDS = ['create_time', 'update_time', 'is_deleted', 'create_by', 'upda
class ObjCate(models.IntegerChoices):
EMPLOYEE = 10, '个人'
POST = 20, '岗位'
class Algo(models.TextChoices):
HELMET = 'helmet', '安全帽'