refactor(order): 结账单状态常量化并锁定仲裁结单统计口径

仲裁结案会把结账单置为终态 settled,但该状态一直是裸字符串;同时 adminfinance 按日结算聚合只按
accepted 过滤,容易被误读成"仲裁单掉出统计"。本次只做卫生与口径固化,不改任何行为:
- order 新增 CheckoutStatus{Submitted,Countered,Accepted,Disputed,Settled},包内沿用非导出别名
- dispute 的仲裁结案与争议取消分支改用常量;distribution 不能反向依赖 order,本地声明同名常量
- adminfinance 聚合里的 oc.status = 'accepted' 改为常量绑定,并注释说明仲裁单不计入是有意口径
- 新增 distribution 结账单退款重算用例(该分支原先无覆盖):accepted/settled 按结账单实际租金,
  submitted 不被采用;dashboard 用例补一张 settled 结账单,钉住"不计入已结算订单数"
This commit is contained in:
yml2213
2026-09-16 12:49:21 +08:00
parent 0eff43ad52
commit d3d571357a
8 changed files with 154 additions and 6 deletions
@@ -12,6 +12,13 @@ import (
"gorm.io/gorm/clause"
)
// 结账单状态常量,与 order 模块的 checkoutStatus* 取值一致。
// order 模块依赖 distribution,本包不能反向 import,故在此本地声明,避免裸字符串漂移。
const (
checkoutStatusAccepted = "accepted"
checkoutStatusSettled = "settled"
)
// distributionTablesPresent 探测分销财务表是否存在,仅首次访问查询 information_schema,
// 兼容尚未执行分销迁移的旧环境,避免每次支付/退款事务都做系统表查询。
var (
@@ -284,7 +291,7 @@ func ApplyRefundTx(tx *gorm.DB, orderID uint64, refundAmountCent int64) error {
// 1. 如果存在已达成一致的结账单(accepted 或 settled),以结账单中的实际消费租金与号主实际所得为准
var checkout model.OrderCheckout
hasAcceptedCheckout := false
if err := tx.Where("order_id = ? AND status IN ('accepted', 'settled')", orderID).
if err := tx.Where("order_id = ? AND status IN ?", orderID, []string{checkoutStatusAccepted, checkoutStatusSettled}).
Order("id DESC").First(&checkout).Error; err == nil {
hasAcceptedCheckout = true
}