AdikaNathaniel/Boafo
GitHub: AdikaNathaniel/Boafo
基于微服务架构的国家应急响应与调度平台,整合多机构资源实现事件报告、最近响应者自动匹配、实时车辆追踪和运营分析。
Stars: 0 | Forks: 0
# 🚨 Boafo
### 国家应急响应与调度平台
[](https://nestjs.com/)
[](https://flutter.dev/)
[](https://www.postgresql.org/)
[](https://www.rabbitmq.com/)
[](https://www.docker.com/)
[](https://www.typescriptlang.org/)
[](https://socket.io/)
[](https://jwt.io/)
[快速入门](#-getting-started) · [架构](#-system-architecture) · [API 参考](#-api-endpoints) · [技术栈](#-tech-stack)
## 📋 目录
- [🌍 概述](#-overview)
- [🏗️ 系统架构](#️-system-architecture)
- [⚡ 技术栈](#-tech-stack)
- [🔧 微服务](#-microservices)
- [🗄️ 数据库设计](#️-database-design)
- [📡 通信与消息传递](#-communication--messaging)
- [📱 前端 (Flutter)](#-frontend-flutter)
- [🔌 API 接口](#-api-endpoints)
- [🚀 快速入门](#-getting-started)
- [📁 项目结构](#-project-structure)
- [⚙️ 环境变量](#️-environment-variables)
## 🌍 概述
在包括加纳在内的许多非洲国家,警察局、医院、消防站和救护车单位等应急服务机构通常是独立运作的。在紧急情况下,协调工作是最大的挑战——确定哪个响应者最近、哪家医院有空床,或者哪辆救护车可以立即响应。
**Boafo** 通过提供一个统一的平台解决了这个问题,该平台:
- 📝 允许呼叫中心管理员通过 Google Maps **记录带有位置数据的紧急事件**
- 🎯 使用 Haversine 公式计算距离,**自动调度最近的可用响应者**
- 📍 通过基于 WebSocket 的 GPS 流**实时追踪应急车辆**
- 📊 提供关于响应时间、事件分布和资源利用率的**分析和洞察**
- 🔐 支持针对不同类型管理员的**基于角色的访问控制**
### 👥 系统角色
| 角色 | 职责 |
|:------|:-----|
| 🖥️ **系统管理员** | 接听紧急电话并记录事件的呼叫中心操作员 |
| 🏥 **医院管理员** | 更新医院容量和救护车可用性 |
| 🚑 **救护车司机** | 操作救护车;车辆传输实时位置更新 |
| 🚔 **警察局管理员** | 管理警察局资源和警员 |
| 🚒 **消防服务管理员** | 管理消防站资源和人员 |
| 👤 **市民** | 通过电话报告紧急情况(不登录系统) |
## 🏗️ 系统架构
```
┌───────────────────────┐
│ 📱 Flutter Frontend │
│ (Mobile / Web App) │
└───────────┬───────────┘
│
HTTP / WebSocket
│
┌───────────▼───────────┐
│ 🌐 API Gateway │
│ (Port 3000) │
│ ⚡ Rate Limiting │
│ 🔐 JWT Auth Guard │
│ 🔀 Request Proxying │
└───────────┬───────────┘
│
┌──────────┬───────────┴───────────┬──────────┐
│ │ │ │
┌──────▼─────┐ ┌─▼──────────┐ ┌─────▼──────┐ ┌─▼────────────┐
│ 🔑 Auth │ │ 🚨 Incident│ │ 🚗 Dispatch│ │ 📊 Analytics │
│ Service │ │ Service │ │ Service │ │ Service │
│ (Port 3001)│ │ (Port 3002)│ │ (Port 3003)│ │ (Port 3004) │
└──────┬─────┘ └─────┬──────┘ └──────┬─────┘ └──────┬───────┘
│ │ │ │
┌──────▼─────┐ ┌────▼──────┐ ┌──────▼─────┐ ┌─────▼───────┐
│ 🗄️ auth_db │ │🗄️incident │ │🗄️dispatch │ │🗄️analytics │
│ PostgreSQL │ │ _db │ │ _db │ │ _db │
│ Port 5432 │ │ Port 5433 │ │ Port 5434 │ │ Port 5435 │
└────────────┘ └─────┬─────┘ └──────┬─────┘ └──────┬──────┘
│ │ │
└──────┬ ┌─────┘ │
│ │ │
┌──────▼─────▼────┐ │
│ 🐰 RabbitMQ │◄─────────────┘
│ Message Queue │
│ (Port 5672) │
└─────────────────┘
```
### 🔄 工作原理
```
📞 Citizen calls ➜ 🖥️ Admin logs ➜ 🎯 System finds ➜ 🚗 Responder ➜ 📍 Real-time
emergency incident nearest unit dispatched tracking
```
1. 📞 一位**市民拨打**紧急热线
2. 🖥️ 一位**系统管理员**登录 Boafo 并填写事件报告表
3. 🧮 **事件服务** 确定事件类型,并使用 **Haversine 距离公式** 计算最近的可用响应者
4. 📤 系统**调度响应者**并向 RabbitMQ 发布事件
5. 📍 **调度服务** 通过 WebSocket 实时追踪响应者的车辆
6. 📊 **分析服务** 消费来自 RabbitMQ 的事件以生成运营洞察
7. 🗺️ 管理员可以**在地图上查看实时车辆位置**并监控事件状态
## ⚡ 技术栈
| ### 🖥️ 后端 | 技术 | 用途 | |:------------|:---------| |  | 微服务框架 | |  | 类型安全的后端语言 | |  | 运行时环境 (Alpine Linux) | |  | 数据库 (4 个实例) | |  | 对象关系映射器 | |  | 消息队列 (AMQP) | |  | 实时 WebSocket | |  | 身份验证 | |  | 容器化 | |  | 测试框架 | | ### 📱 前端 | 技术 | 用途 | |:------------|:---------| | -02569B?style=flat-square&logo=flutter&logoColor=white) | 跨平台框架 | |  | 状态管理 | |  | 地图集成 | |  | 实时更新 | |  | 数据可视化 | |  | UI 组件库 | |
📋 点击展开车辆表
**车辆:** | 列名 | 类型 | 描述 | |:-------|:-----|:------------| | `id` | `UUID` (PK) | 唯一车辆标识符 | | `vehicleType` | `ENUM` | 车辆类型 | | `stationId` | `UUID` | 所属站点 ID | | `stationName` | `VARCHAR` | 站名称 | | `stationType` | `ENUM` | 站点类型 | | `latitude` | `DECIMAL(10,7)` | 当前 GPS 纬度 | | `longitude` | `DECIMAL(10,7)` | 当前 GPS 经度 | | `status` | `ENUM` | 车辆可用状态 | | `driverId` | `UUID` | 分配的司机 | | `updatedAt` | `TIMESTAMP` | 最后位置更新时间 | **车辆位置(历史):** | 列名 | 类型 | 描述 | |:-------|:-----|:------------| | `id` | `UUID` (PK) | 记录标识符 | | `vehicleId` | `UUID` (FK) | 车辆引用 | | `latitude` | `DECIMAL(10,7)` | GPS 纬度 | | `longitude` | `DECIMAL(10,7)` | GPS 经度 | | `timestamp` | `TIMESTAMP` | 位置读取时间 |📋 点击展开分析表
**响应指标** · **资源快照** · **事件日志** 存储聚合的响应时间数据、资源容量快照和原始事件日志 (JSONB),以支持灵活查询。
### 🌟 如果觉得有用,请给个 Star!
**🚨 Boafo** — *协调应急响应,挽救生命。*
在加纳用 ❤️ 制作
标签:Docker, Flutter, GPS车辆追踪, JWT, MITM代理, NestJS, PostgreSQL, RabbitMQ, Socket.io, TypeScript, 代码示例, 公共安全, 加纳, 医疗急救, 后端开发, 国家应急响应, 安全插件, 安全防御评估, 实时事件报告, 实时通讯, 微服务架构, 数据分析, 数据库设计, 智慧城市, 最近响应者调度, 测试用例, 消息队列, 消防系统, 紧急救援, 警务系统, 请求拦截, 调度协调平台, 跨平台移动应用, 非洲科技