Files
bl/modules/config/service/tower.go

94 lines
2.4 KiB
Go
Raw Normal View History

package service
import (
"blazing/cool"
"blazing/modules/config/model"
"github.com/gogf/gf/v2/database/gdb"
)
// 定义塔类型枚举,方便区分不同塔的业务逻辑
type TowerType uint32
const (
TowerType110 TowerType = 110 // 110塔
TowerType500 TowerType = 500 // 500塔
TowerType600 TowerType = 600 // 600塔
)
// TowerService 统一的塔配置服务整合110/500/600塔的逻辑
type TowerService struct {
*cool.Service
towerType TowerType // 标记当前服务对应的塔类型
tableName string // 存储当前塔类型对应的表名
}
// NewTowerService 创建指定类型的塔配置服务
func NewTowerService(towerType TowerType) *TowerService {
var tableName string
switch towerType {
case TowerType110:
tableName = model.TableNamedARKTowerConfig
case TowerType500:
tableName = model.TableNameTrialTowerConfig
case TowerType600:
tableName = model.TableNameBraveTowerConfig
default:
panic("unsupported tower type: " + string(rune(towerType))) // 非支持类型直接panic也可返回error
}
// 创建一个统一的模型,设置对应的表名
unifiedModel := &UnifiedTowerModel{
tableName: tableName,
}
return &TowerService{
Service: &cool.Service{Model: unifiedModel},
towerType: towerType,
tableName: tableName,
}
}
// UnifiedTowerModel 统一的塔模型,通过设置不同的表名来区分不同类型的塔
type UnifiedTowerModel struct {
2026-02-01 00:39:36 +08:00
*cool.Model
tableName string
}
// TableName 返回当前模型对应的表名
func (m *UnifiedTowerModel) TableName() string {
return m.tableName
}
// GroupName 返回模型所属组
func (m *UnifiedTowerModel) GroupName() string {
return "default"
}
// Boss 根据塔等级获取对应的Boss配置统一入口
func (s *TowerService) Boss(towerLevel uint32) *model.BaseTowerConfig {
// 构建基础查询条件
2026-02-14 23:14:43 +08:00
query := dbm_enable(s.Model).Where("tower_level = ?", towerLevel)
// 600塔专属的缓存配置
var config model.BaseTowerConfig
query.Cache(gdb.CacheOption{
// Duration: time.Hour, // 可根据需要开启缓存时长
Force: false,
}).Scan(&config)
return &config
}
// 兼容原有调用方式的快捷构造函数(可选,保证代码平滑迁移)
func NewTower110Service() *TowerService {
return NewTowerService(TowerType110)
}
func NewTower500Service() *TowerService {
return NewTowerService(TowerType500)
}
func NewTower600Service() *TowerService {
return NewTowerService(TowerType600)
}