浏览代码

no message

libushang 8 月之前
父节点
当前提交
913b69d98e
共有 2 个文件被更改,包括 45 次插入15 次删除
  1. 5 1
      common/db/db_event_management.py
  2. 40 14
      routers/api/eventManagement/event.py

+ 5 - 1
common/db/db_event_management.py

@@ -10,6 +10,7 @@ from utils import *
 import random
 from . import db_user
 import copy
+from sqlalchemy import text, exists, and_, or_, not_
 
 EVENT_TRACK_LIST = [
         {"title": "事件登记", "event_status": "0", "tracking_time": "", "event_level": "", "recorded_by": ""}, 
@@ -81,4 +82,7 @@ def get_summary_file_list(db: Session, event_id: int):
         }
         for row in rows
     ]
-    return data
+    return data
+
+def get_emergency_notify_count(db: Session, event_id: str):
+    return db.query(EventEmergencyNotify).filter(EventEmergencyNotify.event_id == event_id).count()

+ 40 - 14
routers/api/eventManagement/event.py

@@ -1,4 +1,4 @@
-from fastapi import APIRouter, Request, Depends, HTTPException, Query
+from fastapi import APIRouter, Request, Depends, HTTPException, Query, BackgroundTasks
 from sqlalchemy.exc import IntegrityError
 from fastapi.responses import HTMLResponse, FileResponse
 from fastapi.responses import JSONResponse
@@ -262,7 +262,9 @@ async def get_event_detail(
                     # 事件跟踪
                     "event_status_tracks": db_event_management.get_event_status_track(db, row.id),
                     # 事件等级
-                    "event_level_tracks": db_event_management.get_event_level_track(db, row.id)
+                    "event_level_tracks": db_event_management.get_event_level_track(db, row.id),
+                    # 预案通知下发
+                    "emergency_notify_count": db_event_management.get_emergency_notify_count(db, row.event_code)
                 }
             }
         else:
@@ -646,10 +648,11 @@ async def lauch_emergency_plan(
 @router.post("/send_emergency_plan_task_by_yzy")
 async def send_emergency_plan_task_by_yzy(
     request: Request,  
+    background_tasks: BackgroundTasks, 
     body = Depends(remove_xss_json), 
     db: Session = Depends(get_db)
 ):
-    time.sleep(3)
+    time.sleep(1.0)
     
     eventId = body['eventId']
     
@@ -680,12 +683,19 @@ async def send_emergency_plan_task_by_yzy(
     plan_info = get_model_dict(row)
     plan_name = plan_info['plan_name']
 
+    send_queue = []
     rows = db.query(EmergencyUnit).filter(EmergencyUnit.plan_id == plan_id).order_by(EmergencyUnit.dept_order.asc()).all()
-    for row in rows:
+    if len(rows) == 0:
+        return {
+            "code": 500,
+            "msg": "该预案没有相关通知人员"
+        }
 
+    for row in rows:
         dept_id = row.dept_id
         dept_name = row.dept_name
 
+        # 已下发的过滤掉,避免重发
         row_exists = db.query(EventEmergencyNotify).filter(and_(EventEmergencyNotify.plan_id == plan_id, EventEmergencyNotify.event_id == eventId, EventEmergencyNotify.dept_id == dept_id)).first()
         if row_exists is not None:
             continue
@@ -747,21 +757,37 @@ async def send_emergency_plan_task_by_yzy(
         redirect_url = "{}/#/leader/index".format(settings.YJXP_WEB_ROOT_PATH) # 业务页面
         detail_url = YzyApi.format_redirect_url(redirect_url)
 
-        try:
-            resp = YzyApi.send_textcard_message([yzy_user_id], "预案响应消息", description, detail_url)
-            if resp['errcode'] == 0:
-                event_emergency_notify.sent_status = 1 # 发送成功
-            else:
-                event_emergency_notify.sent_status = 9 # 发送失败
-            db.commit()
-
-        except Exception:
-            pass
+        send_queue.append({
+            id: event_emergency_notify.id,
+            yzy_user_id: yzy_user_id,
+            description: description,
+            detail_url: detail_url
+        })
+    
+    background_tasks.add_task(async_send_yzy_msg, db, send_queue)
 
     return {
         "code": 200,
         "msg": "预案任务下发成功"
     }
+
+def async_send_yzy_msg(db: Session, queue: dict):
+    for i in queue:
+        event_emergency_notify = db.query(EventEmergencyNotify).filter(EventEmergencyNotify.id == i['id']).first()
+        if event_emergency_notify is not None and event_emergency_notify.sent_status == 0:
+            yzy_user_id = i['yzy_user_id']
+            description = i['description']
+            detail_url = i['detail_url']
+            try:
+                resp = YzyApi.send_textcard_message([yzy_user_id], "预案响应消息", description, detail_url)
+                if resp['errcode'] == 0:
+                    event_emergency_notify.sent_status = 1 # 发送成功
+                else:
+                    event_emergency_notify.sent_status = 9 # 发送失败
+                db.commit()
+
+            except Exception:
+                pass
         
 # 获取预案通知
 @router.post("/emergency_plan_task_list")