| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- package signin
- import (
- badge "bet24.com/servers/micros/badge/proto"
- "fmt"
- "bet24.com/log"
- "bet24.com/servers/common"
- pb "bet24.com/servers/micros/activityservice/proto"
- inventory "bet24.com/servers/micros/item_inventory/proto"
- item "bet24.com/servers/micros/item_inventory/proto"
- vip "bet24.com/servers/micros/userservices/proto"
- )
- type userSignin struct {
- userId int
- signinList []pb.Signin
- }
- func newUserSignin(userId int) *userSignin {
- us := new(userSignin)
- us.userId = userId
- us.loadSigninInfo()
- return us
- }
- func (us *userSignin) loadSigninInfo() {
- //1、签到列表
- signlist := userSignList(us.userId)
- for _, v := range getManager().getSignList(true) {
- signTime := 0
- for _, s := range signlist {
- if v.Id == s.Id {
- signTime = s.SignTime
- break
- }
- }
- us.signinList = append(us.signinList, pb.Signin{
- Id: v.Id,
- Award: v.Award,
- DoubleVipLevel: v.DoubleVipLevel,
- SignTime: signTime,
- })
- }
- us.checkFinishSequence()
- }
- // 检查是否重新开启新一轮签到
- func (us *userSignin) checkFinishSequence() {
- count := len(us.signinList)
- if count == 0 {
- return
- }
- if us.signinList[count-1].SignTime == 0 {
- return
- }
- lastSignTime := us.signinList[count-1].SignTime
- now := common.GetTimeStamp()
- if common.IsSameDay(lastSignTime, now) {
- return
- }
- // 一轮结束,连续签到也清零
- us.signinList = mgr.getSignList(true)
- go us.updateSigninAll()
- }
- // 签到
- func (us *userSignin) signin() (bool, *item.ItemPack) {
- var items *item.ItemPack
- if len(us.signinList) == 0 {
- log.Debug("userSignin.signin userId[%d] no signinList", us.userId)
- return false, items
- }
- signin := us.getCurrentSignin()
- if signin == nil {
- log.Debug("userSignin.signin userId[%d] getCurrentSignin == nil", us.userId)
- return false, items
- }
- signin.SignTime = common.GetTimeStamp()
- items = getManager().getPrizeByDayIndex(signin.Id)
- us.sendAward(items, fmt.Sprintf("签到ID:[%d]", signin.Id))
- vipLevel := 0
- userVip := vip.GetUserVipInfo(us.userId)
- if userVip != nil && userVip.IsVip() {
- vipLevel = userVip.Level
- }
- if vipLevel >= signin.DoubleVipLevel && signin.DoubleVipLevel > 0 {
- us.sendAward(items, fmt.Sprintf("签到ID:[%d] vip doubled", signin.Id))
- items.Count *= 2
- }
- // 新增徽章签到次数
- go badge.DoAction(us.userId, badge.Action_SignInCount, 1, badge.Scope{})
- us.updateSignin(signin.Id, signin.SignTime)
- return true, items
- }
- func (us *userSignin) getLastSignTime() int {
- count := len(us.signinList)
- for i := count - 1; i >= 0; i-- {
- if us.signinList[i].SignTime != 0 {
- return us.signinList[i].SignTime
- }
- }
- return 0
- }
- func (us *userSignin) getCurrentSignin() *pb.Signin {
- count := len(us.signinList)
- lastSignTime := 0
- lastSignIndex := -1
- for i := count - 1; i >= 0; i-- {
- if us.signinList[i].SignTime != 0 {
- lastSignIndex = i
- lastSignTime = us.signinList[i].SignTime
- break
- }
- }
- if lastSignIndex == count-1 {
- //log.Debug("userSignin.getCurrentSignin [%d] sequence has done", us.userId)
- return nil
- }
- // 当日已签到?
- if lastSignTime > 0 {
- now := common.GetTimeStamp()
- if common.IsSameDay(lastSignTime, now) {
- //log.Debug("userSignin.signin [%d] has signed today", us.userId)
- return nil
- }
- }
- return &us.signinList[lastSignIndex+1]
- }
- func (us *userSignin) sendAward(items *item.ItemPack, desc string) {
- if items == nil {
- log.Release("userSignin.sendAward userId[%d] items == nil", us.userId)
- return
- }
- inventory.AddItems(us.userId, []item.ItemPack{*items}, desc, common.LOGTYPE_SEND_SIGN)
- }
- func (us *userSignin) updateSigninAll() {
- for _, v := range us.signinList {
- us.updateSignin(v.Id, v.SignTime)
- }
- }
- func (us *userSignin) updateSignin(id, signTime int) {
- updateUserSign(us.userId, id, signTime)
- }
- func (us *userSignin) getSigninInfo() *pb.SigninInfo {
- signin := us.getCurrentSignin()
- return &pb.SigninInfo{
- SigninTable: us.signinList,
- Signable: signin != nil,
- }
- }
- func (us *userSignin) checkSignTip() bool {
- sign := us.getCurrentSignin()
- return sign != nil
- }
|