gunshi-project-ss/deprecated/degisn.md

745 lines
30 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 第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` - 自动化部署脚本
- **配置管理**:环境配置的统一管理
- **监控告警**:网络和服务监控告警机制