gift.go 1.13 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
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)
	}
	var res []recommendUserGift
	if err := model.DB().Table("gift_operate").Select("send_user_id,SUM(send_user_diamond) send_user_diamond").
		Where("created_time >= ?", time.Now().Add(-time.Hour*12)).Group("send_user_id").
hujiebin's avatar
hujiebin committed
29
		Having("send_user_diamond > 100000").Order("send_user_diamond DESC").Limit(30).Find(&res).Error; err != nil {
hujiebin's avatar
hujiebin committed
30 31 32 33 34
		model.Log.Errorf("GetPastTop50SendGiftUsers fail:%v", err)
	}
	recommendUserGiftCache.SetWithExpire(recommendUserGiftKey, res, time.Minute*5)
	return res
}