77 lines
2.5 KiB
Go
77 lines
2.5 KiB
Go
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)
|
||
}
|
||
}
|