## 订单操作者与佣金语义兼容映射清单

### 1. 历史字段现状

- `tb_order.operator_id`：历史上混用了“真实操作者账号 ID”和“代理店铺 ID”两种语义。
- `tb_order.operator_type`：历史上仅承载 `platform/agent`，且与 `operator_id` 的 ID 体系并不稳定一致。
- `tb_order.creator`：后台订单通常可回溯真实账号，但旧响应逻辑没有统一优先使用该字段补齐平台操作者展示。
- `tb_order.commission_status`：历史上仅有 `1=待计算`、`2=已计算`，无法表达“无佣金”和“链路异常待人工处理”。

### 2. 新增权威字段

- `operator_account_id`：真实操作者账号/主体 ID。
- `operator_account_type`：真实操作者类型，使用 `platform/agent/enterprise/personal_customer` 语义。
- `operator_account_name`：真实操作者名称快照。
- `commission_result`：佣金业务结果，使用 `0=未知 1=有佣金 2=无佣金 3=链路异常`。

### 3. 写路径兼容策略

- 新订单统一写入 `operator_account_*` 权威字段。
- 保留写入 legacy `operator_id/operator_type`，但仅作为兼容读取兜底，不再作为新语义权威来源。
- `seller_shop_id` 继续作为差价佣金链路起点，不再从 `operator_id/operator_type` 推导佣金归属。

### 4. 读路径兼容策略

- 响应层优先读取 `operator_account_*`。
- 若新字段为空：
  - 优先尝试 `creator` 回填后台账号名称。
  - 对客户端个人客户订单，回填个人客户昵称。
  - 对历史代理订单，若 `operator_id/operator_type` 仍承载店铺语义，则回退展示店铺名称，但不回写新字段。
- `commission_result` 为空时，按历史订单状态与佣金记录兜底推断，不直接篡改旧列值。

### 5. 高风险兼容点

- `internal/store/postgres/order_store.go` 中旧逻辑把 `operator_id IN subordinateShopIDs` 作为代理权限过滤条件；当 `operator_id` 不再表示店铺 ID 后，该条件必须迁移到 `seller_shop_id`，历史订单仅保留兜底分支。
- `internal/service/order/service.go` 当前 `operator_name` 仅在 `operator_type=agent` 时按店铺名称回填，会导致平台旧订单长期空白。
- `internal/service/commission_calculation/service.go` 当前仅把订单写成“已计算”，无法区分“有佣金 / 无佣金 / 链路异常”。

### 6. 本次实现范围内的迁移原则

- 只做增量字段迁移，不删除旧列。
- 不在本次 migration 中批量强制回填历史订单，只在运行时兼容读取并为后续人工校验提供依据。
