2026-01-08 23:57:22 +08:00
|
|
|
|
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 // 标记当前服务对应的塔类型
|
2026-01-09 00:43:06 +08:00
|
|
|
|
tableName string // 存储当前塔类型对应的表名
|
2026-01-08 23:57:22 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// NewTowerService 创建指定类型的塔配置服务
|
|
|
|
|
|
func NewTowerService(towerType TowerType) *TowerService {
|
2026-01-09 00:43:06 +08:00
|
|
|
|
var tableName string
|
2026-01-08 23:57:22 +08:00
|
|
|
|
switch towerType {
|
|
|
|
|
|
case TowerType110:
|
2026-01-09 00:43:06 +08:00
|
|
|
|
tableName = model.TableNamedARKTowerConfig
|
2026-01-08 23:57:22 +08:00
|
|
|
|
case TowerType500:
|
2026-01-09 00:43:06 +08:00
|
|
|
|
tableName = model.TableNameTrialTowerConfig
|
2026-01-08 23:57:22 +08:00
|
|
|
|
case TowerType600:
|
2026-01-09 00:43:06 +08:00
|
|
|
|
tableName = model.TableNameBraveTowerConfig
|
2026-01-08 23:57:22 +08:00
|
|
|
|
default:
|
|
|
|
|
|
panic("unsupported tower type: " + string(rune(towerType))) // 非支持类型直接panic,也可返回error
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-09 00:43:06 +08:00
|
|
|
|
// 创建一个统一的模型,设置对应的表名
|
|
|
|
|
|
unifiedModel := &UnifiedTowerModel{
|
|
|
|
|
|
tableName: tableName,
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-08 23:57:22 +08:00
|
|
|
|
return &TowerService{
|
2026-01-09 00:43:06 +08:00
|
|
|
|
Service: &cool.Service{Model: unifiedModel},
|
2026-01-08 23:57:22 +08:00
|
|
|
|
towerType: towerType,
|
2026-01-09 00:43:06 +08:00
|
|
|
|
tableName: tableName,
|
2026-01-08 23:57:22 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-09 00:43:06 +08:00
|
|
|
|
// UnifiedTowerModel 统一的塔模型,通过设置不同的表名来区分不同类型的塔
|
|
|
|
|
|
type UnifiedTowerModel struct {
|
2026-02-01 00:39:36 +08:00
|
|
|
|
*cool.Model
|
|
|
|
|
|
tableName string
|
2026-01-09 00:43:06 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// TableName 返回当前模型对应的表名
|
|
|
|
|
|
func (m *UnifiedTowerModel) TableName() string {
|
|
|
|
|
|
return m.tableName
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// GroupName 返回模型所属组
|
|
|
|
|
|
func (m *UnifiedTowerModel) GroupName() string {
|
|
|
|
|
|
return "default"
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-08 23:57:22 +08:00
|
|
|
|
// 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)
|
2026-01-19 18:51:56 +08:00
|
|
|
|
|
|
|
|
|
|
// 600塔专属的缓存配置
|
|
|
|
|
|
var config model.BaseTowerConfig
|
|
|
|
|
|
query.Cache(gdb.CacheOption{
|
|
|
|
|
|
// Duration: time.Hour, // 可根据需要开启缓存时长
|
|
|
|
|
|
Force: false,
|
|
|
|
|
|
}).Scan(&config)
|
|
|
|
|
|
return &config
|
2026-01-08 23:57:22 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 兼容原有调用方式的快捷构造函数(可选,保证代码平滑迁移)
|
|
|
|
|
|
func NewTower110Service() *TowerService {
|
|
|
|
|
|
return NewTowerService(TowerType110)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func NewTower500Service() *TowerService {
|
|
|
|
|
|
return NewTowerService(TowerType500)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func NewTower600Service() *TowerService {
|
|
|
|
|
|
return NewTowerService(TowerType600)
|
2026-01-19 18:51:56 +08:00
|
|
|
|
}
|