refactor: 优化代码结构和逻辑

This commit is contained in:
xinian
2026-03-31 08:19:53 +08:00
committed by cnb
parent b4a8048b85
commit d6d03a576d
21 changed files with 1166 additions and 1080 deletions

View File

@@ -3,19 +3,33 @@ package service
import (
"blazing/cool"
"blazing/modules/player/model"
"sync"
"github.com/gogf/gf/v2/frame/g"
)
type CdkService struct {
BaseService
mu sync.RWMutex
claimedCode map[uint32]struct{}
cacheLoaded bool
}
func (s *CdkService) CanGet(id uint32) bool {
m1, _ := s.dbm(s.Model).Where("code_id", id).Exist()
if s.isClaimed(id) {
return false
}
return !m1
if err := s.loadClaimedCodes(); err != nil {
exists, _ := s.dbm(s.Model).Where("code_id", id).Exist()
if exists {
s.markClaimed(id)
}
return !exists
}
return !s.isClaimed(id)
}
func (s *CdkService) Log(id uint32) {
@@ -26,17 +40,59 @@ func (s *CdkService) Log(id uint32) {
"is_vip": cool.Config.ServerInfo.IsVip,
}
m.Data(data).Insert()
if _, err := m.Data(data).Insert(); err == nil {
s.markClaimed(id)
}
}
func (s *CdkService) loadClaimedCodes() error {
s.mu.RLock()
if s.cacheLoaded {
s.mu.RUnlock()
return nil
}
s.mu.RUnlock()
var logs []model.CdkLog
if err := s.dbm(s.Model).Fields("code_id").Scan(&logs); err != nil {
return err
}
s.mu.Lock()
defer s.mu.Unlock()
if s.cacheLoaded {
return nil
}
s.claimedCode = make(map[uint32]struct{}, len(logs))
for _, log := range logs {
s.claimedCode[log.CodeID] = struct{}{}
}
s.cacheLoaded = true
return nil
}
func (s *CdkService) isClaimed(id uint32) bool {
s.mu.RLock()
defer s.mu.RUnlock()
_, ok := s.claimedCode[id]
return ok
}
func (s *CdkService) markClaimed(id uint32) {
s.mu.Lock()
defer s.mu.Unlock()
if s.claimedCode == nil {
s.claimedCode = make(map[uint32]struct{})
}
s.claimedCode[id] = struct{}{}
}
func NewCdkService(id uint32) *CdkService {
return &CdkService{
BaseService: BaseService{userid: id,
Service: &cool.Service{Model: model.NewCdkLog()},
},
claimedCode: make(map[uint32]struct{}),
}
}

View File

@@ -26,6 +26,21 @@ func (s *ItemService) Get(min, max uint32) []model.Item {
return ttt
}
func (s *ItemService) GetUserItemList(min, max, leftTime uint32) []model.SingleItemInfo {
var items []model.SingleItemInfo
s.dbm(s.Model).
Fields("item_id,item_cnt").
WhereBetween("item_id", min, max).
Where("item_cnt >", 0).
Scan(&items)
for i := range items {
items[i].LeftTime = leftTime
}
return items
}
func (s *ItemService) UPDATE(id uint32, count int) error {
if cool.Config.ServerInfo.IsVip != 0 && count < 0 {