# 福建水务营收系统数据库设计文档 ## 文档信息 | 项目信息 | 详情 | |---------|------| | **项目名称** | 福建水务营收系统 | | **文档类型** | 概要设计文档 | | **技术框架** | RuoYi-Vue-Pro + yudao-ui-admin-vue3 | | **文档版本** | v1.0 | | **编写日期** | 2024-12-19 | | **文档状态** | ✅ 已完成 | ## 目录 - [数据库设计概述](#数据库设计概述) - [数据库架构](#数据库架构) - [核心数据模型设计](#核心数据模型设计) - [数据表结构设计](#数据表结构设计) - [索引与性能优化](#索引与性能优化) - [数据安全设计](#数据安全设计) ## 数据库设计概述 福建水务营收系统采用**华为OpenGauss 5.0+**数据库,基于RuoYi-Vue-Pro框架规范设计。OpenGauss作为国产自主可控的企业级数据库,具有高性能、高可用、高安全的特点,完全满足水务行业对数据安全和国产化的要求。 ### 设计目标 - 支持100万客户的业务量,满足3-5年业务发展需求 - 支持200并发用户,50并发移动设备 - 系统响应时间不超过3秒 - 数据安全等保三级要求 - 支持多租户数据隔离 - **国产化要求**:符合国产数据库替代要求 ### 数据库选型优势 - **国产自主可控**:华为OpenGauss是完全自主知识产权的数据库 - **高性能**:优化的SQL引擎,查询性能优于传统数据库20-30% - **高可用**:支持主备同步、读写分离、故障自动切换 - **安全可信**:内置数据加密、审计、权限管控等安全特性 - **生态兼容**:兼容PostgreSQL/MySQL协议,迁移成本低 ### 设计原则 - **标准化**:遵循OpenGauss数据库设计规范 - **多租户**:基于tenant_id字段实现数据隔离 - **可扩展**:预留扩展字段,支持业务增长 - **高性能**:合理设计索引,优化查询性能 - **安全性**:利用OpenGauss内置安全特性 ## 数据库架构 ### 数据库架构图 ```mermaid graph TB subgraph "应用层" APP[Water Biz Application
RuoYi-Vue-Pro] end subgraph "数据访问层" MP[MyBatis Plus
ORM框架] CACHE[Redis缓存
热点数据] end subgraph "数据存储层" subgraph "OpenGauss主从集群" MASTER[(OpenGauss主库
读写)] SLAVE[(OpenGauss从库
只读)] end subgraph "业务数据库" DB_CUSTOMER[(客户数据库
Customer DB)] DB_BILLING[(营收数据库
Billing DB)] DB_METER[(表务数据库
Meter DB)] DB_SYSTEM[(系统数据库
System DB)] end subgraph "数据归档" DB_HISTORY[(历史数据库
Archive DB)] BACKUP[(备份存储
Backup Storage)] end end APP --> MP APP --> CACHE MP --> MASTER MASTER --> SLAVE MASTER --> DB_CUSTOMER MASTER --> DB_BILLING MASTER --> DB_METER MASTER --> DB_SYSTEM SLAVE --> DB_HISTORY MASTER --> BACKUP ``` ### 多租户架构设计 ```mermaid graph TB subgraph "多租户数据隔离" TENANT1[租户1: 福建水务集团] TENANT2[租户2: 厦门分公司] TENANT3[租户3: 泉州分公司] end subgraph "共享数据库" subgraph "业务表结构" TABLE1[water_customer
+ tenant_id] TABLE2[water_meter
+ tenant_id] TABLE3[water_bill
+ tenant_id] TABLE4[water_payment
+ tenant_id] end subgraph "租户隔离机制" INTERCEPTOR[MyBatis Plus
多租户拦截器] FILTER[数据权限过滤器] end end TENANT1 --> INTERCEPTOR TENANT2 --> INTERCEPTOR TENANT3 --> INTERCEPTOR INTERCEPTOR --> FILTER FILTER --> TABLE1 FILTER --> TABLE2 FILTER --> TABLE3 FILTER --> TABLE4 ``` ### 通用字段设计 所有业务表统一包含以下基础字段: | 字段名 | 数据类型 | 长度 | 描述 | |-------|---------|------|-----| | id | BIGINT | - | 主键ID | | tenant_id | BIGINT | - | 租户ID(多租户隔离) | | creator | VARCHAR | 64 | 创建者 | | create_time | DATETIME | - | 创建时间 | | updater | VARCHAR | 64 | 更新者 | | update_time | DATETIME | - | 更新时间 | | deleted | BIT | 1 | 逻辑删除标识 | ## 核心数据模型设计 ### 客户管理模块ER图 ```mermaid erDiagram WATER_CUSTOMER { bigint id PK "主键ID" varchar customer_code UK "客户编号" varchar customer_name "客户名称" varchar customer_type "客户类型" varchar id_type "证件类型" varchar id_number "证件号码" varchar phone "联系电话" varchar address "详细地址" varchar area_code "行政区划代码" tinyint status "状态" bigint tenant_id "租户ID" varchar creator "创建者" datetime create_time "创建时间" varchar updater "更新者" datetime update_time "更新时间" tinyint deleted "是否删除" } WATER_METER { bigint id PK "主键ID" varchar meter_code UK "水表编号" varchar meter_no "水表表号" varchar meter_type "水表类型" varchar meter_model "水表型号" varchar meter_caliber "水表口径" date install_date "安装日期" varchar install_position "安装位置" decimal initial_reading "初始读数" decimal current_reading "当前读数" varchar reading_cycle "抄表周期" varchar book_code "册本编号" tinyint status "状态" bigint customer_id FK "客户ID" bigint tenant_id "租户ID" varchar creator "创建者" datetime create_time "创建时间" varchar updater "更新者" datetime update_time "更新时间" tinyint deleted "是否删除" } WATER_CUSTOMER_ACCOUNT { bigint id PK "主键ID" decimal balance "账户余额" decimal credit_amount "信用额度" date last_payment_date "最近缴费日期" tinyint status "账户状态" bigint customer_id FK "客户ID" bigint tenant_id "租户ID" varchar creator "创建者" datetime create_time "创建时间" varchar updater "更新者" datetime update_time "更新时间" tinyint deleted "是否删除" } WATER_CUSTOMER ||--o{ WATER_METER : "拥有" WATER_CUSTOMER ||--|| WATER_CUSTOMER_ACCOUNT : "对应" ``` ### 营收管理模块ER图 ```mermaid erDiagram WATER_METER_READING { bigint id PK "主键ID" varchar reading_code UK "抄表记录编号" date reading_date "抄表日期" decimal reading_value "抄表读数" decimal prev_reading_value "上次读数" decimal water_usage "用水量" varchar reading_type "抄表类型" varchar reader_id "抄表员ID" varchar remark "备注" tinyint status "状态" bigint meter_id FK "水表ID" bigint tenant_id "租户ID" varchar creator "创建者" datetime create_time "创建时间" varchar updater "更新者" datetime update_time "更新时间" tinyint deleted "是否删除" } WATER_BILL { bigint id PK "主键ID" varchar bill_code UK "账单编号" varchar bill_month "账期" decimal water_usage "用水量" decimal water_fee "水费金额" decimal sewage_fee "污水处理费" decimal other_fee "其他费用" decimal total_amount "总金额" date due_date "缴费截止日期" tinyint bill_status "账单状态" bigint customer_id FK "客户ID" bigint meter_id FK "水表ID" bigint reading_id FK "抄表记录ID" bigint tenant_id "租户ID" varchar creator "创建者" datetime create_time "创建时间" varchar updater "更新者" datetime update_time "更新时间" tinyint deleted "是否删除" } WATER_PAYMENT { bigint id PK "主键ID" varchar payment_code UK "缴费记录编号" varchar payment_type "缴费类型" varchar payment_channel "缴费渠道" decimal payment_amount "缴费金额" datetime payment_time "缴费时间" varchar transaction_no "交易流水号" varchar operator_id "操作员ID" varchar remark "备注" tinyint payment_status "缴费状态" bigint bill_id FK "账单ID" bigint customer_id FK "客户ID" bigint tenant_id "租户ID" varchar creator "创建者" datetime create_time "创建时间" varchar updater "更新者" datetime update_time "更新时间" tinyint deleted "是否删除" } WATER_METER_READING ||--|| WATER_BILL : "生成" WATER_BILL ||--o{ WATER_PAYMENT : "对应" ``` ### 表务管理模块ER图 ```mermaid erDiagram WATER_METER_ARCHIVE { bigint id PK "主键ID" varchar archive_code UK "档案编号" varchar manufacturer "生产厂家" date production_date "生产日期" int valid_period "有效期(月)" date verification_date "检定日期" date next_verification_date "下次检定日期" varchar certificate_no "检定证书号" tinyint archive_status "档案状态" bigint meter_id FK "水表ID" bigint tenant_id "租户ID" varchar creator "创建者" datetime create_time "创建时间" varchar updater "更新者" datetime update_time "更新时间" tinyint deleted "是否删除" } WATER_METER_WORKORDER { bigint id PK "主键ID" varchar workorder_code UK "工单编号" varchar workorder_type "工单类型" varchar workorder_status "工单状态" date apply_date "申请日期" date plan_date "计划执行日期" date execute_date "实际执行日期" varchar applicant_id "申请人ID" varchar executor_id "执行人ID" varchar reason "申请原因" varchar result "执行结果" bigint meter_id FK "水表ID" bigint customer_id FK "客户ID" bigint tenant_id "租户ID" varchar creator "创建者" datetime create_time "创建时间" varchar updater "更新者" datetime update_time "更新时间" tinyint deleted "是否删除" } WATER_METER_STOCK { bigint id PK "主键ID" varchar stock_code UK "库存编号" varchar warehouse_code "仓库编码" varchar warehouse_name "仓库名称" int stock_quantity "库存数量" int min_stock "最小库存" int max_stock "最大库存" varchar meter_model "水表型号" varchar meter_caliber "水表口径" tinyint stock_status "库存状态" bigint tenant_id "租户ID" varchar creator "创建者" datetime create_time "创建时间" varchar updater "更新者" datetime update_time "更新时间" tinyint deleted "是否删除" } WATER_METER ||--|| WATER_METER_ARCHIVE : "对应" WATER_METER ||--o{ WATER_METER_WORKORDER : "产生" ``` ### 系统管理模块ER图 ```mermaid erDiagram SYSTEM_TENANT { bigint id PK "主键ID" varchar tenant_name "租户名称" varchar tenant_code UK "租户编码" varchar contact_name "联系人" varchar contact_phone "联系电话" varchar contact_email "联系邮箱" tinyint tenant_status "租户状态" datetime expire_time "过期时间" varchar domain "域名" varchar package_name "套餐名称" int user_count "用户数量" varchar creator "创建者" datetime create_time "创建时间" varchar updater "更新者" datetime update_time "更新时间" tinyint deleted "是否删除" } SYSTEM_USERS { bigint id PK "主键ID" varchar username UK "用户名" varchar password "密码" varchar nickname "昵称" varchar remark "备注" varchar dept_id "部门ID" varchar post_ids "岗位ID列表" varchar email "邮箱" varchar mobile "手机号" tinyint sex "性别" varchar avatar "头像" tinyint status "状态" datetime login_date "最后登录时间" varchar login_ip "最后登录IP" bigint tenant_id "租户ID" varchar creator "创建者" datetime create_time "创建时间" varchar updater "更新者" datetime update_time "更新时间" tinyint deleted "是否删除" } SYSTEM_TENANT ||--o{ SYSTEM_USERS : "包含" ``` ## 核心数据表设计 ### 表务管理模块ER图 ```mermaid erDiagram WATER_METER_WORKORDER { bigint id PK "主键ID" varchar workorder_code UK "工单编号" varchar workorder_type "工单类型" varchar workorder_status "工单状态" date apply_date "申请日期" date plan_date "计划执行日期" date execute_date "实际执行日期" varchar applicant_id "申请人ID" varchar executor_id "执行人ID" varchar reason "申请原因" varchar result "执行结果" bigint meter_id FK "水表ID" bigint customer_id FK "客户ID" bigint tenant_id "租户ID" } WATER_METER_STOCK { bigint id PK "主键ID" varchar stock_code UK "库存编号" varchar meter_brand "水表品牌" varchar meter_model "水表型号" varchar meter_caliber "水表口径" int stock_quantity "库存数量" int min_stock "最小库存" decimal unit_price "单价" varchar warehouse_location "仓库位置" tinyint stock_status "库存状态" bigint tenant_id "租户ID" } WATER_METER_INVENTORY { bigint id PK "主键ID" varchar inventory_code UK "出入库编号" varchar inventory_type "出入库类型" int quantity "数量" decimal unit_price "单价" decimal total_amount "总金额" varchar operator_id "操作员ID" datetime operation_time "操作时间" varchar remark "备注" bigint stock_id FK "库存ID" bigint workorder_id FK "工单ID" bigint tenant_id "租户ID" } WATER_METER ||--o{ WATER_METER_WORKORDER : "生成" WATER_METER_STOCK ||--o{ WATER_METER_INVENTORY : "出入库" WATER_METER_WORKORDER ||--o{ WATER_METER_INVENTORY : "关联" ``` ### 系统管理模块ER图 ```mermaid erDiagram WATER_DICT_TYPE { bigint id PK "主键ID" varchar dict_name "字典名称" varchar dict_type UK "字典类型" varchar remark "备注" tinyint status "状态" bigint tenant_id "租户ID" } WATER_DICT_DATA { bigint id PK "主键ID" varchar dict_type "字典类型" varchar dict_label "字典标签" varchar dict_value "字典键值" int dict_sort "字典排序" varchar color_type "颜色类型" varchar css_class "CSS类名" varchar remark "备注" tinyint status "状态" bigint tenant_id "租户ID" } WATER_CONFIG { bigint id PK "主键ID" varchar config_name "参数名称" varchar config_key UK "参数键名" varchar config_value "参数键值" varchar config_type "系统内置" varchar remark "备注" bigint tenant_id "租户ID" } WATER_PRICE_CONFIG { bigint id PK "主键ID" varchar price_name "水价名称" varchar customer_type "客户类型" varchar price_type "价格类型" decimal base_price "基础价格" decimal sewage_price "污水处理费" decimal garbage_price "垃圾处理费" date effective_date "生效日期" date expire_date "失效日期" tinyint status "状态" bigint tenant_id "租户ID" } WATER_DICT_TYPE ||--o{ WATER_DICT_DATA : "包含" ``` ## 数据表结构设计 ### 客户管理相关表 #### 客户基本信息表 (water_customer) | 字段名 | 数据类型 | 长度 | 主键 | 非空 | 默认值 | 说明 | |-------|---------|------|------|------|--------|------| | id | BIGINT | - | Y | Y | AUTO_INCREMENT | 主键ID | | customer_code | VARCHAR | 32 | - | Y | - | 客户编号 | | customer_name | VARCHAR | 100 | - | Y | - | 客户名称 | | customer_type | VARCHAR | 20 | - | Y | - | 客户类型 | | id_type | VARCHAR | 20 | - | N | NULL | 证件类型 | | id_number | VARCHAR | 30 | - | N | NULL | 证件号码 | | phone | VARCHAR | 20 | - | N | NULL | 联系电话 | | mobile | VARCHAR | 20 | - | N | NULL | 手机号码 | | email | VARCHAR | 100 | - | N | NULL | 邮箱 | | address | VARCHAR | 500 | - | N | NULL | 详细地址 | | area_code | VARCHAR | 20 | - | N | NULL | 行政区划代码 | | status | TINYINT | - | - | Y | 1 | 状态(0:停用,1:正常,2:欠费,3:销户) | | tenant_id | BIGINT | - | - | Y | 0 | 租户ID | #### 水表信息表 (water_meter) | 字段名 | 数据类型 | 长度 | 主键 | 非空 | 默认值 | 说明 | |-------|---------|------|------|------|--------|------| | id | BIGINT | - | Y | Y | AUTO_INCREMENT | 主键ID | | meter_code | VARCHAR | 32 | - | Y | - | 水表编号 | | meter_no | VARCHAR | 30 | - | N | NULL | 水表表号 | | meter_type | VARCHAR | 20 | - | Y | - | 水表类型 | | meter_model | VARCHAR | 50 | - | N | NULL | 水表型号 | | meter_caliber | VARCHAR | 10 | - | N | NULL | 水表口径 | | manufacturer | VARCHAR | 100 | - | N | NULL | 生产厂家 | | install_date | DATE | - | - | N | NULL | 安装日期 | | install_position | VARCHAR | 500 | - | N | NULL | 安装位置 | | initial_reading | DECIMAL | 10,2 | - | Y | 0.00 | 初始读数 | | current_reading | DECIMAL | 10,2 | - | Y | 0.00 | 当前读数 | | reading_cycle | VARCHAR | 20 | - | Y | MONTHLY | 抄表周期 | | book_code | VARCHAR | 32 | - | N | NULL | 册本编号 | | meter_status | TINYINT | - | - | Y | 1 | 水表状态 | | customer_id | BIGINT | - | - | Y | - | 客户ID | | tenant_id | BIGINT | - | - | Y | 0 | 租户ID | #### 客户账户表 (water_customer_account) | 字段名 | 数据类型 | 长度 | 主键 | 非空 | 默认值 | 说明 | |-------|---------|------|------|------|--------|------| | id | BIGINT | - | Y | Y | AUTO_INCREMENT | 主键ID | | account_code | VARCHAR | 32 | - | Y | - | 账户编号 | | balance | DECIMAL | 12,2 | - | Y | 0.00 | 账户余额 | | credit_amount | DECIMAL | 12,2 | - | N | 0.00 | 信用额度 | | deposit_amount | DECIMAL | 12,2 | - | N | 0.00 | 保证金 | | frozen_amount | DECIMAL | 12,2 | - | N | 0.00 | 冻结金额 | | last_payment_date | DATE | - | - | N | NULL | 最近缴费日期 | | arrears_amount | DECIMAL | 12,2 | - | N | 0.00 | 欠费金额 | | account_status | TINYINT | - | - | Y | 1 | 账户状态 | | customer_id | BIGINT | - | - | Y | - | 客户ID | | tenant_id | BIGINT | - | - | Y | 0 | 租户ID | ### 营收管理相关表 #### 抄表记录表 (water_meter_reading) | 字段名 | 数据类型 | 长度 | 主键 | 非空 | 默认值 | 说明 | |-------|---------|------|------|------|--------|------| | id | BIGINT | - | Y | Y | AUTO_INCREMENT | 主键ID | | reading_code | VARCHAR | 32 | - | Y | - | 抄表记录编号 | | reading_date | DATE | - | - | Y | - | 抄表日期 | | reading_value | DECIMAL | 10,2 | - | Y | - | 抄表读数 | | prev_reading_value | DECIMAL | 10,2 | - | N | NULL | 上次读数 | | water_usage | DECIMAL | 10,2 | - | Y | 0.00 | 用水量 | | reading_type | VARCHAR | 20 | - | Y | - | 抄表类型 | | reader_id | VARCHAR | 20 | - | N | NULL | 抄表员ID | | reading_status | TINYINT | - | - | Y | 0 | 状态 | | meter_id | BIGINT | - | - | Y | - | 水表ID | | customer_id | BIGINT | - | - | Y | - | 客户ID | | tenant_id | BIGINT | - | - | Y | 0 | 租户ID | #### 水费账单表 (water_bill) | 字段名 | 数据类型 | 长度 | 主键 | 非空 | 默认值 | 说明 | |-------|---------|------|------|------|--------|------| | id | BIGINT | - | Y | Y | AUTO_INCREMENT | 主键ID | | bill_code | VARCHAR | 32 | - | Y | - | 账单编号 | | bill_month | VARCHAR | 7 | - | Y | - | 账期 | | bill_date | DATE | - | - | Y | - | 开账日期 | | water_usage | DECIMAL | 10,2 | - | Y | 0.00 | 用水量 | | water_fee | DECIMAL | 10,2 | - | Y | 0.00 | 水费金额 | | sewage_fee | DECIMAL | 10,2 | - | N | 0.00 | 污水处理费 | | other_fee | DECIMAL | 10,2 | - | N | 0.00 | 其他费用 | | total_amount | DECIMAL | 10,2 | - | Y | 0.00 | 总金额 | | due_date | DATE | - | - | Y | - | 缴费截止日期 | | bill_status | TINYINT | - | - | Y | 0 | 账单状态 | | customer_id | BIGINT | - | - | Y | - | 客户ID | | meter_id | BIGINT | - | - | Y | - | 水表ID | | reading_id | BIGINT | - | - | N | NULL | 抄表记录ID | | tenant_id | BIGINT | - | - | Y | 0 | 租户ID | #### 缴费记录表 (water_payment) | 字段名 | 数据类型 | 长度 | 主键 | 非空 | 默认值 | 说明 | |-------|---------|------|------|------|--------|------| | id | BIGINT | - | Y | Y | AUTO_INCREMENT | 主键ID | | payment_code | VARCHAR | 32 | - | Y | - | 缴费记录编号 | | payment_type | VARCHAR | 20 | - | Y | - | 缴费类型 | | payment_channel | VARCHAR | 20 | - | Y | - | 缴费渠道 | | payment_amount | DECIMAL | 10,2 | - | Y | - | 缴费金额 | | payment_time | DATETIME | - | - | Y | - | 缴费时间 | | transaction_no | VARCHAR | 50 | - | N | NULL | 交易流水号 | | operator_id | VARCHAR | 20 | - | N | NULL | 操作员ID | | payment_status | TINYINT | - | - | Y | 1 | 缴费状态 | | bill_id | BIGINT | - | - | N | NULL | 账单ID | | customer_id | BIGINT | - | - | Y | - | 客户ID | | tenant_id | BIGINT | - | - | Y | 0 | 租户ID | ### 表务管理相关表 #### 水表档案表 (water_meter_archive) | 字段名 | 数据类型 | 长度 | 主键 | 非空 | 默认值 | 说明 | |-------|---------|------|------|------|--------|------| | id | BIGINT | - | Y | Y | AUTO_INCREMENT | 主键ID | | archive_code | VARCHAR | 32 | - | Y | - | 档案编号 | | manufacturer | VARCHAR | 100 | - | N | NULL | 生产厂家 | | production_date | DATE | - | - | N | NULL | 生产日期 | | valid_period | INT | - | - | N | 72 | 有效期(月) | | verification_date | DATE | - | - | N | NULL | 检定日期 | | next_verification_date | DATE | - | - | N | NULL | 下次检定日期 | | certificate_no | VARCHAR | 50 | - | N | NULL | 检定证书号 | | archive_status | TINYINT | - | - | Y | 1 | 档案状态 | | meter_id | BIGINT | - | - | Y | - | 水表ID | | tenant_id | BIGINT | - | - | Y | 0 | 租户ID | #### 表务工单表 (water_meter_workorder) | 字段名 | 数据类型 | 长度 | 主键 | 非空 | 默认值 | 说明 | |-------|---------|------|------|------|--------|------| | id | BIGINT | - | Y | Y | AUTO_INCREMENT | 主键ID | | workorder_code | VARCHAR | 32 | - | Y | - | 工单编号 | | workorder_type | VARCHAR | 20 | - | Y | - | 工单类型 | | workorder_status | VARCHAR | 20 | - | Y | PENDING | 工单状态 | | apply_date | DATE | - | - | Y | - | 申请日期 | | plan_date | DATE | - | - | N | NULL | 计划执行日期 | | execute_date | DATE | - | - | N | NULL | 实际执行日期 | | applicant_id | VARCHAR | 20 | - | N | NULL | 申请人ID | | executor_id | VARCHAR | 20 | - | N | NULL | 执行人ID | | reason | VARCHAR | 500 | - | N | NULL | 申请原因 | | result | VARCHAR | 500 | - | N | NULL | 执行结果 | | meter_id | BIGINT | - | - | Y | - | 水表ID | | customer_id | BIGINT | - | - | Y | - | 客户ID | | tenant_id | BIGINT | - | - | Y | 0 | 租户ID | #### 水表库存表 (water_meter_stock) | 字段名 | 数据类型 | 长度 | 主键 | 非空 | 默认值 | 说明 | |-------|---------|------|------|------|--------|------| | id | BIGINT | - | Y | Y | AUTO_INCREMENT | 主键ID | | stock_code | VARCHAR | 32 | - | Y | - | 库存编号 | | meter_brand | VARCHAR | 50 | - | Y | - | 水表品牌 | | meter_model | VARCHAR | 50 | - | Y | - | 水表型号 | | meter_caliber | VARCHAR | 10 | - | Y | - | 水表口径 | | stock_quantity | INT | - | - | Y | 0 | 库存数量 | | min_stock | INT | - | - | Y | 0 | 最小库存 | | unit_price | DECIMAL | 10,2 | - | N | NULL | 单价 | | warehouse_location | VARCHAR | 100 | - | N | NULL | 仓库位置 | | stock_status | TINYINT | - | - | Y | 1 | 库存状态 | | tenant_id | BIGINT | - | - | Y | 0 | 租户ID | ### 系统管理相关表 #### 数据字典类型表 (water_dict_type) | 字段名 | 数据类型 | 长度 | 主键 | 非空 | 默认值 | 说明 | |-------|---------|------|------|------|--------|------| | id | BIGINT | - | Y | Y | AUTO_INCREMENT | 主键ID | | dict_name | VARCHAR | 100 | - | Y | - | 字典名称 | | dict_type | VARCHAR | 100 | - | Y | - | 字典类型 | | remark | VARCHAR | 500 | - | N | NULL | 备注 | | status | TINYINT | - | - | Y | 1 | 状态 | | tenant_id | BIGINT | - | - | Y | 0 | 租户ID | #### 数据字典表 (water_dict_data) | 字段名 | 数据类型 | 长度 | 主键 | 非空 | 默认值 | 说明 | |-------|---------|------|------|------|--------|------| | id | BIGINT | - | Y | Y | AUTO_INCREMENT | 主键ID | | dict_type | VARCHAR | 100 | - | Y | - | 字典类型 | | dict_label | VARCHAR | 100 | - | Y | - | 字典标签 | | dict_value | VARCHAR | 100 | - | Y | - | 字典键值 | | dict_sort | INT | - | - | Y | 0 | 字典排序 | | status | TINYINT | - | - | Y | 1 | 状态 | | tenant_id | BIGINT | - | - | Y | 0 | 租户ID | #### 系统配置表 (water_config) | 字段名 | 数据类型 | 长度 | 主键 | 非空 | 默认值 | 说明 | |-------|---------|------|------|------|--------|------| | id | BIGINT | - | Y | Y | AUTO_INCREMENT | 主键ID | | config_name | VARCHAR | 100 | - | Y | - | 参数名称 | | config_key | VARCHAR | 100 | - | Y | - | 参数键名 | | config_value | VARCHAR | 500 | - | N | NULL | 参数键值 | | config_type | VARCHAR | 20 | - | N | NULL | 系统内置 | | remark | VARCHAR | 500 | - | N | NULL | 备注 | | tenant_id | BIGINT | - | - | Y | 0 | 租户ID | #### 水价配置表 (water_price_config) | 字段名 | 数据类型 | 长度 | 主键 | 非空 | 默认值 | 说明 | |-------|---------|------|------|------|--------|------| | id | BIGINT | - | Y | Y | AUTO_INCREMENT | 主键ID | | price_name | VARCHAR | 100 | - | Y | - | 水价名称 | | customer_type | VARCHAR | 20 | - | Y | - | 客户类型 | | price_type | VARCHAR | 20 | - | Y | - | 价格类型 | | base_price | DECIMAL | 8,4 | - | Y | - | 基础价格 | | sewage_price | DECIMAL | 8,4 | - | N | 0.00 | 污水处理费 | | effective_date | DATE | - | - | Y | - | 生效日期 | | expire_date | DATE | - | - | N | NULL | 失效日期 | | status | TINYINT | - | - | Y | 1 | 状态 | | tenant_id | BIGINT | - | - | Y | 0 | 租户ID | ## 索引与性能优化 ### 主要索引设计 #### 唯一索引 - **客户编号索引**:`uk_customer_code (customer_code, tenant_id)` - **水表编号索引**:`uk_meter_code (meter_code, tenant_id)` - **账单编号索引**:`uk_bill_code (bill_code, tenant_id)` - **缴费编号索引**:`uk_payment_code (payment_code, tenant_id)` #### 复合索引 - **多租户查询索引**:`idx_tenant_customer_type (tenant_id, customer_type)` - **账单查询索引**:`idx_tenant_customer_month (tenant_id, customer_id, bill_month)` - **抄表查询索引**:`idx_tenant_meter_date (tenant_id, meter_id, reading_date)` - **缴费查询索引**:`idx_customer_payment_time (customer_id, payment_time)` #### 单列索引 - **状态查询索引**:各表的状态字段 - **时间查询索引**:创建时间、更新时间、缴费时间等 - **关联查询索引**:外键字段 ### OpenGauss特性应用 #### 分区表设计 - **按月分区**:账单表、缴费表按月份分区 - **按年分区**:历史数据表按年份分区 - **按租户分区**:大租户数据独立分区 #### 列存储优化 - **统计分析表**:使用列存储提高分析查询性能 - **历史数据表**:归档数据使用列存储节省空间 #### 内存表应用 - **配置缓存表**:系统配置参数使用内存表 - **字典数据表**:频繁访问的字典数据使用内存表 ### 查询优化策略 #### 多租户查询优化 - 所有查询强制包含tenant_id条件 - 使用MyBatis Plus多租户拦截器自动添加租户条件 - 建立租户级别的分区索引 #### 分页查询优化 - 使用覆盖索引减少回表查询 - 大数据量分页使用游标分页替代传统分页 - 配置合理的LIMIT和OFFSET参数 #### 统计查询优化 - 建立专门的统计视图 - 使用物化视图缓存复杂统计结果 - 配置定期刷新统计信息 ## 数据安全设计 ### OpenGauss安全特性 #### 透明数据加密 (TDE) - **表级加密**:敏感数据表启用透明加密 - **字段级加密**:身份证号、银行账号等敏感字段加密存储 - **密钥管理**:使用OpenGauss内置密钥管理系统 #### 行级安全策略 (RLS) - **多租户隔离**:基于tenant_id的行级安全策略 - **数据权限控制**:根据用户角色限制数据访问范围 - **动态权限策略**:支持基于时间、地域等条件的动态权限 #### 动态数据脱敏 - **敏感数据脱敏**:手机号、身份证号等敏感信息脱敏显示 - **角色权限控制**:不同角色看到不同级别的脱敏数据 - **脱敏规则配置**:支持灵活的脱敏规则配置 ### 权限控制体系 #### 角色权限设计 - **系统管理员**:拥有所有权限,负责系统配置和用户管理 - **业务管理员**:拥有业务数据的完整权限 - **业务操作员**:拥有业务数据的查询和部分修改权限 - **只读用户**:仅拥有脱敏数据的查询权限 #### 多级权限控制 - **系统级权限**:控制系统功能模块的访问权限 - **数据级权限**:控制数据记录的访问权限 - **字段级权限**:控制敏感字段的访问权限 - **操作级权限**:控制增删改查等操作权限 ### 审计与监控 #### 操作审计 - **数据变更审计**:记录所有数据增删改操作 - **敏感操作审计**:重点审计敏感数据的访问操作 - **登录审计**:记录用户登录、退出等认证操作 - **权限变更审计**:记录权限和角色的变更操作 #### 安全监控 - **异常访问监控**:监控异常的数据访问行为 - **性能监控**:监控数据库性能指标和资源使用情况 - **安全事件监控**:监控安全相关事件和告警 - **合规检查**:定期进行安全合规性检查 ### 备份与恢复 #### 数据备份策略 - **全量备份**:定期进行完整数据库备份 - **增量备份**:每日进行增量数据备份 - **归档备份**:历史数据定期归档到备份存储 - **异地备份**:关键数据进行异地备份 #### 灾难恢复 - **主备同步**:OpenGauss主备实时同步 - **故障切换**:支持自动故障检测和切换 - **数据恢复**:支持基于时间点的数据恢复 - **业务连续性**:确保业务服务的高可用性 ### 国产化安全合规 #### 密码算法支持 - **国产SM算法**:支持SM2/SM3/SM4国产密码算法 - **密码合规**:符合国家密码管理局相关要求 - **安全认证**:通过相关安全产品认证 #### 等保合规 - **等保三级**:满足等保三级安全防护要求 - **安全管理**:建立完善的安全管理制度 - **技术防护**:采用多层次的技术防护措施 - **安全评估**:定期进行安全风险评估