gift.go 1.61 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
package recommend_m

import (
	"git.hilo.cn/hilo-common/domain"
	"git.hilo.cn/hilo-common/resource/mysql"
	"github.com/bluele/gcache"
	"time"
)

// 推荐用户送礼
type recommendUserGift struct {
	SendUserId      mysql.ID
	SendUserDiamond mysql.Num
}

var recommendUserGiftKey = "recommendUserGiftKey"
var recommendUserGiftCache = gcache.New(1).LRU().Build()

// 推荐最近送礼的50人,最近12小时赠送礼物大于100k的用户
20
func SyncPastTop50SendGiftUsers(model *domain.Model) {
hujiebin's avatar
hujiebin committed
21
	limitUserIds, _ := GetBillboardLimitUserList(model)
hujiebin's avatar
hujiebin committed
22
	var res []recommendUserGift
hujiebin's avatar
hujiebin committed
23
	if err := model.DB().Table("gift_operate g").Joins("INNER JOIN user u ON u.id = g.send_user_id").Select("send_user_id,SUM(send_user_diamond) send_user_diamond").
hujiebin's avatar
hujiebin committed
24
		Where("u.avatar <> ''").
hujiebin's avatar
hujiebin committed
25
		Where("g.created_time >= ?", time.Now().Add(-time.Hour*12)).
hujiebin's avatar
hujiebin committed
26 27
		Where("send_user_id NOT in ?", limitUserIds).
		Group("send_user_id").
hujiebin's avatar
hujiebin committed
28 29 30
		Having("send_user_diamond > 100000").Order("send_user_diamond DESC").Limit(34).Find(&res).Error; err != nil {
		model.Log.Errorf("GetPastTop50SendGiftUsers fail:%v", err)
	}
31 32 33 34 35 36 37 38 39
	_ = recommendUserGiftCache.Set(recommendUserGiftKey, res)
}

// 只从缓存中拿
func GetPastTop50SendGiftUsers(model *domain.Model) []recommendUserGift {
	if data, err := recommendUserGiftCache.Get(recommendUserGiftKey); err == nil {
		return data.([]recommendUserGift)
	}
	return []recommendUserGift{}
hujiebin's avatar
hujiebin committed
40
}
hujiebin's avatar
hujiebin committed
41 42 43 44 45 46 47 48 49

// 榜单黑名单
func GetBillboardLimitUserList(model *domain.Model) ([]uint64, error) {
	var userIds []uint64
	if err := model.Db.Table("billboard_limit_user").Select("user_id").Find(&userIds).Error; err != nil {
		return nil, err
	}
	return userIds, nil
}