space.go 7.68 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
package cp_cv

import (
	"fmt"
	"git.hilo.cn/hilo-common/resource/mysql"
	"github.com/bluele/gcache"
	"hilo-user/_const/enum/cp_e"
	"hilo-user/cv/user_cv"
	"hilo-user/domain/model/res_m"
	"time"
)

// cp信息
type CvCpInfo struct {
	UserInfo      *user_cv.UserTiny `json:"userInfo"`             // 用户信息
	CpUserInfo    *user_cv.UserTiny `json:"cpUserInfo,omitempty"` // cp用户信息
	CreatedUnix   int64             `json:"createdUnix"`          // cp创建时间
	CpDays        int               `json:"cpDays"`               // cp天数
	VisitTimes    int64             `json:"visitTimes"`           // 空间访问量
	ApplyToUnbind bool              `json:"applyToUnbind"`        // 是否申请撤销cp
}

// cp等级
type CvCpLevel struct {
	Level          cp_e.CpLevel `json:"level"`                  // 等级 0:无称号 1:恋爱CP 2:甜蜜CP 3:忠诚CP 4:炽热CP 5:荣耀CP
	Points         uint32       `json:"points"`                 // CP值
	StartPoints    uint32       `json:"startPoints,omitempty"`  // 上个等级所需CP值
	EndPoints      uint32       `json:"endPoints,omitempty"`    // 下个等级所需CP值
	ExpireAtUnix   int64        `json:"expireAtUnix,omitempty"` // 有效期,时间戳
	SettlementDate string       `json:"settlementDate"`         // 等级过期时间
	MaxLevel       cp_e.CpLevel `json:"maxLevel"`               // cp最大的等级
	Title          string       `json:"title,omitempty"`        // 称号翻译
}

// 资源等级
type CvResLevel struct {
	Level       cp_e.CpLevel `json:"level"`               // 等级
	Icon        string       `json:"icon"`                // 等级icon图
	StartPoints uint32       `json:"startPoints"`         // 上个等级所需CP值
	EndPoints   uint32       `json:"endPoints,omitempty"` // 下个等级所需CP值
}

// 特权信息
type CvPrivilege struct {
	Type       cp_e.CpPrivilege `json:"type"` // 特权id 1:空间 2:横幅 3:等级勋章 4:证书 5:进场特效 6:头像头饰 7:动态资料卡 8:麦位特效
	NameMsgId  uint             `json:"-"`    // 名称-翻译id
	Name       string           `json:"name"` // 名称
	DescMsgId  uint             `json:"-"`    // 描述-翻译id
	Desc       string           `json:"desc"`
	Icon       string           `json:"icon"`       // 图标
	CanSwitch  bool             `json:"canSwitch"`  // 能否开关
	UserSwitch bool             `json:"userSwitch"` // 用户开关
	LevelList  []cp_e.CpLevel   `json:"levelList"`  // 特权->level的反向索引
}

// cp空间页
type CvSpace struct {
	CpInfo        CvCpInfo          `json:"cpInfo"`        // cp信息
	CpLevel       CvCpLevel         `json:"cpLevel"`       // cp等级
	ResLevelList  []CvResLevel      `json:"resLevelList"`  // 资源等级列表,无称号/恋爱CP/甜蜜CP/忠诚CP/炽热CP/荣耀CP
	PrivilegeList [][]CvPrivilege   `json:"privilegeList"` // 等级特权
	CpAnniversary []CvCpAnniversary `json:"cpAnniversary"` // 提醒的纪念日
}

