一键报警和低电量在5分钟内不再触发事件但有喇叭播放

This commit is contained in:
曹前明 2022-09-14 09:10:37 +08:00
parent cf531a5463
commit beb2ad888a
1 changed files with 25 additions and 12 deletions

View File

@ -1,4 +1,5 @@
from datetime import timedelta
from apps.vm.models import Visit
from apps.ai.main import ai_analyse
from apps.opm.models import Operation, Opl, OplWorker
@ -98,17 +99,21 @@ def notify_event(event: Event, voice_msg=''):
for i in event.cates.all():
cats_list.append(i.name)
params['event'] = ','.join(cats_list)
if params['employee']:
event.voice_msg = '位于{}{},{},请及时处理'.format(params['area'], params['employee'], params['event'])
if event.voice_msg: # 如果已经生成通知文本了就不再处理
pass
else:
event.voice_msg = '{}下,发生{},请及时处理'.format(params['area'], params['event'])
if voice_msg:
event.voice_msg = voice_msg
event.save()
# 喇叭播放
if params['employee']:
event.voice_msg = '位于{}{},{},请及时处理'.format(params['area'], params['employee'], params['event'])
else:
event.voice_msg = '{}下,发生{},请及时处理'.format(params['area'], params['event'])
if voice_msg:
event.voice_msg = voice_msg
event.save()
# 喇叭播放(任何情况下)
Thread(target=save_voice_and_speak, args=(event,), daemon=True).start()
# 创建提醒
Thread(target=create_remind, args=(event, params), daemon=True).start()
# 如果还未创建提醒
if not event.is_pushed:
Thread(target=create_remind, args=(event, params), daemon=True).start()
def save_voice_and_speak(event: Event):
@ -120,8 +125,11 @@ def save_voice_and_speak(event: Event):
try:
main_cate = event.cates.all().order_by('priority', 'create_time').first()
v_p, v_num = main_cate.voice_person, main_cate.voice_num
_, event.voice, _ = generate_voice(event.voice_msg, v_p)
event.save()
if event.voice: # 如果已经生成了报警声音不用再请求
pass
else:
_, event.voice, _ = generate_voice(event.voice_msg, v_p)
event.save()
if main_cate.speaker_on:
sps = []
if event.area: # 如果事件存在发生区域
@ -472,13 +480,18 @@ def loc_change(data):
def handle_xx_event(name: str, data: dict):
# 有绑定对象再提示事件
# 有绑定对象再提示事件(包括一键报警事件/低电量)
blts = TDevice.objects.filter(code=data['mac']).first()
ep_loc_dict = {}
if blts.employee:
# 触发事件
cate = EventCate.objects.filter(code=name).first()
# 找到最近未处理同一人发生的事件
if cate:
last_event = Event.objects.filter(cates__code=name, employee=blts.employee, handle_user=None).order_by('-create_time').first()
if last_event and last_event.create_time + timedelta(minutes=5) > timezone.now():
notify_event(last_event)
return
event = Event()
# 查询定位信息
key_str = 'ep_{}'.format(blts.employee.id)