From ec8d416e804c9864ecbb66f48a359c27b2135ca6 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 6 Sep 2023 08:42:46 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20notify=5Fevent=E5=A2=9E=E5=8A=A0wspush?= =?UTF-8?q?=E4=BB=A5=E5=8F=8A=E4=B8=80=E4=BA=9B=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/ecm/service.py | 49 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 41 insertions(+), 8 deletions(-) diff --git a/apps/ecm/service.py b/apps/ecm/service.py index 2caa8095..9f4aa02b 100644 --- a/apps/ecm/service.py +++ b/apps/ecm/service.py @@ -84,12 +84,9 @@ def get_ep_default(): "time2": int(time.time()), # 当前时间戳 } - -def notify_event(event: Event, voice_msg=''): - """事件后续处理: - - Args: - event (Event): _description_ +def gen_params(event: Event): + """ + 生成短信模板发送参数 """ # 生成通知文本 ep = event.employee @@ -114,20 +111,34 @@ def notify_event(event: Event, voice_msg=''): for i in event.cates.all(): cats_list.append(i.name) params['event'] = ','.join(cats_list) + return params + + +def notify_event(event: Event): + """事件后续处理: + + Args: + event (Event): _description_ + """ + from apps.ecm.tasks import event_push + params = {} if event.voice_msg: # 如果已经生成通知文本了就不再处理 pass else: + params = gen_params(event) 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() + # 事件ws推送 + event_push.delay(event.id) # 如果还未创建提醒 if not event.is_pushed: + if not params: + params = gen_params(event) Thread(target=create_remind, args=(event, params), daemon=True).start() @@ -169,6 +180,7 @@ def create_remind(event: Event, params: dict): """ 创建事件提醒并发送短信/微信 """ + from apps.ecm.tasks import remind_push # 向当事人本人发送通知 # if event.employee and event.employee.phone: # t_sms = Thread(target=send_sms, args=(event.employee.phone, '1001', {'code': '5678'}), daemon=True) @@ -237,6 +249,7 @@ def create_remind(event: Event, params: dict): }) # 开始发送通知 for i in Remind.objects.filter(event=event): + remind_push.delay(i.id) if i.notify_setting.sms_enable and i.recipient.phone: # 发送短信通知 Thread(target=send_sms, args=(i.recipient.phone, @@ -685,3 +698,23 @@ def snap_and_analyse(vchannel: TDevice, algo_codes: list, opl: Opl = None): if event: notify_event(event) + +def handle_xx_event_3(name: str, area: Area): + cate = EventCate.objects.filter(code=name).first() + if cate: + # 告警间隔内不触发 + last_event = Event.objects.filter(cates=cate, area=area, obj_cate='area').order_by('-create_time').first() + same_allow_minute = cate.same_allow_minute + if same_allow_minute >0 and last_event and last_event.create_time + timedelta(minutes=cate.same_allow_minute) > timezone.now(): + return + event = Event() + event.area = area + event.obj_cate = 'area' + event.happen_time = timezone.now() + event.save() + Eventdo.objects.get_or_create(cate=cate, event=event, defaults={ + 'cate': cate, + 'event': event + }) + voice_msg = area.name + '下有' + str(area.count_people) + '人,' + cate.name + ',请及时处理' + notify_event(event, voice_msg=voice_msg) \ No newline at end of file