```
All checks were successful
ci/woodpecker/push/my-first-workflow Pipeline was successful

refactor(config): 移除怪物刷新相关代码并优化地图坑位配置

移除 modules/config/controller/admin/monster_refresh.go 中的
TaskInfoController 及其相关路由注册逻辑

移除 modules/config/model/map_monster.go 中的 MonsterRefresh
模型定义及相关常量、方法

重构 modules/config/model/map_pit.go 中的 MapPit 结
This commit is contained in:
昔念
2026-02-24 14:11:01 +08:00
parent 41714fca0b
commit 0a2ec3af08
4 changed files with 84 additions and 165 deletions

View File

@@ -1,22 +0,0 @@
package admin
import (
"blazing/cool"
"blazing/modules/config/service"
)
type TaskInfoController struct {
*cool.Controller
}
func init() {
var task_info_controller = &TaskInfoController{
&cool.Controller{
Prefix: "/admin/monster/refresh",
Api: []string{"Add", "Delete", "Update", "Info", "List", "Page"},
Service: service.NewMonsterService(),
},
}
// 注册路由
cool.RegisterController(task_info_controller)
}

View File

@@ -1,56 +0,0 @@
package model
import (
"blazing/cool"
)
const (
TableNameMonsterRefresh = "config_monster_refresh" // 怪物刷新规则表(地图-精灵等级-刷新脚本配置)
)
// MonsterRefresh 怪物刷新规则模型(对应前端配置的地图/精灵/等级/脚本配置)
type MonsterRefresh struct {
*BaseConfig
MapID int32 `gorm:"not null;comment:'地图ID'" json:"map_id"`
PitID1 []int32 `gorm:"type:int[];not null;comment:'坑位1绑定的坑位ID列表多绑循环刷'" json:"pit_id_1"`
PitID2 []int32 `gorm:"type:int[];not null;comment:'坑位2绑定的坑位ID列表多绑循环刷'" json:"pit_id_2"`
PitID3 []int32 `gorm:"type:int[];not null;comment:'坑位3绑定的坑位ID列表多绑循环刷'" json:"pit_id_3"`
PitID4 []int32 `gorm:"type:int[];not null;comment:'坑位4绑定的坑位ID列表多绑循环刷'" json:"pit_id_4"`
PitID5 []int32 `gorm:"type:int[];not null;comment:'坑位5绑定的坑位ID列表多绑循环刷'" json:"pit_id_5"`
PitID6 []int32 `gorm:"type:int[];not null;comment:'坑位6绑定的坑位ID列表多绑循环刷'" json:"pit_id_6"`
PitID7 []int32 `gorm:"type:int[];not null;comment:'坑位7绑定的坑位ID列表多绑循环刷'" json:"pit_id_7"`
PitID8 []int32 `gorm:"type:int[];not null;comment:'坑位8绑定的坑位ID列表多绑循环刷'" json:"pit_id_8"`
PitID9 []int32 `gorm:"type:int[];not null;comment:'坑位9绑定的坑位ID列表多绑循环刷'" json:"pit_id_9"`
}
type MonsterRefreshEX struct {
MonsterRefresh
MonsterID []uint32 `json:"monster_id"`
ShinyID []uint32 `json:"shiny_id"`
// 扩展便于批量处理9个坑位
PitIDs [9][]uint32 `json:"pit_ids"` // 整合所有坑位ID前端/业务层批量处理用
}
// TableName 指定MonsterRefresh对应的数据库表名
func (*MonsterRefresh) TableName() string {
return TableNameMonsterRefresh
}
// GroupName 指定表所属的分组(保持和参考示例一致)
func (*MonsterRefresh) GroupName() string {
return "default"
}
// NewMonsterRefresh 创建一个新的MonsterRefresh实例初始化通用Model
func NewMonsterRefresh() *MonsterRefresh {
return &MonsterRefresh{
BaseConfig: NewBaseConfig(),
}
}
// init 初始化表结构(程序启动时自动创建/同步表)
func init() {
cool.CreateTable(&MonsterRefresh{})
}

View File

@@ -21,13 +21,13 @@ type Event struct {
// MapPit 地图坑位核心配置模型参照MonsterRefresh实现风格 // MapPit 地图坑位核心配置模型参照MonsterRefresh实现风格
type MapPit struct { type MapPit struct {
*cool.Model // 保留通用ModelID/创建时间/更新时间等) *BaseConfig
Remark string `gorm:"type:varchar(255);default:'';comment:'性别配置备注(如:默认性别规则)'" json:"remark"` // 调整注释 // 复用通用基础配置ID/创建时间/更新时间等)
MapID []int32 `gorm:"type:int[];comment:'绑定地图地图ID'" json:"map_id"`
*Event *Event
// 复用通用基础配置ID/创建时间/更新时间等)
MapID []int32 `gorm:"type:int[];comment:'绑定地图地图ID'" json:"map_id"`
RefreshID []int `gorm:"type:int[];comment:'精灵ID列表'" json:"refresh_id"` RefreshID []int `gorm:"type:int[];comment:'精灵ID列表'" json:"refresh_id"`
Pos []int `gorm:"type:int[];comment:'坑位位置'" json:"pos"`
//最小等级 //最小等级
MinLevel int `gorm:"type:int;default:0;comment:'最小等级'" json:"min_level"` MinLevel int `gorm:"type:int;default:0;comment:'最小等级'" json:"min_level"`
//最大等级 //最大等级
@@ -49,8 +49,8 @@ func (*MapPit) GroupName() string {
// NewMapPit 创建一个新的MapPit实例初始化通用BaseConfig // NewMapPit 创建一个新的MapPit实例初始化通用BaseConfig
func NewMapPit() *MapPit { func NewMapPit() *MapPit {
return &MapPit{ return &MapPit{
Model: cool.NewModel(), BaseConfig: NewBaseConfig(),
Event: &Event{}, Event: &Event{},
} }
} }

View File

@@ -1,98 +1,95 @@
package service package service
import ( // import (
"blazing/cool" // "blazing/cool"
"blazing/modules/config/model" // "blazing/modules/config/model"
"fmt" // "fmt"
"strconv" // "strconv"
"time" // "time"
"github.com/dop251/goja" // "github.com/dop251/goja"
"github.com/gogf/gf/v2/database/gdb" // "github.com/gogf/gf/v2/database/gdb"
"github.com/gogf/gf/v2/frame/g" // "github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/util/gconv" // "github.com/gogf/gf/v2/util/gconv"
) // )
type MonsterService struct { // type MonsterService struct {
*cool.Service // *cool.Service
} // }
func NewMonsterService() *MonsterService { // func NewMonsterService() *MonsterService {
return &MonsterService{ // return &MonsterService{
&cool.Service{ // &cool.Service{
Model: model.NewMonsterRefresh(), // Model: model.NewMonsterRefresh(),
}, // },
} // }
} // }
func (s *MonsterService) ModifyAfter(ctx g.Ctx, method string, param g.MapStrAny) (err error) { // func (s *MonsterService) ModifyAfter(ctx g.Ctx, method string, param g.MapStrAny) (err error) {
gconv.String(param["map_id"]) // gconv.String(param["map_id"])
cool.DBM(s.Model).Cache((gdb.CacheOption{ // cool.DBM(s.Model).Cache((gdb.CacheOption{
Duration: -1, // Duration: -1,
Name: model.TableNameMonsterRefresh + gconv.String(param["map_id"]), // Name: model.TableNameMonsterRefresh + gconv.String(param["map_id"]),
Force: false, // Force: false,
})) // }))
return nil // return nil
} // }
func (s *MonsterService) GetId(mapid uint32) []model.MonsterRefresh { // func (s *MonsterService) GetId(mapid uint32) []model.MonsterRefresh {
m := cool.DBM(s.Model).Where("map_id", mapid).Cache( // m := cool.DBM(s.Model).Where("map_id", mapid).Cache(
gdb.CacheOption{ // gdb.CacheOption{
Duration: time.Hour, // Duration: time.Hour,
Name: model.TableNameMonsterRefresh + strconv.Itoa(int(mapid)), // Name: model.TableNameMonsterRefresh + strconv.Itoa(int(mapid)),
Force: false, // Force: false,
}, // },
) // )
var tt []model.MonsterRefresh // var tt []model.MonsterRefresh
m.Scan(&tt) // m.Scan(&tt)
// for _, v := range tt { // // for _, v := range tt {
// if v.MapID == int32(mapid) { // // if v.MapID == int32(mapid) {
// return uint32(v.MonsterID) // // return uint32(v.MonsterID)
// } // // }
// } // // }
return tt // return tt
} // }
func Test_kick() { // func Test_kick() {
const SCRIPT = ` // const SCRIPT = `
function shouldRefresh(userId, day, dayOfWeek, hour, minute) { // function shouldRefresh(userId, day, dayOfWeek, hour, minute) {
return true; // return true;
// }
// `
// t, _ := goja.Compile("test.js", SCRIPT, false)
// vm := goja.New()
// _, err := vm.RunProgram(t)
// if err != nil {
// panic(err)
// }
// sum, ok := goja.AssertFunction(vm.Get("shouldRefresh"))
// if !ok {
// panic("Not a function")
// }
// res, err := sum(
// goja.Undefined(),
} // vm.ToValue(1),
` // vm.ToValue(time.Now().Day()),
t, _ := goja.Compile("test.js", SCRIPT, false) // vm.ToValue(time.Now().Weekday()),
vm := goja.New() // vm.ToValue(time.Now().Hour()),
_, err := vm.RunProgram(t) // vm.ToValue(time.Now().Minute()),
if err != nil { // )
panic(err) // if err != nil {
} // panic(err)
sum, ok := goja.AssertFunction(vm.Get("shouldRefresh")) // }
if !ok { // fmt.Println(res)
panic("Not a function") // // Output: 42
} // }
res, err := sum(
goja.Undefined(),
vm.ToValue(1),
vm.ToValue(time.Now().Day()),
vm.ToValue(time.Now().Weekday()),
vm.ToValue(time.Now().Hour()),
vm.ToValue(time.Now().Minute()),
)
if err != nil {
panic(err)
}
fmt.Println(res)
// Output: 42
}