852 lines
31 KiB
Markdown
852 lines
31 KiB
Markdown
# 福建水务营收系统数据库设计文档
|
||
|
||
## 文档信息
|
||
| 项目信息 | 详情 |
|
||
|---------|------|
|
||
| **项目名称** | 福建水务营收系统 |
|
||
| **文档类型** | 概要设计文档 |
|
||
| **技术框架** | 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<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
|
||
```
|
||
|
||
### 多租户架构设计
|
||
|
||
```mermaid
|
||
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图
|
||
|
||
```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国产密码算法
|
||
- **密码合规**:符合国家密码管理局相关要求
|
||
- **安全认证**:通过相关安全产品认证
|
||
|
||
#### 等保合规
|
||
- **等保三级**:满足等保三级安全防护要求
|
||
- **安全管理**:建立完善的安全管理制度
|
||
- **技术防护**:采用多层次的技术防护措施
|
||
- **安全评估**:定期进行安全风险评估 |