var CvResLevelList = []CvResLevel{
	{cp_e.CpLevel0, cp_e.CpLevelIcon[cp_e.CpLevel0], cp_e.CpLevelPoints[cp_e.CpLevel0], cp_e.CpLevelPoints[cp_e.CpLevel1]},
	{cp_e.CpLevel1, cp_e.CpLevelIcon[cp_e.CpLevel1], cp_e.CpLevelPoints[cp_e.CpLevel1], cp_e.CpLevelPoints[cp_e.CpLevel2]},
	{cp_e.CpLevel2, cp_e.CpLevelIcon[cp_e.CpLevel2], cp_e.CpLevelPoints[cp_e.CpLevel2], cp_e.CpLevelPoints[cp_e.CpLevel3]},
	{cp_e.CpLevel3, cp_e.CpLevelIcon[cp_e.CpLevel3], cp_e.CpLevelPoints[cp_e.CpLevel3], cp_e.CpLevelPoints[cp_e.CpLevel4]},
	{cp_e.CpLevel4, cp_e.CpLevelIcon[cp_e.CpLevel4], cp_e.CpLevelPoints[cp_e.CpLevel4], cp_e.CpLevelPoints[cp_e.CpLevel5]},
	{cp_e.CpLevel5, cp_e.CpLevelIcon[cp_e.CpLevel5], cp_e.CpLevelPoints[cp_e.CpLevel5], cp_e.CpLevelPoints[cp_e.CpLevelMax]},
}

var (
hujiebin's avatar
hujiebin committed
75 76 77 78 79 80 81 82
	CvPrivilege1 = CvPrivilege{cp_e.CpPrivilegeSpace, cp_e.CpPrivilegeNameMsgId[cp_e.CpPrivilegeSpace], "", cp_e.CpPrivilegeDescMsgId[cp_e.CpPrivilegeSpace], "", "", false, false, CpPrivilegeLevelList[cp_e.CpPrivilegeSpace]}
	CvPrivilege2 = CvPrivilege{cp_e.CpPrivilegeBanner, cp_e.CpPrivilegeNameMsgId[cp_e.CpPrivilegeBanner], "", cp_e.CpPrivilegeDescMsgId[cp_e.CpPrivilegeBanner], "", "", false, false, CpPrivilegeLevelList[cp_e.CpPrivilegeBanner]}
	CvPrivilege3 = CvPrivilege{cp_e.CpPrivilegeMedal, cp_e.CpPrivilegeNameMsgId[cp_e.CpPrivilegeMedal], "", cp_e.CpPrivilegeDescMsgId[cp_e.CpPrivilegeMedal], "", "", false, false, CpPrivilegeLevelList[cp_e.CpPrivilegeMedal]}
	CvPrivilege4 = CvPrivilege{cp_e.CpPrivilegeCert, cp_e.CpPrivilegeNameMsgId[cp_e.CpPrivilegeCert], "", cp_e.CpPrivilegeDescMsgId[cp_e.CpPrivilegeCert], "", "", false, false, CpPrivilegeLevelList[cp_e.CpPrivilegeCert]}
	CvPrivilege5 = CvPrivilege{cp_e.CpPrivilegeRoomEffect, cp_e.CpPrivilegeNameMsgId[cp_e.CpPrivilegeRoomEffect], "", cp_e.CpPrivilegeDescMsgId[cp_e.CpPrivilegeRoomEffect], "", "", true, false, CpPrivilegeLevelList[cp_e.CpPrivilegeRoomEffect]}
	CvPrivilege6 = CvPrivilege{cp_e.CpPrivilegeHeadwear, cp_e.CpPrivilegeNameMsgId[cp_e.CpPrivilegeHeadwear], "", cp_e.CpPrivilegeDescMsgId[cp_e.CpPrivilegeHeadwear], "", "", false, false, CpPrivilegeLevelList[cp_e.CpPrivilegeHeadwear]}
	CvPrivilege7 = CvPrivilege{cp_e.CpPrivilegeActiveProfile, cp_e.CpPrivilegeNameMsgId[cp_e.CpPrivilegeActiveProfile], "", cp_e.CpPrivilegeDescMsgId[cp_e.CpPrivilegeActiveProfile], "", "", true, false, CpPrivilegeLevelList[cp_e.CpPrivilegeActiveProfile]}
	CvPrivilege8 = CvPrivilege{cp_e.CpPrivilegeMicEffect, cp_e.CpPrivilegeNameMsgId[cp_e.CpPrivilegeMicEffect], "", cp_e.CpPrivilegeDescMsgId[cp_e.CpPrivilegeMicEffect], "", "", false, false, CpPrivilegeLevelList[cp_e.CpPrivilegeMicEffect]}
hujiebin's avatar
hujiebin committed
83 84 85
)

