win 8d1eef2f7f fix(channel): 修复渠道统计GMV重复计数和商城直购误计入
1. 排除商城直购(source_type=1):GMV和成本过滤条件从IN(1,2,3,4)改为IN(2,3,4)
2. 排除次卡免费使用订单(actual_amount=0):避免购买次卡和使用次卡双重计入GMV
   - source_type=4 一番赏使用次卡:1578单 44032元重复
   - source_type=3 对对碰使用次卡:422单 7042元重复
   - 合计去除51074元虚增GMV(29.1%)
3. 成本过滤条件同步修正:source_type IN(2,3,4),total_amount>0

修正后:GMV从175600降至124527元,毛利率从37.4%回到真实的11.8%
2026-03-16 21:41:39 +08:00

56 lines
1.6 KiB
Go

package main
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
func main() {
dsn := "root:bindbox2025kdy@tcp(150.158.78.154:3306)/dev_game?charset=utf8mb4&parseTime=True&loc=Local"
db, _ := gorm.Open(mysql.Open(dsn), &gorm.Config{})
channelID := 3
filter := "users.channel_id = ? AND users.deleted_at IS NULL AND orders.status = 2 AND orders.actual_amount > 0 AND orders.source_type IN (1,2,3,4) AND (orders.ext_order_id = '' OR orders.ext_order_id IS NULL)"
type Sample struct {
ID int64
SourceType int32
ActualAmount int64
Remark string
}
// 一番赏 remark
var ichiban []Sample
db.Table("orders").
Joins("JOIN users ON users.id = orders.user_id").
Select("orders.id, orders.source_type, orders.actual_amount, orders.remark").
Where(filter+" AND orders.source_type = 4", channelID).
Limit(5).
Scan(&ichiban)
fmt.Println("=== 一番赏 (source_type=4) remark 示例 ===")
for _, s := range ichiban {
fmt.Printf(" ID=%-6d amount=%-8d remark=[%s]\n", s.ID, s.ActualAmount, s.Remark)
}
// 翻牌 matching_game 的 issue 对应关系
type IssueActivity struct {
IssueID int64
ActivityID int64
PriceDraw int64
}
var ia []IssueActivity
db.Table("activity_issues").
Joins("JOIN activities ON activities.id = activity_issues.activity_id").
Select("activity_issues.id as issue_id, activity_issues.activity_id, activities.price_draw").
Where("activity_issues.id IN (92, 96, 104)").
Scan(&ia)
fmt.Println("\n=== 翻牌 issue → activity → price_draw ===")
for _, r := range ia {
fmt.Printf(" issue_id=%d → activity_id=%d → price_draw=%d\n", r.IssueID, r.ActivityID, r.PriceDraw)
}
}