重命名变量notify_setting

This commit is contained in:
曹前明 2022-07-02 13:27:33 +08:00
parent 0266e2e8e6
commit 5ad160a3ae
5 changed files with 126 additions and 9 deletions

View File

@ -0,0 +1,34 @@
# Generated by Django 3.2.12 on 2022-07-02 03:48
from django.db import migrations, models
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('ecm', '0005_event_voice_msg'),
]
operations = [
migrations.AddField(
model_name='eventdo',
name='create_time',
field=models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间'),
),
migrations.AddField(
model_name='eventdo',
name='is_deleted',
field=models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记'),
),
migrations.AddField(
model_name='eventdo',
name='update_time',
field=models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间'),
),
migrations.AlterField(
model_name='eventdo',
name='id',
field=models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID'),
),
]

View File

@ -0,0 +1,23 @@
# Generated by Django 3.2.12 on 2022-07-02 05:27
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('ecm', '0006_auto_20220702_1148'),
]
operations = [
migrations.RenameField(
model_name='notifysetting',
old_name='var',
new_name='variable',
),
migrations.AlterField(
model_name='notifysetting',
name='obj_cate',
field=models.CharField(help_text='post岗位/user用户/variable变量', max_length=20, verbose_name='提醒对象'),
),
]

View File

