核心数据模型与规则定义
版本信息
- 版本号: v1.3
- 状态:
- 最后更新: 2026-01-29
- 变更摘要: [v1.3] 细节优化与去英化:商家补充负责人姓名;用户细化点位记录逻辑(记录次末消费点位);订单补充原价及优惠金额;全局标题移除英文标注。
- 变更摘要 (历史): [v1.2] 优化:商家增加证照图,点位增加经纬坐标;用户体系重构。
- 变更摘要 (历史): [v1.1] 逻辑修复:User ID 解耦 OpenID。
一、 全局 E-R 关系图
二、 核心实体定义
1. 商家
定义:具备独立生产能力与财务结算资格的供应实体。
| 字段名 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
| merchant_id | String(32) | Y | 主键,UUID | M_2026001 |
| name | String(64) | Y | 商家简称(C 端可见) | 川湘小炒 |
| business_license_name | String(100) | Y | 工商注册名称(结算用) | 上海某某餐饮管理有限公司 |
| license_img_url | String(255) | N | 营业执照图片 | https://.../lic.jpg |
| permit_img_url | String(255) | N | 经营许可证图片 | https://.../per.jpg |
| health_cert_img_url | JSON | N | 健康证图片序列 | ["https://.../h.jpg"] |
| contact_name | String(32) | Y | 负责人姓名 | 张三 |
| contact_phone | String(20) | Y | 负责人电话 | 13800000000 |
| status | Enum | Y | 状态:ONLINE(在线), OFFLINE(下线), PAUSED(暂停供餐) | ONLINE |
2. 点位
定义:拥有固定物理位置、部署了物联网设备的运营单元。
| 字段名 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
| point_id | String(32) | Y | 主键,UUID | P_SH_001 |
| name | String(64) | Y | 点位展示名称 | 腾飞大厦 A 座大堂 |
| address | String(255) | Y | 详细地址 | 静安区某某路 88 号 |
| longitude | Decimal(10,7) | Y | 经度坐标 | 121.4737 |
| latitude | Decimal(10,7) | Y | 纬度坐标 | 31.2304 |
| bound_merchant_id | String(32) | Y | 固定绑定商家 (当前主力对应的商家) | M_2026001 |
| capacity | Int | N | 规划容量(车位数) | 2 |
| unified_price | Decimal(10,2) | Y | 统一称重单价 (元/50g) | 3.18 |
3. 用户
定义:在平台产生消费行为的自然人。
3.1 t_user (用户主表)
| 字段名 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
| user_id | String(32) | Y | 用户主键,内部 UUID | U_2026001 |
| nickname | String(64) | N | 用户昵称 (支持手动修改) | Leo |
| phone | String(64) | N | 手机号 (加密存储) | Encrypt(138...) |
| bound_point_id | String(32) | N | 常驻/偏好点位 (用户主观选择或最常用) | P_SH_001 |
| last_other_point_id | String(32) | N | 次末消费点位 (除当前偏好点位外的最后消费点) | P_SH_002 |
| register_source | Enum | Y | 注册来源 (SCAN: 扫码, SHARE: 分享) | SCAN |
| first_point_id | String(32) | N | 首次进入系统的点位 ID | P_SH_001 |
| created_at | Datetime | Y | 注册时间 (账号初次创建时间) | 2026-02-01 10:00:00 |
| last_consumption_at | Datetime | N | 最后消费时间 | 2026-02-28 12:10:00 |
3.2 t_user_binding (多渠道绑定表)
| 字段名 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
| binding_id | String(32) | Y | 映射主键 | B_1001 |
| user_id | String(32) | Y | 指向用户主表 ID | U_2026001 |
| channel | Enum | Y | 渠道标识 (WX: 微信, ALIPAY: 支付宝) | WX |
| channel_user_id | String(64) | Y | 第三方平台用户 ID (OpenID/BuyerID) | oX9s... |
4. 智能设备
定义:现场硬件资产,关联物理位置与管理主体。
| 字段名 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
| device_id | String(32) | Y | 内部主键 | D_001 |
| device_no | String(32) | Y | 设备编号 (系统资产号) | EQ2026001 |
| factory_sn | String(64) | Y | 出厂序列号 | SN_HK_9921 |
| model | String(32) | Y | 设备型号 | SM-E1-Pro |
| type | Enum | Y | 设备类型 (称重机/扫码盒/餐车) | SCALE |
| bind_point_id | String(32) | Y | 归属点位 | P_SH_001 |
| bind_merchant_id | String(32) | N | 所属商家 (管理责任方) | M_2026001 |
| version | String(32) | N | 软件版本号 | v1.2.4 |
| owner_name | String(32) | N | 负责人/保管人姓名 | 李工 |
| add_time | Datetime | Y | 设备添加时间 | 2026-01-15 09:00 |
| last_online_at | Datetime | N | 最后心跳活跃时间 | 2026-02-28 12:00 |
| last_order_at | Datetime | N | 设备端最后消费日期 | 2026-02-28 |
| status | Int | Y | 状态 (1:在线 0:离线 2:报修) | 1 |
5. 交易订单
定义:包含核心金额维度与环境快照的交易记录。
| 字段名 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
| order_id | String(32) | Y | 主键 | ORD_2026... |
| order_type | Enum | Y | 订单类型 (WEIGH: 称重, SCAN: 扫码) | WEIGH |
| user_id | String(32) | Y | 用户 ID | U_2026001 |
| point_snapshot | JSON | Y | 点位快照 (包含 ID 及当时名称) | {"id":"P_01","name":"腾飞"} |
| merchant_snapshot | JSON | Y | 商家快照 (包含 ID 及当时名称) | {"id":"M_01","name":"川湘"} |
| unit_price | Decimal | Y | 价格快照 (元/50g) | 3.18 |
| original_amount | Decimal | Y | 订单原价 (称重克数 * 单价) | 18.06 |
| discount_amount | Decimal | N | 优惠金额 (各类券/核减) | 3.00 |
| pay_amount | Decimal | Y | 实付金额 | 15.06 |
| third_party_no | String(64) | N | 外部流水号 (微信/支付宝交易单号) | 420000123... |
| pay_channel | Enum | Y | 支付渠道 (WX: 微信, ALIPAY: 支付宝, OFFLINE: 线下) | WX |
| status | Int | Y | 状态 (0: 待支付, 1: 成功, 2: 退款) | 1 |
三、 核心业务规则
BR01 - 排期互斥规则
- 在同一个 [日期] + [餐段] + [点位] 下,系统仅允许存在 1条 有效商家排期,确保静态码路由唯一。
BR02 - 点位追踪规则
- 字段逻辑:
bound_point_id: 用户常用的“家”点位,决定小程序进入后的默认点位。last_other_point_id: 记录用户最近一次在偏好点位以外的消费行为。例如:用户偏好“腾飞大厦”,但某日去“越洋广场”消费,此时该字段更新为“越洋广场”。这有助于分析用户的流动路径。
BR03 - 订单数据完整性 (快照原则)
- 所有订单表必须独立存储当时的 单价 和 商家/点位名称。不得仅存储 ID 进行关联查询,以防历史报表因商家改名或系统调价而失传。
BR04 - 注册与首次入场
created_at记录用户账号创建的绝对时间。first_point_id记录该用户首次扫码进入系统时的地理坐标,辅助计算各点位的“获客贡献”。
BR05 - 支付账单核对
- 所有 C 端订单包含“原价 - 优惠 = 实付”的标准结构,
third_party_no是与微信/支付宝后台对账的唯一硬链接。