77 lines
2.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package main
import (
"bindbox-game/configs"
"bindbox-game/internal/repository/mysql"
"context"
"flag"
"fmt"
)
func main() {
flag.Parse()
configs.Init()
ctx := context.Background()
db, err := mysql.New()
if err != nil {
panic(err)
}
rawDB := db.GetDbR()
// 1. status IN (2,4) 但 balance_amount > 0 的券(有余额却被标记为已使用/占用中)
fmt.Println("=== 异常券status=2或4 但余额>0应改为 status=1 ===")
var abnormal []struct {
ID int64 `gorm:"column:id"`
UserID int64 `gorm:"column:user_id"`
CouponID int64 `gorm:"column:coupon_id"`
Status int32 `gorm:"column:status"`
BalanceAmount int64 `gorm:"column:balance_amount"`
ValidEnd string `gorm:"column:valid_end"`
UsedAt string `gorm:"column:used_at"`
UsedOrderID int64 `gorm:"column:used_order_id"`
}
rawDB.WithContext(ctx).Raw(`
SELECT uc.id, uc.user_id, uc.coupon_id, uc.status, uc.balance_amount, uc.valid_end, uc.used_at, uc.used_order_id
FROM user_coupons uc
WHERE uc.status IN (2, 4)
AND uc.balance_amount > 0
ORDER BY uc.user_id, uc.id
`).Scan(&abnormal)
fmt.Printf("共 %d 条\n\n", len(abnormal))
for _, c := range abnormal {
statusText := map[int32]string{2: "已使用", 4: "占用中"}[c.Status]
// 查券名
var name string
rawDB.WithContext(ctx).Raw("SELECT name FROM system_coupons WHERE id = ?", c.CouponID).Scan(&name)
fmt.Printf("券#%d | 用户#%d | %s(模板#%d) | status=%d(%s) | 余额=%d分(%.2f元) | 有效期至=%s\n",
c.ID, c.UserID, name, c.CouponID, c.Status, statusText,
c.BalanceAmount, float64(c.BalanceAmount)/100, c.ValidEnd)
}
// 2. status=1 但 balance_amount=0 的券(没余额却还标记为未使用)
fmt.Println("\n=== 异常券status=1 但余额=0应改为 status=2 ===")
var zeroBalance []struct {
ID int64 `gorm:"column:id"`
UserID int64 `gorm:"column:user_id"`
CouponID int64 `gorm:"column:coupon_id"`
BalanceAmount int64 `gorm:"column:balance_amount"`
}
rawDB.WithContext(ctx).Raw(`
SELECT id, user_id, coupon_id, balance_amount
FROM user_coupons
WHERE status = 1 AND balance_amount = 0
ORDER BY user_id, id
`).Scan(&zeroBalance)
fmt.Printf("共 %d 条\n\n", len(zeroBalance))
for _, c := range zeroBalance {
var name string
rawDB.WithContext(ctx).Raw("SELECT name FROM system_coupons WHERE id = ?", c.CouponID).Scan(&name)
fmt.Printf("券#%d | 用户#%d | %s(模板#%d) | status=1(未使用) | 余额=0\n",
c.ID, c.UserID, name, c.CouponID)
}
}