diff --git a/degisn.md b/degisn.md new file mode 100644 index 0000000..df15f67 --- /dev/null +++ b/degisn.md @@ -0,0 +1,745 @@ +# 第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` - 自动化部署脚本 +- **配置管理**:环境配置的统一管理 +- **监控告警**:网络和服务监控告警机制 \ No newline at end of file diff --git a/pom.xml b/pom.xml index 86301eb..2023486 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ gunshi-project-hsz 1.0-SNAPSHOT - 麻城小玉潭水库系统 + 黑石咀水库系统 21 diff --git a/src/main/java/com/gunshi/project/hsz/service/ForecastResultsService.java b/src/main/java/com/gunshi/project/hsz/service/ForecastResultsService.java index 465ec87..b08329d 100644 --- a/src/main/java/com/gunshi/project/hsz/service/ForecastResultsService.java +++ b/src/main/java/com/gunshi/project/hsz/service/ForecastResultsService.java @@ -113,7 +113,7 @@ public class ForecastResultsService extends ServiceImpl + * @return: java.util.List * @auther: cxw * @date: 2024-07-31, 周三, 11:09:24 */ @@ -139,7 +139,7 @@ public class ForecastResultsService extends ServiceImpl + * @return: java.util.List * @auther: cxw * @date: 2024-08-05, 周一, 17:14:52 */ @@ -452,7 +452,7 @@ public class ForecastResultsService extends ServiceImpl + * @return: java.util.List * @auther: cxw */ private List reorganizeRsvrRData(List rsvrRRealList, double dt) { @@ -513,7 +513,7 @@ public class ForecastResultsService extends ServiceImpl + * @return: java.util.List * @auther: cxw */ private Map> reorganizePptnRData(List filterList, double dt, Date startTm, Date endTm, Date nowHourTime, Boolean isHaveFuturePPtn) { diff --git a/src/main/java/com/gunshi/project/hsz/service/ForecastService.java b/src/main/java/com/gunshi/project/hsz/service/ForecastService.java index 3ce17d7..302141b 100644 --- a/src/main/java/com/gunshi/project/hsz/service/ForecastService.java +++ b/src/main/java/com/gunshi/project/hsz/service/ForecastService.java @@ -257,7 +257,7 @@ public class ForecastService { * @param vo * @param total * @param detail - * @return: java.util.List + * @return: java.util.List * @date: 2024-10-14, 周一, 17:52:27 */ public List getAreaData(ForeRainStatVo vo, List total, List detail) { diff --git a/src/main/java/com/gunshi/project/hsz/service/MessageCenterService.java b/src/main/java/com/gunshi/project/hsz/service/MessageCenterService.java index 07ef10c..61331ad 100644 --- a/src/main/java/com/gunshi/project/hsz/service/MessageCenterService.java +++ b/src/main/java/com/gunshi/project/hsz/service/MessageCenterService.java @@ -82,7 +82,7 @@ public class MessageCenterService extends ServiceImpl 0){ diff --git a/src/main/java/com/gunshi/project/hsz/timetask/DataTask.java b/src/main/java/com/gunshi/project/hsz/timetask/DataTask.java index 5d8f830..d2956ad 100644 --- a/src/main/java/com/gunshi/project/hsz/timetask/DataTask.java +++ b/src/main/java/com/gunshi/project/hsz/timetask/DataTask.java @@ -1,4 +1,4 @@ -//package com.gunshi.project.xyt.timetask; +//package com.gunshi.project.hsz.timetask; // //import com.alibaba.fastjson2.JSONArray; //import com.alibaba.fastjson2.JSONObject; @@ -8,12 +8,12 @@ //import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; //import com.fasterxml.jackson.databind.DeserializationFeature; //import com.fasterxml.jackson.databind.ObjectMapper; -//import com.gunshi.project.xyt.entity.SkSyncData; -//import com.gunshi.project.xyt.entity.SkSyncResp; -//import com.gunshi.project.xyt.entity.SyncDataReq; -//import com.gunshi.project.xyt.model.*; -//import com.gunshi.project.xyt.service.*; -//import com.gunshi.project.xyt.util.OkHttpUtil; +//import com.gunshi.project.hsz.entity.SkSyncData; +//import com.gunshi.project.hsz.entity.SkSyncResp; +//import com.gunshi.project.hsz.entity.SyncDataReq; +//import com.gunshi.project.hsz.model.*; +//import com.gunshi.project.hsz.service.*; +//import com.gunshi.project.hsz.util.OkHttpUtil; //import lombok.extern.slf4j.Slf4j; //import okhttp3.*; //import org.springframework.beans.factory.annotation.Autowired; diff --git a/src/main/java/com/gunshi/project/hsz/timetask/DataTaskTSG.java b/src/main/java/com/gunshi/project/hsz/timetask/DataTaskHsz.java similarity index 99% rename from src/main/java/com/gunshi/project/hsz/timetask/DataTaskTSG.java rename to src/main/java/com/gunshi/project/hsz/timetask/DataTaskHsz.java index 53b20f4..8081e49 100644 --- a/src/main/java/com/gunshi/project/hsz/timetask/DataTaskTSG.java +++ b/src/main/java/com/gunshi/project/hsz/timetask/DataTaskHsz.java @@ -50,14 +50,14 @@ import java.util.stream.Collectors; /** *@description 檀树岗数据定时任务 *@author cxw -*@classname DataTaskTSG.java +*@classname DataTaskHsz.java *@create 2024-09-20, 周五, 17:05:22 */ @EnableScheduling//开启定时任务 @Component @Slf4j @Profile({"prod","dev"}) -public class DataTaskTSG { +public class DataTaskHsz { private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); private static SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); diff --git a/tmp.md b/tmp.md new file mode 100644 index 0000000..ece3962 --- /dev/null +++ b/tmp.md @@ -0,0 +1,506 @@ +# 第4章 项目总体设计 + +## 4.1 总体架构 + +湖北省山洪灾害监测预报预警"四预"系统采用面向服务的架构模型,建立"基础支撑层-数据支撑层-业务支撑层-业务应用层"的分布式体系架构。 + +### 4.1.1 基础支撑层 +包括感知设备、传输网络、基础资源三部分: +- **感知设备**:雨量站、水位站、图像站、末端预警站、测雨雷达站等 +- **传输网络**:水利专网和互联网 +- **基础资源**:省政务云水利专区提供的计算资源、存储资源、安全资源和资源调度服务 + +### 4.1.2 数据支撑层 +整合多来源数据信息,建设汇聚库、主题库、基础库、共享库、专题库,对各类基础数据、地理空间数据、监测预报数据及其他外部共享数据等进行集成、存储、处理、共享 + +### 4.1.3 业务支撑层 +包括算法模型和应用支撑两部分: +- **算法模型**:小流域分布式水文模型、简化淹没范围与水深分析模型、复用已有算法模型 +- **应用支撑**:GIS引擎、微服务管理、数据支撑平台、短信网关、模型管理服务 + +### 4.1.4 业务应用层 +基于各类支撑平台,结合山洪相关业务,建设山洪灾害"四预"系统,面向不同用户需求提供多样化信息服务 + +## 4.2 网络架构 + +根据云平台整体架构规划,网络接入包括互联网接入区、政务外网接入区,每个接入区的业务处理网络彼此隔离。 + +### 4.2.1 政务外网及专网区 +1. **接入区**:提供专线接入湖北省水利厅专网 +2. **核心交换区**:完成各功能分区之间数据流量的高速交换 +3. **运维区**:提供远程运维接入服务 +4. **管理区域**:提供数据中心整体的管理功能 +5. **计算区(云资源区)**:部署服务器,结合虚拟化技术提供虚拟机资源 +6. **存储及本地备份区域**:部署存储及备份设备 +7. **灾备区域**:提供远程的数据容灾与备份功能 + +### 4.2.2 互联网区 +1. **接入区**:提供电信、联通、移动三网互联网带宽接入 +2. **核心交换区**:完成各功能分区之间数据流量的高速交换 +3. **运维区**:提供远程运维接入服务 +4. **管理区域**:提供数据中心整体的管理功能 +5. **计算区(云资源区)**:按不同需求对外提供云计算服务 +6. **存储及本地备份区域**:部署存储及备份设备 + +### 4.2.3 安全隔离区 +实现互联网区与政务外网及专网区之间的隔离,保证跨区域数据交互的安全 + +## 4.3 部署架构 + +前端服务器在单独的VPC并分配弹性IP,用户通过互联网直接访问,使用集群技术实现负载分担和高可用。按照等保三级的要求,部署WAF、防DDOS、IPS等安全服务。 + +后端服务器在单独的VPC,不分配弹性IP,后端服务器和前端服务器通过内部IP地址进行交互。按照等保三级的要求,部署云防火墙与前端服务器虚拟网络进行安全隔离。 + +数据引擎服务器满足107个重点小流域风险隐患排查数据、空间地理数据,新增34个县站点接入数据、调查评价数据等新增数据的存储需求。 + +## 4.4 数据架构 + +数据架构是对整个数据生命周期中数据的处理、存贮、转换、整合、分布制定的策略、模型、流程以及支持这些策略、模型、流程的技术架构方案。 + +### 4.4.1 数据源 +- **行业外数据源**:国家统计局行政区划、省水文处水文监测雨量、省水库处水库监测雨量、省气象局气象监测雨量和预报雨量等 +- **行业内数据源**:中国水科院提供的107条小流域风险隐患调查和影响分析成果、各区县水利局提供的行政区划信息和山洪灾害防御责任人等 + +### 4.4.2 基础支撑平台 +- **数据支撑平台**:气象文件接收解析处理、雷达数据接收解析处理、地理空间文件存储使用、数据计算和多维分析、算法模型对接 +- **数据交换共享平台**:水文监测雨量、水库监测雨量等数据同步 +- **流域接收中心**:25个县区山洪5分钟监测降雨数据汇聚 + +### 4.4.3 数据库 +建设基础库和专题库,对外共享的共享数据库 + +### 4.4.4 数据应用 +包括水雨情监测应用专题、预报应用专题、预警应用专题、预演应用专题、预案应用专题、移动APP应用专题、监督管理应用专题、数字孪生应用专题等 + +## 4.5 安全架构 + +### 4.5.1 总体安全策略 +整体安全策略是立足本单位现状和将来一段时间内,以保护整体信息安全而制定的安全方针 + +### 4.5.2 网络安全等级保护制度 +落实国家网络安全等级保护制度,对系统进行科学定级、备案,通过等级测评对安全防护能力进行有效检测 + +### 4.5.3 安全技术体系 +从计算环境安全、安全区域边界、安全通信网络和安全管理中心四个方面分别设计 + +### 4.5.4 安全管理体系 +从安全策略、管理制度、管理机构、人员管理、安全建设管理和安全运维管理等方面分别设计 + +### 4.5.5 安全服务体系 +通过网络安全风险评估、安全加固、渗透测试、应急响应、安全重保、应急演练、安全培训等服务 + +## 4.6 数据流向 + +平台集成多类型数据源,通过多途径的数据接入方式和一数一源采集原则进行数据汇集,经数据清洗形成标准的结构化数据。 + +### 4.6.1 数据汇集 +- **山洪5分钟雨量监测数据**:全省74个县的山洪5分钟雨量监测数据采用一站双发形式 +- **气象1小时雨量监测数据**:先上报到省气象局Oracle数据库,再通过数据汇集与共享平台同步 +- **水库1小时雨量监测数据**:先上报到省水库处SqlServer数据库,再通过数据汇集与共享平台同步 +- **调查评价成果数据**:通过数据导入工具同步到达梦业务数据库 + +### 4.6.2 数据交互 +数据支撑平台提供数据处理能力,根据业务需求达梦业务数据库和数据支撑平台进行数据交互 + +### 4.6.3 数据应用和对外共享 +满足平台各功能需求和对外共享需要 + +## 4.7 技术路线 + +### 4.7.1 微服务 +采用微服务架构,将应用程序构建为独立的组件,并将每个组件作为一项服务,实现微服务之间在结构上的"松耦合"。 + +### 4.7.2 云计算 +项目部署在省政务云水利专区,采用了云计算技术,政务云采用独立的物理机房,为水利厅用户提供专属的云平台和云产品 + +## 4.8 接口设计 + +### 4.8.1 用户接口设计 +用户接口主要功能是为用户提供湖北省山洪灾害监测预报预警"四预"系统的功能操作 + +### 4.8.2 外部接口设计 +包括与气象局、水文局、水库处等外部系统的接口 + +### 4.8.3 内部接口设计 +系统内部各模块之间的接口设计 + +# 第5章 功能设计 + +## 5.1 梳理集成基础数据 + +### 5.1.1 设计思路 +为梳理集成完整的、准确的、权威的湖北山洪灾害基础数据,需对基础数据进行全量调研和评估,分析其质量、完整性、准确性,识别可能存在的数据缺失、错误或不一致等问题。 + +### 5.1.2 梳理集成防治对象调查评价成果 +对2013年以来调查评价未覆盖的重要经济活动区和旅游景区及因脱贫攻坚等规划战略实施整体搬迁、风险源发生变化的村庄等开展调查评价。 + +本次97个重点防治对象调查评价成果数据包含: +1. **调查评价成果报告**:描述调查评价的组织过程、实施过程和调查评价成果 +2. **调查评价成果图集**:将调查和评价成果以防治对象为单元形成图集 +3. **调查评价成果数据**:将调查收集的资料、表格、照片整理形成纸质版和电子版数据体系 + +### 5.1.3 风险隐患调查与影响分析成果集成 +山洪灾害风险隐患调查与影响分析工作以受山洪威胁的城镇、集镇、沿河村落、经济活动区、旅游景区等对象为调查对象。 + +本次107条小流域风险隐患调查和影响分析的结论性成果主要包括: +1. **电子数据** + - 风险隐患要素及防治对象数据 + - 断面数据 + - 空间数据 + - 照片 + +2. **文字报告** + - 对山洪灾害风险隐患调查与影响分析成果报告进行录入,提供在线查看审阅 + +3. **成果报表** + - 重点关注对象详查名录表 + - 防治对象-监测设备关系表 + - 山洪灾害防治对象名录 + - 跨沟道路、桥涵、塘(堰)坝调查成果表 + - 沟滩占地情况调查成果表 + - 干流顶托城集镇及村落调查分析成果表 + +### 5.1.4 数据治理入库和应用集成 +防治对象调查评价成果、风险隐患调查与影响分析成果都需要经过数据治理,得到符合规范的主题数据后再集成。 + +数据治理需要经过数据提取、数据清洗、数据整合、数据转换、数据解耦和重组、数据入库六个步骤。 + +### 5.1.5 小流域治理单元建档立卡 +以1309小流域治理单元为基础单元,运用地理信息系统(GIS)技术,通过关联汇聚小流域治理单元范围内的各类基础和监测数据,形成小流域治理单元基本信息。 + +主要包括: +- **流域基础信息**:梳理全省1309个小流域治理单元基础信息 +- **各类雨量(水位)站点信息**:关联汇聚范围内各类站点信息 +- **降雨预报成果数据**:形成小流域降雨预报网格化数据成果 +- **调查评价成果数据**:构建小流域治理单元的调查评价成果数据库 +- **流域关系**:通过地图数据识别并划定流域内的各级河流,运用空间分析算法,生成小流域上下游关系拓扑图 + +## 5.2 算法模型建设方案 + +针对本次项目涉及的107个小流域治理单元,开发建设小流域分布式水文模型和简化淹没范围与水深分析模型。 + +### 5.2.1 模型建模范围确定 +#### 5.2.1.1 小流域设计暴雨计算 +根据《湖北省暴雨统计参数等值线图集》(2008年)中湖北省年最大10min、1h、6h和24h标准历时点雨量均值等值线图及相应历时暴雨参数值等值线图,查算4种标准历时的设计暴雨均值。 + +#### 5.2.1.2 小流域设计洪水计算 +包括净雨计算和设计洪水计算方法: +- **瞬时单位线**:地表径流计算、地下径流计算、设计洪水过程 +- **经验公式法**:根据小流域所在水文分区和面积,不同标准的洪峰流量按照经验公式法参数查算表选取 + +#### 5.2.1.3 50、100、300年一遇洪水淹没范围分析 +采用HEC-RAS二维水动力学模型进行计算,可进行一维恒定流、一维或二维非恒定流水力计算。 + +### 5.2.2 小流域分布式水文模型精细建模 +#### 5.2.2.1 小流域计算单元划分及属性提取 +每个小流域划分计算单元不一样,提取的属性也不一样。湖北省小流域划分及基础属性提取,包括基础数据收集整理、小流域划分及基础属性提取、小流域统一编码、空间拓扑关系建立、逐级合并大流域、小流域标准化单位线提取等过程。 + +#### 5.2.2.2 面雨量权重值计算 +基于雨量站分布情况,计算小流域面雨量的权重值: +- **泰森多边形**:根据离散分布的气象站的降雨量来计算平均降雨量 +- **反距离加权**:一种简便、常用的空间插值方法 +- **克里金插值**:根据实测数据对研究点的取值进行线性无偏最优估计 + +#### 5.2.2.3 蒸散发量计算 +通过收集各类气象观测要素信息,按照蒸散发模型的公式,计算蒸散发量: +- **FAO Penman-Monteith**:计算可能蒸散发量的最新方法 +- **新安江三层蒸发**:将土层分为三层,用以概化蒸散发计算 + +#### 5.2.2.4 产流模型参数确定 +分析确定产流模型参数,每个小流域选用的模型参数都不同: +- **新安江三水源产流**:按照三层蒸散发模式计算流域蒸散发,按蓄满产流概念计算降雨产生的总径流量 +- **垂向混合产流**:将超渗产流和蓄满产流在垂向上进行组合 + +#### 5.2.2.5 单位线提取 +提取10min、30min、1小时每个小流域计算单元的单位线: +- **标准化单位线**:利用流域的时间~面积关系分析单位线 +- **Nash瞬时单位线**:将河道汇流系统简化为n个串联的线性水库 +- **综合单位线**:选用集水面积为2.30~950平方公里的50个水文站共639场雨洪对应资料分析综合 + +#### 5.2.2.6 河道演进模型参数确定 +对每个小流域内的河段,逐河段进行断面概化,初步确定河道演进模型中的两个关键参数k和x: +- **马斯京根流量演算法**:通过槽蓄方程反映流量和水面比降对槽蓄量的影响 +- **考虑洪水漫滩的流量修正方法**:结合高精度遥感影像数据,估算漫滩水量平均长度 + +### 5.2.3 模块化水文模型集成 +本项目拟采用基于标准封装器的可交互集成方法实现水文模块的动态集成。 + +### 5.2.4 模型精度评估 +收集有小流域历史雨洪资料,对小流域分布式水文模型进行精度评估。评估指标主要包括径流深相对误差、洪峰流量相对误差、峰现时间误差和纳什效率系数等。 + +### 5.2.5 模型参数率定 +结合收集的小流域历史雨洪资料,采用参数自动优化和人工优化相结合,对小流域分布式水文模型进行参数优化。 + +### 5.2.6 107条小流域分布式水文模型概化图 +[详细图表内容] + +## 5.3 简化淹没范围与水深分析模型 + +简化淹没范围与水深分析模型是在河道断面测量基础上,采用曼宁公式等方法推求河道断面水位-流量关系,结合分布式水文模型计算的河道流量,推求不同断面的水位,并勾绘形成区域淹没范围。 + +### 5.3.1 所需数据收集与整编 +#### 5.3.1.1 基础地理信息数据 +1. 107个小流域范围最新时相遥感影像(DOM)数据,分辨率优于2m +2. 107个小流域范围内重要城集镇、规模较大的沿河村落所在区域DEM数据(分辨率优于30m) +3. 河道纵断面和横断面测量数据 + +#### 5.3.1.2 山洪灾害调查评价成果 +1. 设计暴雨:10min、1h、6h、24h等时段,5年、10年、20年、50年、100年等重现期下的雨量及时程分配 +2. 设计洪水:重现期与设计暴雨一致,河段的精细程度应与重要城集镇和规模较大沿河村落的范围相适应 +3. 居民住户资料:包括居民点位置、户主信息、住户数量、联系方式 + +#### 5.3.1.3 风险隐患调查成果 +按照《山洪灾害补充调查评价技术要求(风险隐患调查与影响分析)(试行)》要求,汇集跨沟道路、桥涵和塘堰坝的调查数据等。 + +### 5.3.2 资料质量评估 +#### 5.3.2.1 数据完整性分析 +根据需求确定建模范围,分析收集流域及防灾对象基础数据和调查数据等直接数据和河道形状、底床材料等分析计算所需的间接信息。 + +#### 5.3.2.2 断面数据评估 +根据简化洪水淹没分析模型需要,对隐患调查工作中断面测量提出需求,根据分析对象附近的河道情况,按照从上游到下游的顺序,沿河道进行断面划分。 + +#### 5.3.2.3 DEM数据修正 +将各实测断面数据断面基点与相应位置DEM高程值进行对比,确保断面测量高程系与DEM数据高程系的一致性,并以实测数据高程为基准,修正DEM数据高程。 + +### 5.3.3 断面类型划分 +根据分析对象所在横纵断面形态及分析对象位置,结合最新时相高分辨率遥感影像,将断面划分为3种类型: +1. **河道洪水型断面**:分析对象控制断面、上游及下游断面均为相对规整的抛物线型或矩形等 +2. **滞留洪水型断面**:分析对象控制断面、上游及下游断面均为复合型断面,主河道过水面积明显小于两侧滩地 +3. **封阻洪水型断面**:分析对象下游附近沟道缩窄或下游断面附近有路堤、桥梁、堰坝等明显的阻水建筑物 + +### 5.3.4 构建断面水位流量关系 +对已测量的河道断面的区域,需进行水位流量关系计算,水位流量关系的确定方法可根据实际河道特征选用采用曼宁公式、急滩公式或堰流公式。 + +### 5.3.5 建模过程 +按照不同断面类型,采用不同的方法将小流域洪水分析模型计算的洪峰流量转化为相应水位,获得保护对象的洪水淹没情况。 + +### 5.3.6 简化淹没范围与水深分析模型构建 +利用外业河道断面测量成果,构建简化淹没范围与水深分析模型。 + +### 5.3.7 与分布式水文模型耦合 +将处理好后的GeoJSON文件与流量文件放于工程内,流量文件里面需要断面名称和流量值。 + +### 5.3.8 建立水文关联关系表 +需要用到简化模型范围图层、河流图层、小流域面图层及小流域节点图层。 + +### 5.3.9 重点区域淹没范围图绘制 +针对本项目中107个小流域治理单元,使用24小时不同频率下(5年、10年、20年、50年、100年、300年一遇)的设计暴雨值作为参数传到精细化小流域分布式水文模型中经过计算得到的河道流量数据,把河道流量数据输入到简化淹没范围与水深分析模型中,得到不同频率下的淹没范围。 + +### 5.3.10 模型接口开发与省级平台集成 +#### 5.3.10.1 精细化分布式水文模型 +输入雨量站的实测降雨数据、短临网格降雨数据或者短临网格+实测降雨数据通过webservice接口的方式传入精细化分布式水文模型进行计算,将计算得到的河段流量通过webService接口的方式传输其他方使用。 + +#### 5.3.10.2 简化淹没范围与水深分析模型 +简化淹没范围与水深分析模型将精细化分布式水文模型计算的河段流量结果数据和简化模型文件通过WebService接口的方式传输到简化淹没范围与水深分析模型中计算得到淹没范围再通过WebService接口的方式传输到其他使用方。 + +### 5.3.11 算法模型应用 +#### 5.3.11.1 风险隐患分析范围计算 +根据24小时50年、100年、300年一遇设计暴雨计算设计洪水,再根据HEC-RAS软件计算50年、100年、300年一遇典型暴雨洪水计算的淹没范围,根据遥感影像,结合淹没范围,确定本次风险隐患调查工作开展范围。 + +#### 5.3.11.2 小流域预报预警 +小流域预报预警通过雷达临近预报雨量、逐河段流量数据、临界雨量、设计暴雨指标、设计洪水指标、村庄与河段等多要素关联关系,最终输出村庄预警等级与预警时间、河段风险等级和风险时间。 + +#### 5.3.11.3 小流域重点区域预演 +输入实时降雨数据,经过简化淹没范围与水深分析模型计算后得到小流域范围内重点区域的淹没范围,可以实现小流域范围内重点区域进行实时模拟。 + +## 5.4 县级用户创建 + +### 5.4.1 设计思路 +湖北省山洪灾害监测预报预警平台目前已完成了1个省级用户、13个市级用户和31个县级用户的创建,参照水利部"一级部署、多级应用"的技术架构原则,需对剩下的山洪灾害防治县进行全面覆盖。 + +### 5.4.2 县级用户创建 +参照已建设的31个县级用户功能,集成预报、预警、预演、预案服务,实现34个县级用户的创建。 + +创建完成的县级用户功能应包含:首页、山洪预警、山洪预演、数据维护、综合展示、平台监管、山洪简报、动态预警等。 + +### 5.4.3 湖北省2025年度山洪灾害防治项目省本级涉及用户创建的34个县名录 +[详细县名录表格] + +## 5.5 县级数据整理与应用 + +### 5.5.1 县级数据整理 +各项目县完成用户创建完成以后,各县基础数据、监测数据、地理空间数据、预案数据、责任人数据等数据录入湖北省山洪灾害监测预报预警平台。 + +### 5.5.2 西塞山区 +#### 5.5.2.1 自然情况 +西塞山区位于黄荆山东北麓,地处东经115°12′~115°06′,北纬30°08′~30°12′。东起河口镇牯牛洲,与阳新县韦源口镇交界;西止白塔岩,与下陆区和团城山开发区为邻;南依黄荆山,与开铁区汪仁镇相连;北与黄冈市的浠水县、蕲春县隔江相望;西北与黄石港接壤。 + +#### 5.5.2.2 监测数据 +监测数据主要包括雨量、水位、图像等站点监测数据。西塞山区已有河道水位站3个、雨量站6个、图像站2个。 + +#### 5.5.2.3 地理空间数据 +根据西塞山区shp图层信息,在GIS地图上定位防灾对象、危险区、转移路线、站点信息,并进行信息的展示。 + +#### 5.5.2.4 预案数据 +西塞山区根据2025年省水利厅下发的《省水利厅关于修编山洪灾害防御预案的通知》,结合西塞山区调查评价数据,编制了西塞山区、乡(镇)、村山洪灾害防御预案。 + +#### 5.5.2.5 责任人数据 +西塞山区责任人数据包括县乡村三级责任人和包保责任人。 + +### 5.5.3 铁山区 +[铁山区相关数据] + +### 5.5.4 数据工作清单 +针对西塞山区、铁山区、茅箭区、张湾区、郧西县、竹山县、竹溪县、武当山、谷城县、伍家岗区、点军区、猇亭区、夷陵区、秭归县、宜都市、枝江市、当阳市、京山市、屈家岭、大悟县、安陆市、罗田县、英山县、蕲春县、武穴市、黄梅县、咸安区、赤壁市、曾都区、广水市、恩施市、咸丰县、来凤县、鹤峰县共34个区县的数据工作。 + +### 5.5.5 数据处理应用 +2025年数据方面工作主要包含数据迁移、数据比对和数据更新: +1. **数据迁移**:包括雨量监测数据、水位监测数据、图像监测数据、监测预警记录 +2. **数据比对**:包括行政区划、调查评价成果结构化数据、调查评价空间数据 +3. **数据更新**:包括行政区划、山洪防御责任人、山洪防御预案、调查评价成果结构化数据、调查评价空间数据 + +#### 5.5.5.1 数据迁移 +包括雨量监测数据、水位监测数据、图像监测数据、监测预警记录的迁移流程和实现方式。 + +#### 5.5.5.2 数据比对 +包括行政区划、调查评价成果结构化数据、调查评价空间数据的比对流程。 + +#### 5.5.5.3 数据更新 +包括行政区划、山洪防御责任人、山洪防御预案、调查评价成果结构化数据、调查评价空间数据的更新流程。 + +### 5.5.6 数据处理清单 +[详细数据处理表格] + +## 5.6 系统功能完善 + +参照《省级山洪灾害监测预报预警平台技术要求-2023年修订版》和《水利部办公厅关于印发2025年度山洪灾害防治项目建设工作要求的通知》(办防〔2024〕270号)的技术要求,在已完成的湖北省山洪灾害监测预报预警平台基础上,仍需做进一步完善。 + +### 5.6.1 智能外推(0-3h)定量降雨临近预报模块 +智能外推(0-3h)定量降雨临近预报模块以高精度面雨量为输入,输出高时空分辨率降雨临近预报产品。包括: +- 变分法降雨运动场估计子模块 +- 分尺度降雨谱分解子模块 +- 二阶自相关降雨外推子模块 +- 不同尺度外推降雨场合成算法子模块 +- 不同预见期临近预报降雨产品子模块 +- 预报精度评估子模块 + +### 5.6.2 小流域治理单元建档立卡管理与可视化 +开发小流域治理单元建档立卡管理与可视化功能,实现小流域治理单元建档立卡成果的可视化展示。 + +#### 5.6.2.1 流域基本信息 +能够查看小流域治理单元的基本信息,并能够通过已开展"四预"能力建设和未开展"四预"能力建设进行查询和统计。 + +#### 5.6.2.2 流域关系可视化 +流域关系包括小流域上下游关系、小流域防治单元与小流域计算单元关联关系。 + +#### 5.6.2.3 沟道断面可视化 +通过GIS线条和颜色编码等方式,清晰地展示深泓线断面、水面线和历史洪痕。 + +### 5.6.3 优化防灾对象和测站关联关系 +优化防灾对象和测站关联关系,每一个防灾对象至少关联2个山洪站点。以小流域治理单元为基础,防灾对象与其所在小流域治理单位上游所有山洪雨量站建立关联关系。 + +### 5.6.4 动态预警指标应用 +#### 5.6.4.1 动态预警提醒 +平台每天早上6时计算全省防灾对象动态预警指标,并结合前期1、3、6小时降雨产生预警,对动态预警指标小于静态指标的预警信息及时发送县级防汛责任人进行提醒。 + +#### 5.6.4.2 动态预警指标复核 +在2023年动态预警指标分析成果基础上,对全省山洪灾害防灾对象静态预警指标和动态预警指标的差异和合理性进行分析,并按照区县为单位进行统计。 + +# 第6章 数据库设计 + +## 6.1 数据库设计说明 + +### 6.1.1 编写目的 +数据库设计说明书是软件系统中数据库部分的概念设计、逻辑设计、物理设计、分布数据设计、数据处理设计的文档表示。 + +### 6.1.2 设计原则 +- **数据一致性**:在统一规划的前提下,统一方法、统一指标、统一操作流程、统一精度进行空间数据的组织 +- **数据规范化**:数据库的设计遵循规范化理论,减少数据库插入、删除、修改等操作时的异常和错误 +- **数据专业化**:充分考虑现有行业数据、国家标准数据以及山洪灾害相关标准数据的联系与区别 + +### 6.1.3 设计方法 +系统从数据类型上主要分为结构化与非结构化两大类,地理信息数据是结构化数据中较为特殊的一种类型,对其也将采用单独的设计方法。 + +### 6.1.4 运行环境 +- **硬件设备**:CPU:16vCPU,内存:128GBDRAM,硬盘:40GSSD系统盘/2TBSSD数据盘 +- **软件运行环境**:操作系统:麒麟系统V10,数据库系统:Postgresql11 + +### 6.1.5 数据库安全设计 +- **安全措施**:修改数据库用户的默认密码、设置数据库用户的操作权限、对系统的重要事件进行安全审计等 +- **数据备份**:每日凌晨自动使用Postgresql提供的工具进行数据冷备份、采用双机主备模式 + +### 6.1.6 规范性引用文件 +以水利部颁布的《实时雨水情数据库表结构与标识符标准》(SL323-2011)为标准。 + +## 6.2 部署架构 + +数据库采用主备架构,主机做读写使用,备机只同步主机的数据,不提供对外服务,采用keepalived+VIP做主备切换。解决单点问题,保障数据库高可用性。 + +## 6.3 数据库设计 + +### 6.3.1 分析成果域库 +[分析成果域库架构图] + +### 6.3.2 基础数据域库 +[基础数据域库架构图] + +### 6.3.3 调查成果域 +[调查成果域架构图] + +### 6.3.4 系统管理域 +[系统管理域架构图] + +### 6.3.5 预报域 +[预报域库架构图] + +### 6.3.6 预警域 +[预警域库架构图] + +### 6.3.7 预演域 +[预演域库架构图] + +### 6.3.8 预案域 +[预案域库架构图] + +## 6.4 数据库访问优化设计 + +### 6.4.1 减少数据访问 +- **数据库索引**:在没有索引的世界中,对数据库的每个请求都将导致对整个表进行全面扫描 +- **只访问索引数据**:为几个字段单独建立一个组合索引,可以直接只通过访问索引就能得到数据 +- **优化sql执行计划**:执行计划是SQL在数据库中执行情况的客观反映,也是SQL性能分析和优化的参考 +- **慢查询日志分析**:通过日志来实现调试应用程序中的缓慢性能 + +### 6.4.2 返回更少数据 +- **数据分页处理**:对数据库中数据查询采用SQL分页查询,避免一次性查询数据量过大数据 +- **只返回需要的字段**:查询SQL语句去除不必要字段提高查询性能 + +### 6.4.3 减少交互次数 +- **bacthDML**:通过使用数据库提供批量操作,减少对数据库的查询次数 +- **操作符优化**:使用EXISTS、NOTIN、IN等操作符优化SQL语句 + +# 第7章 网络系统设计方案 + +## 7.1 网络规划 + +根据云平台整体架构规划,网络接入设计包括互联网接入区、政务外网接入区,每个接入区的业务处理网络通安全隔离区彼此做了隔离,以保证安全性。 + +湖北省山洪灾害预报预警系统功能部署在政务外网及专网区的服务器上面。 + +## 7.2 政务外网及专网区 + +沿用省政务云之前政务外网及专网区内部设计,具体包括: +1. **接入区**:提供专线接入湖北省水利厅专网 +2. **核心交换区**:主要功能是完成各功能分区之间数据流量的高速交换 +3. **运维区**:主要提供远程运维接入服务 +4. **管理区域**:提供数据中心整体的管理功能 +5. **计算区(云资源区)**:按不同需求对外提供云计算服务 +6. **存储及本地备份区域**:部署存储及备份设备 +7. **灾备区域**:通过网络互通,提供远程的数据容灾与备份功能 + +省政务云为本年度项目的山洪灾害监测预报预警"四预"系统的稳定运行提供保障。 + +## 7.3 互联网区 + +互联网具体分区功能如下: +1. **接入区**:提供电信、联通、移动三网互联网带宽接入 +2. **核心交换区**:主要功能是完成各功能分区之间数据流量的高速交换 +3. **运维区**:主要提供远程运维接入服务 +4. **管理区域**:提供数据中心整体的管理功能 +5. **计算区(云资源区)**:按不同需求对外提供云计算服务 +6. **存储及本地备份区域**:部署存储及备份设备 + +湖北省山洪灾害监测预报预警"四预"系统互联网访问复用2022年建设的访问方式,主要是在互联网和专网区通过防火墙技术进行内外网的IP和端口的映射达到互联网的访问。 + +## 7.4 安全隔离区 + +采用安全隔离区,实现互联网区与专网区之间的隔离,保证跨区域数据交互的安全。 \ No newline at end of file