send_gift_redis.go 2.74 KB
Newer Older
hujiebin's avatar
hujiebin committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
package gift_cron

import (
	"git.hilo.cn/hilo-common/domain"
	"github.com/jinzhu/now"
	"hilo-user/_const/enum/cp_e"
	"hilo-user/domain/cache/gift_c"
	"hilo-user/domain/event/gift_ev"
	"hilo-user/domain/model/cp_m"
	"time"
)

// 送礼事件
func SendGiftEvent() {
	//if !config.IsMaster() {
	//	return
	//}
	go func() {
		for true {
			model := domain.CreateModelNil()
			if sendGiftEvent := gift_c.BLPopQueueSendGift(model); sendGiftEvent != nil {
				cpGiftEvent(model, sendGiftEvent) // cp送礼
			}
		}
	}()
}

// 送礼增加cp等级
// 送礼增加cp排行榜
func cpGiftEvent(model *domain.Model, sendGiftEvent *gift_ev.SendGiftEvent) {
	// 只处理cp礼物
	if !sendGiftEvent.ResGift.Cp {
		return
	}
	for _, receiverUid := range sendGiftEvent.ReceiveUserIds {
		diamonds := sendGiftEvent.GiftN * sendGiftEvent.ResGift.DiamondNum
		// 有cp关系
		if cpRelation, exits := cp_m.GetCpRelationPair(model, sendGiftEvent.SendUserId, receiverUid); exits {
			if err := cp_m.AddCpLevelPoints(model, cpRelation, diamonds, sendGiftEvent.SceneType, sendGiftEvent.SceneUid); err != nil {
				model.Log.Errorf("AddCpLevelPoints fail:%v", err)
			}
			if err := cp_m.AddCpDayRank(model, cpRelation, diamonds); err != nil {
				model.Log.Errorf("AddCpDayRank fail:%v", err)
			}
			// 检查最新的等级
			if cpLevel := cp_m.GetCpLevel(model, cpRelation.Id); cpLevel.CpId >= 0 {
				points := cpLevel.Points + cp_e.CpLevelPoints[cpLevel.Level]
				if err := cp_m.UpdateCpAchievement(model, cpLevel.CpId, cpRelation.UserId1, cpRelation.UserId2, cp_e.CpAchievementLevel, points); err != nil {
					model.Log.Errorf("UpdateCpAchievement fail:%v", err)
				}
			}
			// 检查最高的分数
			for _, queryType := range []string{"day", "week", "month"} {
				var beginDate, endDate string
				var cpAchievementType cp_e.CpAchievement
				switch queryType {
				case "day":
					beginDate, endDate = time.Now().Format("2006-01-02"), time.Now().Format("2006-01-02")
					cpAchievementType = cp_e.CpAchievementDayRank
				case "week":
					beginDate = now.BeginningOfWeek().Format("2006-01-02")
					endDate = now.EndOfWeek().Format("2006-01-02")
					cpAchievementType = cp_e.CpAchievementWeekRank
				case "month":
					beginDate = now.BeginningOfMonth().Format("2006-01-02")
					endDate = now.EndOfMonth().Format("2006-01-02")
					cpAchievementType = cp_e.CpAchievementMonthRank
				}
				if data := cp_m.GetCpDayRank(model, beginDate, endDate, cpRelation.Id); data.Score > 0 {
					if err := cp_m.UpdateCpAchievement(model, cpRelation.Id, cpRelation.UserId1, cpRelation.UserId2, cpAchievementType, data.Score); err != nil {
						model.Log.Errorf("UpdateCpAchievement fail:%v", err)
					}
				}
			}
			// 检查最新日周月榜单
			return // 业务场景允许提前break(cp是唯一的)
		}
	}
}