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)