2025-05-08 15:48:34 +08:00

92 lines
2.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package entity
import (
"admin/apps/game/model"
"admin/apps/game/model/dto"
"admin/internal/consts"
"admin/internal/errcode"
"admin/lib/cdkey"
"time"
)
var MaxKeyNum = 100000 // 每个批次直接搞10w个不然运营想补加码算法又要一开始定好数量
type CDKey struct {
Po *model.CDKey
}
func NewCDKey(po *model.CDKey) *CDKey {
return &CDKey{
Po: po,
}
}
func (c *CDKey) GetName() string {
return c.Po.Name
}
func (c *CDKey) IsGlobalType() bool {
return c.Po.CodeType == consts.CDKeyType_Global
}
func (c *CDKey) GenerateKeys() []string {
if c.IsGlobalType() {
return []string{c.Po.Code}
}
return cdkey.GenerateAll(c.Po.ID, MaxKeyNum)[:c.Po.CodeNum]
}
func (c *CDKey) AddCount(delta int) {
c.Po.CodeNum += delta
}
func (c *CDKey) GetCount() int {
return c.Po.CodeNum
}
func (c *CDKey) CheckCanUse(roleServerId string) error {
if ok := c.checkServerId(roleServerId); !ok {
return errcode.New(errcode.CDKeyInvalid, "server_id %v not in %v", roleServerId, c.Po.ServerIDs)
}
timeNow := time.Now()
if c.Po.ValidStartTime.Valid {
if c.Po.ValidStartTime.Time.After(timeNow) {
return errcode.New(errcode.CDKeyAlreadyExpired, "not reach start time:%v", c.Po.ValidStartTime.Time.Format(time.DateTime))
}
}
if c.Po.ValidEndTime.Valid {
if c.Po.ValidEndTime.Time.Before(timeNow) {
return errcode.New(errcode.CDKeyAlreadyExpired, "expired at:%v", c.Po.ValidEndTime.Time.Format(time.DateTime))
}
}
return nil
}
func (c *CDKey) checkServerId(serverId string) bool {
if len(c.Po.ServerIDs) == 0 {
return true
}
if len(c.Po.ServerIDs) == 1 && c.Po.ServerIDs[0] == "" {
return true
}
for _, id := range c.Po.ServerIDs {
if id == serverId {
return true
}
}
return false
}
func (c *CDKey) RewardItemsView() []*dto.ItemInfo {
items := make([]*dto.ItemInfo, 0, len(c.Po.Attach))
for _, v := range c.Po.Attach {
items = append(items, &dto.ItemInfo{
ItemID: int(v.ID),
ItemNum: v.Num,
ItemType: v.ItemType,
Desc: v.Desc,
})
}
return items
}