All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m57s
3.2 KiB
3.2 KiB
订单操作者与产业链佣金语义修复功能总结
1. 变更目标
本次变更围绕两个历史语义问题展开:
- 订单
operator_id/operator_type混用了“真实操作者账号”和“代理店铺 ID”,导致平台订单无法稳定显示真实操作者。 - 订单
commission_status只区分“待计算/已计算”,无法表达“有佣金 / 无佣金 / 链路异常待人工处理”的真实业务结果。
2. 已完成的核心改动
2.1 订单操作者改为账号语义
- 新增权威字段:
operator_account_idoperator_account_typeoperator_account_name
- 后台订单创建、H5 代理订单创建、客户端个人客户订单、自动购包订单都会写入真实操作者快照。
- 旧
operator_id/operator_type保留为历史兼容字段,不再作为新语义权威来源。
2.2 订单响应分离“操作者账号”和“业务店铺”
operator_id/operator_type/operator_name现在按真实操作者账号语义返回。- 新增
seller_shop_id/seller_shop_name,用于表达业务归属店铺展示。 - 历史订单优先使用新字段;若缺失,则按
creator、个人客户昵称、旧店铺型operator_id顺序兜底,避免平台旧订单出现空白操作者名称。
2.3 订单佣金状态拆成“流程状态 + 业务结果”
commission_status现在表示流程状态:1=待计算2=已完成3=待人工处理
- 新增
commission_result表示业务结果:0=未知1=有佣金2=无佣金3=链路异常
2.4 差价佣金任务结果显式落单
- 佣金 worker 结束后会显式写回订单:
已完成 + 有佣金已完成 + 无佣金待人工处理 + 链路异常
- 0 佣金订单不再长期停留在“待计算”。
2.5 入队与幂等语义修复
- 钱包支付创建订单后,所有仍处于
待计算的适用订单都会入队佣金任务,不再只覆盖特定购买角色。 - 重复支付回调、重复钱包支付不会重复入队。
- worker 对
已完成/待人工处理订单直接跳过,避免重复补偿处理。
3. 兼容策略
- migration 仅新增字段,不删除旧列。
- 历史订单读取时:
- 优先使用
operator_account_* - 其次使用
creator回填账号名 - 对旧代理订单保留店铺名兜底展示
- 优先使用
- 历史订单的
commission_result若未回填,则在响应层按佣金记录只读推断。
4. 受影响文件
internal/model/order.gointernal/model/dto/order_dto.gointernal/service/order/service.gointernal/service/client_order/service.gointernal/service/commission_calculation/service.gointernal/store/postgres/order_store.gointernal/task/auto_purchase.gopkg/constants/iot.gomigrations/000140_add_order_operator_snapshot_and_commission_result.*.sql
5. 风险提示
- 历史订单若
creator无法映射到账号,仍会退回旧店铺型操作者展示,仅保证“可读”而不强行伪造账号 ID。 commission_result=0仅作为历史兼容态存在;新计算链路应尽量落为明确业务结果。- 本次不重构一次性佣金规则本身,只保证其异常待审记录能纳入订单最终流程结果判断。