|
@@ -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")
|