# 气象数据平台 基于 Spring Boot 3.5 与 Vue 3 的全栈气象数据管理与分析平台。支持多数据源环境,提供实时文件监控、统计分析与基于角色的访问控制。 > 开发者文档:[CLAUDE.md](CLAUDE.md) | 模块文档:[system-admin](system-admin/CLAUDE.md) | [system-common](system-common/CLAUDE.md) | [system-dynamic-datasource](system-dynamic-datasource/CLAUDE.md) | [weather-data-ui](weather-data-ui/CLAUDE.md) > > English version: [README.md](README.md) ## 项目结构 ``` weather-data/ ├── system-common/ 公共模块(基础类、Redis、校验、工具类) ├── system-dynamic-datasource/ 多数据源支持(AbstractRoutingDataSource) ├── system-admin/ 主应用(REST API、安全、定时任务、文件扫描) └── weather-data-ui/ Vue 3 前端(Element Plus、ECharts、Pinia) ``` ### 模块关系 ``` system-common <-- 被所有后端模块依赖 system-dynamic-datasource <-- 被 system-admin 依赖 system-admin <-- 可运行的 Spring Boot 应用,依赖上述两个模块 weather-data-ui <-- 独立前端,通过 REST API 与 system-admin 通信 ``` **[system-common](system-common/)** 提供基础类层次([BaseEntity](system-common/src/main/java/com/weather/common/entity/BaseEntity.java)、[CrudService](system-common/src/main/java/com/weather/common/service/CrudService.java)、[CrudServiceImpl](system-common/src/main/java/com/weather/common/service/impl/CrudServiceImpl.java))、[Redis 工具](system-common/src/main/java/com/weather/common/redis/RedisUtils.java)、校验框架、XSS 防护及通用工具类。所有后端模块均依赖此模块。 **[system-dynamic-datasource](system-dynamic-datasource/)** 提供 [@DataSource](system-dynamic-datasource/src/main/java/com/weather/commons/dynamic/datasource/annotation/DataSource.java) 注解与 [DynamicDataSource](system-dynamic-datasource/src/main/java/com/weather/commons/dynamic/datasource/config/DynamicDataSource.java)(继承 `AbstractRoutingDataSource`),用于运行时切换多数据源。当 system-admin 需要查询不同数据库时使用。 **[system-admin](system-admin/)** 是主应用入口([AdminApplication.java](system-admin/src/main/java/com/weather/AdminApplication.java)),所有业务逻辑按 domain 组织在 `modules/` 下: | 业务域 | 包路径 | 功能说明 | |--------|--------|----------| | 逐日气象数据 | [modules/weather/dailydata/](system-admin/src/main/java/com/weather/modules/weather/dailydata/) | Excel 异步双遍扫描批量导入、CRUD、Redis 缓存统计汇总 | | 气象站点 | [modules/weather/station/](system-admin/src/main/java/com/weather/modules/weather/station/) | 站点注册,关联部门实现数据权限隔离 | | 文件扫描 | [modules/weather/filescan/](system-admin/src/main/java/com/weather/modules/weather/filescan/) | WatchService 目录监控,并行文件扫描,MD5 去重,气象资料自动入库 | | 区域管理 | [modules/region/](system-admin/src/main/java/com/weather/modules/region/) | 行政区域树(省/市/县),CSV 数据加载 | | 系统管理 | [modules/sys/](system-admin/src/main/java/com/weather/modules/sys/) | 用户、角色、菜单、部门、字典、参数 | | 通知消息 | [modules/sys/alert/](system-admin/src/main/java/com/weather/modules/sys/alert/) | SSE 实时推送,Spring 事件驱动广播,外部告警源轮询采集 | | 安全认证 | [modules/security/](system-admin/src/main/java/com/weather/modules/security/) | Shiro + Token 认证,OAuth2 过滤器,BCrypt 密码加密,登录状态持久化 | | 定时任务 | [modules/job/](system-admin/src/main/java/com/weather/modules/job/) | Quartz 动态任务管理,在线创建、启停、修改 Cron 表达式 | | 审计日志 | [modules/log/](system-admin/src/main/java/com/weather/modules/log/) | 操作日志、登录日志、异常日志 | | 云存储 | [modules/oss/](system-admin/src/main/java/com/weather/modules/oss/) | 阿里云 OSS / 七牛云 / 腾讯云 COS 文件存储 | **[weather-data-ui](weather-data-ui/)** 是 Vue 3 单页应用,通过 REST API 与 system-admin 通信。特性包括:动态路由(登录时从服务端菜单加载)、标签页导航、ECharts 图表可视化、SSE 实时通知滚动、客户端 Excel/PDF 导出。 ## 技术栈 | 层级 | 技术 | |------|------| | 后端框架 | Spring Boot 3.5.11, MyBatis-Plus 3.5.8, Apache Shiro 1.12 | | 数据库 | MySQL 8.0(同时支持 Oracle、SQL Server、PostgreSQL、达梦) | | 连接池 | Druid 1.2 | | 缓存 | Redis 7(Lettuce 客户端,通过 `project-options.redis.open` 控制开关) | | 定时任务 | Quartz 2.3 | | 接口文档 | Knife4j 4.5 (Swagger) | | Excel 处理 | EasyExcel 3.2 | | 前端 | Vue 3.5, TypeScript 5.7, Vite 5.4, Element Plus 2.10, Pinia 2.3, ECharts 5 | **环境要求**:JDK 17+、Maven 3.6+、Node.js 18+、MySQL 8.0+ ## 快速启动(本地开发) ### 1. 初始化数据库 ```bash mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS weather_data_system DEFAULT CHARSET utf8mb4" mysql -u root -p weather_data_system < system-admin/db/weather_data_system.sql mysql -u root -p weather_data_system < system-admin/db/init_system_params.sql ``` 数据库脚本:[system-admin/db/weather_data_system.sql](system-admin/db/weather_data_system.sql) | [system-admin/db/init_system_params.sql](system-admin/db/init_system_params.sql) ### 2. 配置数据源 编辑 [system-admin/src/main/resources/application-dev.yml](system-admin/src/main/resources/application-dev.yml),修改 MySQL 和 Redis 连接信息: ```yaml spring: datasource: druid: url: jdbc:mysql://localhost:3306/weather_data_system?... username: root password: 你的密码 data: redis: host: 127.0.0.1 port: 6379 password: ``` ### 3. 启动后端 ```bash # 完整构建 mvn clean install -DskipTests # 在 IDE 中运行 AdminApplication.java # 或命令行启动: cd system-admin && mvn spring-boot:run -Dspring-boot.run.profiles=dev ``` 管理后台: 接口文档: 默认账号:`admin` / `admin` ### 4. 启动前端 ```bash cd weather-data-ui npm install npm run dev ``` 前端开发服务器: 如需修改后端地址,编辑 [weather-data-ui/.env.development](weather-data-ui/.env.development) 中的 `VITE_APP_API`。 ## 部署 1. 构建后端:`mvn clean package -DskipTests -f system-admin` 2. 构建前端:`cd weather-data-ui && npm run build` 3. 将 `system-admin/target/system-admin.jar` 和 `weather-data-ui/dist/` 部署到服务器 4. 配置 `application-prod.yml` 中的生产环境数据库和 Redis 连接信息 5. 启动后端:`java -jar system-admin.jar --spring.profiles.active=prod` ## 核心功能 - **气象数据导入**:Excel 异步双遍扫描批量导入,实时进度可查,多行 INSERT 优化,自动站点-部门映射。入口:[WeatherDataImportManager](system-admin/src/main/java/com/weather/modules/weather/dailydata/WeatherDataImportManager.java) - **统计汇总**:历年同月同日数据汇总,Redis 缓存加速查询,缓存未命中时自动降级至数据库。缓存任务:[WeatherSummarizeCacheTask](system-admin/src/main/java/com/weather/modules/weather/dailydata/task/WeatherSummarizeCacheTask.java) - **文件监控**:基于 WatchService 自动监控资料目录,启动时并行扫描存量文件,MD5 去重,文件生命周期管理(接收 -> 展示 -> 归档)。服务:[FileWatchServiceManager](system-admin/src/main/java/com/weather/modules/weather/filescan/FileWatchServiceManager.java) - **实时通知**:基于 SSE 的服务端推送,Spring 事件驱动广播(创建/撤回/删除),支持外部告警源轮询采集。服务:[SseAlertService](system-admin/src/main/java/com/weather/modules/sys/alert/SseAlertService.java) - **数据权限**:基于 MyBatis-Plus 拦截器的部门级行级安全,通过 `@DataFilter` 注解启用,SQL WHERE 子句注入。拦截器:[DataFilterInterceptor](system-admin/src/main/java/com/weather/common/interceptor/DataFilterInterceptor.java) - **动态数据源**:运行时通过 `@DataSource` 注解切换数据源,ThreadLocal 上下文传递。实现:[DynamicDataSource](system-dynamic-datasource/src/main/java/com/weather/commons/dynamic/datasource/config/DynamicDataSource.java) - **定时任务**:Quartz 动态任务管理,支持在线创建、启停、暂停、修改 Cron 表达式,执行历史可查。配置:[ScheduleConfig](system-admin/src/main/java/com/weather/modules/job/config/ScheduleConfig.java) - **云存储**:支持阿里云 OSS、七牛云、腾讯云 COS 文件上传与管理,统一上传接口。工厂:[OSSFactory](system-admin/src/main/java/com/weather/modules/oss/cloud/OSSFactory.java)