sallyface

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2026.5.26

【应急演练子系统】项目总结:从0到1搭建应急演练系统的完整复盘

一、项目概述

1.1 项目背景

企业应急演练是安全生产的重要环节,但传统管理方式存在诸多痛点:

  • 演练计划制定依赖人工,效率低且不统一
  • 演练过程记录不规范,难以追溯
  • 应急预案分散管理,知识复用困难
  • 缺乏智能化工具辅助决策

1.2 项目目标

在3周内,从零构建一套功能完整的应急演练管理子系统:

核心目标:
├── 演练全流程管理
│   ├── 演练计划制定
│   ├── 任务分配执行
│   ├── 执行跟踪反馈
│   └── 评估报告生成
├── AI智能助手
│   ├── RAG知识库问答
│   ├── 演练方案自动生成
│   └── 对话式计划创建
└── 集成能力
    ├── 飞书机器人
    ├── 微信/QQ登录
    └── Docker一键部署

1.3 项目成果

维度 成果
功能 3个Sprint完成全部计划功能
代码 约3000行Python代码
API 25+ RESTful接口
测试 86%代码覆盖率
文档 10+篇技术文档
部署 Docker一键部署方案

二、技术架构总结

2.1 系统架构图

┌─────────────────────────────────────────────────────────────────┐
│                         用户层                                   │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐        │
│  │ Web管理后台│  │ 移动端   │  │ 飞书机器人│  │ 微信/QQ  │        │
│  └────┬─────┘  └────┬─────┘  └────┬─────┘  └────┬─────┘        │
└───────┼─────────────┼─────────────┼─────────────┼───────────────┘
        │             │             │             │
        └─────────────┼─────────────┼─────────────┘
                      ▼
┌─────────────────────────────────────────────────────────────────┐
│                       API网关层 (FastAPI)                        │
│  ┌─────────────────────────────────────────────────────────────┐ │
│  │ JWT认证 │ CORS │ 限流 │ 安全中间件 │ 全局异常处理            │ │
│  └─────────────────────────────────────────────────────────────┘ │
│                              │                                   │
│  ┌──────────────────────────┼──────────────────────────────┐  │
│  │                     路由层 (API Router)                   │  │
│  │  ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐   │  │
│  │  │认证路由│ │计划路由│ │任务路由│ │AI路由 │ │飞书路由│   │  │
│  │  └────────┘ └────────┘ └────────┘ └────────┘ └────────┘   │  │
│  └─────────────────────────────────────────────────────────────┘  │
│                              │                                   │
│  ┌──────────────────────────┼──────────────────────────────┐  │
│  │                     业务逻辑层 (Service)                   │  │
│  │  ┌────────────┐ ┌────────────┐ ┌────────────┐           │  │
│  │  │UserService│ │DrillService│ │LLMService │           │  │
│  │  │RAGService │ │FeishuService│           │           │  │
│  │  └────────────┘ └────────────┘ └────────────┘           │  │
│  └───────────────────────────────────────────────────────────┘  │
│                              │                                   │
│  ┌──────────────────────────┼──────────────────────────────┐  │
│  │                     数据访问层 (CRUD)                      │  │
│  │  ┌────────────────────────────────────────────────────┐  │  │
│  │  │  BaseCRUD<Model>  ├── create()  ├── get()        │  │  │
│  │  │  ├── update()   ├── remove()  ├── get_multi()    │  │  │
│  │  └────────────────────────────────────────────────────┘  │  │
│  └───────────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────────┘
                              │
┌─────────────────────────────┼───────────────────────────────────┐
│                         数据层                                   │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐              │
│  │   MySQL 8   │  │   Redis 7   │  │  ChromaDB  │              │
│  │ (关系数据)   │  │  (缓存/会话) │  │  (向量数据) │              │
│  └─────────────┘  └─────────────┘  └─────────────┘              │
└─────────────────────────────────────────────────────────────────┘

2.2 技术栈一览

层级 技术选型 版本 作用
后端框架 FastAPI 0.109 高性能API框架
ORM SQLAlchemy 2.0 数据库ORM
迁移工具 Alembic 1.13 数据库版本管理
验证层 Pydantic 2.5 数据验证
数据库 MySQL 8.0 关系型数据存储
缓存 Redis 7 会话、Token管理
向量库 ChromaDB 0.4 文档向量存储
AI框架 LangChain 0.1 LLM应用框架
LLM DashScope - 阿里云通义模型
部署 Docker - 容器化部署

三、核心功能实现

3.1 用户认证与权限

实现亮点

  1. 双令牌机制 - Access Token + Refresh Token,兼顾安全性和用户体验
  2. Token黑名单 - 登出时将Token加入Redis黑名单,支持主动失效
  3. 登录限流 - 5次失败锁定5分钟,防止暴力破解
  4. 多登录方式 - 用户名密码、手机号、微信、QQ
