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", }) }