福建水务营收系统数据库设计文档
文档信息
| 项目信息 |
详情 |
| 项目名称 |
福建水务营收系统 |
| 文档类型 |
概要设计文档 |
| 技术框架 |
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内置安全特性
数据库架构
数据库架构图
graph TB
subgraph "应用层"
APP[Water Biz Application<br/>RuoYi-Vue-Pro]
end
subgraph "数据访问层"
MP[MyBatis Plus<br/>ORM框架]
CACHE[Redis缓存<br/>热点数据]
end
subgraph "数据存储层"
subgraph "OpenGauss主从集群"
MASTER[(OpenGauss主库<br/>读写)]
SLAVE[(OpenGauss从库<br/>只读)]
end
subgraph "业务数据库"
DB_CUSTOMER[(客户数据库<br/>Customer DB)]
DB_BILLING[(营收数据库<br/>Billing DB)]
DB_METER[(表务数据库<br/>Meter DB)]
DB_SYSTEM[(系统数据库<br/>System DB)]
end
subgraph "数据归档"
DB_HISTORY[(历史数据库<br/>Archive DB)]
BACKUP[(备份存储<br/>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
多租户架构设计
graph TB
subgraph "多租户数据隔离"
TENANT1[租户1: 福建水务集团]
TENANT2[租户2: 厦门分公司]
TENANT3[租户3: 泉州分公司]
end
subgraph "共享数据库"
subgraph "业务表结构"
TABLE1[water_customer<br/>+ tenant_id]
TABLE2[water_meter<br/>+ tenant_id]
TABLE3[water_bill<br/>+ tenant_id]
TABLE4[water_payment<br/>+ tenant_id]
end
subgraph "租户隔离机制"
INTERCEPTOR[MyBatis Plus<br/>多租户拦截器]
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图
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图
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图
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图
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图
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图
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国产密码算法
- 密码合规:符合国家密码管理局相关要求
- 安全认证:通过相关安全产品认证
等保合规
- 等保三级:满足等保三级安全防护要求
- 安全管理:建立完善的安全管理制度
- 技术防护:采用多层次的技术防护措施
- 安全评估:定期进行安全风险评估