# Data Model: Table QR Code

## Entity: TableQrcode

**Table**: `table_qrcode`
**Module**: ruoyi-system

### Fields

| Field | Java Type | DB Type | Nullable | Default | Description |
|-------|-----------|---------|----------|---------|-------------|
| id | Long | bigint PK | NO | AUTO_INCREMENT | 主键 |
| tableNo | String | varchar(32) | NO | - | 桌号（如 A01、B02） |
| type | Integer | tinyint | NO | 0 | 类型：0=摊位码, 1=公用码 |
| storeId | Long | bigint | YES | NULL | 关联摊位ID（摊位码必填，公用码为空） |
| nightMarketId | Long | bigint | NO | - | 夜市ID |
| qrCode | String | varchar(255) | YES | NULL | 二维码内容（URL 文本） |
| status | Integer | tinyint | NO | 0 | 启用状态：0=启用, 1=停用 |
| useStatus | Integer | tinyint | NO | 0 | 使用状态：0=空闲, 1=使用中 |
| createBy | String | varchar(64) | YES | NULL | 创建者 |
| createTime | Date | datetime | YES | NULL | 创建时间 |
| updateBy | String | varchar(64) | YES | NULL | 更新者 |
| updateTime | Date | datetime | YES | NULL | 更新时间 |
| remark | String | varchar(255) | YES | NULL | 备注 |

### Relationships

| Relation | Target Entity | Type | FK Field | Description |
|----------|--------------|------|----------|-------------|
| 所属摊位 | PosStore | ManyToOne | storeId | 摊位码关联的摊位 |
| 所属夜市 | NightMarket | ManyToOne | nightMarketId | 所有码关联的夜市 |

### Validation Rules

| Field | Rule | Condition |
|-------|------|-----------|
| tableNo | 必填，长度 1-32 | 所有 |
| type | 必填，0 或 1 | 所有 |
| storeId | 必填 | type=0（摊位码） |
| storeId | 必须为空 | type=1（公用码） |
| nightMarketId | 必填 | 所有 |
| tableNo + storeId | 联合唯一 | type=0，同一摊位下桌号不重复 |
| tableNo + nightMarketId | 联合唯一 | type=1，同一夜市下公用码桌号不重复 |

### State Transitions

```
status (启用状态):
  0(启用) ←→ 1(停用)

useStatus (使用状态):
  0(空闲) ←→ 1(使用中)
```

- status 由管理员手动切换
- useStatus 由订单系统自动更新（下单时→使用中，结账后→空闲）

### Indexes

```sql
CREATE INDEX idx_store_id ON table_qrcode(store_id);
CREATE INDEX idx_night_market_id ON table_qrcode(night_market_id);
CREATE INDEX idx_type ON table_qrcode(type);
CREATE UNIQUE INDEX uk_table_no_store ON table_qrcode(table_no, store_id) WHERE type = 0;
CREATE UNIQUE INDEX uk_table_no_market ON table_qrcode(table_no, night_market_id) WHERE type = 1;
```

### DDL

```sql
CREATE TABLE `table_qrcode` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `table_no` varchar(32) NOT NULL COMMENT '桌号',
  `type` tinyint NOT NULL DEFAULT 0 COMMENT '类型：0=摊位码, 1=公用码',
  `store_id` bigint DEFAULT NULL COMMENT '关联摊位ID',
  `night_market_id` bigint NOT NULL COMMENT '夜市ID',
  `qr_code` varchar(255) DEFAULT NULL COMMENT '二维码内容',
  `status` tinyint NOT NULL DEFAULT 0 COMMENT '启用状态：0=启用, 1=停用',
  `use_status` tinyint NOT NULL DEFAULT 0 COMMENT '使用状态：0=空闲, 1=使用中',
  `create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`),
  KEY `idx_store_id` (`store_id`),
  KEY `idx_night_market_id` (`night_market_id`),
  KEY `idx_type` (`type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='餐桌码表';
```
