RuoYi-Vue-Plus/docs/basic/PMS数据模型.md

52 KiB
Raw Blame History

云宿居 PMS 系统 - PMS核心数据模型 (最终版 v_ry_final_4.0)

快速导航:

1. 引言

1.1 文档目的与范围

本文档详细定义了"云宿居"民宿 Property Management System (PMS) 的数据库逻辑模型,并与其依赖的若依框架的基础表(如租户、用户、部门等)进行了整合。本文档旨在为数据库的物理实现和后端开发提供具体指导。

核心原则:

  1. 若依框架的基础实体(用户、租户、角色、部门等)及其字段规范固定不变。
  2. PMS新增的核心业务表主键统一采用 BIGINT 自增ID。
  3. PMS业务表只关联部门(dept_id),不直接关联租户(tenant_id)。部门代表实际的门店/分店,通过部门可以查询到其所属租户信息。 这使得"一个租户下有多个门店"的业务模型更加清晰,同时减少数据冗余。
  4. 特例:pms_tenant_settingspms_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图 (最终版 - 简化)

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_idcreate_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) 状态流转

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))

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))

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) 状态流转

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_iddept_id 的PMS业务表查询相关的索引应优先考虑这两个字段顺序通常为 (tenant_id, dept_id, ...其他条件字段)
  • 覆盖索引: 尽量设计覆盖索引以减少回表,提高查询性能。
  • 避免过多索引: 每个表的索引数量不宜过多,以免影响写入性能。

(文档末尾)

重要提示:

  • 本文档中的主键类型已统一为 BIGINT AUTO_INCREMENT (用于PMS新增业务表) 或遵循若依原有的 BIGINT (用于若依系统表)。
  • PMS业务表中的枚举字段统一为 VARCHAR(50),这与若依的 CHAR(1) 不同在系统集成和前端交互时可能需要在API层或逻辑层进行适配和转换。
  • 所有PMS业务表已添加 dept_id 字段,用于数据归属和统计。确保所有相关查询和业务逻辑都考虑到 dept_id
  • 审计字段和软删除标记已尽量对齐若依规范。

请仔细审查此最终方案,确保其满足所有业务需求和技术约束。