# leo **Repository Path**: zd_g/leo ## Basic Information - **Project Name**: leo - **Description**: LEO/MEO/GEO 全要素卫星星座综合管理系统,提供卫星追踪、星座管理、地面站运维、通信链路监控、实时遥测数据可视化以及 3D 轨道仿真等一站式解决方案。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 0 - **Created**: 2026-06-29 - **Last Updated**: 2026-07-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: Java, 卫星, 星座管理, TypeScript, vue3 ## README # LEO 卫星星座管理平台 LEO/MEO/GEO 全要素卫星星座综合管理系统,提供卫星追踪、星座管理、地面站运维、通信链路监控、实时遥测数据可视化以及 3D 轨道仿真等一站式解决方案。 ### 登录 ![登录](./img/登录.png) ### 3D仿真 ![3D仿真](./img/3D仿真.png) ### 地面站 ![地面站](./img/地面站.png) ### 轨道视图 ![轨道视图](./img/轨道视图.png) ### 接入监控 ![接入监控](./img/接入监控.png) ### 数据接入 ![数据接入](./img/数据接入.png) ### 通信链路 ![通信链路](./img/通信链路.png) ### 卫星管理 ![卫星管理](./img/卫星管理.png) ### 星座管理 ![星座管理](./img/星座管理.png) ### 遥测监控 ![遥测监控](./img/遥测监控.png) ### 仪表盘 ![仪表盘](./img/仪表盘.png) ## 技术栈 ### 后端 | 技术 | 版本 | 说明 | | ----------------- | ------ | -------------- | | Spring Boot | 3.3.5 | 应用框架 | | Java | 17 | 运行环境 | | MyBatis-Flex | 1.10.4 | ORM 数据访问层 | | PostgreSQL | - | 关系型数据库 | | Redis | - | 缓存与会话管理 | | jjwt | 0.12.6 | JWT 认证 | | SpringDoc OpenAPI | 2.6.0 | API 文档 | | Spring WebSocket | - | 实时遥测推送 | | Hutool | 5.8.32 | 通用工具库 | ### 前端 | 技术 | 版本 | 说明 | | ------------ | ------- | ------------- | | Vue | 3.5.13 | 前端框架 | | TypeScript | 5.x | 类型安全 | | Vite | 6.0.3 | 构建工具 | | Element Plus | 2.9.1 | UI 组件库 | | Pinia | 2.2.6 | 状态管理 | | Vue Router | 4.4.5 | 路由管理 | | Axios | 1.7.7 | HTTP 客户端 | | CesiumJS | 1.141.0 | 3D 地球可视化 | | ECharts | 5.5.1 | 数据图表 | | Vue I18n | 9.14.4 | 国际化 | ## 核心功能 - **卫星管理** — 卫星全生命周期管理,支持按轨道类型、星座筛选,批量操作 - **星座管理** — 多卫星星座协同编排,支持分页查询与过滤 - **地面站运维** — 地面站配置管理(国家、区域、天线参数、频段、状态) - **通信链路监控** — 星间链路 (ISL) 与星地链路 (GSL) 的信号质量、带宽、延迟监控 - **实时遥测** — WebSocket 实时推送电池电量、太阳能板功率、温度、信噪比等关键指标 - **3D 可视化** — 基于 CesiumJS 的卫星轨道、星座覆盖与地球 3D 渲染 - **仪表盘分析** — KPI 卡片、轨道分布饼图、状态分布柱状图、系统活动概览 - **认证授权** — JWT 无状态认证 + 基于角色的访问控制 (RBAC) ## 项目结构 ``` LEO/ ├── leo-backend/ # Spring Boot 后端 │ ├── src/main/java/com/leo/satellite/ │ │ ├── common/ # 通用组件(拦截器、工具类、异常处理) │ │ ├── config/ # 配置(Security、CORS、Redis、WebSocket) │ │ ├── controller/ # REST 控制器 │ │ ├── entity/ # 实体模型 │ │ ├── mapper/ # MyBatis-Flex Mapper 接口 │ │ ├── service/ # 业务服务层 │ │ └── websocket/ # WebSocket 实时通信 │ ├── src/main/resources/ │ │ ├── application.yml # 应用配置 │ │ ├── sql/init.sql # 数据库初始化脚本 │ │ └── mapper/ # MyBatis XML 映射文件 │ └── pom.xml # Maven 依赖管理 │ ├── leo-frontend/ # Vue 3 前端 │ ├── src/ │ │ ├── api/ # API 接口层 │ │ ├── assets/styles/ # 全局样式与 Less 变量 │ │ ├── components/ # 可复用组件 │ │ ├── layouts/ # 布局组件 │ │ ├── locales/ # 国际化(中/英) │ │ ├── router/ # 路由配置 │ │ ├── stores/ # Pinia 状态管理 │ │ ├── types/ # TypeScript 类型定义 │ │ ├── utils/ # 工具函数(WebSocket、Axios 封装) │ │ └── views/ # 页面视图 │ ├── package.json │ ├── nginx.conf # Nginx 部署配置 │ └── vite.config.ts │ ├── docker-compose.yml # Docker 一键部署编排 └── README.md ``` ## 快速开始 ### 环境要求 - **JDK 17** 或更高版本 - **Node.js** (LTS 版本) - **PostgreSQL** 15 或更高版本 - **Redis** 6.x 或更高版本 - **Maven** 3.8+(或使用项目自带的 `mvnw`) ### 1. 数据库初始化 在 PostgreSQL 中创建数据库并运行初始化脚本: ```sql CREATE DATABASE leo_satellite; ``` 然后执行: ```bash psql -U postgres -d leo_satellite -f leo-backend/src/main/resources/sql/init.sql ``` ### 2. 后端启动 ```bash cd leo-backend # Windows ./mvnw.cmd clean install -DskipTests ./mvnw.cmd spring-boot:run # macOS / Linux ./mvnw clean install -DskipTests ./mvnw spring-boot:run ``` 后端默认运行在 `http://localhost:8080/api`,Swagger 文档位于 `http://localhost:8080/api/swagger-ui.html`。 ### 3. 前端启动 ```bash cd leo-frontend npm install npm run dev ``` 前端开发服务器默认运行在 `http://localhost:3000`,代理 `/api` 和 `/ws` 请求到后端。 ### 4. 访问系统 打开浏览器访问 `http://localhost:3000`,使用以下账号登录: | 角色 | 用户名 | 密码 | | ------ | ---------- | ---------- | | 管理员 | `admin` | `admin123` | | 操作员 | `operator` | `admin123` | ## 环境配置 主要配置项位于 `leo-backend/src/main/resources/application.yml`: ```yaml server: port: 8080 servlet: context-path: /api spring: datasource: url: jdbc:postgresql://localhost:5432/leo_satellite username: postgres password: postgres data: redis: host: localhost port: 6379 jwt: secret: your-secret-key expiration: 86400000 # 24小时 ``` 请根据实际环境修改数据库连接、Redis 地址和 JWT 密钥。 ## API 文档 启动后端后,可通过以下地址访问 OpenAPI / Swagger 交互式文档: ``` http://localhost:8080/api/swagger-ui.html ``` 主要 API 模块: | 模块 | 路径前缀 | 说明 | | -------- | ---------------------- | --------------------- | | 认证 | `/api/auth` | 登录、刷新 Token | | 卫星 | `/api/satellites` | CRUD、按轨道/星座查询 | | 星座 | `/api/constellations` | 星座管理 | | 地面站 | `/api/ground-stations` | 地面站管理 | | 通信链路 | `/api/comm-links` | 链路监控与管理 | | 遥测 | `/api/telemetry` | 遥测数据查询 | | 仪表盘 | `/api/dashboard` | 统计数据聚合 | ## 架构概览 系统采用前后端分离的**分层架构**,自顶向下划分为四层: ![架构概览](./img/jggl.png) ### 分层职责 | 层 | 说明 | | -------------- | ---------------------------------------------------------------------------------------------------------------------------------- | | **表现层** | Vue 3 单页应用,负责 UI 渲染、用户交互、3D 可视化。通过 Pinia 管理状态,Axios 发起 HTTP 请求,SockJS/STOMP 订阅实时推送 | | **网关层** | Nginx 统一入口,处理静态资源分发、API 反向代理、WebSocket 升级、Gzip 压缩与缓存策略 | | **业务逻辑层** | Spring Boot 应用核心。Security 过滤器校验 JWT Token → Controller 接收请求 → Service 执行业务编排 → 返回统一响应体`R` | | **数据访问层** | MyBatis-Flex Mapper 完成 ORM 映射与分页查询;Redis 缓存热点数据(仪表盘统计、卫星列表),TTL 1 小时;PostgreSQL 持久化全部业务数据 | ### 核心数据流 > 以「卫星分页查询」为例,展示端到端链路: ```mermaid sequenceDiagram actor U as 用户 participant FE as Vue 组件 participant Store as Pinia Store participant Axios as Axios 拦截器 participant Filter as JWT Filter participant Ctrl as SatelliteController participant Svc as SatelliteService participant Cache as Redis participant Mapper as Mapper participant DB as PostgreSQL U->>FE: 选择筛选条件并翻页 FE->>Store: dispatch fetchSatellites(params) Store->>Axios: GET /api/satellites?page=1&size=20 Axios->>Axios: 注入 Authorization: Bearer {token} Axios->>Filter: HTTP Request Filter->>Filter: 校验 JWT 签名与有效期 Filter->>Ctrl: 放行到 Controller Ctrl->>Svc: page(query) Svc->>Cache: 查询缓存 alt 缓存未命中 Svc->>Mapper: paginate(queryWrapper) Mapper->>DB: SELECT COUNT(*) ... SELECT * ... LIMIT OFFSET DB-->>Mapper: Page Mapper-->>Svc: PageResult Svc->>Cache: 写入 Redis (TTL 1h) else 缓存命中 Cache-->>Svc: 直接返回缓存数据 end Svc-->>Ctrl: PageResult Ctrl-->>Axios: 200 OK + R Axios->>Axios: 响应拦截:解包 data Axios-->>Store: PageResult Store-->>FE: 响应式更新 FE-->>U: 渲染表格与分页 ``` ### 实时遥测数据流 ```mermaid sequenceDiagram participant Browser as 浏览器前端 participant Nginx as Nginx participant WS as WebSocket Endpoint /api/ws participant Broker as STOMP Broker participant Publisher as TelemetryWebSocket Browser->>Nginx: WebSocket Upgrade 请求 Nginx->>WS: 代理转发 (Connection: Upgrade) WS->>Broker: 注册 STOMP 端点 Browser->>Broker: SUBSCRIBE /topic/telemetry/realtime Broker-->>Browser: 订阅确认 loop 每 5 秒 Publisher->>Publisher: 计算/采集遥测数据 Publisher->>Broker: convertAndSend("/topic/telemetry/realtime", payload) Broker-->>Browser: 推送遥测 JSON Browser->>Browser: 更新指标卡片 & 趋势图 end ``` ## 功能架构 系统按业务域划分为九大功能模块: ![功能架构](./img/gnjg.png) ### 模块职责明细 | 模块 | 前端视图 | 后端 Controller | 核心能力 | | -------------- | ----------------------------------------------------------- | ----------------------------- | ------------------------------------------------------------- | | **卫星管理** | `SatelliteList` / `SatelliteDetail` | `SatelliteController` | 全生命周期 CRUD,按轨道类型(LEO/MEO/GEO)与星座筛选,批量删除 | | **星座管理** | `ConstellationList` | `ConstellationController` | 星座创建/编辑,轨道面与每面卫星数配置,发射/在轨数量追踪 | | **地面站管理** | `StationList` | `GroundStationController` | 全球站点登记,天线口径/类型/频段配置,运行状态管理 | | **通信链路** | `LinkList` | `CommunicationLinkController` | ISL(星间)/GSL(星地)链路监控,频率/数据率/调制方式/信号强度 | | **遥测监控** | `TelemetryView` | `TelemetryController` | 实时 WebSocket 推送,历史分页查询,最新遥测快照,健康状态标记 | | **仪表盘分析** | `DashboardView` | `DashboardController` | 聚合统计(卫星/站/链路数),轨道分布饼图,状态分布柱状图 | | **轨道可视化** | `OrbitView` | (SAT API) | 2D SVG 轨道环渲染,卫星动态定位,按轨道类型过滤 | | **3D 仿真** | `SimulationView` | (SAT/Orbit API) | CesiumJS 3D 地球场景,卫星轨道预测,覆盖分析 | | **数据接入** | `DataSourceList` / `DataSourceDetail` / `DataAccessMonitor` | `DataAccessController` | 多协议接入(MQTT/FTP/SFTP/CoAP/HTTP REST),数据源配置与监控 | ## 技术架构 ![技术架构](./img/jsjg.png) ### 关键技术决策 | 决策点 | 选择 | 理由 | | ------------- | -------------------- | -------------------------------------------------------------------------- | | **ORM 框架** | MyBatis-Flex | 比 MyBatis-Plus 更轻量,链式查询 + Lambda 表达式类型安全,分页插件开箱即用 | | **认证方案** | JWT 无状态 | 无需服务端 Session,适合前后端分离;jjwt 库原生支持 Jackson 序列化 | | **实时通信** | STOMP over SockJS | 比原生 WebSocket 更易用,支持订阅/广播模式,SockJS 提供降级兼容 | | **3D 可视化** | CesiumJS | 业界标准的地球渲染引擎,支持 TLE 轨道计算、CZML 时序数据 | | **缓存策略** | Redis + Spring Cache | 注解驱动(@Cacheable),TTL 1 小时 + Key 前缀隔离,减少数据库压力 | | **API 文档** | SpringDoc OpenAPI | 兼容 Swagger UI,零注解侵入,自动生成 OpenAPI 3.0 规范文档 | ## 构建与部署 ### Docker 一键部署(推荐) 项目根目录已提供 `docker-compose.yml`,包含 PostgreSQL、Redis、后端、前端四个服务。 ```bash # 在项目根目录执行 docker compose up -d ``` 首次启动会自动: 1. 拉取 PostgreSQL 16、Redis 7 镜像并初始化数据库 2. 构建后端 Spring Boot 镜像并启动(端口 8080) 3. 构建前端 Nginx 镜像并启动(端口 80) 启动后访问 `http://localhost` 即可使用。 常用命令: ```bash # 查看运行状态 docker compose ps # 查看日志 docker compose logs -f backend docker compose logs -f frontend # 重新构建并启动 docker compose up -d --build # 停止所有服务 docker compose down # 停止并删除数据卷(⚠️ 会清空数据库) docker compose down -v ``` ### 手动部署 #### 后端打包 ```bash cd leo-backend ./mvnw clean package -DskipTests java -jar target/leo-satellite-1.0.0-SNAPSHOT.jar ``` #### 前端构建 ```bash cd leo-frontend npm run build ``` 构建产物位于 `leo-frontend/dist/`,可部署至 Nginx 或其他静态资源服务器。参考配置见 `leo-frontend/nginx.conf`。 ## 常见问题 | 问题 | 解决方法 | | ------------------ | ------------------------------------------------------------ | | 数据库连接失败 | 检查 PostgreSQL 是否启动,验证`application.yml` 中的连接信息 | | Redis 无法连接 | 确认 Redis 服务已启动,默认端口 6379 | | WebSocket 连接异常 | 确认 Vite 代理配置中`/ws` 已正确转发到后端 | | 401 认证失败 | 检查 JWT 密钥与过期时间配置,确认 Token 在请求头中携带 | | 端口冲突 | 后端默认 8080,前端默认 3000,可在配置文件中修改 | ## License 本项目仅供学习和参考使用。