Files
weather-data/README.zh-CN.md
T

8.3 KiB
Raw 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 目录监控,气象资料自动入库
区域管理 modules/region/ 行政区域树(省/市/县)
系统管理 modules/sys/ 用户、角色、菜单、部门、字典、参数
通知消息 modules/sys/alert/ SSE 实时推送,Spring 事件驱动广播
安全认证 modules/security/ Shiro + Token 认证,OAuth2 过滤器,密码加密
定时任务 modules/job/ Quartz 动态任务管理,在线启停
审计日志 modules/log/ 操作日志、登录日志、异常日志
云存储 modules/oss/ 阿里云 OSS / 七牛云 / 腾讯云 COS 文件存储

weather-data-ui 是 Vue 3 单页应用,通过 REST API 与 system-admin 通信。特性包括:动态路由(登录时从服务端菜单加载)、标签页导航、ECharts 图表可视化、SSE 实时通知滚动。

技术栈

层级 技术
后端框架 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

数据库脚本:system-admin/db/weather_data_system.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

Windows Server

参见 deploy/ 目录下的一键部署脚本(deploy.bat / deploy.ps1)。要求 Windows 10 1803+ 或 Windows Server 2019+,需预装 JDK 17+。以管理员身份运行。

核心功能

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