You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

55 lines
2.3 KiB

package user
import (
"yunyan/comm"
"yunyan/lego/sys/mysql"
"yunyan/pb"
)
// 新用户开户礼:注册即到账,不需要任何操作。
//
// ⚠️ 这是**临时**的拉新政策(2026-08-28 起)。要停掉就把 newUserGiftEnabled 置 false,
// 或直接删掉 applyNewUserGift 的调用点(api_sgin.go 里创建用户那一处)。
//
// 2026-09 起三个额度桶停用,开户礼改成「VIP 天数 + 算力」(算力归账号、不过期,见 comm/compute.go)。
// 两个数额由**后台「会员与算力」页配置**(comm.LoadOpsParams),改了不用发版;
// 配置表里没有这两行时回落到 comm 的默认值(30 天 + 100 算力)。
//
// ⚠️ 两项都配 0 = 注册不送任何东西,这是合法配置而不是「没配」——所以 ParseOpsParams
// 区分「键不存在」与「值为 0」,别改成 `if v > 0` 那种写法。
const newUserGiftEnabled = true
// applyNewUserGift 把开户礼写进尚未落库的新用户对象。
// 只在「用户不存在 → 新建」的分支调用,老用户不受影响。
//
// 直接赋值而非累加:这是刚 new 出来的对象,几个额度字段都还是零值。
// p 由调用方传入(comm.LoadOpsParams())而不是在函数里各读一次:发放与流水必须用**同一份快照**,
// 否则两次读之间后台改了配置,就会出现「送的是 A、流水记的是 B」的对不上账。
func applyNewUserGift(user *pb.DBUser, now int64, p comm.OpsParams) {
if !newUserGiftEnabled || user == nil {
return
}
if p.NewUserGiftVipDays > 0 {
user.Vipexptime = now + int64(p.NewUserGiftVipDays)*24*60*60
}
user.Computebalance = p.NewUserGiftCompute
}
// logNewUserGift 记一条活动奖励流水,便于后台对账「送出去多少」。
// 礼包已经随用户一起落库了,这条流水写失败不回滚、只忽略。
func logNewUserGift(uid string, now int64, p comm.OpsParams) {
if !newUserGiftEnabled {
return
}
if p.NewUserGiftVipDays == 0 && p.NewUserGiftCompute == 0 {
return // 后台配成不送,就别记一条全 0 的流水
}
_ = mysql.Insert(comm.TableUserUseLog, &pb.DBUserUseLog{
Uid: uid,
Ts: now,
Logtype: pb.UserLogType_ActivityReward,
Addvipday: int64(p.NewUserGiftVipDays),
Compute: p.NewUserGiftCompute,
Extra: "new user register gift",
})
}