Files
2026-07-30 17:57:09 +08:00

8.8 KiB
Raw Permalink Blame History

气象数据平台

基于 Spring Boot 3.5 与 Vue 3 的全栈气象数据管理与分析平台。支持多数据源环境,提供实时文件监控、统计分析与基于角色的访问控制。

开发者文档:CLAUDE.md | 模块文档:system-admin | system-common | system-dynamic-datasource | weather-data-ui

English version: 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 提供基础类层次(BaseEntityCrudServiceCrudServiceImpl)、Redis 工具、校验框架、XSS 防护及通用工具类。所有后端模块均依赖此模块。

system-dynamic-datasource 提供 @DataSource 注解与 DynamicDataSource(继承 AbstractRoutingDataSource),用于运行时切换多数据源。当 system-admin 需要查询不同数据库时使用。

system-admin 是主应用入口(AdminApplication.java),所有业务逻辑按 domain 组织在 modules/ 下:

业务域 包路径 功能说明
逐日气象数据 modules/weather/dailydata/ Excel 异步双遍扫描批量导入、CRUD、Redis 缓存统计汇总
气象站点 modules/weather/station/ 站点注册,关联部门实现数据权限隔离
文件扫描 modules/weather/filescan/ WatchService 目录监控,并行文件扫描,MD5 去重,气象资料自动入库
区域管理 modules/region/ 行政区域树(省/市/县),CSV 数据加载
系统管理 modules/sys/ 用户、角色、菜单、部门、字典、参数
通知消息 modules/sys/alert/ SSE 实时推送,Spring 事件驱动广播,外部告警源轮询采集
安全认证 modules/security/ Shiro + Token 认证,OAuth2 过滤器,BCrypt 密码加密,登录状态持久化
定时任务 modules/job/ Quartz 动态任务管理,在线创建、启停、修改 Cron 表达式
审计日志 modules/log/ 操作日志、登录日志、异常日志
云存储 modules/oss/ 阿里云 OSS / 七牛云 / 腾讯云 COS 文件存储

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 7Lettuce 客户端,通过 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. 初始化数据库

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/init_system_params.sql

2. 配置数据源

编辑 system-admin/src/main/resources/application-dev.yml,修改 MySQL 和 Redis 连接信息:

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. 启动后端

# 完整构建
mvn clean install -DskipTests

# 在 IDE 中运行 AdminApplication.java
# 或命令行启动:
cd system-admin && mvn spring-boot:run -Dspring-boot.run.profiles=dev

管理后台:http://localhost:8080/system-admin 接口文档:http://localhost:8080/system-admin/doc.html 默认账号:admin / admin

4. 启动前端

cd weather-data-ui
npm install
npm run dev

前端开发服务器:http://localhost:8001

如需修改后端地址,编辑 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.jarweather-data-ui/dist/ 部署到服务器
  4. 配置 application-prod.yml 中的生产环境数据库和 Redis 连接信息
  5. 启动后端:java -jar system-admin.jar --spring.profiles.active=prod

核心功能

  • 气象数据导入:Excel 异步双遍扫描批量导入,实时进度可查,多行 INSERT 优化,自动站点-部门映射。入口:WeatherDataImportManager
  • 统计汇总:历年同月同日数据汇总,Redis 缓存加速查询,缓存未命中时自动降级至数据库。缓存任务:WeatherSummarizeCacheTask
  • 文件监控:基于 WatchService 自动监控资料目录,启动时并行扫描存量文件,MD5 去重,文件生命周期管理(接收 -> 展示 -> 归档)。服务:FileWatchServiceManager
  • 实时通知:基于 SSE 的服务端推送,Spring 事件驱动广播(创建/撤回/删除),支持外部告警源轮询采集。服务:SseAlertService
  • 数据权限:基于 MyBatis-Plus 拦截器的部门级行级安全,通过 @DataFilter 注解启用,SQL WHERE 子句注入。拦截器:DataFilterInterceptor
  • 动态数据源:运行时通过 @DataSource 注解切换数据源,ThreadLocal 上下文传递。实现:DynamicDataSource
  • 定时任务:Quartz 动态任务管理,支持在线创建、启停、暂停、修改 Cron 表达式,执行历史可查。配置:ScheduleConfig
  • 云存储:支持阿里云 OSS、七牛云、腾讯云 COS 文件上传与管理,统一上传接口。工厂:OSSFactory