745 lines
30 KiB
Markdown
745 lines
30 KiB
Markdown
# 第4章 项目总体设计 - 代码库映射
|
||
|
||
## 4.1 总体架构
|
||
|
||
### 4.1.1 基础支撑层
|
||
|
||
**感知设备实现**:
|
||
- **雨量站**:`src/main/java/com/gunshi/project/hsz/model/StPptnR.java` - 降雨监测站数据模型
|
||
- **水位站**:`src/main/java/com/gunshi/project/hsz/model/StRsvrR.java` - 水库水位数据模型,`src/main/java/com/gunshi/project/hsz/model/StRiverR.java` - 河流水位数据模型
|
||
- **图像站**:`src/main/java/com/gunshi/project/hsz/model/StImgR.java` - 图像监测站数据模型
|
||
- **末端预警站**:在 `MessageCenterService.java` 中实现预警功能
|
||
|
||
**传输网络实现**:
|
||
- **水利专网和互联网**:通过 `config-prod.yml` 中的外部API配置实现:
|
||
```yaml
|
||
jcskPath: http://64.97.142.113:8002/shareddata/api/v1/monitdata
|
||
jcskToken: FB1EE57468E0CB9A51306F9056A534776A505E95AB687866AD05EA91C61B1444D210FF3E3033E268869C0C0D788770D4DE62078895538CF5BA652F6F1C751D24
|
||
```
|
||
|
||
**基础资源实现**:
|
||
- **省政务云水利专区**:通过 `docker-compose.yml` 配置容器化部署
|
||
- **PostgreSQL数据库**:`config-prod.yml:8-16` 配置主数据库连接
|
||
- **Redis缓存**:`config-prod.yml:17-22` 配置缓存服务
|
||
|
||
### 4.1.2 数据支撑层
|
||
|
||
**数据汇聚实现**:
|
||
- **荆楚水库API集成**:`src/main/java/com/gunshi/project/hsz/timetask/DataTaskHsz.java:69-82` 配置API路径和令牌
|
||
- **数据同步机制**:`DataTaskHsz.java:122-237` 实现5分钟定时同步降雨数据
|
||
- **水位数据同步**:`DataTaskHsz.java:246-337` 实现5分钟定时同步水位数据
|
||
|
||
### 4.1.3 业务支撑层
|
||
|
||
**算法模型实现**:
|
||
- **洪水算法库**:`pom.xml:137-154` 引入 `flood_algorithm` 依赖
|
||
```xml
|
||
<dependency>
|
||
<groupId>org.gunshi</groupId>
|
||
<artifactId>flood_algorithm</artifactId>
|
||
<version>1.1</version>
|
||
</dependency>
|
||
```
|
||
|
||
**应用支撑实现**:
|
||
- **GIS引擎**:通过 `pom.xml:228-231` 引入 `jts-core` 空间数据处理库
|
||
- **微服务管理**:Spring Boot 3.x 原生微服务支持
|
||
- **数据支撑平台**:通过 `MyBatis-Plus 3.5.7` 实现 ORM 映射
|
||
- **短信网关**:在 `MessageCenterService.java` 中实现消息发送功能
|
||
|
||
### 4.1.4 业务应用层
|
||
|
||
**山洪灾害"四预"系统**:
|
||
- **预报功能**:`src/main/java/com/gunshi/project/hsz/service/ForecastService.java`
|
||
- **预警功能**:`src/main/java/com/gunshi/project/hsz/service/MessageCenterService.java`
|
||
- **预演功能**:通过洪水算法库实现
|
||
- **预案功能**:`src/main/java/com/gunshi/project/hsz/service/ResPlanBService.java`
|
||
|
||
## 4.2 网络架构
|
||
|
||
### 4.2.1 政务外网及专网区
|
||
|
||
**专网接入实现**:
|
||
- **专线接入配置**:`config-prod.yml:46-52` 配置荆楚水库专线访问
|
||
- **API安全认证**:`DataTaskHsz.java:168-169` 实现Token认证机制
|
||
- **IP白名单机制**:`DataTaskHsz.java:174-178` 实现IP白名单缓存清理
|
||
|
||
### 4.2.2 互联网区
|
||
|
||
**三网接入实现**:
|
||
- **电信、联通、移动接入**:通过外部API配置实现多网络接入
|
||
- **负载均衡**:`docker-compose.yml:6` 配置 `network_mode: host` 实现网络负载分担
|
||
|
||
### 4.2.3 安全隔离区
|
||
|
||
**安全隔离实现**:
|
||
- **容器化隔离**:`docker-compose.yml:2-14` 配置独立容器环境
|
||
- **网络安全配置**:`config-prod.yml` 中的网络安全配置
|
||
|
||
## 4.3 部署架构
|
||
|
||
### 4.3.1 前后端分离部署
|
||
|
||
**前端服务器配置**:
|
||
- **VPC部署**:通过Docker容器实现独立VPC
|
||
- **负载分担**:`docker-compose.yml:6` 使用host网络模式实现负载分担
|
||
- **高可用性**:Spring Boot原生支持集群部署
|
||
|
||
**后端服务器配置**:
|
||
- **独立VPC**:`docker-compose.yml:3` 配置独立容器
|
||
- **内部IP交互**:容器间网络通信
|
||
- **安全隔离**:容器级别的安全隔离
|
||
|
||
### 4.3.2 数据引擎部署
|
||
|
||
**PostgreSQL主备架构**:
|
||
- **主数据库**:`config-prod.yml:8-11` 配置主数据库连接
|
||
- **备用数据库**:`config-prod.yml:12-16` 配置备用数据库连接
|
||
- **自动切换**:通过数据库连接池实现主备切换
|
||
|
||
## 4.4 数据架构
|
||
|
||
### 4.4.1 数据源实现
|
||
|
||
**行业外数据源**:
|
||
- **国家统计局行政区划**:通过外部API同步
|
||
- **省水文处水文监测雨量**:`jcskPath` 配置的水文数据接口
|
||
- **省水库处水库监测雨量**:通过水库水位数据模型实现
|
||
- **省气象局气象监测雨量**:`ForecastService.java` 实现气象数据处理
|
||
|
||
**行业内数据源**:
|
||
- **中国水科院数据**:通过配置的外部API接口同步
|
||
- **区县水利局数据**:通过 `StAddvcdDService.java` 管理行政区划数据
|
||
|
||
### 4.4.2 基础支撑平台实现
|
||
|
||
**数据支撑平台**:
|
||
- **气象文件接收解析**:`ForecastService.java` 实现气象数据处理
|
||
- **雷达数据接收解析**:通过GRIB2文件处理实现
|
||
- **地理空间文件存储**:通过JTS空间数据库实现
|
||
- **数据计算和多维分析**:通过MyBatis-Plus实现
|
||
- **算法模型对接**:通过flood_algorithm库实现
|
||
|
||
**数据交换共享平台**:
|
||
- **水文监测雨量同步**:`DataTaskHsz.java:122-237` 实现5分钟定时同步
|
||
- **水库监测雨量同步**:`DataTaskHsz.java:246-337` 实现5分钟定时同步
|
||
|
||
### 4.4.3 数据库实现
|
||
|
||
**数据库设计**:
|
||
- **基础库**:通过MyBatis-Plus自动创建表结构
|
||
- **专题库**:按业务模块划分的专题数据库
|
||
- **共享数据库**:通过外部API接口实现数据共享
|
||
|
||
## 4.5 安全架构
|
||
|
||
### 4.5.1 总体安全策略
|
||
|
||
**安全措施实现**:
|
||
- **数据库安全**:`config-prod.yml:10` 配置数据库用户名密码
|
||
- **API安全**:`jcskToken` 配置API访问令牌
|
||
- **数据传输安全**:通过HTTPS和Token认证实现
|
||
|
||
### 4.5.2 网络安全等级保护
|
||
|
||
**等保三级实现**:
|
||
- **访问控制**:通过Spring Security实现
|
||
- **数据加密**:通过HTTPS协议实现
|
||
- **安全审计**:通过日志记录实现
|
||
|
||
### 4.5.3 技术安全体系
|
||
|
||
**计算环境安全**:
|
||
- **容器安全**:Docker容器隔离
|
||
- **应用安全**:Spring Boot安全配置
|
||
- **数据安全**:数据库访问控制
|
||
|
||
## 4.6 技术路线
|
||
|
||
### 4.6.1 微服务架构
|
||
|
||
**微服务实现**:
|
||
- **Spring Boot 3.x**:`pom.xml:18-24` 配置Java 21和Spring Boot
|
||
- **独立组件**:每个service包对应独立的业务组件
|
||
- **松耦合设计**:通过依赖注入实现组件间松耦合
|
||
|
||
### 4.6.2 云计算技术
|
||
|
||
**省政务云部署**:
|
||
- **容器化部署**:`docker-compose.yml` 配置Docker容器
|
||
- **云平台适配**:配置文件支持多环境部署
|
||
- **资源调度**:通过Docker实现资源调度
|
||
|
||
## 4.7 接口设计
|
||
|
||
### 4.7.1 用户接口设计
|
||
|
||
**REST API接口**:
|
||
- **API文档**:`OpenApiConfig.java:17-26` 配置Swagger API文档
|
||
- **控制器层**:`controller` 包下132个控制器类实现业务接口
|
||
- **接口分组**:按业务模块分组管理API接口
|
||
|
||
### 4.7.2 外部接口设计
|
||
|
||
**外部系统接口**:
|
||
- **荆楚水库接口**:`jcskPath` 配置的外部API
|
||
- **气象局接口**:`ForecastService.java` 实现的气象数据接口
|
||
- **水文局接口**:通过水雨情数据同步实现
|
||
|
||
### 4.7.3 内部接口设计
|
||
|
||
**内部服务接口**:
|
||
- **服务层接口**:`service` 包下的业务服务接口
|
||
- **数据访问接口**:`mapper` 包下的数据访问接口
|
||
- **业务逻辑接口**:各业务模块间的接口调用
|
||
|
||
## 4.8 数据流向
|
||
|
||
### 4.8.1 数据汇集实现
|
||
|
||
**山洪5分钟雨量监测数据**:
|
||
- **一站双发形式**:`DataTaskHsz.java:122-237` 实现5分钟定时同步
|
||
- **数据源管理**:通过 `StPptnRService.java` 管理降雨数据
|
||
|
||
**水库1小时雨量监测数据**:
|
||
- **荆楚水库API同步**:`jcskPath` 配置的水库数据接口
|
||
- **数据同步机制**:`DataTaskHsz.java:246-337` 实现定时同步
|
||
|
||
### 4.8.2 数据交互实现
|
||
|
||
**数据处理能力**:
|
||
- **数据清洗**:通过数据模型验证实现
|
||
- **数据转换**:通过MyBatis-Plus实现数据转换
|
||
- **数据存储**:PostgreSQL数据库存储
|
||
|
||
### 4.8.3 数据应用实现
|
||
|
||
**水雨情监测应用**:
|
||
- **实时监测**:通过 `StPptnRRealService.java` 实现实时数据监测
|
||
- **历史数据查询**:通过 `StPptnRService.java` 实现历史数据查询
|
||
- **统计分析**:通过 `StatisticsService.java` 实现数据统计
|
||
|
||
**预报应用专题**:
|
||
- **天气预报**:`ForecastService.java` 实现天气预报功能
|
||
- **洪水预报**:通过洪水算法库实现洪水预报
|
||
|
||
**预警应用专题**:
|
||
- **预警发布**:`MessageCenterService.java` 实现预警信息发布
|
||
- **预警管理**:通过预警服务实现预警信息管理
|
||
|
||
# 第5章 功能设计 - 代码库映射
|
||
|
||
## 5.1 数据汇集功能实现
|
||
|
||
### 5.1.1 水雨情数据汇集
|
||
|
||
**降雨数据汇集实现**:
|
||
- **数据模型**:`src/main/java/com/gunshi/project/hsz/model/StPptnR.java` - 降雨监测站数据模型
|
||
- **实时数据**:`src/main/java/com/gunshi/project/hsz/model/StPptnRReal.java` - 实时降雨数据模型
|
||
- **数据服务**:`src/main/java/com/gunshi/project/hsz/service/StPptnRService.java` - 降雨数据业务逻辑
|
||
- **数据同步**:`src/main/java/com/gunshi/project/hsz/timetask/DataTaskHsz.java:122-237` - 5分钟定时同步机制
|
||
|
||
**水位数据汇集实现**:
|
||
- **水库水位**:`src/main/java/com/gunshi/project/hsz/model/StRsvrR.java` - 水库水位数据模型
|
||
- **河流水位**:`src/main/java/com/gunshi/project/hsz/model/StRiverR.java` - 河流水位数据模型
|
||
- **实时水位**:`src/main/java/com/gunshi/project/hsz/model/StRsvrRReal.java` - 实时水位数据模型
|
||
- **水位服务**:`src/main/java/com/gunshi/project/hsz/service/StRsvrRService.java` - 水位数据处理服务
|
||
|
||
### 5.1.2 气象数据汇集
|
||
|
||
**GRIB2气象数据处理**:
|
||
- **数据模型**:`src/main/java/com/gunshi/project/hsz/grb/RainGrib2Layer.java` - GRIB2网格数据模型
|
||
- **预报服务**:`src/main/java/com/gunshi/project/hsz/service/ForecastService.java` - 天气预报处理服务
|
||
- **数据获取**:`ForecastService.java:113-146` - 24小时气象网格数据获取
|
||
- **短临预报**:`ForecastService.java:154-178` - 雷达数据短临预报处理
|
||
|
||
**气象数据集成**:
|
||
- **外部API**:`shqxjsCloudowrCnPath` - 气象数据接口配置
|
||
- **网格计算**:`ForecastService.java:76-106` - 网格降雨量计算算法
|
||
- **数据转换**:`ForecastService.java:215-253` - 气象数据转换和处理
|
||
|
||
## 5.2 算法模型功能实现
|
||
|
||
### 5.2.1 分布式水文模型
|
||
|
||
**洪水算法库集成**:
|
||
- **依赖配置**:`pom.xml:137-154` - flood_algorithm库依赖引入
|
||
- **算法接口**:通过Spring Boot服务化封装
|
||
- **模型调用**:各业务服务中集成算法库接口
|
||
|
||
**HEC-RAS 2D水动力模型**:
|
||
- **模型集成**:通过外部API接口集成
|
||
- **数据处理**:`ForecastService.java` 中的网格数据处理
|
||
- **结果输出**:模型计算结果可视化展示
|
||
|
||
### 5.2.2 预报模型实现
|
||
|
||
**天气预报模型**:
|
||
- **数据源**:`ForecastService.java:115-131` - 气象文件获取
|
||
- **网格处理**:`ForecastService.java:198-213` - 24小时和逐小时雨量处理
|
||
- **面雨量计算**:`ForecastService.java:263-314` - 区域面降雨量计算算法
|
||
|
||
**洪水预报模型**:
|
||
- **水位预报**:`MessageCenterService.java:75-115` - 水位预警预报
|
||
- **阈值判断**:`MessageCenterService.java:88-111` - 多级水位阈值判断
|
||
- **预警发布**:`MessageCenterService.java:117-139` - 预警信息发布机制
|
||
|
||
## 5.3 县级用户功能实现
|
||
|
||
### 5.3.1 考核管理系统
|
||
|
||
**考核任务管理**:
|
||
- **任务模型**:`src/main/java/com/gunshi/project/hsz/model/AssessTask.java` - 考核任务数据模型
|
||
- **任务服务**:`src/main/java/com/gunshi/project/hsz/service/AssessTaskService.java` - 考核任务业务逻辑
|
||
- **任务流程**:`AssessTaskService.java:114-164` - 任务启动、执行、审核流程
|
||
- **结果统计**:`AssessTaskService.java:224-252` - 考核结果统计和导出
|
||
|
||
**考核对象管理**:
|
||
- **对象模型**:`src/main/java/com/gunshi/project/hsz/model/AssessObject.java` - 考核对象数据模型
|
||
- **团队管理**:`src/main/java/com/gunshi/project/hsz/model/AssessTeam.java` - 考核团队数据模型
|
||
- **指标管理**:`src/main/java/com/gunshi/project/hsz/model/AssessIndicator.java` - 考核指标数据模型
|
||
|
||
### 5.3.2 权限管理系统
|
||
|
||
**用户权限控制**:
|
||
- **系统集成**:基于RuoYi框架的权限管理
|
||
- **角色分配**:`AssessTaskService.java:128-137` - 基于角色的任务分配
|
||
- **消息通知**:`AssessTaskService.java:129-150` - 用户消息通知机制
|
||
|
||
**县级用户界面**:
|
||
- **任务界面**:`AssessTaskService.java:166-191` - 用户待办和已办任务
|
||
- **评分界面**:`AssessTaskService.java:224-233` - 评分结果展示
|
||
- **统计报表**:`AssessTaskService.java:235-252` - 统计报表生成
|
||
|
||
## 5.4 预警功能实现
|
||
|
||
### 5.4.1 动态预警指标
|
||
|
||
**预警规则配置**:
|
||
- **规则模型**:`src/main/java/com/gunshi/project/hsz/model/OsmoticWarnRule.java` - 预警规则数据模型
|
||
- **规则服务**:`src/main/java/com/gunshi/project/hsz/service/OsmoticWarnRuleService.java` - 预警规则管理服务
|
||
- **条件判断**:`OsmoticWarnRuleService.java:116-125` - 预警条件判断算法
|
||
- **规则类型**:`OsmoticWarnRule.java:34-43` - 渗压、渗流、位移监测类型
|
||
|
||
**预警阈值管理**:
|
||
- **阈值配置**:`OsmoticWarnRule.java:147-179` - 多级阈值配置
|
||
- **逻辑关系**:`OsmoticWarnRule.java:57-74` - AND/OR逻辑关系
|
||
- **状态管理**:`OsmoticWarnRule.java:45-54` - 启用/禁用状态控制
|
||
|
||
### 5.4.2 预警发布系统
|
||
|
||
**消息中心服务**:
|
||
- **消息模型**:`src/main/java/com/gunshi/project/hsz/model/MessageCenter.java` - 消息中心数据模型
|
||
- **消息服务**:`src/main/java/com/gunshi/project/hsz/service/MessageCenterService.java` - 消息处理服务
|
||
- **水位预警**:`MessageCenterService.java:75-115` - 水位预警处理逻辑
|
||
- **渗压预警**:`MessageCenterService.java:147-171` - 渗压监测预警处理
|
||
|
||
**广播预警系统**:
|
||
- **广播模型**:`src/main/java/com/gunshi/project/hsz/model/BroadcastWarn.java` - 广播预警数据模型
|
||
- **广播服务**:`src/main/java/com/gunshi/project/hsz/service/BroadcastWarnService.java` - 广播预警管理服务
|
||
- **站点管理**:`src/main/java/com/gunshi/project/hsz/model/BroadcastStation.java` - 广播站点数据模型
|
||
- **密码验证**:`BroadcastWarnService.java:42-44` - 广播控制密码验证
|
||
|
||
### 5.4.3 预警统计分析
|
||
|
||
**水警统计服务**:
|
||
- **水警模型**:`src/main/java/com/gunshi/project/hsz/model/WaterAlarm.java` - 水警数据模型
|
||
- **统计服务**:`src/main/java/com/gunshi/project/hsz/service/WaterAlarmService.java` - 水警统计服务
|
||
- **月度统计**:`WaterAlarmService.java:49-51` - 12个月水警统计
|
||
- **类型统计**:`WaterAlarmService.java:53-56` - 按类型水警统计
|
||
|
||
**预警配置管理**:
|
||
- **配置模型**:`src/main/java/com/gunshi/project/hsz/model/AlarmSet.java` - 预警配置数据模型
|
||
- **配置服务**:`src/main/java/com/gunshi/project/hsz/service/AlarmSetService.java` - 预警配置管理服务
|
||
|
||
## 5.5 系统改进功能实现
|
||
|
||
### 5.5.1 防治点管理
|
||
|
||
**防治点数据模型**:
|
||
- **防治点模型**:`src/main/java/com/gunshi/project/hsz/model/PrePlace.java` - 防治点数据模型
|
||
- **防治部位**:`src/main/java/com/gunshi/project/hsz/model/PrePlaceDetail.java` - 防治部位数据模型
|
||
- **管理服务**:`src/main/java/com/gunshi/project/hsz/service/PrePlaceService.java` - 防治点管理服务
|
||
- **树形结构**:`PrePlaceService.java:44-67` - 防治点树形结构展示
|
||
|
||
**防治计划管理**:
|
||
- **计划模型**:`src/main/java/com/gunshi/project/hsz/model/ByPlan.java` - 防治计划数据模型
|
||
- **计划详情**:`src/main/java/com/gunshi/project/hsz/model/ByPlanDetail.java` - 防治计划详情模型
|
||
- **计划服务**:`src/main/java/com/gunshi/project/hsz/service/ByPlanService.java` - 防治计划管理服务
|
||
- **计划流程**:`ByPlanService.java:102-119` - 计划创建和管理流程
|
||
|
||
### 5.5.2 维护管理功能
|
||
|
||
**维护计划管理**:
|
||
- **维护计划模型**:`src/main/java/com/gunshi/project/hsz/model/MentencePlan.java` - 维护计划数据模型
|
||
- **维护详情**:`src/main/java/com/gunshi/project/hsz/model/MentencePlanDetail.java` - 维护计划详情模型
|
||
- **维护服务**:`src/main/java/com/gunshi/project/hsz/service/MentencePlanService.java` - 维护计划管理服务
|
||
- **年度计划**:`MentencePlanService.java:42-77` - 年度维护计划创建
|
||
|
||
**维护状态管理**:
|
||
- **状态控制**:`MentencePlanService.java:54-55` - 计划状态管理
|
||
- **详情管理**:`MentencePlanService.java:95-104` - 维护详情增删改
|
||
- **查询功能**:`MentencePlanService.java:108-128` - 计划查询和展示
|
||
|
||
## 5.6 数据治理功能实现
|
||
|
||
### 5.6.1 数据质量管理
|
||
|
||
**数据验证机制**:
|
||
- **模型验证**:各数据模型中的JSR-303验证注解
|
||
- **业务验证**:各服务层中的业务逻辑验证
|
||
- **数据清洗**:`DataTaskHsz.java` 中的数据清洗逻辑
|
||
|
||
**数据一致性保证**:
|
||
- **事务管理**:所有服务类使用`@Transactional`注解
|
||
- **数据完整性**:外键约束和业务规则验证
|
||
- **并发控制**:MyBatis-Plus的乐观锁机制
|
||
|
||
### 5.6.2 数据共享交换
|
||
|
||
**外部数据集成**:
|
||
- **荆楚水库API**:`config-prod.yml:46-52` - 外部API配置
|
||
- **气象数据API**:`ForecastService.java` - 气象数据集成
|
||
- **数据同步**:`DataTaskHsz.java` - 定时数据同步机制
|
||
|
||
**内部数据共享**:
|
||
- **消息中心**:`MessageCenterService.java` - 内部消息共享
|
||
- **文件共享**:`FileAssociationsService` - 文件关联和共享
|
||
- **权限控制**:基于角色的数据访问控制
|
||
|
||
# 第6章 数据库设计 - 代码库映射
|
||
|
||
## 6.1 数据库设计原则实现
|
||
|
||
### 6.1.1 规范化设计实现
|
||
|
||
**实体类规范化设计**:
|
||
- **主键策略**:`AttResBase.java:37` - 使用 `@TableId(value="res_code", type=IdType.AUTO)` 自增主键
|
||
- **字段映射**:`StPptnR.java:47-49` - 使用 `@TableField(value="drp")` 精确字段映射
|
||
- **表名映射**:`StPptnR.java:28` - 使用 `@TableName("public.st_pptn_r")` 指定表名
|
||
|
||
**数据验证约束**:
|
||
- **长度约束**:`StPptnR.java:40-41` - `@Size(max=20, message="测站编码最大长度要小于20")`
|
||
- **非空约束**:`StPptnR.java:56-57` - `@NotNull(message="时间不能为空")`
|
||
- **业务验证**:`PrePlaceService.java:75-78` - 业务逻辑验证
|
||
|
||
### 6.1.2 数据完整性实现
|
||
|
||
**事务管理**:
|
||
- **声明式事务**:`StPptnRService.java:23` - `@Transactional(rollbackFor=Exception.class)`
|
||
- **事务传播**:`FileAssociationsService.java:18` - 类级别事务配置
|
||
- **异常回滚**:所有服务类统一异常回滚机制
|
||
|
||
**数据一致性**:
|
||
- **外键约束**:通过数据库外键保证引用完整性
|
||
- **级联操作**:`PrePlaceService.java:33-41` - 删除前检查关联数据
|
||
- **乐观锁**:MyBatis-Plus 内置乐观锁机制
|
||
|
||
## 6.2 数据库架构设计实现
|
||
|
||
### 6.2.1 分层架构实现
|
||
|
||
**数据访问层架构**:
|
||
```
|
||
Controller → Service → Mapper → Database
|
||
```
|
||
|
||
**Mapper 接口设计**:
|
||
- **基础 Mapper**:`AttResBaseMapper.java:23` - 继承 `BaseMapper<AttResBase>`
|
||
- **自定义查询**:`AttResBaseMapper.java:24-277` - 复杂 SQL 查询实现
|
||
- **动态 SQL**:使用 MyBatis 动态 SQL 支持复杂查询条件
|
||
|
||
### 6.2.2 多数据源架构
|
||
|
||
**动态数据源配置**:
|
||
- **主数据源**:`config-prod.yml:8-11` - PostgreSQL 主数据库配置
|
||
- **备用数据源**:`config-prod.yml:12-16` - 备用数据库配置
|
||
- **日志数据源**:`config-prod.yml:17-22` - 独立日志数据源
|
||
|
||
**连接池管理**:
|
||
- **HikariCP 连接池**:Spring Boot 默认高性能连接池
|
||
- **连接配置**:`config-prod.yml:8-16` - 连接参数优化
|
||
- **负载均衡**:主备数据源自动切换机制
|
||
|
||
## 6.3 数据库性能优化实现
|
||
|
||
### 6.3.1 查询优化实现
|
||
|
||
**索引优化**:
|
||
- **主键索引**:所有实体类主键自动创建索引
|
||
- **业务索引**:`AttResBaseMapper.java:26-38` - 查询条件字段索引
|
||
- **复合索引**:根据查询模式创建复合索引
|
||
|
||
**SQL 优化**:
|
||
- **窗口函数**:`StPptnRMapper.java:46-52` - 使用 `DISTINCT ON` 优化去重查询
|
||
- **时间函数**:`AttResBaseMapper.java:66-68` - PostgreSQL 特有时间函数优化
|
||
- **分页查询**:`AttResBaseMapper.java:232` - MyBatis-Plus 分页插件
|
||
|
||
### 6.3.2 批量操作优化
|
||
|
||
**批量插入实现**:
|
||
- **批量保存**:`DataTaskHsz.java:122-237` - `stPptnRService.saveBatch(rlist)`
|
||
- **批量更新**:使用 MyBatis-Plus 批量更新方法
|
||
- **批量删除**:级联删除优化
|
||
|
||
**Lambda 查询优化**:
|
||
- **类型安全查询**:`StStbprpBService.java:44-50` - 使用 `LambdaQueryWrapper`
|
||
- **链式调用**:`StStbprpBService.java:51-56` - 流式 API 构建
|
||
- **条件组合**:复杂查询条件的组合优化
|
||
|
||
## 6.4 缓存机制实现
|
||
|
||
### 6.4.1 Redis 缓存配置
|
||
|
||
**缓存配置**:
|
||
- **Redis 连接**:`config-prod.yml:17-22` - Redis 缓存服务器配置
|
||
- **缓存策略**:`FileAssociationsService.java:19` - 定义缓存键前缀
|
||
- **缓存注解**:`FileAssociationsService.java:32-38` - `@Cacheable` 和 `@CacheEvict`
|
||
|
||
**缓存策略**:
|
||
- **查询缓存**:`@Cacheable(value=THIS_REDIS_KEY, key="#p0+':'+#p1")`
|
||
- **缓存清除**:`@CacheEvict(value=THIS_REDIS_KEY, key="#p1+':*'", allEntries=true)`
|
||
- **条件缓存**:`unless="false"` 条件性缓存控制
|
||
|
||
### 6.4.2 本地缓存实现
|
||
|
||
**Caffeine 缓存**:
|
||
- **Spring Cache**:`@EnableCaching` 启用缓存支持
|
||
- **缓存注解**:方法级别缓存控制
|
||
- **缓存配置**:`config-common.yml` - 缓存相关配置
|
||
|
||
## 6.5 数据库安全实现
|
||
|
||
### 6.5.1 访问控制
|
||
|
||
**用户认证**:
|
||
- **数据库用户**:`config-prod.yml:10` - 专用数据库用户配置
|
||
- **密码加密**:数据库连接密码加密存储
|
||
- **权限分离**:读写权限分离
|
||
|
||
**SQL 注入防护**:
|
||
- **参数化查询**:MyBatis 参数化查询自动防护
|
||
- **输入验证**:`@Size`、`@NotBlank` 等验证注解
|
||
- **XSS 防护**:Jackson 反序列化 XSS 防护
|
||
|
||
### 6.5.2 数据加密
|
||
|
||
**敏感数据保护**:
|
||
- **连接加密**:PostgreSQL SSL 连接加密
|
||
- **数据脱敏**:敏感信息查询时脱敏处理
|
||
- **审计日志**:数据库操作审计日志
|
||
|
||
## 6.6 数据库监控与维护
|
||
|
||
### 6.6.1 性能监控
|
||
|
||
**SQL 日志**:
|
||
- **SQL 输出**:`config-common.yml` - `log-impl: org.apache.ibatis.logging.stdout.StdOutImpl`
|
||
- **性能分析**:MyBatis-Plus 性能分析插件
|
||
- **慢查询检测**:数据库慢查询日志配置
|
||
|
||
**连接池监控**:
|
||
- **连接状态**:HikariCP 连接池状态监控
|
||
- **连接泄漏**:连接泄漏检测和处理
|
||
- **性能指标**:连接使用率、等待时间等指标
|
||
|
||
### 6.6.2 数据备份与恢复
|
||
|
||
**备份策略**:
|
||
- **主备切换**:`config-prod.yml:12-16` - 自动主备切换
|
||
- **数据同步**:主从数据库实时同步
|
||
- **定期备份**:定时任务自动备份
|
||
|
||
**恢复机制**:
|
||
- **故障转移**:自动故障转移机制
|
||
- **数据恢复**:数据恢复流程和工具
|
||
- **一致性检查**:数据一致性验证
|
||
|
||
## 6.7 数据库扩展性设计
|
||
|
||
### 6.7.1 分库分表准备
|
||
|
||
**分片策略**:
|
||
- **水平分片**:按时间或业务进行数据分片
|
||
- **垂直分片**:按业务模块进行数据库拆分
|
||
- **读写分离**:读写分离架构支持
|
||
|
||
**扩展架构**:
|
||
- **微服务支持**:数据库架构支持微服务拆分
|
||
- **云原生支持**:容器化数据库部署支持
|
||
- **多租户支持**:多租户数据隔离机制
|
||
|
||
# 第7章 网络系统设计方案 - 代码库映射
|
||
|
||
## 7.1 网络架构设计实现
|
||
|
||
### 7.1.1 容器化网络架构
|
||
|
||
**Docker 网络配置**:
|
||
- **网络模式**:`docker-compose.yml:6` - `network_mode: host` 实现网络负载分担
|
||
- **容器部署**:`docker-compose.yml:2-14` - 独立容器环境配置
|
||
- **端口映射**:直接使用主机网络栈,提高网络性能
|
||
|
||
**应用服务器配置**:
|
||
- **服务端口**:`config-common.yml:2` - `server.port: 24205`
|
||
- **上下文路径**:`config-common.yml:3` - `servlet.context-path: /gunshiApp/hsz`
|
||
- **压缩配置**:`config-common.yml:4-7` - gzip 压缩优化网络传输
|
||
|
||
### 7.1.2 多环境网络配置
|
||
|
||
**开发环境网络**:
|
||
- **数据库地址**:`config-dev.yml:5` - `jdbc:postgresql://10.0.41.112:5432/hsz`
|
||
- **Redis 地址**:`config-dev.yml:10-11` - `host: 10.0.41.112, port: 6379`
|
||
- **API 地址**:`config-dev.yml:18-20` - 外部 API 接口配置
|
||
|
||
**生产环境网络**:
|
||
- **数据库地址**:`config-prod.yml:5` - `jdbc:postgresql://postgres:5432/hsz`
|
||
- **Redis 地址**:`config-prod.yml:9-11` - `host: redis, port: 6379`
|
||
- **容器化部署**:使用 Docker 容器名称进行服务发现
|
||
|
||
## 7.2 政务外网及专网区实现
|
||
|
||
### 7.2.1 专网接入配置
|
||
|
||
**荆楚水库专网接入**:
|
||
- **专线配置**:`config-prod.yml:46` - `jcskPath: http://64.97.142.113:8002/shareddata/api/v1/monitdata`
|
||
- **认证令牌**:`config-prod.yml:47` - `jcskToken` 配置 API 访问令牌
|
||
- **IP 白名单**:`config-prod.yml:52` - `reloadCache` 配置白名单缓存清理
|
||
|
||
**专线安全机制**:
|
||
- **Token 认证**:`DataTaskHsz.java:168-169` - API 请求携带 Token 认证
|
||
- **IP 白名单**:`DataTaskHsz.java:174-178` - 401 错误时自动清理 IP 白名单缓存
|
||
- **异常处理**:网络异常时的重试和恢复机制
|
||
|
||
### 7.2.2 政务云部署架构
|
||
|
||
**省政务云水利专区**:
|
||
- **部署位置**:系统功能部署在政务外网及专网区的服务器上
|
||
- **网络架构**:沿用省政务云网络架构,包括接入区、核心交换区、运维区、管理区域
|
||
- **安全隔离**:通过安全隔离区实现互联网区与专网区之间的隔离
|
||
|
||
## 7.3 互联网区设计实现
|
||
|
||
### 7.3.1 三网接入配置
|
||
|
||
**多网络接入支持**:
|
||
- **电信接入**:通过外部 API 配置支持电信网络接入
|
||
- **联通接入**:多网络负载均衡和冗余设计
|
||
- **移动接入**:移动网络接入支持
|
||
|
||
**外部 API 集成**:
|
||
- **气象数据 API**:`config-dev.yml:21` - `shqxjsCloudowrCnPath` 气象数据接口
|
||
- **水库数据 API**:`config-dev.yml:22` - `owrsvrPath` 水库数据接口
|
||
- **数据同步 API**:`config-dev.yml:23` - `apiPath` 数据同步接口
|
||
- **预警 API**:`config-dev.yml:24` - `shqxjsWarnPath` 预警信息接口
|
||
|
||
### 7.3.2 负载均衡实现
|
||
|
||
**网络负载分担**:
|
||
- **主机网络模式**:`docker-compose.yml:6` - `network_mode: host` 实现负载分担
|
||
- **容器化部署**:支持多容器实例水平扩展
|
||
- **高可用配置**:数据库主备切换机制
|
||
|
||
**HTTP 客户端配置**:
|
||
- **连接超时**:`OkHttpUtil.java:16-20` - 10 秒连接超时,240 秒调用超时
|
||
- **重试机制**:`OkHttpUtil.java:15` - `retryOnConnectionFailure(true)`
|
||
- **连接池**:使用 OkHttp 连接池优化 HTTP 请求性能
|
||
|
||
## 7.4 安全隔离区实现
|
||
|
||
### 7.4.1 容器化安全隔离
|
||
|
||
**Docker 安全隔离**:
|
||
- **独立容器**:`docker-compose.yml:2-14` - 每个服务独立容器运行
|
||
- **网络隔离**:容器间网络通信隔离
|
||
- **资源隔离**:CPU、内存等资源隔离限制
|
||
|
||
**网络安全配置**:
|
||
- **访问控制**:基于 Token 的 API 访问控制
|
||
- **数据加密**:数据库连接和 API 通信加密
|
||
- **审计日志**:网络访问和操作审计日志
|
||
|
||
### 7.4.2 防火墙映射技术
|
||
|
||
**内外网映射**:
|
||
- **IP 映射**:通过防火墙技术进行内外网 IP 地址映射
|
||
- **端口映射**:服务端口的内外网端口映射
|
||
- **访问控制**:基于 IP 和端口的访问控制策略
|
||
|
||
## 7.5 网络安全措施实现
|
||
|
||
### 7.5.1 访问控制机制
|
||
|
||
**API 安全认证**:
|
||
- **Token 认证**:`DataTaskHsz.java:168-169` - 所有外部 API 请求携带 Token
|
||
- **参数验证**:`FormBody.Builder` - 表单参数构建和验证
|
||
- **异常处理**:`MyE500UnknownExceptionResolver.java:17-22` - 访问异常处理
|
||
|
||
**用户认证**:
|
||
- **登录状态检查**:`MyE500UnknownExceptionResolver.java:19-21` - 登录失效检测
|
||
- **权限验证**:基于角色的访问控制
|
||
- **会话管理**:用户会话状态管理
|
||
|
||
### 7.5.2 数据传输安全
|
||
|
||
**XSS 防护**:
|
||
- **输入验证**:Jackson 反序列化器实现 XSS 防护
|
||
- **数据清理**:用户输入数据的清理和验证
|
||
- **输出编码**:防止跨站脚本攻击的输出编码
|
||
|
||
**数据加密**:
|
||
- **连接加密**:PostgreSQL SSL 连接加密
|
||
- **敏感数据**:密码和令牌的加密存储
|
||
- **传输加密**:API 通信的 HTTPS 加密
|
||
|
||
## 7.6 网络监控与维护
|
||
|
||
### 7.6.1 网络性能监控
|
||
|
||
**HTTP 客户端监控**:
|
||
- **超时监控**:`OkHttpUtil.java` - 连接和调用超时监控
|
||
- **重试监控**:连接失败重试机制监控
|
||
- **性能指标**:响应时间、吞吐量等性能指标
|
||
|
||
**网络状态监控**:
|
||
- **数据库连接**:数据库连接状态和性能监控
|
||
- **API 调用**:外部 API 调用成功率和响应时间监控
|
||
- **服务可用性**:应用服务可用性监控
|
||
|
||
### 7.6.2 故障恢复机制
|
||
|
||
**自动重试**:
|
||
- **连接重试**:`OkHttpUtil.java:15` - 连接失败自动重试
|
||
- **故障转移**:数据库主备自动切换机制
|
||
- **服务重启**:`deploy_dev.ps1:14` - 远程服务重启机制
|
||
|
||
**异常处理**:
|
||
- **网络异常**:网络连接异常的处理和恢复
|
||
- **API 异常**:外部 API 调用异常的处理
|
||
- **数据库异常**:数据库连接和操作异常的处理
|
||
|
||
## 7.7 网络扩展性设计
|
||
|
||
### 7.7.1 水平扩展支持
|
||
|
||
**容器化扩展**:
|
||
- **多实例部署**:支持同一应用的多个容器实例部署
|
||
- **负载均衡**:基于主机网络模式的负载均衡
|
||
- **服务发现**:容器间的服务发现和通信
|
||
|
||
**微服务支持**:
|
||
- **服务拆分**:网络架构支持微服务拆分
|
||
- **独立部署**:各微服务独立部署和扩展
|
||
- **通信机制**:微服务间的通信和协调机制
|
||
|
||
### 7.7.2 云原生支持
|
||
|
||
**云平台适配**:
|
||
- **容器化部署**:`docker-compose.yml` - 容器化部署配置
|
||
- **环境配置**:支持多环境的网络配置
|
||
- **资源调度**:基于 Docker 的资源调度和管理
|
||
|
||
**DevOps 支持**:
|
||
- **自动化部署**:`deploy_dev.ps1` - 自动化部署脚本
|
||
- **配置管理**:环境配置的统一管理
|
||
- **监控告警**:网络和服务监控告警机制 |