gift.go 1.57 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
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的用户
// 先lru cache,后db
// ttl: 5min
func GetPastTop50SendGiftUsers(model *domain.Model) []recommendUserGift {
	if data, err := recommendUserGiftCache.Get(recommendUserGiftKey); err == nil {
		return data.([]recommendUserGift)
	}
hujiebin's avatar
hujiebin committed
26
	limitUserIds, _ := GetBillboardLimitUserList(model)
hujiebin's avatar
hujiebin committed
27
	var res []recommendUserGift
hujiebin's avatar
hujiebin committed
28
	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
29
		Where("u.avatar <> ''").
hujiebin's avatar
hujiebin committed
30
		Where("g.created_time >= ?", time.Now().Add(-time.Hour*12)).
hujiebin's avatar
hujiebin committed
31 32
		Where("send_user_id NOT in ?", limitUserIds).
		Group("send_user_id").
hujiebin's avatar
hujiebin committed
33 34 35 36 37 38
		Having("send_user_diamond > 100000").Order("send_user_diamond DESC").Limit(34).Find(&res).Error; err != nil {
		model.Log.Errorf("GetPastTop50SendGiftUsers fail:%v", err)
	}
	recommendUserGiftCache.SetWithExpire(recommendUserGiftKey, res, time.Minute*5)
	return res
}
hujiebin's avatar
hujiebin committed
39 40 41 42 43 44 45 46 47

// 榜单黑名单
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
}