数据库 schema
shared_auth(跨 app)
users
| 列 | 类型 | 说明 |
|---|---|---|
| id | BIGSERIAL PK | 跨 app 用户 ID |
| username | TEXT UNIQUE | 可空(纯飞书账号无) |
| password_hash | TEXT | bcrypt cost 10 |
| display_name | TEXT | 显示名 |
| feishu_user_id | TEXT UNIQUE | 飞书 OAuth 绑定 |
| token_version | INT | 改密/改角色时 +1 |
| robovan_role | TEXT | superadmin/management/operations/finance/sales/pending/NULL |
| nempoi_role | TEXT | superadmin/admin/customer/NULL |
| nempoi_organization_id | INT | nempoi customer 必填 |
| nempoi_nem_token | TEXT | per-admin NEM 凭据 |
| nempoi_nem_token_synced_at | TIMESTAMPTZ | |
| nempoi_nem_token_sync_key | TEXT UNIQUE | Tampermonkey 同步用 |
| is_root_owner | BOOLEAN | 整个系统唯一根超管 |
| created_at / last_login_at | TIMESTAMPTZ |
sessions
| 列 | 类型 | 说明 |
|---|---|---|
| token | TEXT PK | 32 字节 base64url |
| user_id | BIGINT FK→users | |
| app | TEXT CHECK | 'robovan' | 'nempoi' | 'portal' |
| ip / user_agent | TEXT | |
| expires_at | TIMESTAMPTZ | |
| last_active_at | TIMESTAMPTZ | 心跳更新 |
| created_at | TIMESTAMPTZ |
permissions / roles / role_permissions
RBAC v2 — 见 角色权限。
vehicle_mgmt(运力管理业务)
| 表 | 说明 |
|---|---|
vehicles | 50 辆无人货运车,状态机 |
local_customers | 客户,合约价 / 承运单价 |
orders | 订单,4 种 billing_mode |
assignments | 订单 ↔ 车辆指派(SELECT FOR UPDATE 行锁防双重占用) |
trips | 行程,状态机 |
vehicle_costs | 单车成本(单车专属 / 全局通用) |
order_costs | 订单附加成本(装卸费等) |
payments / payment_accounts | 收款 |
daily_financial_snapshots | 日结 batch 输出(UPSERT 幂等) |
data_snapshots | 数据快照(超管面板可见) |
login_events | 登录事件 + last_active_at 心跳 |
audit_logs | 操作日志 |
system_config | 系统配置(飞书 webhook 等) |
carrier_dispatch | 承运每日车组确认(advisory_xact_lock 防双派) |
customer_carrier_prices | 承运单价生效日切 |
permissions / role_permission_grants | RBAC v1(已废,数据迁到 shared_auth) |
nem_poi(NEMPOI 业务)
| 表 | 说明 |
|---|---|
organizations | 客户实体(运营创建,绑定 NEM 网格) |
pois | 录入的 POI 点位,status 枚举 |
poi_pictures | POI 图片(NEM OSS URL) |
login_logs | 登录日志 + duration |
audit_logs | 操作日志 |
注:organizations.created_by_user_id / pois.created_by_user_id / login_logs.user_id / audit_logs.user_id 全部引用 shared_auth.users.id(SSO Phase A1.2 数据迁移时按映射重写)。