var CpLevelPrivilegeList = map[cp_e.CpLevel][]CvPrivilege{
hujiebin's avatar
hujiebin committed
86
	cp_e.CpLevel0: {CvPrivilege1, CvPrivilege4},
hujiebin's avatar
hujiebin committed
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
	cp_e.CpLevel1: {CvPrivilege1, CvPrivilege2, CvPrivilege3, CvPrivilege4},
	cp_e.CpLevel2: {CvPrivilege1, CvPrivilege2, CvPrivilege3, CvPrivilege4, CvPrivilege5},
	cp_e.CpLevel3: {CvPrivilege1, CvPrivilege2, CvPrivilege3, CvPrivilege4, CvPrivilege5, CvPrivilege6},
	cp_e.CpLevel4: {CvPrivilege1, CvPrivilege2, CvPrivilege3, CvPrivilege4, CvPrivilege5, CvPrivilege6, CvPrivilege7},
	cp_e.CpLevel5: {CvPrivilege1, CvPrivilege2, CvPrivilege3, CvPrivilege4, CvPrivilege5, CvPrivilege6, CvPrivilege7, CvPrivilege8},
}

var CpPrivilegeLevelList = map[cp_e.CpPrivilege][]cp_e.CpLevel{
	cp_e.CpPrivilegeSpace:         {cp_e.CpLevel0, cp_e.CpLevel1, cp_e.CpLevel2, cp_e.CpLevel3, cp_e.CpLevel4, cp_e.CpLevel5},
	cp_e.CpPrivilegeBanner:        {cp_e.CpLevel1, cp_e.CpLevel2, cp_e.CpLevel3, cp_e.CpLevel4, cp_e.CpLevel5},
	cp_e.CpPrivilegeMedal:         {cp_e.CpLevel1, cp_e.CpLevel2, cp_e.CpLevel3, cp_e.CpLevel4, cp_e.CpLevel5},
	cp_e.CpPrivilegeCert:          {cp_e.CpLevel1, cp_e.CpLevel2, cp_e.CpLevel3, cp_e.CpLevel4, cp_e.CpLevel5},
	cp_e.CpPrivilegeRoomEffect:    {cp_e.CpLevel2, cp_e.CpLevel3, cp_e.CpLevel4, cp_e.CpLevel5},
	cp_e.CpPrivilegeHeadwear:      {cp_e.CpLevel3, cp_e.CpLevel4, cp_e.CpLevel5},
	cp_e.CpPrivilegeActiveProfile: {cp_e.CpLevel4, cp_e.CpLevel5},
	cp_e.CpPrivilegeMicEffect:     {cp_e.CpLevel5},
}

func CopyCpLevelPrivilegeList(Level cp_e.CpLevel, lang string) []CvPrivilege {
	privileges := make([]CvPrivilege, len(CpLevelPrivilegeList[Level]))
	copy(privileges, CpLevelPrivilegeList[Level])
	for i, v := range privileges {
		privileges[i].Name = GetTranslate(v.NameMsgId, lang)
		privileges[i].Desc = GetTranslate(v.DescMsgId, lang)
hujiebin's avatar
hujiebin committed
111
		privileges[i].Icon = cp_e.CpPrivilegeIcon[v.Type][Level]
hujiebin's avatar
hujiebin committed
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
	}
	return privileges
}

var translateCache = gcache.New(1000).LRU().Build()

func GetTranslate(msgId uint, lang string) string {
	key := fmt.Sprintf("%v-%v", msgId, lang)
	if data, err := translateCache.Get(key); err == nil {
		return data.(string)
	}
	if resMul, _ := res_m.GetResMultiTextBy(mysql.Db, msgId, lang); resMul != nil {
		_ = translateCache.SetWithExpire(key, resMul.Content, time.Hour)
		return resMul.Content
	}
	return "default"
}