# 第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 org.gunshi flood_algorithm 1.1 ``` **应用支撑实现**: - **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` - **自定义查询**:`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` - 自动化部署脚本 - **配置管理**:环境配置的统一管理 - **监控告警**:网络和服务监控告警机制