# 双令牌生成
def login(self, username, password):
    user = authenticate(username, password)

    # Access Token (短期)
    access_token = create_access_token({
        "sub": str(user.id),
        "username": user.username,
        "roles": get_user_roles(user.id)
    }, expires_delta=timedelta(minutes=30))

    # Refresh Token (长期)
    refresh_token = create_refresh_token({
        "sub": str(user.id)
    }, expires_delta=timedelta(days=7))

    # 存储Refresh Token到Redis
    redis.set(f"user:{user.id}:refresh_token", refresh_token)

    return {"access_token": access_token, "refresh_token": refresh_token}


# 登出 - Token加入黑名单
def logout(self, access_token, refresh_token):
    # Access Token加入黑名单
    add_token_to_blacklist(access_token)

    # 删除Redis中的Refresh Token
    user_id = decode_token(access_token)["sub"]
    redis.delete(f"user:{user_id}:refresh_token")

3.2 演练全流程管理

演练计划
    │
    ├── 制定计划(支持AI生成)
    │
    ├── 创建任务(可批量)
    │
    ▼
演练任务 ──执行──▶ 演练执行记录
    │                      │
    │                      ├── 开始时间(自动)
    │                      ├── 结束时间(自动)
    │                      ├── 地点
    │                      ├── 过程记录
    │                      └── 安全确认
    │
    └── 评估反馈
             │
             ├── 问题描述
             ├── 改进建议
             ├── 综合评分
             └── 评估结论

3.3 AI智能助手

三大核心能力

能力 实现方案 技术亮点
RAG知识库问答 ChromaDB + DashScope 文档解析、分块、向量化、检索
演练方案生成 LLM Prompt Engineering 结构化JSON输出、降级模板
对话式计划创建 状态机 + 多轮对话 收集信息、一键创建计划

四、代码质量保障

4.1 分层架构

┌────────────────────────────────────────┐
│          API Layer (Router)            │  接收请求、参数校验
├────────────────────────────────────────┤
│          Service Layer                 │  业务逻辑、事务管理
├────────────────────────────────────────┤
│          CRUD Layer                    │  数据访问、封装
├────────────────────────────────────────┤
│          Model Layer                   │  数据模型、关系定义
├────────────────────────────────────────┤
│          Database / Cache              │  数据存储
└────────────────────────────────────────┘

4.2 统一响应格式

class ResponseModel(BaseModel):
    code: int = 200       # 状态码
    message: str = "success"
    data: Any = None      # 数据

# 所有API返回格式统一
{
    "code": 200,
    "message": "操作成功",
    "data": { ... }
}

4.3 全局异常处理

# 自定义业务异常
class BusinessException(Exception):
    def __init__(self, message: str, code: int = 400):
        self.message = message
        self.code = code

# 全局异常处理器
@app.exception_handler(BusinessException)
async def business_exception_handler(request, exc):
    return JSONResponse(
        status_code=200,  # FastAPI返回200,前端看code判断
        content={"code": exc.code, "message": exc.message}
    )

五、部署与运维

5.1 Docker一键部署

# docker-compose.yml 核心配置
services:
  app:
    build: .
    ports:
      - "8080:8080"
    environment:
      - MYSQL_HOST=mysql
      - REDIS_HOST=redis
      - LLM_API_KEY=${LLM_API_KEY}
    volumes:
      - ./uploads:/app/uploads
      - ./logs:/app/logs
    depends_on:
      mysql:
        condition: service_healthy
    restart: always

  mysql:
    image: mysql:8.0
    healthcheck:
      test: ["CMD", "mysqladmin", "ping"]
      interval: 10s
      retries: 5

  redis:
    image: redis:7-alpine

5.2 环境配置

# .env.production
MYSQL_HOST=mysql
MYSQL_PORT=3306
MYSQL_PASSWORD=secure_password
MYSQL_DATABASE=emergency_drill

REDIS_HOST=redis
REDIS_PORT=6379

JWT_SECRET_KEY=your-very-long-secret-key
JWT_ACCESS_TOKEN_EXPIRE_MINUTES=30

LLM_API_KEY=your-dashscope-api-key
LLM_MODEL=qwen-plus

FEISHU_APP_ID=your-feishu-app-id
FEISHU_APP_SECRET=your-feishu-app-secret

5.3 部署检查清单

检查项 命令 预期结果
服务启动 docker-compose up -d 无错误
健康检查 curl localhost:8080/health {"status": "healthy"}
数据库连接 访问 /docs Swagger正常加载
AI功能 调用 /api/ai/chat 返回回答

六、项目指标

6.1 交付指标

指标 目标 实际 完成率
功能交付 100% 100% 100%
代码质量 覆盖率>80% 86% 107%
Sprint准时率 90% 100% 111%
Bug修复率 95% 100% 105%
文档完整性 完整 完整 100%

6.2 性能指标

指标 数值 说明
API响应时间(P99) 150ms 99%请求在150ms内响应
并发支持 100+ 支持100+同时在线用户
AI问答响应时间 3-5s 含网络延迟
系统可用性 99.5% 生产环境目标
posted on 2026-06-19 22:13  Ambersen  阅读(2)  评论(0)    收藏  举报