123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- from fastapi import APIRouter, Request, Depends, HTTPException, Query
- from sqlalchemy.exc import IntegrityError
- from fastapi.responses import HTMLResponse, FileResponse
- from fastapi.responses import JSONResponse
- from database import get_db
- from sqlalchemy import text, exists, and_, or_, not_
- from sqlalchemy.orm import Session
- from models import *
- import json
- import random
- from sqlalchemy import create_engine, select
- from typing import Optional
- from utils.StripTagsHTMLParser import *
- from common.db import db_event_management, db_dept, db_user, db_area, db_emergency_plan
- from common.security import valid_access_token
- import traceback
- from utils import *
- from datetime import datetime, timedelta
- import os
- router = APIRouter()
- # 上报伤亡情况
- @router.post("/creat_event_briefing")
- async def creat_event_briefing(
- request: Request,
- body = Depends(remove_xss_json),
- db: Session = Depends(get_db),
- user_id = Depends(valid_access_token)
- ):
- fileList = []
- if 'fileList' in body:
- fileList = body['fileList']
- del body['fileList']
- longitude = ''
- latitude = ''
- if 'lnglat' in body:
- longitude = body['lnglat'][0]
- latitude = body['lnglat'][1]
- del body['lnglat']
- new_briefing = EventBriefing(**body, del_flag='0', recorded_by=user_id, create_time=datetime.now(), longitude=longitude, latitude=latitude)
- db.add(new_briefing)
- db.commit()
- db.refresh(new_briefing)
- if len(fileList) > 0:
- event_files = [
- EventFile(
- event_id=new_briefing.id,
- file_name=fileName["name"], # 使用 fileName["name"] 作为文件名
- file_path=f'/data/upload/mergefile/uploads/{fileName["url"]}',
- file_size=os.path.getsize(f'/data/upload/mergefile/uploads/{fileName["url"]}'),
- storage_file_name=fileName["url"],
- foreign_key=new_briefing.event_id,
- from_scenario="event_briefing",
- update_time=datetime.now(),
- create_time=datetime.now(),
- del_flag='0'
- )
- for fileName in fileList # body['fileList'] 现在是一个包含对象的数组,每个对象都有 'name' 和 'url' 属性
- ]
- db.add_all(event_files)
- db.commit()
- return {
- "code": 200,
- "msg": "保存事件简报成功"
- }
-
- @router.get('/event_briefing/list')
- async def get_event_list(
- event_id: str,
- page: int = Query(1, gt=0, description='页码'),
- page_size: int = Query(10, gt=0, description='pageSize'),
- db: Session = Depends(get_db)
- ):
- try:
- # 应用查询条件
- where = and_(EventBriefing.del_flag == '0', EventBriefing.event_id == event_id)
- # 计算总条目数
- q = db.query(func.count(EventBriefing.id))
- q = q.filter(where)
- total = q.scalar()
-
- # 执行分页查询
- q = db.query(EventBriefing)
- q = q.filter(where)
- rows = q.order_by(EventBriefing.id.desc()).offset((page - 1) * page_size).limit(page_size).all()
- data = [
- {
- "event_id": row.event_id,
- "address": row.address,
- "longitude": row.longitude,
- "latitude": row.latitude,
- "report_dept": row.report_dept,
- "briefing_content": row.briefing_content,
- "create_time": get_datetime_str(row.create_time),
- "files": db_event_management.get_briefing_file_list(db, row.id)
- }
- for row in rows
- ]
- # 返回结果
- return {
- "code": 200,
- "msg": "查询成功",
- "data": data,
- "total": total
- }
- except Exception as e:
- # 处理异常
- traceback.print_exc()
- raise HTTPException(status_code=500, detail=str(e))
- # 上报事件指挥人员
- @router.post("/create_leader_user")
- async def create_leader_user(
- request: Request,
- body = Depends(remove_xss_json),
- db: Session = Depends(get_db),
- user_id = Depends(valid_access_token)
- ):
- event_id = body['event_id']
- if 'users' not in body:
- return {
- "code": 500,
- "msg": "请上报事件指挥人员"
- }
-
- for n in body['users']:
- unit_id = n['unit_id']
- unit_name = db_dept.get_dept_name_by_id(db, unit_id)
- new_user = EventLeaderUser(
- unit_id = unit_id,
- unit_name = unit_name,
- event_id = event_id,
- user_type = n['user_type'],
- user_name = n['user_name'],
- mobile = n['mobile'],
- create_time = datetime.now(),
- recorded_by = user_id,
- del_flag = '0'
- )
- db.add(new_user)
- db.commit()
- return {
- "code": 200,
- "msg": "上报事件指挥人员成功"
- }
|