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