mirror of
https://github.com/dromara/RuoYi-Vue-Plus.git
synced 2025-09-26 21:26:39 +08:00
754 lines
52 KiB
Markdown
754 lines
52 KiB
Markdown
## 云宿居 PMS 系统 - PMS核心数据模型 (最终版 v_ry_final_4.0)
|
||
|
||
**快速导航:**
|
||
- [1. 引言](#1-引言)
|
||
- [2. PMS 核心E-R图 (最终版 - 简化)](#2-pms-核心er图-最终版---简化)
|
||
- [3. 表结构定义](#3-表结构定义)
|
||
- [3.1 SaaS平台与系统基础表 (源自若依)](#31-saas平台与系统基础表-源自若依)
|
||
- [3.2 PMS核心业务表](#32-pms核心业务表)
|
||
- [3.3 公共数据模型 (PMS相关)](#33-公共数据模型-pms相关)
|
||
- [4. 主要业务实体状态流转](#4-主要业务实体状态流转)
|
||
- [5. 核心业务枚举值定义 (PMS主要部分)](#5-核心业务枚举值定义-pms主要部分)
|
||
- [6. 索引命名与规范建议](#6-索引命名与规范建议)
|
||
|
||
## 1. 引言
|
||
|
||
### 1.1 文档目的与范围
|
||
本文档详细定义了"云宿居"民宿 Property Management System (PMS) 的数据库逻辑模型,并与其依赖的若依框架的基础表(如租户、用户、部门等)进行了整合。本文档旨在为数据库的物理实现和后端开发提供具体指导。
|
||
|
||
**核心原则:**
|
||
1. 若依框架的基础实体(用户、租户、角色、部门等)及其字段规范固定不变。
|
||
2. PMS新增的核心业务表主键统一采用 `BIGINT` 自增ID。
|
||
3. **PMS业务表只关联部门(`dept_id`),不直接关联租户(`tenant_id`)。部门代表实际的门店/分店,通过部门可以查询到其所属租户信息。** 这使得"一个租户下有多个门店"的业务模型更加清晰,同时减少数据冗余。
|
||
4. **特例:`pms_tenant_settings`和`pms_mp_settings`表保留tenant_id字段,通过dept_id为NULL来表示租户全局设置,通过具体的dept_id值表示部门/门店特定设置。**
|
||
5. PMS业务表中的枚举字段,统一使用 `VARCHAR(50)` 存储描述性字符串以增强可读性和扩展性。这与若依常用的 `CHAR(1)` 枚举在交互时需注意API层面的适配。
|
||
|
||
### 1.2 命名与设计约定 (PMS新增表部分)
|
||
* **表命名:** `pms_` (PMS核心业务表),`cmn_` (公共模块)。若依表使用其原生 `sys_` 前缀。
|
||
* **字段命名:** `snake_case` (小写下划线)。
|
||
* **主键 (PK):**
|
||
* PMS核心业务实体: **`BIGINT` AUTO_INCREMENT**。
|
||
* 日志类高频写入表: `BIGINT` AUTO_INCREMENT。
|
||
* **部门ID `dept_id`:** `bigint(20)` (同 `sys_dept.dept_id`),在PMS业务表中非空,用于标识数据归属于哪个门店。
|
||
* **外键 (FK):** 类型与关联表主键一致。`COMMENT '关联 table_name.column_name'`。
|
||
* **通用审计字段 (对齐若依):**
|
||
* `create_by` (BIGINT(20) NULLABLE, COMMENT '创建者,关联 sys_user.user_id')
|
||
* `create_time` (DATETIME NULLABLE, COMMENT '创建时间')
|
||
* `update_by` (BIGINT(20) NULLABLE, COMMENT '更新者,关联 sys_user.user_id')
|
||
* `update_time` (DATETIME NULLABLE, COMMENT '更新时间')
|
||
* `create_dept_id` (BIGINT(20) NULLABLE, COMMENT '创建记录的操作员所属部门,关联 sys_dept.dept_id')
|
||
* **软删除策略 (对齐若依):**
|
||
* `del_flag` (CHAR(1) DEFAULT '0' NOT NULL, COMMENT '删除标志(0代表存在 1代表删除)')。
|
||
* **状态与枚举字段 (PMS优化):**
|
||
* PMS业务表中的枚举字段,统一使用 `VARCHAR(50)` 存储描述性枚举字符串。
|
||
|
||
## 2. PMS 核心E-R图 (最终版 - 简化)
|
||
|
||
```mermaid
|
||
erDiagram
|
||
%% --- 若依基础表 (关键部分) ---
|
||
sys_tenant {
|
||
varchar(20) tenant_id PK "租户编号 (业务主键)"
|
||
bigint id "物理主键, 若依内部使用"
|
||
varchar(255) company_name "企业/民宿名称"
|
||
}
|
||
|
||
sys_dept {
|
||
bigint dept_id PK "部门ID"
|
||
varchar(20) tenant_id FK "关联 sys_tenant.tenant_id"
|
||
varchar(30) dept_name "部门名称"
|
||
}
|
||
|
||
sys_user {
|
||
bigint user_id PK "用户ID (PMS员工)"
|
||
varchar(20) tenant_id FK "用户初始归属租户"
|
||
bigint dept_id FK "用户所属部门"
|
||
varchar(30) user_name "用户名, 全局唯一"
|
||
}
|
||
|
||
sys_role {
|
||
bigint role_id PK "角色ID"
|
||
varchar(20) tenant_id FK "角色定义所属租户 (或平台)"
|
||
varchar(30) role_name "角色名称"
|
||
}
|
||
|
||
%% --- Common Contact Table ---
|
||
cmn_contacts {
|
||
BIGINT contact_id PK "联系人ID (自增)"
|
||
BIGINT dept_id FK "所属部门ID"
|
||
VARCHAR(255) full_name "姓名"
|
||
}
|
||
|
||
%% --- PMS Core Business Tables (主键改为BIGINT) ---
|
||
pms_room_types {
|
||
BIGINT room_type_id PK "房型ID (自增)"
|
||
BIGINT dept_id FK "部门ID"
|
||
VARCHAR(255) name "房型名称"
|
||
}
|
||
|
||
pms_room_rooms {
|
||
BIGINT room_id PK "房间ID (自增)"
|
||
BIGINT dept_id FK "部门ID"
|
||
BIGINT room_type_id FK "房型ID"
|
||
VARCHAR(255) room_number "房间号"
|
||
VARCHAR(50) room_status "物理状态"
|
||
VARCHAR(50) cleaning_status "清洁状态"
|
||
}
|
||
|
||
pms_room_locks {
|
||
BIGINT lock_id PK "锁定ID (自增)"
|
||
BIGINT dept_id FK "部门ID"
|
||
BIGINT room_id FK "房间ID"
|
||
}
|
||
|
||
pms_core_orders {
|
||
BIGINT order_id PK "订单ID (自增)"
|
||
BIGINT dept_id FK "部门ID"
|
||
BIGINT contact_id FK "联系人ID"
|
||
BIGINT room_type_id FK "房型ID"
|
||
BIGINT pms_room_id FK "房间ID(可空)"
|
||
VARCHAR(50) order_status "订单状态"
|
||
VARCHAR(50) order_source "订单来源"
|
||
}
|
||
|
||
pms_core_order_items {
|
||
BIGINT order_item_id PK "订单项ID (自增)"
|
||
BIGINT order_id FK "订单ID"
|
||
BIGINT dept_id FK "部门ID"
|
||
VARCHAR(50) product_type "产品类型"
|
||
}
|
||
|
||
pms_core_channels {
|
||
BIGINT channel_id PK "渠道ID (自增)"
|
||
BIGINT dept_id FK "部门ID(可空)"
|
||
VARCHAR(50) channel_type "渠道类型"
|
||
}
|
||
|
||
pms_finance_folios {
|
||
BIGINT folio_id PK "账单ID (自增)"
|
||
BIGINT dept_id FK "部门ID"
|
||
BIGINT order_id FK "订单ID(UNIQUE)"
|
||
VARCHAR(50) folio_status "账单状态"
|
||
}
|
||
|
||
pms_finance_transactions {
|
||
BIGINT transaction_id PK "交易ID (自增)"
|
||
BIGINT folio_id FK "账单ID"
|
||
BIGINT dept_id FK "部门ID"
|
||
VARCHAR(50) transaction_type "交易类型"
|
||
}
|
||
|
||
pms_finance_payment_methods {
|
||
BIGINT payment_method_id PK "支付方式ID (自增)"
|
||
BIGINT dept_id FK "部门ID"
|
||
VARCHAR(50) method_type "支付方式类型"
|
||
}
|
||
|
||
pms_finance_extra_charge_items {
|
||
BIGINT item_id PK "附加费用项ID (自增)"
|
||
BIGINT dept_id FK "部门ID"
|
||
}
|
||
|
||
pms_room_pricing_rules {
|
||
BIGINT rule_id PK "价格规则ID (自增)"
|
||
BIGINT dept_id FK "部门ID"
|
||
BIGINT room_type_id FK "房型ID(可空)"
|
||
}
|
||
|
||
pms_tenant_settings {
|
||
BIGINT setting_id PK "设置ID (自增)"
|
||
BIGINT dept_id FK "部门ID"
|
||
VARCHAR(100) setting_group "设置分组"
|
||
VARCHAR(100) setting_key "设置键名"
|
||
}
|
||
|
||
pms_mp_settings {
|
||
BIGINT setting_id PK "小程序设置ID (自增)"
|
||
BIGINT dept_id FK "部门ID"
|
||
VARCHAR(100) setting_key "设置键名"
|
||
}
|
||
|
||
pms_tenant_user_devices {
|
||
BIGINT id PK "设备记录ID (自增)"
|
||
BIGINT user_id FK "用户ID"
|
||
}
|
||
|
||
cmn_contact_tags {
|
||
BIGINT tag_id PK "标签ID (自增)"
|
||
BIGINT dept_id FK "部门ID"
|
||
}
|
||
|
||
cmn_contact_tag_relations {
|
||
BIGINT relation_id PK "关联ID (自增)"
|
||
BIGINT contact_id FK "联系人ID"
|
||
BIGINT tag_id FK "标签ID"
|
||
}
|
||
|
||
%% --- 若依基础表关联 ---
|
||
sys_tenant ||--o{ sys_dept : "包含门店/部门"
|
||
sys_tenant ||--o{ sys_user : "的主要租户"
|
||
sys_tenant ||--o{ sys_role : "定义角色归属"
|
||
|
||
sys_dept ||--o{ sys_user : "员工属于门店"
|
||
|
||
%% --- PMS 表关联到若依基础表 ---
|
||
sys_dept ||--o{ pms_room_types : "定义房型"
|
||
sys_dept ||--o{ pms_room_rooms : "拥有房间"
|
||
sys_dept ||--o{ pms_core_orders : "拥有订单"
|
||
sys_dept ||--o{ cmn_contacts : "拥有联系人"
|
||
sys_dept ||--o{ pms_tenant_settings : "拥有PMS配置"
|
||
sys_dept ||--o{ pms_mp_settings : "拥有小程序配置"
|
||
sys_dept ||--o{ cmn_contact_tags : "定义联系人标签"
|
||
|
||
sys_user ||--o{ pms_tenant_user_devices : "注册设备"
|
||
|
||
%% --- PMS 内部表关联 ---
|
||
pms_room_types ||--o{ pms_room_rooms : "有具体房间"
|
||
pms_room_types ||--o{ pms_core_orders : "被预订类型"
|
||
pms_room_types o|--o{ pms_room_pricing_rules : "规则适用房型"
|
||
|
||
pms_room_rooms ||--o{ pms_room_locks : "可被锁定"
|
||
pms_room_rooms o|--o{ pms_core_orders : "被分配房间"
|
||
pms_room_rooms o|--o{ pms_core_order_items : "关联房晚项目"
|
||
|
||
pms_core_orders ||--o{ pms_core_order_items : "包含项目"
|
||
pms_core_orders ||--|| pms_finance_folios : "生成账单"
|
||
cmn_contacts o|--o{ pms_core_orders : "是主要联系人"
|
||
pms_core_channels o|--o{ pms_core_orders : "是来源渠道"
|
||
|
||
pms_finance_folios ||--o{ pms_finance_transactions : "记录交易"
|
||
pms_finance_payment_methods o|--o{ pms_finance_transactions : "使用支付方式"
|
||
pms_finance_extra_charge_items o|--o{ pms_core_order_items : "可以是附加项"
|
||
|
||
cmn_contacts ||--o{ cmn_contact_tag_relations : "关联标签"
|
||
cmn_contact_tags ||--o{ cmn_contact_tag_relations : "被应用于"
|
||
```
|
||
*注:E-R图中部分表的字段为简化表示,详细字段请参照下文。*
|
||
|
||
## 3. 表结构定义
|
||
|
||
### 3.1 SaaS平台与系统基础表 (源自若依)
|
||
这些表结构直接采用或参考附件 `ry_vue_5.X - 副本.txt` 中的定义,关键表包括:
|
||
* `sys_tenant`: 租户表 (业务主键 `tenant_id varchar(20)`)
|
||
* `sys_dept`: 部门表 (主键 `dept_id bigint(20)`),在本系统中将作为门店/分店使用
|
||
* `sys_user`: 用户信息表 (主键 `user_id bigint(20)`)
|
||
* `sys_role`: 角色信息表 (主键 `role_id bigint(20)`)
|
||
* `sys_user_role`: 用户角色关联表
|
||
* `sys_config`: 参数配置表
|
||
* `sys_logininfor`: 系统访问记录(登录日志)
|
||
* `sys_dict_type`, `sys_dict_data`: 字典表 (PMS枚举值优先在PMS表中使用 `VARCHAR(50)`,但若依系统本身的字典可按其规范使用)
|
||
|
||
**PMS系统将直接使用或关联这些若依表中的记录,例如PMS订单的 `dept_id` 将关联到 `sys_dept.dept_id`,`create_by` 将关联到 `sys_user.user_id`。部门进一步通过 `sys_dept.tenant_id` 关联到租户。**
|
||
|
||
### 3.2 PMS核心业务表
|
||
|
||
#### 3.2.1 `pms_room_types` - 房型表
|
||
* 业务描述: 存储各部门(门店)定义的房型信息。
|
||
* 主键: `room_type_id` (BIGINT AUTO_INCREMENT)
|
||
* 字段定义:
|
||
* `room_type_id` (BIGINT, PK, AUTO_INCREMENT, NOT NULL, COMMENT '房型唯一ID'): 主键。
|
||
* `dept_id` (BIGINT(20), NOT NULL, COMMENT '部门ID(门店), 关联 sys_dept.dept_id')。
|
||
* `name` (VARCHAR(255), NOT NULL, COMMENT '房型名称 (例如: 豪华大床房)')。
|
||
* `default_price` (DECIMAL(10,2), NOT NULL, COMMENT '房型默认价格 (每晚)')。
|
||
* `capacity` (INT, NOT NULL, COMMENT '标准入住人数')。
|
||
* `amenities` (JSON, NULLABLE, COMMENT '房型设施标签。JSON数组,例如 [\"wifi\", \"空调\"]')。
|
||
* `description` (TEXT, NULLABLE, COMMENT '房型描述')。
|
||
* `images_json` (JSON, NULLABLE, COMMENT '房型图片。JSON数组')。
|
||
* `sort_order` (INT, DEFAULT 0, COMMENT '显示排序值')。
|
||
* `status` (VARCHAR(50), NOT NULL, DEFAULT 'active', COMMENT '状态。枚举: active (启用), inactive (禁用)')。
|
||
* `create_by` (BIGINT(20), NULLABLE, COMMENT '创建者ID, 关联 sys_user.user_id')。
|
||
* `create_time` (DATETIME, NULLABLE, COMMENT '创建时间')。
|
||
* `update_by` (BIGINT(20), NULLABLE, COMMENT '更新者ID, 关联 sys_user.user_id')。
|
||
* `update_time` (DATETIME, NULLABLE, COMMENT '更新时间')。
|
||
* `create_dept_id` (BIGINT(20), NULLABLE, COMMENT '创建部门ID, 关联 sys_dept.dept_id')。
|
||
* `del_flag` (CHAR(1), NOT NULL, DEFAULT '0', COMMENT '删除标志(0存在 1删除)')。
|
||
* 索引: `idx_pms_rt_dept_name` (dept_id, name), `idx_pms_rt_dept_status` (dept_id, status)
|
||
|
||
#### 3.2.2 `pms_room_rooms` - 房间表
|
||
* 业务描述: 存储各部门(门店)的具体房间信息。
|
||
* 主键: `room_id` (BIGINT AUTO_INCREMENT)
|
||
* 字段定义:
|
||
* `room_id` (BIGINT, PK, AUTO_INCREMENT, NOT NULL, COMMENT '房间唯一ID')。
|
||
* `dept_id` (BIGINT(20), NOT NULL, COMMENT '部门ID(门店), 关联 sys_dept.dept_id')。
|
||
* `room_type_id` (BIGINT, FK, NOT NULL, COMMENT '所属房型ID, 关联 pms_room_types.room_type_id')。
|
||
* `room_number` (VARCHAR(50), NOT NULL, COMMENT '房间号 (在门店内应唯一)')。
|
||
* `floor` (VARCHAR(50), NULLABLE, COMMENT '楼层')。
|
||
* `room_status` (VARCHAR(50), NOT NULL, DEFAULT 'available', COMMENT '物理状态。枚举: available (可用), occupied (占用中), maintenance (维护中), out_of_service (停用服务)')。
|
||
* `cleaning_status` (VARCHAR(50), NOT NULL, DEFAULT 'clean', COMMENT '清洁状态。枚举: clean (已清洁), dirty (待清洁), cleaning_in_progress (清洁中), inspected (已查房)')。
|
||
* `description` (TEXT, NULLABLE, COMMENT '房间描述或备注')。
|
||
* `status` (VARCHAR(50), NOT NULL, DEFAULT 'active', COMMENT '记录状态。枚举: active (启用), inactive (禁用)')。
|
||
* `create_by` (BIGINT(20), NULLABLE, COMMENT '创建者ID, 关联 sys_user.user_id')。
|
||
* `create_time` (DATETIME, NULLABLE, COMMENT '创建时间')。
|
||
* `update_by` (BIGINT(20), NULLABLE, COMMENT '更新者ID, 关联 sys_user.user_id')。
|
||
* `update_time` (DATETIME, NULLABLE, COMMENT '更新时间')。
|
||
* `create_dept_id` (BIGINT(20), NULLABLE, COMMENT '创建部门ID, 关联 sys_dept.dept_id')。
|
||
* `del_flag` (CHAR(1), NOT NULL, DEFAULT '0', COMMENT '删除标志(0存在 1删除)')。
|
||
* 唯一约束: `unq_pms_r_dept_room_number` (dept_id, room_number, del_flag)
|
||
* 索引: `idx_pms_r_dept_rt` (dept_id, room_type_id), `idx_pms_r_dept_room_status` (dept_id, room_status), `idx_pms_r_dept_cleaning_status` (dept_id, cleaning_status)
|
||
|
||
#### 3.2.3 `pms_room_locks` - 房间锁定记录表
|
||
* 业务描述: 记录房间因维护、手动操作等原因被锁定的情况。
|
||
* 主键: `lock_id` (BIGINT AUTO_INCREMENT)
|
||
* 字段定义:
|
||
* `lock_id` (BIGINT, PK, AUTO_INCREMENT, NOT NULL, COMMENT '锁定记录唯一ID')。
|
||
* `dept_id` (BIGINT(20), NOT NULL, COMMENT '部门ID, 关联 sys_dept.dept_id')。
|
||
* `room_id` (BIGINT, FK, NOT NULL, COMMENT '被锁定的房间ID, 关联 pms_room_rooms.room_id')。
|
||
* `start_datetime` (DATETIME, NOT NULL, COMMENT '锁定开始时间')。
|
||
* `end_datetime` (DATETIME, NOT NULL, COMMENT '锁定结束时间')。
|
||
* `reason` (TEXT, NULLABLE, COMMENT '锁定原因')。
|
||
* `lock_type` (VARCHAR(50), NOT NULL, DEFAULT 'manual_lock', COMMENT '锁定类型。枚举: manual_lock (手动锁定), maintenance (维护), auto_block (自动锁定), staff_use (员工自用)')。
|
||
* `create_by` (BIGINT(20), NULLABLE, COMMENT '创建者ID, 关联 sys_user.user_id')。
|
||
* `create_time` (DATETIME, NULLABLE, COMMENT '创建时间')。
|
||
* `update_by` (BIGINT(20), NULLABLE, COMMENT '更新者ID, 关联 sys_user.user_id')。
|
||
* `update_time` (DATETIME, NULLABLE, COMMENT '更新时间')。
|
||
* `create_dept_id` (BIGINT(20), NULLABLE, COMMENT '创建部门ID, 关联 sys_dept.dept_id')。
|
||
* `del_flag` (CHAR(1), NOT NULL, DEFAULT '0', COMMENT '删除标志(0存在 1删除)')。
|
||
* 索引: `idx_pms_rl_tenant_dept_room_time` (tenant_id, dept_id, room_id, start_datetime, end_datetime), `idx_pms_rl_tenant_dept_lock_type` (tenant_id, dept_id, lock_type)
|
||
|
||
#### 3.2.4 `pms_core_orders` - 核心订单表
|
||
* 业务描述: 存储所有来源的预订订单核心信息。
|
||
* 主键: `order_id` (BIGINT AUTO_INCREMENT)
|
||
* 字段定义:
|
||
* `order_id` (BIGINT, PK, AUTO_INCREMENT, NOT NULL, COMMENT '订单唯一ID')。
|
||
* `dept_id` (BIGINT(20), NOT NULL, COMMENT '部门ID, 关联 sys_dept.dept_id')。
|
||
* `contact_id` (BIGINT, FK, NULLABLE, COMMENT '主要联系人ID, 关联 cmn_contacts.contact_id')。
|
||
* `primary_contact_name` (VARCHAR(100), NOT NULL, COMMENT '主要联系人姓名 (冗余)')。
|
||
* `primary_contact_phone` (VARCHAR(50), NOT NULL, COMMENT '主要联系人电话 (冗余)')。
|
||
* `pms_room_id` (BIGINT, FK, NULLABLE, COMMENT '分配的房间ID, 关联 pms_room_rooms.room_id, 入住时分配')。
|
||
* `room_type_id` (BIGINT, FK, NOT NULL, COMMENT '预订的房型ID, 关联 pms_room_types.room_type_id')。
|
||
* `channel_id` (BIGINT, FK, NULLABLE, COMMENT '订单来源渠道ID, 关联 pms_core_channels.channel_id')。
|
||
* `check_in_date` (DATE, NOT NULL, COMMENT '计划入住日期')。
|
||
* `check_out_date` (DATE, NOT NULL, COMMENT '计划离店日期')。
|
||
* `num_adults` (INT, NOT NULL, DEFAULT 1, COMMENT '成人数')。
|
||
* `num_children` (INT, DEFAULT 0, COMMENT '儿童数')。
|
||
* `estimated_arrival_time` (TIME, NULLABLE, COMMENT '预计抵达时间')。
|
||
* `total_amount` (DECIMAL(10,2), NOT NULL, COMMENT '订单总金额')。
|
||
* `paid_amount` (DECIMAL(10,2), DEFAULT 0.00, COMMENT '已付金额')。
|
||
* `due_amount` (DECIMAL(10,2), AS (`total_amount` - `paid_amount`)) STORED COMMENT '应付金额 (计算列)'。
|
||
* `currency` (VARCHAR(3), NOT NULL, DEFAULT 'CNY', COMMENT '货币代码')。
|
||
* `order_status` (VARCHAR(50), NOT NULL, COMMENT '订单状态。枚举: pending_confirmation, confirmed, checked_in, checked_out, cancelled, no_show, extended, waitlist')。
|
||
* `order_source` (VARCHAR(50), NOT NULL, COMMENT '订单来源。枚举: direct_walk_in, direct_phone, direct_website, direct_mall_h5, ota_channel_manager, travel_agency, corporate, other')。
|
||
* `notes` (TEXT, NULLABLE, COMMENT '订单备注')。
|
||
* `cancelled_at` (DATETIME, NULLABLE, COMMENT '取消时间')。
|
||
* `cancellation_reason` (TEXT, NULLABLE, COMMENT '取消原因')。
|
||
* `create_by` (BIGINT(20), NULLABLE, COMMENT '创建者ID, 关联 sys_user.user_id')。
|
||
* `create_time` (DATETIME, NULLABLE, COMMENT '创建时间')。
|
||
* `update_by` (BIGINT(20), NULLABLE, COMMENT '更新者ID, 关联 sys_user.user_id')。
|
||
* `update_time` (DATETIME, NULLABLE, COMMENT '更新时间')。
|
||
* `create_dept_id` (BIGINT(20), NULLABLE, COMMENT '创建部门ID, 关联 sys_dept.dept_id')。
|
||
* `del_flag` (CHAR(1), NOT NULL, DEFAULT '0', COMMENT '删除标志(0存在 1删除)')。
|
||
* 索引: `idx_pms_o_tenant_dept_status_dates` (tenant_id, dept_id, order_status, check_in_date, check_out_date), `idx_pms_o_tenant_dept_contact_phone` (tenant_id, dept_id, primary_contact_phone), `idx_pms_o_tenant_dept_source` (tenant_id, dept_id, order_source)
|
||
|
||
#### 3.2.5 `pms_core_order_items` - 核心订单项目表
|
||
* 业务描述: 记录订单中包含的具体商品或服务项目。
|
||
* 主键: `order_item_id` (BIGINT AUTO_INCREMENT)
|
||
* 字段定义:
|
||
* `order_item_id` (BIGINT, PK, AUTO_INCREMENT, NOT NULL, COMMENT '订单项目唯一ID')。
|
||
* `order_id` (BIGINT, FK, NOT NULL, COMMENT '所属订单ID, 关联 pms_core_orders.order_id')。
|
||
* `dept_id` (BIGINT(20), NOT NULL, COMMENT '部门ID, 关联 sys_dept.dept_id (冗余)')。
|
||
* `pms_room_id` (BIGINT, FK, NULLABLE, COMMENT '关联房间ID (如房晚项目), 关联 pms_room_rooms.room_id')。
|
||
* `product_id` (BIGINT, FK, NULLABLE, COMMENT '关联产品ID (多态), 如 pms_finance_extra_charge_items.item_id')。
|
||
* `product_type` (VARCHAR(50), NOT NULL, COMMENT '产品类型。枚举: room_night (房晚), extra_charge_item (附加收费项目), package_component (套餐子项), service_fee (服务费), discount_adjustment (折扣调整)')。
|
||
* `description` (VARCHAR(255), NOT NULL, COMMENT '项目描述 (例如: 豪华大床房住宿, 额外早餐)')。
|
||
* `quantity` (INT, NOT NULL, DEFAULT 1, COMMENT '数量')。
|
||
* `unit_price` (DECIMAL(10,2), NOT NULL, COMMENT '单价')。
|
||
* `total_price` (DECIMAL(10,2), AS (`quantity` * `unit_price`)) STORED COMMENT '总价 (计算列)'。
|
||
* `service_date` (DATE, NULLABLE, COMMENT '服务发生日期 (例如房晚对应的日期)')。
|
||
* `notes` (TEXT, NULLABLE, COMMENT '项目备注')。
|
||
* `create_by` (BIGINT(20), NULLABLE, COMMENT '创建者ID, 关联 sys_user.user_id')。
|
||
* `create_time` (DATETIME, NULLABLE, COMMENT '创建时间')。
|
||
* `update_by` (BIGINT(20), NULLABLE, COMMENT '更新者ID, 关联 sys_user.user_id')。
|
||
* `update_time` (DATETIME, NULLABLE, COMMENT '更新时间')。
|
||
* `create_dept_id` (BIGINT(20), NULLABLE, COMMENT '创建部门ID, 关联 sys_dept.dept_id')。
|
||
* `del_flag` (CHAR(1), NOT NULL, DEFAULT '0', COMMENT '删除标志(0存在 1删除)')。
|
||
* 索引: `idx_pms_oi_order_id` (order_id), `idx_pms_oi_tenant_dept_product_type` (tenant_id, dept_id, product_type)
|
||
|
||
#### 3.2.6 `pms_core_channels` - 订单来源渠道表
|
||
* 业务描述: 管理订单的来源渠道。
|
||
* 主键: `channel_id` (BIGINT AUTO_INCREMENT)
|
||
* 字段定义:
|
||
* `channel_id` (BIGINT, PK, AUTO_INCREMENT, NOT NULL, COMMENT '渠道唯一ID')。
|
||
* `dept_id` (BIGINT(20), NULLABLE, COMMENT '部门ID, 关联 sys_dept.dept_id, 若渠道归属特定部门')。
|
||
* `name` (VARCHAR(100), NOT NULL, COMMENT '渠道名称 (例如: 携程, 官网直订)')。
|
||
* `channel_type` (VARCHAR(50), NOT NULL, COMMENT '渠道类型。枚举: ota, direct_booking (官网/电话/前台), gds (全球分销系统), wholesaler (批发商), corporate (公司协议), internal_use (内部使用), other')。
|
||
* `description` (TEXT, NULLABLE, COMMENT '渠道描述')。
|
||
* `status` (VARCHAR(50), NOT NULL, DEFAULT 'active', COMMENT '状态。枚举: active (激活), inactive (停用), deprecated (弃用)')。
|
||
* `create_by` (BIGINT(20), NULLABLE, COMMENT '创建者ID, 关联 sys_user.user_id')。
|
||
* `create_time` (DATETIME, NULLABLE, COMMENT '创建时间')。
|
||
* `update_by` (BIGINT(20), NULLABLE, COMMENT '更新者ID, 关联 sys_user.user_id')。
|
||
* `update_time` (DATETIME, NULLABLE, COMMENT '更新时间')。
|
||
* `create_dept_id` (BIGINT(20), NULLABLE, COMMENT '创建部门ID, 关联 sys_dept.dept_id')。
|
||
* `del_flag` (CHAR(1), NOT NULL, DEFAULT '0', COMMENT '删除标志(0存在 1删除)')。
|
||
* 索引: `idx_pms_ch_tenant_dept_name` (tenant_id, dept_id, name), `idx_pms_ch_type` (channel_type), `idx_pms_ch_status` (status)
|
||
|
||
#### 3.2.7 `pms_finance_folios` - 客户账单(Folio)表
|
||
* 业务描述: 记录与订单关联的客户账单核心信息。
|
||
* 主键: `folio_id` (BIGINT AUTO_INCREMENT)
|
||
* 字段定义:
|
||
* `folio_id` (BIGINT, PK, AUTO_INCREMENT, NOT NULL, COMMENT '账单唯一ID')。
|
||
* `dept_id` (BIGINT(20), NOT NULL, COMMENT '部门ID, 关联 sys_dept.dept_id')。
|
||
* `order_id` (BIGINT, UNIQUE, FK, NOT NULL, COMMENT '关联的订单ID, 关联 pms_core_orders.order_id')。
|
||
* `total_charges` (DECIMAL(10,2), NOT NULL, DEFAULT 0.00, COMMENT '总应收费用')。
|
||
* `total_payments` (DECIMAL(10,2), NOT NULL, DEFAULT 0.00, COMMENT '总已收付款')。
|
||
* `total_refunds` (DECIMAL(10,2), NOT NULL, DEFAULT 0.00, COMMENT '总已退款')。
|
||
* `balance` (DECIMAL(10,2), AS (`total_charges` - `total_payments` + `total_refunds`)) STORED COMMENT '当前余额 (计算列)'。
|
||
* `folio_status` (VARCHAR(50), NOT NULL, DEFAULT 'open', COMMENT '账单状态。枚举: open (开放/未结清), closed (已结清/关闭), void (作废), pending_settlement (待结算)')。
|
||
* `notes` (TEXT, NULLABLE, COMMENT '账单备注')。
|
||
* `closed_at` (DATETIME, NULLABLE, COMMENT '账单关闭时间')。
|
||
* `create_by` (BIGINT(20), NULLABLE, COMMENT '创建者ID, 关联 sys_user.user_id')。
|
||
* `create_time` (DATETIME, NULLABLE, COMMENT '创建时间')。
|
||
* `update_by` (BIGINT(20), NULLABLE, COMMENT '更新者ID, 关联 sys_user.user_id')。
|
||
* `update_time` (DATETIME, NULLABLE, COMMENT '更新时间')。
|
||
* `create_dept_id` (BIGINT(20), NULLABLE, COMMENT '创建部门ID, 关联 sys_dept.dept_id')。
|
||
* `del_flag` (CHAR(1), NOT NULL, DEFAULT '0', COMMENT '删除标志(0存在 1删除)')。
|
||
* 索引: `idx_pms_f_tenant_dept_order_id` (tenant_id, dept_id, order_id), `idx_pms_f_tenant_dept_status` (tenant_id, dept_id, folio_status)
|
||
|
||
#### 3.2.8 `pms_finance_transactions` - 财务交易流水表
|
||
* 业务描述: 记录在Folio中的每一笔财务交易。
|
||
* 主键: `transaction_id` (BIGINT AUTO_INCREMENT)
|
||
* 字段定义:
|
||
* `transaction_id` (BIGINT, PK, AUTO_INCREMENT, NOT NULL, COMMENT '交易唯一ID')。
|
||
* `folio_id` (BIGINT, FK, NOT NULL, COMMENT '所属账单ID, 关联 pms_finance_folios.folio_id')。
|
||
* `dept_id` (BIGINT(20), NOT NULL, COMMENT '部门ID, 关联 sys_dept.dept_id (冗余)')。
|
||
* `transaction_type` (VARCHAR(50), NOT NULL, COMMENT '交易类型。枚举: charge (应收费用), payment (客人付款), refund (退款给客人), deposit (押金), deposit_refund (押金退还), adjustment_positive (正调整), adjustment_negative (负调整)')。
|
||
* `amount` (DECIMAL(10,2), NOT NULL, COMMENT '交易金额')。
|
||
* `description` (VARCHAR(255), NOT NULL, COMMENT '交易描述')。
|
||
* `payment_method_id` (BIGINT, FK, NULLABLE, COMMENT '支付方式ID, 关联 pms_finance_payment_methods.payment_method_id')。
|
||
* `payment_gateway_txn_id` (VARCHAR(255), NULLABLE, COMMENT '支付网关交易号')。
|
||
* `transaction_time` (DATETIME, NOT NULL, COMMENT '交易实际发生时间')。
|
||
* `related_order_item_id` (BIGINT, FK, NULLABLE, COMMENT '关联的订单项ID, 关联 pms_core_order_items.order_item_id')。
|
||
* `notes` (TEXT, NULLABLE, COMMENT '交易备注')。
|
||
* `is_void` (BOOLEAN, NOT NULL, DEFAULT FALSE, COMMENT '是否已作废冲销')。
|
||
* `voided_at` (DATETIME, NULLABLE, COMMENT '作废时间')。
|
||
* `voided_reason` (TEXT, NULLABLE, COMMENT '作废原因')。
|
||
* `create_by` (BIGINT(20), NULLABLE, COMMENT '创建者ID, 关联 sys_user.user_id')。
|
||
* `create_time` (DATETIME, NULLABLE, COMMENT '创建时间')。
|
||
* `update_by` (BIGINT(20), NULLABLE, COMMENT '更新者ID, 关联 sys_user.user_id')。
|
||
* `update_time` (DATETIME, NULLABLE, COMMENT '更新时间')。
|
||
* `create_dept_id` (BIGINT(20), NULLABLE, COMMENT '创建部门ID, 关联 sys_dept.dept_id')。
|
||
* `del_flag` (CHAR(1), NOT NULL, DEFAULT '0', COMMENT '删除标志(0存在 1删除)')。
|
||
* 索引: `idx_pms_ft_folio_id` (folio_id), `idx_pms_ft_tenant_dept_type_time` (tenant_id, dept_id, transaction_type, transaction_time), `idx_pms_ft_payment_gateway_txn_id` (payment_gateway_txn_id)
|
||
|
||
#### 3.2.9 `pms_finance_payment_methods` - 支付方式表
|
||
* 业务描述: 存储租户可定义的支付方式。
|
||
* 主键: `payment_method_id` (BIGINT AUTO_INCREMENT)
|
||
* 字段定义:
|
||
* `payment_method_id` (BIGINT, PK, AUTO_INCREMENT, NOT NULL, COMMENT '支付方式唯一ID')。
|
||
* `dept_id` (BIGINT(20), NULLABLE, COMMENT '部门ID, 关联 sys_dept.dept_id, 若支付方式归属特定部门')。
|
||
* `name` (VARCHAR(100), NOT NULL, COMMENT '支付方式名称 (例如: 现金, 微信支付)')。
|
||
* `method_type` (VARCHAR(50), NOT NULL, COMMENT '支付方式类型。枚举: cash, credit_card_visa, credit_card_mastercard, credit_card_amex, alipay, wechat_pay, bank_transfer, company_account, voucher, points, other_online_payment, mobile_payment, other')。
|
||
* `details_json` (JSON, NULLABLE, COMMENT '支付方式附加配置。例如支付网关参数等')。
|
||
* `status` (VARCHAR(50), NOT NULL, DEFAULT 'active', COMMENT '状态。枚举: active (激活), inactive (停用)')。
|
||
* `create_by` (BIGINT(20), NULLABLE, COMMENT '创建者ID, 关联 sys_user.user_id')。
|
||
* `create_time` (DATETIME, NULLABLE, COMMENT '创建时间')。
|
||
* `update_by` (BIGINT(20), NULLABLE, COMMENT '更新者ID, 关联 sys_user.user_id')。
|
||
* `update_time` (DATETIME, NULLABLE, COMMENT '更新时间')。
|
||
* `create_dept_id` (BIGINT(20), NULLABLE, COMMENT '创建部门ID, 关联 sys_dept.dept_id')。
|
||
* `del_flag` (CHAR(1), NOT NULL, DEFAULT '0', COMMENT '删除标志(0存在 1删除)')。
|
||
* 索引: `idx_pms_fpm_tenant_dept_name` (tenant_id, dept_id, name), `idx_pms_fpm_tenant_dept_type` (tenant_id, dept_id, method_type), `idx_pms_fpm_tenant_dept_status` (tenant_id, dept_id, status)
|
||
|
||
#### 3.2.10 `pms_finance_extra_charge_items` - 附加费用项目表
|
||
* 业务描述: 存储租户可预定义的附加消费项目,如额外早餐、加床费等。
|
||
* 主键: `item_id` (BIGINT AUTO_INCREMENT)
|
||
* 字段定义:
|
||
* `item_id` (BIGINT, PK, AUTO_INCREMENT, NOT NULL, COMMENT '附加费用项目唯一ID')。
|
||
* `dept_id` (BIGINT(20), NULLABLE, COMMENT '部门ID, 关联 sys_dept.dept_id, 若项目归属特定部门')。
|
||
* `name` (VARCHAR(255), NOT NULL, COMMENT '项目名称')。
|
||
* `default_price` (DECIMAL(10,2), NOT NULL, COMMENT '默认单价')。
|
||
* `category` (VARCHAR(100), NULLABLE, COMMENT '费用类别,如餐饮、服务、商品等')。
|
||
* `is_taxable` (BOOLEAN, NOT NULL, DEFAULT TRUE, COMMENT '是否应税')。
|
||
* `description` (TEXT, NULLABLE, COMMENT '项目描述')。
|
||
* `status` (VARCHAR(50), NOT NULL, DEFAULT 'active', COMMENT '状态。枚举: active (激活), inactive (停用)')。
|
||
* `create_by` (BIGINT(20), NULLABLE, COMMENT '创建者ID, 关联 sys_user.user_id')。
|
||
* `create_time` (DATETIME, NULLABLE, COMMENT '创建时间')。
|
||
* `update_by` (BIGINT(20), NULLABLE, COMMENT '更新者ID, 关联 sys_user.user_id')。
|
||
* `update_time` (DATETIME, NULLABLE, COMMENT '更新时间')。
|
||
* `create_dept_id` (BIGINT(20), NULLABLE, COMMENT '创建部门ID, 关联 sys_dept.dept_id')。
|
||
* `del_flag` (CHAR(1), NOT NULL, DEFAULT '0', COMMENT '删除标志(0存在 1删除)')。
|
||
* 索引: `idx_pms_feci_tenant_dept_name` (tenant_id, dept_id, name), `idx_pms_feci_tenant_dept_category` (tenant_id, dept_id, category), `idx_pms_feci_tenant_dept_status` (tenant_id, dept_id, status)
|
||
|
||
#### 3.2.11 `pms_room_pricing_rules` - 房间价格规则表
|
||
* 业务描述: 为特定房型在特定日期范围或特定条件下设置价格调整规则。
|
||
* 主键: `rule_id` (BIGINT AUTO_INCREMENT)
|
||
* 字段定义:
|
||
* `rule_id` (BIGINT, PK, AUTO_INCREMENT, NOT NULL, COMMENT '价格规则唯一ID')。
|
||
* `dept_id` (BIGINT(20), NULLABLE, COMMENT '部门ID, 关联 sys_dept.dept_id, 若规则归属特定部门')。
|
||
* `name` (VARCHAR(255), NOT NULL, COMMENT '规则名称 (例如: 周末特价, 连住优惠)')。
|
||
* `room_type_id` (BIGINT, FK, NULLABLE, COMMENT '适用的房型ID, 关联 pms_room_types.room_type_id, NULL表示适用于所有房型')。
|
||
* `date_range_start` (DATE, NULLABLE, COMMENT '规则适用开始日期')。
|
||
* `date_range_end` (DATE, NULLABLE, COMMENT '规则适用结束日期')。
|
||
* `days_of_week_json` (JSON, NULLABLE, COMMENT 'JSON数组,数字代表星期几, e.g., [1,2,7] (1-Mon, 7-Sun)')。
|
||
* `min_length_of_stay` (INT, NULLABLE, COMMENT '最小入住天数要求')。
|
||
* `max_length_of_stay` (INT, NULLABLE, COMMENT '最大入住天数限制')。
|
||
* `price_adjustment_type` (VARCHAR(50), NOT NULL, COMMENT '调整类型。枚举: fixed_amount_override (固定价格覆盖), percentage_discount_from_base (基价百分比折扣), fixed_amount_increase_on_base (基价固定金额上浮), fixed_amount_decrease_from_base (基价固定金额下调), set_to_value (设置为特定值)')。
|
||
* `adjustment_value` (DECIMAL(10,2), NOT NULL, COMMENT '调整值 (具体金额或百分比,如50.00或0.1代表10%)')。
|
||
* `priority` (INT, NOT NULL, DEFAULT 0, COMMENT '规则优先级,数字越大优先级越高')。
|
||
* `status` (VARCHAR(50), NOT NULL, DEFAULT 'active', COMMENT '状态。枚举: active (激活), inactive (停用), scheduled (计划中)')。
|
||
* `create_by` (BIGINT(20), NULLABLE, COMMENT '创建者ID, 关联 sys_user.user_id')。
|
||
* `create_time` (DATETIME, NULLABLE, COMMENT '创建时间')。
|
||
* `update_by` (BIGINT(20), NULLABLE, COMMENT '更新者ID, 关联 sys_user.user_id')。
|
||
* `update_time` (DATETIME, NULLABLE, COMMENT '更新时间')。
|
||
* `create_dept_id` (BIGINT(20), NULLABLE, COMMENT '创建部门ID, 关联 sys_dept.dept_id')。
|
||
* `del_flag` (CHAR(1), NOT NULL, DEFAULT '0', COMMENT '删除标志(0存在 1删除)')。
|
||
* 索引: `idx_pms_rpr_tenant_dept_dates` (tenant_id, dept_id, date_range_start, date_range_end), `idx_pms_rpr_tenant_dept_status_priority` (tenant_id, dept_id, status, priority)
|
||
|
||
#### 3.2.12 `pms_tenant_user_devices` - 租户用户设备表
|
||
* 业务描述: 用于存储租户用户(员工)登录过的设备信息,主要用于推送通知。
|
||
* 主键: `id` (BIGINT AUTO_INCREMENT)
|
||
* 字段定义:
|
||
* `id` (BIGINT, PK, AUTO_INCREMENT, NOT NULL, COMMENT '设备记录唯一ID')。
|
||
* `user_id` (BIGINT(20), FK, NOT NULL, COMMENT '关联的用户ID, 关联 sys_user.user_id')。
|
||
* `device_type` (VARCHAR(50), NOT NULL, COMMENT '设备类型,例如: ios_app, android_app, wechat_miniprogram, web_push_browser')。
|
||
* `device_token` (VARCHAR(512), NOT NULL, COMMENT '设备推送令牌')。
|
||
* `app_version` (VARCHAR(50), NULLABLE, COMMENT '客户端应用版本')。
|
||
* `last_login_at` (DATETIME, NOT NULL, COMMENT '此设备最后登录时间')。
|
||
* `status` (VARCHAR(50), NOT NULL, DEFAULT 'active', COMMENT '状态。枚举: active (激活), inactive (停用), token_expired (令牌过期)')。
|
||
* `create_time` (DATETIME, NOT NULL, COMMENT '记录创建时间')。
|
||
* `update_time` (DATETIME, NOT NULL, COMMENT '记录更新时间')。
|
||
* 唯一约束: `unq_pms_ud_user_device_token_type` (user_id, device_token, device_type)
|
||
* 索引: `idx_pms_ud_tenant_user_token` (tenant_id, user_id, device_token), `idx_pms_ud_user_status` (user_id, status)
|
||
|
||
#### 3.2.13 `pms_tenant_settings` - 租户级PMS特定设置表
|
||
* 业务描述: 存储租户或部门级别的PMS特定业务配置项。与若依的 `sys_config` 互补。
|
||
* 主键: `setting_id` (BIGINT AUTO_INCREMENT)
|
||
* 字段定义:
|
||
* `setting_id` (BIGINT, PK, AUTO_INCREMENT, NOT NULL, COMMENT '设置唯一ID')。
|
||
* `tenant_id` (VARCHAR(20), NOT NULL, COMMENT '租户编号, 关联 sys_tenant.tenant_id')。
|
||
* `dept_id` (BIGINT(20), NULLABLE, COMMENT '部门ID, 关联 sys_dept.dept_id, NULL表示租户全局PMS设置')。
|
||
* `setting_group` (VARCHAR(100), NOT NULL, COMMENT '设置分组,例如: pms_booking_rules, pms_financial_params, pms_ui_appearance')。
|
||
* `setting_key` (VARCHAR(100), NOT NULL, COMMENT '设置项的唯一键 (在tenant_id, dept_id, setting_group下唯一)')。
|
||
* `setting_value` (TEXT, NOT NULL, COMMENT '设置项的值 (根据需要可存储JSON字符串)')。
|
||
* `value_type` (VARCHAR(50), NOT NULL, DEFAULT 'string', COMMENT '值类型,如 string, integer, boolean, json,方便解析')。
|
||
* `description` (TEXT, NULLABLE, COMMENT '设置项描述')。
|
||
* `is_sensitive` (BOOLEAN, NOT NULL, DEFAULT FALSE, COMMENT '是否为敏感设置')。
|
||
* `create_by` (BIGINT(20), NULLABLE, COMMENT '创建者ID, 关联 sys_user.user_id')。
|
||
* `create_time` (DATETIME, NULLABLE, COMMENT '创建时间')。
|
||
* `update_by` (BIGINT(20), NULLABLE, COMMENT '更新者ID, 关联 sys_user.user_id')。
|
||
* `update_time` (DATETIME, NULLABLE, COMMENT '更新时间')。
|
||
* `create_dept_id` (BIGINT(20), NULLABLE, COMMENT '创建部门ID, 关联 sys_dept.dept_id')。
|
||
* `del_flag` (CHAR(1), NOT NULL, DEFAULT '0', COMMENT '删除标志(0存在 1删除)')。
|
||
* 唯一约束: `unq_pms_ts_tenant_dept_group_key` (tenant_id, dept_id, setting_group, setting_key, del_flag)
|
||
* 索引: `idx_pms_ts_tenant_dept_group_key` (tenant_id, dept_id, setting_group, setting_key)
|
||
|
||
#### 3.2.14 `pms_mp_settings` - 民宿管理小程序配置表
|
||
* 业务描述: 存储租户或部门级别针对民宿员工管理小程序的特定配置项。
|
||
* 主键: `setting_id` (BIGINT AUTO_INCREMENT)
|
||
* 字段定义:
|
||
* `setting_id` (BIGINT, PK, AUTO_INCREMENT, NOT NULL, COMMENT '小程序设置唯一ID')。
|
||
* `tenant_id` (VARCHAR(20), NOT NULL, COMMENT '租户编号, 关联 sys_tenant.tenant_id')。
|
||
* `dept_id` (BIGINT(20), NULLABLE, COMMENT '部门ID, 关联 sys_dept.dept_id, NULL表示租户全局小程序设置')。
|
||
* `setting_key` (VARCHAR(100), NOT NULL, COMMENT '小程序配置项的唯一键。例如: mp_theme_color, mp_enable_feature_xyz')。
|
||
* `setting_value` (TEXT, NOT NULL, COMMENT '配置项的值 (可存储JSON字符串)')。
|
||
* `value_type` (VARCHAR(50), NOT NULL, DEFAULT 'string', COMMENT '值类型,如 string, integer, boolean, json')。
|
||
* `description` (TEXT, NULLABLE, COMMENT '配置项描述')。
|
||
* `create_by` (BIGINT(20), NULLABLE, COMMENT '创建者ID, 关联 sys_user.user_id')。
|
||
* `create_time` (DATETIME, NULLABLE, COMMENT '创建时间')。
|
||
* `update_by` (BIGINT(20), NULLABLE, COMMENT '更新者ID, 关联 sys_user.user_id')。
|
||
* `update_time` (DATETIME, NULLABLE, COMMENT '更新时间')。
|
||
* `create_dept_id` (BIGINT(20), NULLABLE, COMMENT '创建部门ID, 关联 sys_dept.dept_id')。
|
||
* `del_flag` (CHAR(1), NOT NULL, DEFAULT '0', COMMENT '删除标志(0存在 1删除)')。
|
||
* 唯一约束: `unq_pms_mps_tenant_dept_key` (tenant_id, dept_id, setting_key, del_flag)
|
||
* 索引: `idx_pms_mps_tenant_dept_key` (tenant_id, dept_id, setting_key)
|
||
|
||
### 3.3 公共数据模型 (PMS相关)
|
||
|
||
#### 3.3.1 `cmn_contacts` - 联系人表
|
||
* 业务描述: 存储系统中所有类型的联系人信息,主要是PMS的住客。
|
||
* 主键: `contact_id` (BIGINT AUTO_INCREMENT)
|
||
* 字段定义:
|
||
* `contact_id` (BIGINT, PK, AUTO_INCREMENT, NOT NULL, COMMENT '联系人唯一ID')。
|
||
* `dept_id` (BIGINT(20), NULLABLE, COMMENT '部门ID, 关联 sys_dept.dept_id, 若联系人主要归属某部门')。
|
||
* `contact_type` (VARCHAR(50), NOT NULL, COMMENT '联系人类型。枚举: guest_individual (散客), guest_group_contact (团队联系人), corporate_contact (公司协议联系人), travel_agent_contact (旅行社联系人), company_profile (公司档案), supplier_contact (供应商联系人), employee_profile (员工档案关联), other (其他)')。
|
||
* `full_name` (VARCHAR(255), NULLABLE, COMMENT '姓名')。
|
||
* `phone_number` (VARCHAR(50), NULLABLE, COMMENT '主要联系电话')。
|
||
* `email` (VARCHAR(255), NULLABLE, COMMENT '电子邮件地址')。
|
||
* `wechat_openid` (VARCHAR(100), NULLABLE, COMMENT '微信OpenID (特定于单个微信公众号或小程序)')。
|
||
* `wechat_unionid` (VARCHAR(100), NULLABLE, COMMENT '微信UnionID (跨多个微信应用的用户唯一标识)')。
|
||
* `related_user_id` (BIGINT(20), FK, NULLABLE, COMMENT '关联的系统用户ID, 关联 sys_user.user_id, 如员工档案关联')。
|
||
* `gender` (VARCHAR(20), NULLABLE, COMMENT '性别。枚举: male (男), female (女), non_binary (非二元), prefer_not_to_say (不愿透露), unknown (未知)')。
|
||
* `date_of_birth` (DATE, NULLABLE, COMMENT '出生日期')。
|
||
* `id_type` (VARCHAR(50), NULLABLE, COMMENT '证件类型,如身份证、护照等。可关联sys_dict_data')。
|
||
* `id_number_encrypted` (VARCHAR(255), NULLABLE, COMMENT '证件号码 (加密存储)')。
|
||
* `nationality_country_code` (VARCHAR(10), NULLABLE, COMMENT '国籍代码 (ISO 3166-1 alpha-2)')。
|
||
* `preferred_language` (VARCHAR(10), NULLABLE, COMMENT '偏好语言代码 (e.g., en, zh-CN)')。
|
||
* `address_street` (VARCHAR(255), NULLABLE, COMMENT '街道地址')。
|
||
* `address_city` (VARCHAR(100), NULLABLE, COMMENT '城市')。
|
||
* `address_state_province` (VARCHAR(100), NULLABLE, COMMENT '省/州')。
|
||
* `address_postal_code` (VARCHAR(50), NULLABLE, COMMENT '邮政编码')。
|
||
* `address_country_code` (VARCHAR(10), NULLABLE, COMMENT '国家代码 (ISO 3166-1 alpha-2)')。
|
||
* `contact_status` (VARCHAR(50), NOT NULL, DEFAULT 'active', COMMENT '联系人状态。枚举: active (活跃), inactive (不活跃), prospect (潜在客户), blacklisted (黑名单), pending_verification (待验证), merged_duplicate (已合并重复)')。
|
||
* `remarks` (TEXT, NULLABLE, COMMENT '备注信息')。
|
||
* `create_by` (BIGINT(20), NULLABLE, COMMENT '创建者ID, 关联 sys_user.user_id')。
|
||
* `create_time` (DATETIME, NULLABLE, COMMENT '创建时间')。
|
||
* `update_by` (BIGINT(20), NULLABLE, COMMENT '更新者ID, 关联 sys_user.user_id')。
|
||
* `update_time` (DATETIME, NULLABLE, COMMENT '更新时间')。
|
||
* `create_dept_id` (BIGINT(20), NULLABLE, COMMENT '创建部门ID, 关联 sys_dept.dept_id')。
|
||
* `del_flag` (CHAR(1), NOT NULL, DEFAULT '0', COMMENT '删除标志(0存在 1删除)')。
|
||
* 唯一约束 (建议,考虑 `del_flag`):
|
||
* `unq_cmn_c_tenant_dept_phone` (tenant_id, dept_id, phone_number, del_flag) (如果电话在部门内唯一)
|
||
* `unq_cmn_c_tenant_dept_email` (tenant_id, dept_id, email, del_flag) (如果邮箱在部门内唯一)
|
||
* 索引: `idx_cmn_c_tenant_dept_fname` (tenant_id, dept_id, full_name), `idx_cmn_c_tenant_dept_status_type` (tenant_id, dept_id, contact_status, contact_type), `idx_cmn_c_related_user` (related_user_id)
|
||
|
||
#### 3.3.2 `cmn_contact_tags` - 联系人标签表
|
||
* 业务描述: 定义可用于分类和标记联系人的标签。
|
||
* 主键: `tag_id` (BIGINT AUTO_INCREMENT)
|
||
* 字段定义:
|
||
* `tag_id` (BIGINT, PK, AUTO_INCREMENT, NOT NULL, COMMENT '标签唯一ID')。
|
||
* `dept_id` (BIGINT(20), NULLABLE, COMMENT '部门ID, 关联 sys_dept.dept_id, 若标签归属特定部门或全局')。
|
||
* `name` (VARCHAR(100), NOT NULL, COMMENT '标签名称')。
|
||
* `color` (VARCHAR(20), NULLABLE, COMMENT '标签显示颜色,如十六进制色值 #FF5733')。
|
||
* `category` (VARCHAR(50), NULLABLE, COMMENT '标签分类,如兴趣、客户级别、来源等')。
|
||
* `description` (TEXT, NULLABLE, COMMENT '标签描述')。
|
||
* `is_system` (BOOLEAN, NOT NULL, DEFAULT FALSE, COMMENT '是否为系统预设标签 (不可删除)')。
|
||
* `sort_order` (INT, NOT NULL, DEFAULT 0, COMMENT '排序值')。
|
||
* `create_by` (BIGINT(20), NULLABLE, COMMENT '创建者ID, 关联 sys_user.user_id')。
|
||
* `create_time` (DATETIME, NULLABLE, COMMENT '创建时间')。
|
||
* `update_by` (BIGINT(20), NULLABLE, COMMENT '更新者ID, 关联 sys_user.user_id')。
|
||
* `update_time` (DATETIME, NULLABLE, COMMENT '更新时间')。
|
||
* `create_dept_id` (BIGINT(20), NULLABLE, COMMENT '创建部门ID, 关联 sys_dept.dept_id')。
|
||
* `del_flag` (CHAR(1), NOT NULL, DEFAULT '0', COMMENT '删除标志(0存在 1删除)')。
|
||
* 唯一约束: `unq_cmn_ct_tenant_dept_name_category` (tenant_id, dept_id, name, category, del_flag)
|
||
* 索引: `idx_cmn_ct_category` (category), `idx_cmn_ct_is_system` (is_system)
|
||
|
||
#### 3.3.3 `cmn_contact_tag_relations` - 联系人标签关联表
|
||
* 业务描述: 实现联系人与标签的多对多关系。
|
||
* 主键: `relation_id` (BIGINT AUTO_INCREMENT)
|
||
* 字段定义:
|
||
* `relation_id` (BIGINT, PK, AUTO_INCREMENT, NOT NULL, COMMENT '关联唯一ID')。
|
||
* `dept_id` (BIGINT(20), NOT NULL, COMMENT '部门ID, 关联 sys_dept.dept_id (冗余, 以联系人所属部门为准)')。
|
||
* `contact_id` (BIGINT, FK, NOT NULL, COMMENT '联系人ID, 关联 cmn_contacts.contact_id')。
|
||
* `tag_id` (BIGINT, FK, NOT NULL, COMMENT '标签ID, 关联 cmn_contact_tags.tag_id')。
|
||
* `create_by` (BIGINT(20), NULLABLE, COMMENT '创建者ID, 关联 sys_user.user_id')。
|
||
* `create_time` (DATETIME, NOT NULL, COMMENT '创建时间')。
|
||
* 唯一约束: `unq_cmn_ctr_tenant_dept_contact_tag` (tenant_id, dept_id, contact_id, tag_id)
|
||
* 索引: `idx_cmn_ctr_contact_id` (contact_id), `idx_cmn_ctr_tag_id` (tag_id)
|
||
|
||
## 4. 主要业务实体状态流转
|
||
|
||
#### 4.1 订单 (`pms_core_orders`) 状态流转
|
||
|
||
```mermaid
|
||
stateDiagram-v2
|
||
[*] --> pending_confirmation: 创建订单
|
||
pending_confirmation --> confirmed: 确认订单
|
||
pending_confirmation --> cancelled: 取消订单
|
||
confirmed --> checked_in: 办理入住
|
||
confirmed --> cancelled: 取消订单
|
||
confirmed --> no_show: 未按时入住
|
||
checked_in --> checked_out: 办理退房
|
||
checked_in --> extended: 延长入住
|
||
extended --> checked_out: 办理退房
|
||
checked_out --> [*] : 订单完成
|
||
cancelled --> [*] : 订单取消
|
||
no_show --> [*] : 订单标记为No Show
|
||
```
|
||
* **订单状态 (`order_status` VARCHAR(50)) 枚举值示例:**
|
||
* `pending_confirmation` (待确认)
|
||
* `confirmed` (已确认)
|
||
* `checked_in` (已入住)
|
||
* `checked_out` (已退房)
|
||
* `cancelled` (已取消)
|
||
* `no_show` (未到店)
|
||
* `extended` (已延期)
|
||
* `waitlist` (等候名单)
|
||
|
||
#### 4.2 房间 (`pms_room_rooms`) 状态流转 (物理状态 & 清洁状态)
|
||
|
||
**物理状态 (`room_status` VARCHAR(50))**
|
||
```mermaid
|
||
stateDiagram-v2
|
||
[*] --> available: 房间空闲可用
|
||
available --> occupied: 客人入住 / 预留占用
|
||
available --> maintenance: 安排维护 / 维修
|
||
available --> out_of_service: 暂停服务 (其他原因)
|
||
occupied --> available: 客人退房 (且房间已清洁完成)
|
||
maintenance --> available: 维护完成 (房间恢复可用)
|
||
out_of_service --> available: 恢复服务
|
||
```
|
||
* **物理状态枚举值示例:**
|
||
* `available` (可用)
|
||
* `occupied` (占用中)
|
||
* `maintenance` (维护中)
|
||
* `out_of_service` (暂停服务)
|
||
|
||
**清洁状态 (`cleaning_status` VARCHAR(50))**
|
||
```mermaid
|
||
stateDiagram-v2
|
||
[*] --> clean: 初始状态 / 清洁完成
|
||
clean --> dirty: 客人使用后 / 退房后标记
|
||
dirty --> cleaning_in_progress: 客房服务员开始清洁
|
||
cleaning_in_progress --> inspected: 清洁完成待查房
|
||
inspected --> clean: 查房通过
|
||
inspected --> cleaning_in_progress: 查房未通过,返工
|
||
clean --> cleaning_in_progress: 客中打扫 (客人仍在住,但安排了打扫)
|
||
```
|
||
* **清洁状态枚举值示例:**
|
||
* `clean` (已清洁)
|
||
* `dirty` (待清洁)
|
||
* `cleaning_in_progress` (清洁中)
|
||
* `inspected` (已查房/待检)
|
||
|
||
#### 4.3 账单 (`pms_finance_folios`) 状态流转
|
||
|
||
```mermaid
|
||
stateDiagram-v2
|
||
[*] --> open: 订单创建时自动生成 / 手动创建
|
||
open --> closed: 账务结清 (所有费用付清)
|
||
open --> void: 作废账单 (如错误创建)
|
||
open --> pending_settlement: 等待结算 (如对公转账)
|
||
pending_settlement --> closed: 结算完成
|
||
pending_settlement --> open: 取消结算,返回开放
|
||
closed --> open: 重新打开 (特殊情况,需权限,如补充入账或退款)
|
||
void --> [*] : 账单作废
|
||
closed --> [*] : 账单关闭
|
||
```
|
||
* **账单状态 (`folio_status` VARCHAR(50)) 枚举值示例:**
|
||
* `open` (开放/未结清)
|
||
* `closed` (已结清/关闭)
|
||
* `void` (作废)
|
||
* `pending_settlement` (待结算)
|
||
|
||
## 5. 核心业务枚举值定义 (PMS主要部分)
|
||
|
||
以下列出PMS核心业务表中 `VARCHAR(50)` 类型枚举字段的建议值,具体值可根据业务细化调整。
|
||
|
||
* **`pms_room_types.status`**: `active` (启用), `inactive` (禁用)
|
||
* **`pms_room_rooms.room_status`**: `available` (可用), `occupied` (占用中), `maintenance` (维护中), `out_of_service` (暂停服务)
|
||
* **`pms_room_rooms.cleaning_status`**: `clean` (已清洁), `dirty` (待清洁), `cleaning_in_progress` (清洁中), `inspected` (已查房/待检)
|
||
* **`pms_room_rooms.status` (记录状态)**: `active` (启用), `inactive` (禁用)
|
||
* **`pms_room_locks.lock_type`**: `manual_lock` (手动锁定), `maintenance` (维护), `auto_block` (自动锁定,如欠费), `staff_use` (员工自用), `cleaning_block` (清洁锁定)
|
||
* **`pms_core_orders.order_status`**: `pending_confirmation` (待确认), `confirmed` (已确认), `checked_in` (已入住), `checked_out` (已退房), `cancelled` (已取消), `no_show` (未到店), `extended` (已延期), `waitlist` (等候名单), `provisional` (暂定预订)
|
||
* **`pms_core_orders.order_source`**: `direct_walk_in` (现场步入), `direct_phone` (电话预订), `direct_website` (官网预订), `direct_mall_h5` (H5商城), `ota_channel_manager` (OTA渠道管理), `travel_agency` (旅行社), `corporate_account` (公司协议), `internal_booking` (内部预订), `other` (其他)
|
||
* **`pms_core_order_items.product_type`**: `room_night` (房晚), `extra_charge_item` (附加收费项目), `package_component` (套餐子项), `service_fee` (服务费), `discount_adjustment` (折扣调整), `cancellation_fee` (取消费)
|
||
* **`pms_core_channels.channel_type`**: `ota` (在线旅行社), `direct_booking` (直接预订-官网/电话/前台), `gds` (全球分销系统), `wholesaler` (批发商), `corporate` (公司协议), `internal_use` (内部使用), `meta_search` (元搜索), `other` (其他)
|
||
* **`pms_core_channels.status`**: `active` (激活), `inactive` (停用), `deprecated` (弃用)
|
||
* **`pms_finance_folios.folio_status`**: `open` (开放/未结清), `closed` (已结清/关闭), `void` (作废), `pending_settlement` (待结算)
|
||
* **`pms_finance_transactions.transaction_type`**: `charge` (应收费用), `payment` (客人付款), `refund` (退款给客人), `deposit` (押金收款), `deposit_refund` (押金退还), `adjustment_positive` (正调整), `adjustment_negative` (负调整), `folio_transfer_out` (转出), `folio_transfer_in` (转入)
|
||
* **`pms_finance_payment_methods.method_type`**: `cash` (现金), `credit_card_visa` (VISA卡), `credit_card_mastercard` (万事达卡), `credit_card_amex` (运通卡), `credit_card_unionpay` (银联卡), `alipay` (支付宝), `wechat_pay` (微信支付), `bank_transfer` (银行转账), `company_account` (公司账户/挂账), `voucher` (代金券), `points_redemption` (积分兑换), `other_online_payment` (其他在线支付), `mobile_payment` (其他移动支付), `other` (其他)
|
||
* **`pms_finance_payment_methods.status`**: `active` (激活), `inactive` (停用)
|
||
* **`pms_finance_extra_charge_items.status`**: `active` (激活), `inactive` (停用)
|
||
* **`pms_room_pricing_rules.price_adjustment_type`**: `fixed_amount_override` (固定价格覆盖), `percentage_discount_from_base` (基价百分比折扣), `fixed_amount_increase_on_base` (基价固定金额上浮), `fixed_amount_decrease_from_base` (基价固定金额下调), `set_to_value` (设置为特定值)
|
||
* **`pms_room_pricing_rules.status`**: `active` (激活), `inactive` (停用), `scheduled` (计划中/待生效)
|
||
* **`pms_tenant_user_devices.status`**: `active` (激活), `inactive` (停用), `token_expired` (令牌过期)
|
||
* **`cmn_contacts.contact_type`**: `guest_individual` (散客), `guest_group_contact` (团队联系人), `corporate_contact` (公司协议联系人), `travel_agent_contact` (旅行社联系人), `company_profile` (公司档案), `supplier_contact` (供应商联系人), `employee_profile` (员工档案关联), `other` (其他)
|
||
* **`cmn_contacts.gender`**: `male` (男), `female` (女), `non_binary` (非二元性别), `prefer_not_to_say` (不愿透露), `unknown` (未知)
|
||
* **`cmn_contacts.contact_status`**: `active` (活跃), `inactive` (不活跃), `prospect` (潜在客户), `blacklisted` (黑名单), `pending_verification` (待验证), `merged_duplicate` (已合并重复档案)
|
||
|
||
## 6. 索引命名与规范建议
|
||
|
||
* **唯一索引:** `unq_[子系统前缀]_[表名简写]_[字段1]_[字段2]`,例如:`unq_pms_r_tdrn` 代表 `pms_room_rooms` 表上 `tenant_id, dept_id, room_number` 的唯一索引。
|
||
* **普通索引:** `idx_[子系统前缀]_[表名简写]_[字段1]_[字段2]`,例如:`idx_pms_o_tds` 代表 `pms_core_orders` 表上 `tenant_id, dept_id, order_status` 的普通索引。
|
||
* **租户和部门优先:** 对于所有包含 `tenant_id` 和 `dept_id` 的PMS业务表,查询相关的索引应优先考虑这两个字段,顺序通常为 `(tenant_id, dept_id, ...其他条件字段)`。
|
||
* **覆盖索引:** 尽量设计覆盖索引以减少回表,提高查询性能。
|
||
* **避免过多索引:** 每个表的索引数量不宜过多,以免影响写入性能。
|
||
|
||
---
|
||
**(文档末尾)**
|
||
|
||
**重要提示:**
|
||
* 本文档中的主键类型已统一为 `BIGINT AUTO_INCREMENT` (用于PMS新增业务表) 或遵循若依原有的 `BIGINT` (用于若依系统表)。
|
||
* PMS业务表中的枚举字段统一为 `VARCHAR(50)`,这与若依的 `CHAR(1)` 不同,在系统集成和前端交互时,可能需要在API层或逻辑层进行适配和转换。
|
||
* 所有PMS业务表已添加 `dept_id` 字段,用于数据归属和统计。确保所有相关查询和业务逻辑都考虑到 `dept_id`。
|
||
* 审计字段和软删除标记已尽量对齐若依规范。
|
||
|
||
请仔细审查此最终方案,确保其满足所有业务需求和技术约束。 |