# 安澜应急指挥系统

[![Java](https://img.shields.io/badge/Java-1.8-orange.svg)](https://www.oracle.com/java/)
[![Spring Boot](https://img.shields.io/badge/Spring%20Boot-2.5.15-brightgreen.svg)](https://spring.io/projects/spring-boot)
[![Vue](https://img.shields.io/badge/Vue-2.6-green.svg)](https://vuejs.org/)

**安澜应急指挥**是一套面向**政府与企事业单位**的应急业务软件：在统一门户下支撑**日常值守、事件接报、调度与处置、资源与预案、数据报送、案例与知识、视频与系统集成**等能力。

![主控制台](images/index.png)
---

## 一、产品定位与适用场景

| 维度 | 说明 |
| --- | --- |
| **谁在用** | 应急指挥中心值班员、调度员、业务科室与系统管理员；可按角色授权访问不同菜单与数据范围。 |
| **解决什么** | 将事件与任务、资源与位置、预案与流程、上报与留痕放在同一套系统里，减少多系统切换与信息断层。 |
| **典型场景** | 值守排班与缺班提醒；接警/调度/处置三类工作台与地图协同；资源（队伍/车辆/专家/物资等）全生命周期与看板；上级单位要求的数据报送；案例沉淀与知识检索；摄像头等设备的统一登记与能力扩展。 |


---

## 二、能力概览（按业务域）

下表帮助你在“菜单很多”时建立心理模型；具体以你环境中的**菜单与权限**为准。

| 业务域 | 能力要点 |
| --- | --- |
| **应急调度** | 排班、接警工作台、调度工作台、处置工作台；与地图、任务状态、参与方等联动。 |
| **数据报送** | 面向规定的报送链路（如上级报送、模板配置等），支持查询与留痕。 |
| **预案管理** | 预案维表、状态与发布/审批流（以实际配置为准）。 |
| **资源管理** | 资源看板、队伍/车辆/专家/装备/仓库/物资，以及供应、采购、征用等扩展能力。 |
| **案例与知识** | 案例库、知识库分类与内容管理。 |
| **系统集成** | 摄像头等设备接入与维护（可配合 ZLMediaKit 等流媒体能力，按部署启用）。 |
| **系统管理 / 监控** | 用户、角色、菜单、部门、字典、参数、通知公告、日志与系统监控等。 |
| **首页看板** | KPI、趋势与分布类图表、最新事件/调度/待办/公告等；支持演示/联调环境变量（见下节与产品说明）。 |

**地图**：业务页中的地图能力依赖**高德 Web 端**；需在系统**参数配置**中维护 `amap.api.key` 等（前端从后端拉取，未配置时会有明确提示）

---

## 三、技术架构（简图）

```mermaid
flowchart LR
  subgraph client [浏览器]
    UI[Vue 2.6 前端 aegis-ui]
  end
  subgraph server [应用层]
    API[Spring Boot 单体 aegis-admin]
  end
  subgraph data [数据与缓存]
    MySQL[(MySQL)]
    Redis[(Redis)]
  end
  subgraph ext [按部署选装]
    ZLM[ZLMediaKit]
    JIT[Jitsi / Nginx 等]
  end
  UI -->|/dev-api 或 /prod-api 等同源前缀| API
  API --> MySQL
  API --> Redis
  API -.-> ZLM
  API -.-> JIT
```

- **形态**：当前为主应用 `aegis-admin` 聚合一组 `aegis-*` 业务模块的 **Java 服务 + 独立前端工程**，开发时通过 **同域 API 前缀** 访问后端（见下「本地联调」）。  
- **可选能力**：视频、会议、容器编排等以 `deployment` 与业务开关为准，并非单机开发必需。

---

## 四、界面预览

以下为 `images/` 目录中截图，展示浅色主区 + 深色侧栏、多标签页、地图与列表等典型布局。

| 说明 | 预览 |
| --- | --- |
| 主控制台 / 态势总览 | ![主控制台](images/index.png) |
| 登录（双栏布局与产品要点） | ![登录页](images/4292f298-7e1d-4f32-969d-28f75010076f.png) |
| 应急调度 · 排班管理 | ![排班管理](images/ae5dd8a4-25e7-43a5-89b6-3eb364e86298.png) |
| 应急调度 · 接警工作台（含地图） | ![接警工作台](images/09d481a6-fc21-4d8c-aff3-d70af9f4ef9a.png) |
| 应急调度 · 调度工作台（统一调度地图与资源层） | ![调度工作台](images/5c1dde0c-6efa-4568-a6eb-b29f82075fcf.png) |
| 应急调度 · 处置工作台（任务详情、事件位置等） | ![处置工作台](images/1fa1fb61-1dcf-4ed8-8e49-393aa8190dcd.png) |
| 数据报送 · 上级报送 | ![上级报送](images/f19be828-6d9d-43ef-ad31-f25fcd64c476.png) |
| 预案管理 | ![预案管理](images/90c11be2-f778-44e4-9aa8-15094ab875d2.png) |
| 资源管理 · 资源看板 | ![资源看板](images/bb0112fe-611f-4998-8cf9-83213ff92794.png) |
| 资源管理 · 队伍管理 | ![队伍管理](images/3cd08cfb-ebd0-4488-ac7d-163f5425b4f9.png) |
| 资源管理 · 车辆管理（列表） | ![车辆管理-列表](images/a92d0227-0aff-47ff-b58b-f00592f1bda4.png) |
| 资源管理 · 车辆管理（位置弹窗、深色顶栏） | ![车辆管理-位置](images/84404068-3376-453e-bca9-0806ac981228.png) |
| 资源管理 · 专家管理 | ![专家管理](images/3490e00f-6d6e-47aa-ba13-983799b32835.png) |
| 资源管理 · 物资台账 | ![物资台账](images/b6afab04-bd28-49bc-83d3-9d2830949e05.png) |
| 系统集成 · 摄像头管理 | ![摄像头管理](images/200f30ec-0b21-4e23-9f82-2f5226471906.png) |
| 案例库管理 | ![案例库](images/fa8c939c-592a-4368-8eb3-aca88fa2dfeb.png) |
| 系统管理 · 菜单管理 | ![菜单管理](images/5c45e041-ba0d-4c1a-a9ac-60daeca097b4.png) |

---

## 五、功能特性（摘要）

- **应急调度闭环**：从排班、接报、统一调度到处置工位的分工界面，配合地图与任务详情。  
- **资源全视图**：看板 + 分资源类型的台账与能力标签、位置能力（依赖地图与设备侧数据质量）。  
- **预案与报送**：预案全生命周期与报送口径可配置。  
- **视频与集成**：摄像头等设备的登记与能力扩展。  
- **系统治理能力**：多租户/多机构常规模型下的用户、角色、菜单、部门、参数与日志。  
- **可扩展看板与智能助手**：看板可纯真实数据、可演示；顶栏智能助手为独立配置（Key 存浏览器、不经业务后端落库）——见产品说明。  

---

## 六、仓库与模块

```text
project-aegis-command/
├── aegis-admin/          # 可运行主应用，聚合各业务模块
├── aegis-framework/     # 安全、通用 Web 等框架能力
├── aegis-system/        # 系统管理
├── aegis-common/        # 公共类库
├── aegis-emergency/     # 应急管理
├── aegis-resource/      # 资源管理
├── aegis-camera/        # 摄像头 / 视频相关
├── aegis-case/          # 案例
├── aegis-knowledge/     # 知识库
├── aegis-notification/  # 通知
├── aegis-file/          # 文件
├── aegis-quartz/        # 定时任务
├── aegis-ui/            # 前端：Vue 2.6、Element UI、ECharts
├── deployment/          # MySQL 脚本、Docker Compose、Nginx 示例、本地起停脚本
└── docs/                 # 产品/联调类文档
```

---

## 七、技术栈

| 层 | 技术 |
| --- | --- |
| 后端 | Spring Boot 2.5.15、Spring Security、MyBatis-Plus 3.5.1、Swagger 3.0、Quartz |
| 数据 | MySQL 8+、Redis 6+ |
| 前端 | Vue 2.6、Vue Router、Vuex、Element UI 2.15、ECharts、Vue CLI / webpack |
| 构建 | Maven 3.x、Node.js 14+（用于前端） |
| 部署（可选） | Docker / Compose、Nginx、ZLMediaKit、Jitsi 等 |

---

## 八、环境要求

- **JDK** 1.8+  
- **Maven** 3.6+  
- **Node.js** 14+（仅开发/构建 `aegis-ui` 时）  
- **MySQL** 8+、**Redis** 6+（与 `application-druid.yml` 等配置一致）  
- **Docker** 20.10+（仅在使用 Compose 时）  

---

## 九、快速开始

### 9.1 使用 Docker Compose

1. 克隆本仓库。  
2. 打开并修改 `deployment/docker-compose.yml` 中的**数据库密码、端口、卷**等。  
3. 在 `deployment` 目录执行：  

   ```bash
   docker compose up -d
   ```  

4. 访问地址与 API、Swagger 路径以 **Compose 中端口与路由** 为准，一般为 `http://<主机>:<端口>/swagger-ui/index.html`。  

**Windows 本地一键**（在 `deployment` 目录）：

```powershell
.\up-local.ps1
```

或双击 `deployment\up-local.bat`。**停止**：

```powershell
.\down-local.ps1
```

若 `.bat` 在极少环境下对中文路径不友好，请直接用 PowerShell 执行上述 `ps1`。

### 9.2 手动部署：数据库脚本顺序

在 `deployment/mysql/` 下按**文件名顺序**（建议与下列一致）在 MySQL 中执行，并保证连接账号、库名与后端配置一致：

1. `01-ruoyi.sql` — 基础库表与预置管理数据  
2. `02-quartz.sql` — 定时任务相关表  
3. `03-aegis.sql` — 业务表结构  
4. `04-aegis-seed-data.sql`（可选）— **演示/联调**用种子数据，**生产环境**请评估后再执行，并在上线后**修改预置密码与敏感参数**。

数据库名在脚本中默认为 **`aegis`**，若你改名，请同步 `application-druid.yml`。

### 9.3 手动部署：启动后端

1. 编辑 `aegis-admin/src/main/resources/application-druid.yml` 与 `application.yml`：数据源、Redis、文件路径 `ruoyi.profile` 等。  
2. 在项目根目录：  

   ```bash
   mvn clean install -DskipTests
   cd aegis-admin
   mvn spring-boot:run
   ```  

3. 默认服务端口在 `application.yml` 中为 **8080**（可按需修改）。

### 9.4 本地联调：前端

```bash
cd aegis-ui
npm install --registry=https://registry.npmmirror.com
npm run dev
```

**前后端如何接上：**

- 开发环境 `aegis-ui/.env.development` 中 `VUE_APP_BASE_API` 为 **`/dev-api`**。  
- `aegis-ui/vue.config.js` 中 `devServer.proxy` 将 `/dev-api` 代理到 `baseUrl` 指向的后端，默认 **`http://localhost:8080`**，并去掉路径前缀。  
- 因此：**先启动本机 8080 上的后端，再开前端**；若后端不是 8080，请改 `vue.config.js` 里的 `baseUrl`。  
- 开发服务默认 **端口 80**（`vue.config.js` 中 `port` 可由环境变量或 npm 覆盖）；若 80 被占用，可设置 `port` 环境变量或使用 `npm run dev -- --port 端口号`（以 Vue CLI 行为为准）。  

**生产构建与部署**：

```bash
npm run build:prod
```

将 `dist` 由 Nginx 等托管；生产环境 API 前缀在 `.env.production` 中一般为 **`/prod-api`**，需在网关或 Nginx 中反向代理到 Java 服务，并与后端 `context-path`、各 `server` 块中的 `location` 一致。示例可参考 `deployment/nginx/`（若存在）。

### 9.5 与部署相关的子数据 / 服务

- **预置用户**：主初始化脚本中常包含 `admin`、`ry` 等账号，**默认密码需以库内与首次登录要求为准**（常见为 `123456`，**上线后必须改密**）。  
- **地图**：业务地图使用前请在系统参数中配置 `amap.api.key` 等。  
- **智能助手**：`VUE_APP_GITCC_API`、同源 `/gitcc-api` 反代、基址与 `/v1` 约定、405 排障等

---

## 十、配置项速查

| 位置 | 作用 |
| --- | --- |
| `aegis-admin/.../application.yml` | 服务端口、上传限制、`spring.profiles`、Token 等全局项 |
| `aegis-admin/.../application-druid.yml` | 数据源、连接池、MyBatis 等 |
| `aegis-ui/.env.development` 等 | `VUE_APP_TITLE`、`VUE_APP_BASE_API`、`VUE_APP_GITCC_API` 等 |
| `aegis-ui/vue.config.js` | 开发代理到后端的 `baseUrl`、端口、GitCC 代理等 |
| 系统管理 - 参数设置 | 如高德 `amap.api.key` 等运行期业务参数 |
| `deployment/docker-compose.yml` | 容器化时的服务、环境变量与卷 |

---

## 十一、安全与合规模块（必读）

- **预置账号与密码**仅用于开发/验收；在公网或生产环境**必须**改密、启用强策略，并收拢管理后台访问来源。  
- **智能助手 API Key** 仅存用户浏览器，**不**经本系统业务接口持久化，请勿在自研代码中回传、记录或落库用户 Key。  
- **媒体与地图密钥**：流媒体和地图厂商 key 应放在安全配置与权限可控的位置，并定期轮换。  

---

## 十二、常见问题（FAQ）

1. **前端能打开但接口全红 / 登不进**  
   检查后端是否监听 `vue.config.js` 中 `baseUrl` 的地址与端口；若跨域，开发环境应走**代理**而非在浏览器里硬写全路径（除非 CORS 已配好）。  
2. **地图空白或报「未配置」**  
   在**参数设置**中配置 `amap.api.key`，并检查浏览器控制台与网络请求。  
3. **智能助手 401 / 405**  
   基址、路径 `/v1` 与**同源反代**是否按文档配置；见产品说明 **§5、§6**。  
4. **表不存在或缺少菜单**  
   确认 `deployment/mysql` 已按序导入且**库名**与 `application-druid` 中一致。  

---

## 十三、参与贡献

欢迎通过 Issue 描述问题、通过合并请求（Pull Request）提交改进。建议单次提交**聚焦单一主题**并写清复现/验证方式，便于审阅。  

---

