重命名变量notify_setting
This commit is contained in:
parent
0266e2e8e6
commit
5ad160a3ae
|
@ -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'),
|
||||
),
|
||||
]
|
|
@ -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='提醒对象'),
|
||||
),
|
||||
]
|
|
@ -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='关联事件',
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue