refactor: 优化代码结构和逻辑
This commit is contained in:
@@ -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{}),
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user