@ -53,12 +53,12 @@ class NotifySetting(CommonAModel):
(40, '属地部门以上') (40, '属地部门以上')
) )
event_cate = models.ForeignKey(EventCate, verbose_name='关联事件种类', on_delete=models.CASCADE) event_cate = models.ForeignKey(EventCate, verbose_name='关联事件种类', on_delete=models.CASCADE)
obj_cate = models.CharField('提醒对象', max_length=20, help_text='post岗位/user用户/var变量') obj_cate = models.CharField('提醒对象', max_length=20, help_text='post岗位/user用户/variable变量')
post = models.ForeignKey(Post, verbose_name='提醒岗位', post = models.ForeignKey(Post, verbose_name='提醒岗位',
on_delete=models.CASCADE, null=True, blank=True) on_delete=models.CASCADE, null=True, blank=True)
user = models.ForeignKey(User, verbose_name='提醒用户', user = models.ForeignKey(User, verbose_name='提醒用户',
on_delete=models.CASCADE, null=True, blank=True) on_delete=models.CASCADE, null=True, blank=True)
var = models.CharField('提醒变量', max_length=20, null=True, blank=True, variable = models.CharField('提醒变量', max_length=20, null=True, blank=True,
help_text='self(本人)/area_manager(区域负责人)/visit_receptionist(访客接待人)') help_text='self(本人)/area_manager(区域负责人)/visit_receptionist(访客接待人)')
filter_recipient = models.PositiveSmallIntegerField('提醒人员过滤', null=True, blank=True) filter_recipient = models.PositiveSmallIntegerField('提醒人员过滤', null=True, blank=True)
filter_area_level = models.PositiveSmallIntegerField('区域级别过滤', null=True, blank=True) filter_area_level = models.PositiveSmallIntegerField('区域级别过滤', null=True, blank=True)
@ -96,7 +96,7 @@ class Event(CommonBModel):
is_pushed = models.BooleanField('是否已推送', default=False) is_pushed = models.BooleanField('是否已推送', default=False)
class Eventdo(models.Model): class Eventdo(BaseModel):
cate = models.ForeignKey(EventCate, verbose_name='关联事件种类', cate = models.ForeignKey(EventCate, verbose_name='关联事件种类',
on_delete=models.CASCADE) on_delete=models.CASCADE)
event = models.ForeignKey(Event, verbose_name='关联事件', event = models.ForeignKey(Event, verbose_name='关联事件',

View File

@ -3,7 +3,7 @@
import requests import requests
from apps.am.models import Access, Area from apps.am.models import Access, Area
from apps.am.tasks import cache_areas_info from apps.am.tasks import cache_areas_info
from apps.ecm.models import Event, EventCate from apps.ecm.models import Event, EventCate, Eventdo
from apps.hrm.models import Employee from apps.hrm.models import Employee
from apps.system.models import User from apps.system.models import User
from apps.third.clients import xxClient from apps.third.clients import xxClient
@ -13,10 +13,11 @@ from apps.utils.queryset import get_child_queryset2
from django.core.cache import cache from django.core.cache import cache
import time import time
import shapely.geometry import shapely.geometry
from apps.third.clients import dhClient from apps.third.clients import dhClient, spClient
from django.utils import timezone from django.utils import timezone
from django.conf import settings from django.conf import settings
import os import os
from apps.utils.speech import generate_voice
requests.packages.urllib3.disable_warnings() requests.packages.urllib3.disable_warnings()
@ -70,7 +71,7 @@ class EcmService:
alarm_type = data['info']['alarmType'] alarm_type = data['info']['alarmType']
vchannel = TDevice.objects.filter(code=vchannel_code).first() vchannel = TDevice.objects.filter(code=vchannel_code).first()
print(data) print(data)
if alarm_type in [1001003, 1001000] and vchannel: # 内部人员报警 if alarm_type in [1001003, 1001000] and vchannel: # 内部人员/或陌生人报警
# 加载算法逻辑 # 加载算法逻辑
# 安全帽检测 # 安全帽检测
ec = EventCate.objects.filter(code='helmet').first() # 模拟发生安全帽事件 ec = EventCate.objects.filter(code='helmet').first() # 模拟发生安全帽事件
@ -85,7 +86,35 @@ class EcmService:
event.global_img = global_img event.global_img = global_img
event.area = area event.area = area
event.obj_cate = 'people' event.obj_cate = 'people'
event.employee = None ep = None # 找到人员
if alarm_type == 1001003:
ep = Employee.objects.filter(id_number=data['info']['extend']['candidateInfo'][0]['id']).first()
if ep:
voice_msg = '位于{}{}{},您未佩戴安全帽,请及时处理'
ep_name = ep.name
ep_type = '员工'
if ep.type == 'rempoyee':
ep_type = '相关方人员'
elif ep.type == 'visitor':
ep_type = '访客'
event.voice_msg = voice_msg.format(area.name, ep_type, ep_name)
else:
event.voice_msg = '位于{}的未知人员,您未佩戴安全帽,请及时处理'.format(area.name)
event.employee = ep
_, event.voice, _ = generate_voice(event.voice_msg, ec.voice_person)
event.save()
Eventdo.objects.get_or_create(cate=ec, event=event, defaults={
'cate': ec,
'event': event
})
# 喇叭提醒
if event.voice:
sps = list(TDevice.objects.filter(area=area, type=TDevice.DEVICE_SPEAKER).values_list('code', flat=True))
if len(sps) == 0: # 找覆盖区的音响
sps = list(TDevice.objects.filter(areas=area, type=TDevice.DEVICE_SPEAKER).values_list('code', flat=True))
if sps:
spClient.speak(event.voice, sps)
return
@classmethod @classmethod
def dispatch_xunxi_event(cls, data: dict): def dispatch_xunxi_event(cls, data: dict):

View File

@ -7,6 +7,7 @@ from django.conf import settings
from apps.third.errors import SP_REQUEST_ERROR from apps.third.errors import SP_REQUEST_ERROR
from apps.utils.tools import print_roundtrip from apps.utils.tools import print_roundtrip
from apps.third.tapis import spapis
requests.packages.urllib3.disable_warnings() requests.packages.urllib3.disable_warnings()
@ -115,3 +116,33 @@ class SpClient:
if raise_exception: if raise_exception:
raise APIException(**SP_REQUEST_ERROR) raise APIException(**SP_REQUEST_ERROR)
return 'error', SP_REQUEST_ERROR return 'error', SP_REQUEST_ERROR
def speak(self, path: str, sns: list):
"""播放报警声
Args:
path (str): 资源本地地址
sns (list): 喇叭sn队列
"""
json = {
"sns": sns,
"type": "req",
"name": "priority_task_play",
"source": "noreplay",
"params": {
"count": 1,
"length": 0,
"level": 99804,
"name": "实时播放",
"tid": "x",
"vol": 70,
"type": 5,
"uid": "y",
"urls": [{
"name": "alarm.mp3",
"uri": settings.BASE_URL + path
}]
}
}
self.request(**spapis['send_to_device'], json=json)
return