package log import ( "fmt" "gorm.io/gorm" ) // HasRefundCommissionLog 判断指定订单号是否已写入 333 退款佣金日志。 // 用于 refund 主流程做幂等校验,以及 stuck-order recovery / activate worker // 区分「已退款」(terminal)与「短暂 claimed」(transient)这两种共用 status=6 // 的语义。 // // 实现细节: // 1. type=33 + content LIKE '%"order_no":""%' 先走索引粗筛; // 2. 命中项再用 JSON 反序列化精确比对 content.type==333 与 content.order_no, // 避免 order_no 出现在其它字段子串里产生误判。 func HasRefundCommissionLog(tx *gorm.DB, orderNo string) (bool, error) { if orderNo == "" { return false, nil } var logs []SystemLog if err := tx.Model(&SystemLog{}). Where("type = ? AND content LIKE ?", TypeCommission.Uint8(), fmt.Sprintf("%%\"order_no\":\"%s\"%%", orderNo)). Find(&logs).Error; err != nil { return false, fmt.Errorf("query refund commission log failed: %w", err) } for _, item := range logs { var content Commission if err := content.Unmarshal([]byte(item.Content)); err != nil { continue } if content.Type == CommissionTypeRefund && content.OrderNo == orderNo { return true, nil } } return false, nil }