123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- # -*- 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": 0,
- "msg": "新建事件成功",
- "data": {
- "eventId": eventId,
- "url": f"https://yjdp.mmsyjj.cn:8086/yjdp/#/emergencyCommandMap?event_id={eventId}"
- }
- }
-
- except Exception as e:
- traceback.print_exc()
- raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
|