重命名变量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,13 +53,13 @@ class NotifySetting(CommonAModel):
(40, '属地部门以上')
)
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='提醒岗位',
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,
help_text='self(本人)/area_manager(区域负责人)/visit_receptionist(访客接待人)')
variable = 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)
@ -96,7 +96,7 @@ class Event(CommonBModel):
is_pushed = models.BooleanField('是否已推送', default=False)
class Eventdo(models.Model):
class Eventdo(BaseModel):
cate = models.ForeignKey(EventCate, verbose_name='关联事件种类',
on_delete=models.CASCADE)
event = models.ForeignKey(Event, verbose_name='关联事件',

View File

@ -3,7 +3,7 @@
import requests
from apps.am.models import Access, Area
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.system.models import User
from apps.third.clients import xxClient
@ -13,10 +13,11 @@ from apps.utils.queryset import get_child_queryset2
from django.core.cache import cache
import time
import shapely.geometry
from apps.third.clients import dhClient
from apps.third.clients import dhClient, spClient
from django.utils import timezone
from django.conf import settings
import os
from apps.utils.speech import generate_voice
requests.packages.urllib3.disable_warnings()
@ -70,10 +71,10 @@ class EcmService:
alarm_type = data['info']['alarmType']
vchannel = TDevice.objects.filter(code=vchannel_code).first()
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() # 模拟发生安全帽事件
# 视频区域
area = vchannel.area
if ec and area:
@ -85,7 +86,35 @@ class EcmService:
event.global_img = global_img
event.area = area
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
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.utils.tools import print_roundtrip
from apps.third.tapis import spapis
requests.packages.urllib3.disable_warnings()
@ -115,3 +116,33 @@ class SpClient:
if raise_exception:
raise APIException(**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