Browse Source

no message

libushang 8 months ago
parent
commit
913b69d98e
2 changed files with 45 additions and 15 deletions
  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
 import random
 from . import db_user
 from . import db_user
 import copy
 import copy
+from sqlalchemy import text, exists, and_, or_, not_
 
 
 EVENT_TRACK_LIST = [
 EVENT_TRACK_LIST = [
         {"title": "事件登记", "event_status": "0", "tracking_time": "", "event_level": "", "recorded_by": ""}, 
         {"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
         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 sqlalchemy.exc import IntegrityError
 from fastapi.responses import HTMLResponse, FileResponse
 from fastapi.responses import HTMLResponse, FileResponse
 from fastapi.responses import JSONResponse
 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_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:
         else:
@@ -646,10 +648,11 @@ async def lauch_emergency_plan(
 @router.post("/send_emergency_plan_task_by_yzy")
 @router.post("/send_emergency_plan_task_by_yzy")
 async def send_emergency_plan_task_by_yzy(
 async def send_emergency_plan_task_by_yzy(
     request: Request,  
     request: Request,  
+    background_tasks: BackgroundTasks, 
     body = Depends(remove_xss_json), 
     body = Depends(remove_xss_json), 
     db: Session = Depends(get_db)
     db: Session = Depends(get_db)
 ):
 ):
-    time.sleep(3)
+    time.sleep(1.0)
     
     
     eventId = body['eventId']
     eventId = body['eventId']
     
     
@@ -680,12 +683,19 @@ async def send_emergency_plan_task_by_yzy(
     plan_info = get_model_dict(row)
     plan_info = get_model_dict(row)
     plan_name = plan_info['plan_name']
     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()
     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_id = row.dept_id
         dept_name = row.dept_name
         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()
         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:
         if row_exists is not None:
             continue
             continue
@@ -747,21 +757,37 @@ async def send_emergency_plan_task_by_yzy(
         redirect_url = "{}/#/leader/index".format(settings.YJXP_WEB_ROOT_PATH) # 业务页面
         redirect_url = "{}/#/leader/index".format(settings.YJXP_WEB_ROOT_PATH) # 业务页面
         detail_url = YzyApi.format_redirect_url(redirect_url)
         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 {
     return {
         "code": 200,
         "code": 200,
         "msg": "预案任务下发成功"
         "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")
 @router.post("/emergency_plan_task_list")