From beb2ad888a9f994538a5a6e39ec624b3ddf7dd49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E5=89=8D=E6=98=8E?= <909355014@qq.com> Date: Wed, 14 Sep 2022 09:10:37 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=80=E9=94=AE=E6=8A=A5=E8=AD=A6=E5=92=8C?= =?UTF-8?q?=E4=BD=8E=E7=94=B5=E9=87=8F=E5=9C=A85=E5=88=86=E9=92=9F?= =?UTF-8?q?=E5=86=85=E4=B8=8D=E5=86=8D=E8=A7=A6=E5=8F=91=E4=BA=8B=E4=BB=B6?= =?UTF-8?q?=E4=BD=86=E6=9C=89=E5=96=87=E5=8F=AD=E6=92=AD=E6=94=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/ecm/service.py | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/apps/ecm/service.py b/apps/ecm/service.py index 4b9edc2e..60c65ad5 100644 --- a/apps/ecm/service.py +++ b/apps/ecm/service.py @@ -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)