refactor(service): 统一服务实例调用方式

将多个模块中手动创建服务实例的方式替换为全局单例模式,
包括 PetFusionService、PetFusionMaterialService 和 EffectService。
同时修改了相关调用代码以适配新的服务引用方式。

此外,重构了 talk 模块的数据结构与逻辑实现,
优化了挖矿次数检查及更新机制。
```
This commit is contained in:
2025-12-08 19:50:54 +08:00
parent 0acf01cd6b
commit 1436cc0117
8 changed files with 54 additions and 17 deletions

View File

@@ -16,7 +16,7 @@ func init() {
&cool.Controller{
Prefix: "/admin/pet/fusionmaterial", // 路由前缀(主表路由+子表名,层级清晰)
Api: []string{"Add", "Delete", "Update", "Info", "List", "Page"}, // 支持的基础CRUD接口
Service: service.NewPetFusionMaterialService(), // 绑定子表Service
Service: service.PetFusionMaterialServiceIns, // 绑定子表Service
},
}
// 注册控制器到框架

View File

@@ -17,11 +17,8 @@ func NewTalk() *Talk {
type Talk struct {
*cool.Model
PlayerID uint64 `gorm:"not null;index:idx_player_resource;comment:'所属玩家ID'" json:"player_id"`
Data string `gorm:"type:text;not null;comment:'全部数据'" json:"data"` //map[uint32]uint32
}
type TalkEX struct {
Talk
Data map[uint32]uint32 `orm:"data" json:"data"`
TalkID uint32 `gorm:"not null;unique;comment:'资源ID'" json:"talk_id"`
Count uint32 `gorm:"not null;comment:'采集计数'" json:"count"`
}
// TableName 资源采集表名

View File

@@ -36,3 +36,5 @@ func NewEffectService() *EffectService {
},
}
}
var Effects = NewEffectService()

View File

@@ -20,6 +20,8 @@ type PetFusionMaterialService struct {
*cool.Service // 嵌入通用Service继承基础CRUD方法
}
var PetFusionMaterialServiceIns = NewPetFusionMaterialService()
// NewPetFusionMaterialService 创建PetFusionMaterialService实例
func NewPetFusionMaterialService() *PetFusionMaterialService {
return &PetFusionMaterialService{

View File

@@ -18,6 +18,8 @@ type PetFusionService struct {
*cool.Service // 嵌入通用Service继承基础CRUD方法
}
var PetFusionServiceS = NewPetFusionService()
// NewPetFusionService 创建PetFusionService实例
func NewPetFusionService() *PetFusionService {
return &PetFusionService{

View File

@@ -20,19 +20,53 @@ func NewTalkService(id uint32) *TalkService {
}
// TalkCheck 获取玩家当前的Talk数据
// todo 待实现xml解析判断是否溢出
func (s *TalkService) Exec(t func(map[uint32]uint32) bool) {
//实现挖矿次数确认
func (s *TalkService) Cheak(flag int) bool {
m1 := s.GModel(s.Model)
var talks model.TalkEX
m1.Scan(&talks)
var talks *model.Talk
m1.Where("talk_id", flag).Scan(&talks)
if talks == nil {
return true //如果表里没有记载数据,那么就可以直接挖矿
}
//因为这个是挖一次更新一次,而且是实时更新的,如果更新日期是今天,那么就可以确认不用再重置,否则就需要重置挖矿记录
if !IsToday(talks.UpdateTime) {
ok := t(talks.Data)
if ok {
talks.PlayerID = uint64(s.userid)
talks.Count = 0
m1.Save(talks)
return true
}
}
func (s *TalkService) Update(flag int) {
m1 := s.GModel(s.Model)
var talks model.Talk
m1.Scan(&talks)
talks.PlayerID = uint64(s.userid)
talks.TalkID = uint32(flag)
talks.Count += 1
m1.Save(talks)
}
// // TalkCheck 获取玩家当前的Talk数据
// // todo 待实现xml解析判断是否溢出
// func (s *TalkService) Exec(t func(map[uint32]uint32) bool) {
// m1 := s.GModel(s.Model)
// var talks model.Talk
// m1.Scan(&talks)
// ok := t(talks)
// if ok {
// talks.PlayerID = uint64(s.userid)
// m1.Save(talks)
// }
// }