# -*- coding: utf-8 -*- from fastapi import APIRouter, Depends, Request, Header, Form, Body from fastapi.responses import FileResponse, StreamingResponse from sqlalchemy.orm import Session from fastapi.responses import JSONResponse from database import get_db from utils import * from utils.vcode import * from utils.redis_util import * import base64 from common.const import * from io import BytesIO from utils.StripTagsHTMLParser import * from common import security from datetime import timedelta from common.security import valid_access_token from common.auth_user import * from common import YzyApi from models import * from urllib.parse import quote import requests import jwt import traceback from common.enc import mpfun from common.db import db_event_management, db_user, db_area, db_emergency_plan, db_msg_center, db_yzy, db_czrz router = APIRouter() # 提供给数科使用的单点登录token @router.get('/token/create') def sso_token(request: Request, user_id: int = Depends(valid_access_token), db: Session = Depends(get_db)): sso_token_expires = timedelta(seconds = 3600 * 24) sso_token = security.create_access_token( data={"sub": user_id}, expires_delta = sso_token_expires ) print('sso_token:', sso_token) return { "code": 200, "msg": "操作成功", "data": { "sso_token": sso_token } } # token校验 @router.get('/token/valid') def sso_token(request: Request, sso_token: str, db: Session = Depends(get_db)): try: payload = jwt.decode(sso_token, settings.SECRET_KEY, algorithms=[settings.ALGORITHM]) # print(payload,payload.get("sub")) user_id: str = payload.get("sub") row = db.query(SysUser).filter(SysUser.user_id == int(user_id)).first() if row is None: return { "code": 500, "msg": "token异常" } # 角色信息 roles = [] role_ids = db.query(SysUserRole).filter(SysUserRole.user_id == int(user_id)).all() for role in role_ids: role_info = db.query(SysRole).filter(SysRole.role_id == role.role_id).first() roles.append( { "roleId": role_info.role_id, "roleName": role_info.role_name, "roleKey": role_info.role_key } ) role_keys = [ n['roleKey'] for n in roles ] data = { "userId": row.user_id, "userName": mpfun.dec_data(row.user_name), "nickName": row.nick_name, "roles": role_keys } return { "code": 200, "msg": "操作成功", "data": data } except Exception: traceback.print_exc() return { "code": 500, "msg": "token异常" } @router.post('/event/create') async def create_event( request: Request, sso_token: str, user_id: int = Depends(valid_access_token), db: Session = Depends(get_db), body = Depends(remove_xss_json)): user_id = 1 try: payload = jwt.decode(sso_token, settings.SECRET_KEY, algorithms=[settings.ALGORITHM]) user_id: str = payload.get("sub") row = db.query(SysUser).filter(SysUser.user_id == int(user_id)).first() if row is None: return { "code": 500, "msg": "token异常" } eventId = db_event_management.get_next_event_id(db) region_code = db_area.get_region_code_by_gps(db, body['longitude'], body['latitude']) event_base = EventBase( event_title = body['event_title'], event_type = body['event_type'], # 0:自然灾害 1:事故灾害 2:公共卫生事件 3:社会安全事件 event_time = body['event_time'], report_time = body['report_time'], address = body['address'], deaths = None, injuries = None, missing = None, casualties = 0, event_status = '0', event_code = eventId, recorded_by = user_id, region_code = region_code, create_time = datetime.now(), del_flag = '0', ) db.add(event_base) db.commit() db.refresh(event_base) # 事件跟踪表 event_tracking = EventTracking() event_tracking.event_id = event_base.id event_tracking.event_status = event_base.event_status event_tracking.event_level = event_base.event_level event_tracking.tracking_time = datetime.now() event_tracking.recorded_by = user_id event_tracking.del_flag = "0" db.add(event_tracking) db.commit() try: user_info = db_user.get_user_info(db, user_id) db_czrz.log_username(db, user_id, mpfun.dec_data(user_info.user_name), user_info.nick_name, "应急一张图", "创建事件", request.client.host) except: traceback.print_exc() return { "code": 200, "msg": "新建事件成功", "data": eventId } except Exception as e: traceback.print_exc() raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")