gunshi-project-ss/deprecated/degisn.md

745 lines
30 KiB
Markdown
Raw Normal View History

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