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.
 
 
 
 
 
 

64 lines
2.4 KiB

package user
import (
"yunyan/comm"
"yunyan/lego/sys/mysql"
"yunyan/pb"
)
// 新用户开户礼:注册即到账,不需要任何操作。
//
// ⚠️ 这是**临时**的拉新政策(2026-08-28 起)。要停掉就把 newUserGiftEnabled 置 false,
// 或直接删掉 applyNewUserGift 的调用点(api_sgin.go 里创建用户那一处)。
//
// 单位坑(三个额度桶并不同构,照抄会送错量级):
// - Tradeintegral / Meetintegral 是**秒**,所以「100 分钟」= 100*60;
// - Aichatintegral 是**次数**,每次 AI 对话扣 1(见 api_usages.go 的 UsageType_AI 分支),
// 「分钟」在这个桶里没有意义,按 100 次给。
const (
newUserGiftEnabled = true
newUserGiftVipDays = 30 // 赠送 VIP 天数
newUserGiftTradeMin = 100 // 翻译额度(分钟)——同传/面对面/通话/影音共用这一个桶
newUserGiftMeetMin = 100 // 会议额度(分钟)
newUserGiftAiTimes = 100 // 智能体额度(次数,不是分钟)
)
// applyNewUserGift 把开户礼写进尚未落库的新用户对象。
// 只在「用户不存在 → 新建」的分支调用,老用户不受影响。
//
// 直接赋值而非累加:这是刚 new 出来的对象,几个额度字段都还是零值。
func applyNewUserGift(user *pb.DBUser, now int64) {
if !newUserGiftEnabled || user == nil {
return
}
user.Vipexptime = now + int64(newUserGiftVipDays)*24*60*60
tradeSec := int64(newUserGiftTradeMin) * 60
meetSec := int64(newUserGiftMeetMin) * 60
user.Tradeintegral = tradeSec
user.Tradetotalintegral = tradeSec
user.Meetintegral = meetSec
user.Meettotalintegral = meetSec
user.Aichatintegral = int64(newUserGiftAiTimes)
user.Aichattotalintegral = int64(newUserGiftAiTimes)
}
// logNewUserGift 记一条活动奖励流水,便于后台对账「送出去多少」。
// 礼包已经随用户一起落库了,这条流水写失败不回滚、只忽略。
func logNewUserGift(uid string, now int64) {
if !newUserGiftEnabled {
return
}
_ = mysql.Insert(comm.TableUserUseLog, &pb.DBUserUseLog{
Uid: uid,
Ts: now,
Logtype: pb.UserLogType_ActivityReward,
Addvipday: int64(newUserGiftVipDays),
Addtradesecond: int64(newUserGiftTradeMin) * 60,
Addmeetsecond: int64(newUserGiftMeetMin) * 60,
Addagentintegral: int64(newUserGiftAiTimes),
Extra: "new user register gift",
})
}