diff --git a/.gitignore b/.gitignore index 241e06a4b..8990de4e5 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,6 @@ login/login_linux_amd64 logic/logic .gitignore public/logic +logic/logic2 +login/login +login/login diff --git a/common/cool/service.go b/common/cool/service.go index 8033cbef7..9bd2944b9 100644 --- a/common/cool/service.go +++ b/common/cool/service.go @@ -169,7 +169,7 @@ func (s *Service) ServiceList(ctx context.Context, req *ListReq) (data interface // 如果 req.Order 和 req.Sort 均不为空 则添加排序 if !r.Get("order").IsEmpty() && !r.Get("sort").IsEmpty() { m.Order(r.Get("order").String() + " " + r.Get("sort").String()) - // m.OrderDesc("orderNum") + // m.OrderDesc("ordernum") } // 如果 ListQueryOp 不为空 则使用 ListQueryOp 进行查询 if s.ListQueryOp != nil { diff --git a/common/socket/ServerEvent.go b/common/socket/ServerEvent.go index 5008f7756..2df93f6bf 100644 --- a/common/socket/ServerEvent.go +++ b/common/socket/ServerEvent.go @@ -56,12 +56,14 @@ func (s *Server) OnClose(c gnet.Conn, _ error) (action gnet.Action) { s.workerPool.Submit(func() { //TODO 这里可能存在顺序执行问题,待修复 if v.Player != nil { - //cool.Loger.Info(context.TODO(), "准备保存", v.Player.Info.UserID) - v.Player.Save() //保存玩家数据 - //cool.Loger.Info(context.TODO(), "保存完成", v.Player.Info.UserID) - if v.CloseChan != nil { - close(v.CloseChan) - } + v.SaveL.Do(func() { //使用保存锁,确保在踢人和掉线的时候只保存一次 + //cool.Loger.Info(context.TODO(), "准备保存", v.Player.Info.UserID) + v.Player.Save() //保存玩家数据 + //cool.Loger.Info(context.TODO(), "保存完成", v.Player.Info.UserID) + if v.CloseChan != nil { + close(v.CloseChan) + } + }) } @@ -148,7 +150,7 @@ func (s *Server) OnTraffic(c gnet.Conn) (action gnet.Action) { for _, msg := range messages { t := c.Context().(*player.ClientData) //client := conn.RemoteAddr().String() - err = s.workerPool.Submit(func() { //TODO 这里可能存在顺序执行问题,待修复 + s.workerPool.Submit(func() { //TODO 这里可能存在顺序执行问题,待修复 t.OnEvent(msg.Payload) }) diff --git a/logic/controller/fight.go b/logic/controller/fight.go index 5170662c3..0d0909daa 100644 --- a/logic/controller/fight.go +++ b/logic/controller/fight.go @@ -14,8 +14,8 @@ import ( // 挑战地图boss func (h Controller) PlayerFightBoss(data *fight.ChallengeBossInboundInfo, c *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) { - if c.FightC != nil { - return nil, errorcode.ErrorCodes.ErrOnlineOver6HoursCannotFight + if !c.CanFight() { + return nil, errorcode.ErrorCodes.ErrPokemonNotEligible } var petid int @@ -49,6 +49,9 @@ func (h Controller) PlayerFightBoss(data *fight.ChallengeBossInboundInfo, c *pla if !ok { return nil, errorcode.ErrorCodes.ErrPokemonNotExists } + if len(mdata.Bosses) == 0 { + return nil, errorcode.ErrorCodes.ErrPokemonNotExists + } for _, bc := range mdata.Bosses { if bc.Id == nil { return nil, errorcode.ErrorCodes.ErrPokemonNotExists @@ -85,7 +88,9 @@ func (h Controller) PlayerFightBoss(data *fight.ChallengeBossInboundInfo, c *pla // 战斗野怪 func (h Controller) OnPlayerFightNpcMonster(data *fight.FightNpcMonsterInboundInfo, c *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) { - + if !c.CanFight() { + return nil, errorcode.ErrorCodes.ErrPokemonNotEligible + } refpet := c.OgreInfo.Data[data.Number] if refpet.Id == 0 { @@ -120,7 +125,9 @@ func (h Controller) OnReadyToFight(data *fight.ReadyToFightInboundInfo, c *playe // 接收战斗或者取消战斗的包 func (h Controller) OnPlayerHandleFightInvite(data *fight.HandleFightInviteInboundInfo, c *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) { - + if !c.CanFight() { + return nil, errorcode.ErrorCodes.ErrPokemonNotEligible + } if ok, p1 := c.AgreeBattle(data.UserID, data.Flag, data.Mode); ok { fight.NewFight(data.Mode, info.BattleStatus.FIGHT_WITH_PLAYER, c, p1) ///开始对战,房主方以及被邀请方 } @@ -129,14 +136,28 @@ func (h Controller) OnPlayerHandleFightInvite(data *fight.HandleFightInviteInbou // 邀请其他人进行战斗 func (h Controller) OnPlayerInviteOtherFight(data *fight.InviteToFightInboundInfo, c *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) { + if !c.CanFight() { + return nil, errorcode.ErrorCodes.ErrPokemonNotEligible + } + c.InvitePlayerToBattle(&info.PVPinfo{PlayerID: data.UserID, Mode: data.Mode}) return nil, 0 } +// 取消和他人战斗 +func (h Controller) OnPlayerCanceledOtherInviteFight(data *fight.InviteFightCancelInboundInfo, c *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) { + c.CancelBattle() + + return nil, 0 +} + // 使用技能包 func (h Controller) UseSkill(data *fight.UseSkillInInfo, c *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) { - c.FightC.UseSkill(c, int32(data.SkillId)) + if c.FightC != nil { + c.FightC.UseSkill(c, int32(data.SkillId)) + } + return nil, 0 } diff --git a/logic/controller/login.go b/logic/controller/login.go index 7062a4f45..2d19867f3 100644 --- a/logic/controller/login.go +++ b/logic/controller/login.go @@ -35,77 +35,80 @@ func IsToday(t time.Time) bool { // 处理命令: 1001 func (h *Controller) Login(data *user.MAIN_LOGIN_IN, c gnet.Conn) (result *user.LoginMSInfo, err errorcode.ErrorCode) { //这个时候player应该是空的 - - if tt := data.CheakSession(); tt { //说明sid正确 - cool.Loger.Info(context.TODO(), "准备踢人") - err := h.RPCClient.Kick(data.Head.UserID) //先踢人 - if err != nil { - fmt.Println("踢人失败", err) - } - //player.KickPlayer(data.Head.UserID) - cool.Loger.Info(context.TODO(), "踢人请求完成,继续登录流程") - - // <-time.After(time.Millisecond * 3000) - share.ShareManager.SetUserOnline(data.Head.UserID, h.Port) //设置用户登录服务器 - t := player.GetPlayer(c, data.Head.UserID) - t.Service = blservice.NewUserService(data.Head.UserID) - t.Info = t.Service.Person(data.Head.UserID) - t.Info.UserID = data.Head.UserID - t.Onlinetime = uint32(time.Now().Unix()) //保存时间戳 - t.Changemap = true - cool.Loger.Info(context.Background(), "用户上次重置日期", t.Info.LastResetTime.String()) - if !IsToday(t.Info.LastResetTime) { //判断是否是今天 - t.Info.LastResetTime = gtime.Now().Time - //每天login时候检查重置时间,然后把电池,任务,挖矿重置 - //挖矿需要单独存,因为防止多开挖矿 - t.Info.TimeToday = 0 //重置电池 - - for i := 400; i < 500; i++ { //每日任务区段 - - tttL, ok := xmlres.TaskMap[i] - if ok { - if tttL.Type == 1 { //日常任务 - t.Info.TaskList[i-1] = 0 //重置每日任务 - - } - } - - } - for i := 0; i < 50; i++ { //每日任务区段 - t.Info.DailyResArr[i] = 0 //重置每日任务 - - } - go t.Service.Talk(func(m map[uint32]uint32) bool { //挖矿 - m = map[uint32]uint32{} - return true - }) - - } - - t.CompleteLogin() //通知客户端登录成功 - - result = user.NewOutInfo() //设置登录消息 - - result.PlayerInfo = *t.Info - - defer func() { - tt := maps.NewOutInfo() - copier.CopyWithOption(tt, t.Info, copier.Option{DeepCopy: true}) - //copier.Copy(t.Info, tt) - t1 := player.NewTomeeHeader(2001, t.Info.UserID) - - space.GetSpace(t.Info.MapID).User.IterCb(func(playerID uint32, player common.PlayerI) { - player.SendPack(t1.Pack(tt)) - - }) - space.GetSpace(t.Info.MapID).User.Set(t.Info.UserID, t) - }() - - return result, 0 - - } else { + tt := data.CheakSession() + if !tt { err = errorcode.ErrorCodes.ErrLoginServerError + return + } + + cool.Loger.Info(context.TODO(), "准备踢人") + err1 := h.RPCClient.Kick(data.Head.UserID) //先踢人 + if err1 != nil { + fmt.Println("踢人失败", err) + } + //player.KickPlayer(data.Head.UserID) + cool.Loger.Info(context.TODO(), "踢人请求完成,继续登录流程") + + // <-time.After(time.Millisecond * 3000) + share.ShareManager.SetUserOnline(data.Head.UserID, h.Port) //设置用户登录服务器 + t := player.GetPlayer(c, data.Head.UserID) + t.Service = blservice.NewUserService(data.Head.UserID) + t.Info = t.Service.Person(data.Head.UserID) + if t.Info == nil { + err = errorcode.ErrorCodes.ErrLoginServerError + return + } + t.Info.UserID = data.Head.UserID + t.Onlinetime = uint32(time.Now().Unix()) //保存时间戳 + t.Changemap = true + cool.Loger.Info(context.Background(), "用户上次重置日期", t.Info.LastResetTime.String()) + if !IsToday(t.Info.LastResetTime) { //判断是否是今天 + t.Info.LastResetTime = gtime.Now().Time + //每天login时候检查重置时间,然后把电池,任务,挖矿重置 + //挖矿需要单独存,因为防止多开挖矿 + t.Info.TimeToday = 0 //重置电池 + + for i := 400; i < 500; i++ { //每日任务区段 + + tttL, ok := xmlres.TaskMap[i] + if ok { + if tttL.Type == 1 { //日常任务 + t.Info.TaskList[i-1] = 0 //重置每日任务 + + } + } + + } + for i := 0; i < 50; i++ { //每日任务区段 + t.Info.DailyResArr[i] = 0 //重置每日任务 + + } + defer t.Service.Talk(func(m map[uint32]uint32) bool { //挖矿 + m = map[uint32]uint32{} + return true + }) } - return + + t.CompleteLogin() //通知客户端登录成功 + + result = user.NewOutInfo() //设置登录消息 + + result.PlayerInfo = *t.Info + + defer func() { + tt := maps.NewOutInfo() + copier.CopyWithOption(tt, t.Info, copier.Option{DeepCopy: true}) + //copier.Copy(t.Info, tt) + t1 := player.NewTomeeHeader(2001, t.Info.UserID) + + space.GetSpace(t.Info.MapID).User.IterCb(func(playerID uint32, player common.PlayerI) { + player.SendPack(t1.Pack(tt)) + + }) + space.GetSpace(t.Info.MapID).User.Set(t.Info.UserID, t) + }() + + return result, 0 + } diff --git a/logic/service/fight/cmd.go b/logic/service/fight/cmd.go index 580f28f27..0d18c6d89 100644 --- a/logic/service/fight/cmd.go +++ b/logic/service/fight/cmd.go @@ -48,6 +48,9 @@ type InviteToFightInboundInfo struct { Mode info.EnumBattleMode `codec:"true"` } +type InviteFightCancelInboundInfo struct { + Head player.TomeeHeader `cmd:"2402" struc:"[0]pad"` +} // 2502的回复包 PVP邀请消息 type NoteHandleFightInviteOutboundInfo struct { diff --git a/logic/service/fight/fightc.go b/logic/service/fight/fightc.go index 31de70da7..e3ddf538d 100644 --- a/logic/service/fight/fightc.go +++ b/logic/service/fight/fightc.go @@ -522,6 +522,8 @@ func (f *FightC) enterturn(fattack, sattack *action.SelectSkillAction) { f.First, f.Second = f.Opp, f.Our // 攻击方为对方时,主攻击方是对方 } + } else { + f.First, f.Second = f.Our, f.Opp } f.First.InitAttackValue() diff --git a/logic/service/maps/walk.go b/logic/service/maps/walk.go index 80482dc96..01a44a508 100644 --- a/logic/service/maps/walk.go +++ b/logic/service/maps/walk.go @@ -17,7 +17,7 @@ type WalkInInfo struct { Point model.Pos `fieldDesc:"直接给坐标x,y"` PathLen uint32 `struc:"sizeof=Path" ` - Path string `struc:"[2]byte"` + Path string } func (t *WalkInInfo) Broadcast(mapid uint32, o WalkOutInfo) { @@ -42,5 +42,5 @@ type WalkOutInfo struct { Point model.Pos `fieldDesc:"直接给坐标x,y"` PathLen uint32 `struc:"sizeof=Path" ` - Path string `struc:"[2]byte"` + Path string } diff --git a/logic/service/player/SocketHandler_Tomee.go b/logic/service/player/SocketHandler_Tomee.go index 16da83c39..b3d48b6a8 100644 --- a/logic/service/player/SocketHandler_Tomee.go +++ b/logic/service/player/SocketHandler_Tomee.go @@ -152,7 +152,7 @@ func (h *ClientData) Recv(data TomeeHeader) { nameField.Set(reflect.ValueOf(data)) } - if data.CMD > 1000 { //if cmdlister.Type().In(1) == reflect.TypeOf(&Player{}) { + if data.CMD > 1001 { //if cmdlister.Type().In(1) == reflect.TypeOf(&Player{}) { //t := GetPlayer(c, data.UserID) // fmt.Println(data.CMD, "接收 变量的地址 ", &t.Info, t.Info.UserID) diff --git a/logic/service/player/fight.go b/logic/service/player/fight.go index 20913fa36..0470caa6a 100644 --- a/logic/service/player/fight.go +++ b/logic/service/player/fight.go @@ -51,17 +51,7 @@ func (lw *Player) CancelBattle() { lw.PVPinfo = nil } -func (lw *Player) CanBattle() bool { - for _, v := range lw.Info.PetList { - if v.Hp > 0 { - return true - - } - - } - return false -} func (p *Player) SendLoadPercent(b info.LoadPercentOutboundInfo) { t1 := NewTomeeHeader(2441, p.Info.UserID) @@ -98,7 +88,7 @@ func (lw *Player) AgreeBattle(userid, flag uint32, mode info.EnumBattleMode) (bo return false, nil } if v.Info.UserID == userid && v.PVPinfo.Mode == mode { //成功找到,同意对战 - if lw.CanBattle() { + if lw.CanFight() { ret.Result = 1 v.SendPack(t1.Pack(ret)) diff --git a/logic/service/player/player.go b/logic/service/player/player.go index 7dbf81159..31a55d14a 100644 --- a/logic/service/player/player.go +++ b/logic/service/player/player.go @@ -83,6 +83,19 @@ func WithConn(c gnet.Conn) PlayerOption { func (p *Player) GetAction() { +} +func (p *Player) CanFight() bool { + if p.FightC != nil { + return false + } + for _, v := range p.Info.PetList { + if v.Hp > 0 { // 只要找到一个血量大于0的宠物,就可以战斗 + return true + } + } + // 遍历完所有宠物,都没有血量大于0的,才不能战斗 + return false + } // 刷怪具体实现 diff --git a/logic/service/player/wscodec.go b/logic/service/player/wscodec.go index 71a0f692b..ca39e8faf 100644 --- a/logic/service/player/wscodec.go +++ b/logic/service/player/wscodec.go @@ -201,6 +201,7 @@ type ClientData struct { ERROR_CONNUT int Wsmsg *WsCodec Conn gnet.Conn + SaveL sync.Once //保存锁 CloseChan chan struct{} } @@ -231,16 +232,17 @@ func (h *ClientData) OnEvent(v []byte) { header.Result, _ = tempdata.ReadUInt32() header.Data = tempdata.BytesAvailable() - if header.CMD > 1000 { + if header.CMD > 1001 { if h.Conn.Context().(*ClientData).Player == nil { - cool.Loger.Error(context.TODO(), "player is nil") + cool.Loger.Error(context.TODO(), header.UserID, "账号未注册") return } if h.Conn.Context().(*ClientData).Player.Info == nil { - cool.Loger.Error(context.TODO(), "player info is nil") + cool.Loger.Error(context.TODO(), header.UserID, "未创建角色") return } } + cool.Loger.Debug(context.TODO(), "接收数据", header.UserID, header.CMD) h.Recv(header) - //fmt.Println("接收封包", header) + } diff --git a/login/internal/cmd/cmd.go b/login/internal/cmd/cmd.go index aa6b77b45..666fb3c15 100644 --- a/login/internal/cmd/cmd.go +++ b/login/internal/cmd/cmd.go @@ -57,7 +57,10 @@ func beforeServeHook(r *ghttp.Request) { // Limiter is a middleware that implements rate limiting for all HTTP requests. // It returns HTTP 429 (Too Many Requests) when the rate limit is exceeded. func Limiter(r *ghttp.Request) { - rateLimiter := limiter.Get(r.GetClientIp(), rate.Limit(10), 2) + // 3. 为任意键 "some-key" 获取一个速率限制器 + // - rate.Limit(2): 表示速率为 "每秒2个请求" + // - 2: 表示桶的容量 (Burst),允许瞬时处理2个请求 + rateLimiter := limiter.Get(r.GetClientIp(), rate.Limit(10), 5) if !rateLimiter.Allow() { r.Response.WriteStatusExit(429) // Return 429 Too Many Requests diff --git a/login/login b/login/login index 8ff862cd1..15f66a4b2 100644 Binary files a/login/login and b/login/login differ diff --git a/modules/base/model/base_sys_department.go b/modules/base/model/base_sys_department.go index fdf573136..8fbf9a40c 100644 --- a/modules/base/model/base_sys_department.go +++ b/modules/base/model/base_sys_department.go @@ -9,7 +9,7 @@ type BaseSysDepartment struct { *cool.Model Name string `gorm:"column:name;type:varchar(255);not null" json:"name"` // 部门名称 ParentID uint `gorm:"column:parentId;type:bigint" json:"parentId"` // 上级部门ID - OrderNum int32 `gorm:"column:orderNum;type:int;not null" json:"orderNum"` // 排序 + ordernum int32 `gorm:"column:ordernum;type:int;not null" json:"ordernum"` // 排序 } // TableName BaseSysDepartment's table name diff --git a/modules/base/model/base_sys_menu.go b/modules/base/model/base_sys_menu.go index 46bc1aff8..476096bc3 100644 --- a/modules/base/model/base_sys_menu.go +++ b/modules/base/model/base_sys_menu.go @@ -13,7 +13,7 @@ type BaseSysMenu struct { Perms *string `gorm:"column:perms;type:text" json:"perms"` // 权限标识 Type int32 `gorm:"column:type;not null" json:"type"` // 类型 0:目录 1:菜单 2:按钮 Icon *string `gorm:"column:icon;type:varchar(255)" json:"icon"` // 图标 - OrderNum int32 `gorm:"column:orderNum;type:int;not null;default:0" json:"orderNum"` // 排序 + ordernum int32 `gorm:"column:ordernum;type:int;not null;default:0" json:"ordernum"` // 排序 ViewPath *string `gorm:"column:viewPath;type:varchar(255)" json:"viewPath"` // 视图地址 KeepAlive bool `gorm:"column:keepAlive;not null;default:1" json:"keepAlive"` // 路由缓存 IsShow bool `gorm:"column:isShow;not null;default:1" json:"isShow"` // 是否显示 diff --git a/modules/base/model/base_sys_role.go b/modules/base/model/base_sys_role.go index ffabf882b..0bb816e2a 100644 --- a/modules/base/model/base_sys_role.go +++ b/modules/base/model/base_sys_role.go @@ -7,7 +7,7 @@ const TableNameBaseSysRole = "base_sys_role" // BaseSysRole mapped from table type BaseSysRole struct { *cool.Model - UserID string `gorm:"column:userId;type:varchar(255);not null" json:"userId"` // 用户ID + UserID string `gorm:"column:userid;type:varchar(255);not null" json:"userid"` // 用户ID Name string `gorm:"column:name;type:varchar(255);not null;index:IDX_469d49a5998170e9550cf113da,priority:1" json:"name"` // 名称 Label *string `gorm:"column:label;type:varchar(50);index:IDX_f3f24fbbccf00192b076e549a7,priority:1" json:"label"` // 角色标签 Remark *string `gorm:"column:remark;type:varchar(255)" json:"remark"` // 备注 diff --git a/modules/base/resource/initjson/base_sys_department.json b/modules/base/resource/initjson/base_sys_department.json index 3cb9ad95e..0df69435a 100644 --- a/modules/base/resource/initjson/base_sys_department.json +++ b/modules/base/resource/initjson/base_sys_department.json @@ -6,7 +6,7 @@ "deleted_at": null, "name": "SUN", "parentId": null, - "orderNum": 0 + "ordernum": 0 }, { "id": 11, @@ -15,7 +15,7 @@ "deleted_at": null, "name": "开发", "parentId": 1, - "orderNum": 0 + "ordernum": 0 }, { "id": 12, @@ -24,7 +24,7 @@ "deleted_at": null, "name": "测试", "parentId": 1, - "orderNum": 0 + "ordernum": 0 }, { "id": 13, @@ -33,6 +33,6 @@ "deleted_at": null, "name": "游客", "parentId": 1, - "orderNum": 0 + "ordernum": 0 } ] \ No newline at end of file diff --git a/modules/base/resource/initjson/base_sys_menu.json b/modules/base/resource/initjson/base_sys_menu.json index 171c21735..3088a229f 100644 --- a/modules/base/resource/initjson/base_sys_menu.json +++ b/modules/base/resource/initjson/base_sys_menu.json @@ -10,7 +10,7 @@ "perms": null, "type": 0, "icon": "icon-workbench", - "orderNum": 1, + "ordernum": 1, "viewPath": null, "keepAlive": true, "isShow": true @@ -26,7 +26,7 @@ "perms": null, "type": 0, "icon": "icon-system", - "orderNum": 2, + "ordernum": 2, "viewPath": null, "keepAlive": true, "isShow": true @@ -42,7 +42,7 @@ "perms": null, "type": 1, "icon": "icon-menu", - "orderNum": 2, + "ordernum": 2, "viewPath": "cool/modules/base/views/menu.vue", "keepAlive": true, "isShow": true @@ -58,7 +58,7 @@ "perms": "base:sys:menu:add", "type": 2, "icon": null, - "orderNum": 1, + "ordernum": 1, "viewPath": null, "keepAlive": false, "isShow": true @@ -74,7 +74,7 @@ "perms": "base:sys:menu:delete", "type": 2, "icon": null, - "orderNum": 2, + "ordernum": 2, "viewPath": null, "keepAlive": false, "isShow": true @@ -90,7 +90,7 @@ "perms": "base:sys:menu:update", "type": 2, "icon": null, - "orderNum": 3, + "ordernum": 3, "viewPath": null, "keepAlive": false, "isShow": true @@ -106,7 +106,7 @@ "perms": "base:sys:menu:page,base:sys:menu:list,base:sys:menu:info", "type": 2, "icon": null, - "orderNum": 4, + "ordernum": 4, "viewPath": null, "keepAlive": false, "isShow": true @@ -122,7 +122,7 @@ "perms": null, "type": 1, "icon": "icon-common", - "orderNum": 3, + "ordernum": 3, "viewPath": "cool/modules/base/views/role.vue", "keepAlive": true, "isShow": true @@ -138,7 +138,7 @@ "perms": "base:sys:role:add", "type": 2, "icon": null, - "orderNum": 1, + "ordernum": 1, "viewPath": null, "keepAlive": false, "isShow": true @@ -154,7 +154,7 @@ "perms": "base:sys:role:delete", "type": 2, "icon": null, - "orderNum": 2, + "ordernum": 2, "viewPath": null, "keepAlive": false, "isShow": true @@ -170,7 +170,7 @@ "perms": "base:sys:role:update", "type": 2, "icon": null, - "orderNum": 3, + "ordernum": 3, "viewPath": null, "keepAlive": false, "isShow": true @@ -186,7 +186,7 @@ "perms": "base:sys:role:page,base:sys:role:list,base:sys:role:info", "type": 2, "icon": null, - "orderNum": 4, + "ordernum": 4, "viewPath": null, "keepAlive": false, "isShow": true @@ -202,7 +202,7 @@ "perms": null, "type": 0, "icon": "icon-auth", - "orderNum": 1, + "ordernum": 1, "viewPath": null, "keepAlive": false, "isShow": true @@ -218,7 +218,7 @@ "perms": null, "type": 1, "icon": "icon-log", - "orderNum": 1, + "ordernum": 1, "viewPath": "cool/modules/base/views/log.vue", "keepAlive": true, "isShow": true @@ -234,7 +234,7 @@ "perms": "base:sys:log:page,base:sys:log:clear,base:sys:log:getKeep,base:sys:log:setKeep", "type": 2, "icon": null, - "orderNum": 1, + "ordernum": 1, "viewPath": null, "keepAlive": false, "isShow": true @@ -250,7 +250,7 @@ "perms": null, "type": 1, "icon": "icon-favor", - "orderNum": 1, + "ordernum": 1, "viewPath": "cool/modules/demo/views/crud.vue", "keepAlive": true, "isShow": true @@ -266,7 +266,7 @@ "perms": null, "type": 0, "icon": "icon-common", - "orderNum": 2, + "ordernum": 2, "viewPath": null, "keepAlive": true, "isShow": true @@ -282,7 +282,7 @@ "perms": null, "type": 1, "icon": "icon-log", - "orderNum": 0, + "ordernum": 0, "viewPath": "https://cool-js.com", "keepAlive": true, "isShow": true @@ -298,7 +298,7 @@ "perms": null, "type": 1, "icon": "icon-favor", - "orderNum": 2, + "ordernum": 2, "viewPath": "cool/modules/demo/views/editor-quill.vue", "keepAlive": true, "isShow": true @@ -314,7 +314,7 @@ "perms": "base:sys:department:list", "type": 2, "icon": null, - "orderNum": 0, + "ordernum": 0, "viewPath": null, "keepAlive": true, "isShow": true @@ -330,7 +330,7 @@ "perms": "base:sys:department:add", "type": 2, "icon": null, - "orderNum": 0, + "ordernum": 0, "viewPath": null, "keepAlive": true, "isShow": true @@ -346,7 +346,7 @@ "perms": "base:sys:department:update", "type": 2, "icon": null, - "orderNum": 0, + "ordernum": 0, "viewPath": null, "keepAlive": true, "isShow": true @@ -362,7 +362,7 @@ "perms": "base:sys:department:delete", "type": 2, "icon": null, - "orderNum": 0, + "ordernum": 0, "viewPath": null, "keepAlive": true, "isShow": true @@ -378,7 +378,7 @@ "perms": "base:sys:department:order", "type": 2, "icon": null, - "orderNum": 0, + "ordernum": 0, "viewPath": null, "keepAlive": true, "isShow": true @@ -394,7 +394,7 @@ "perms": "base:sys:user:move", "type": 2, "icon": null, - "orderNum": 0, + "ordernum": 0, "viewPath": null, "keepAlive": true, "isShow": true @@ -410,7 +410,7 @@ "perms": null, "type": 0, "icon": "icon-common", - "orderNum": 4, + "ordernum": 4, "viewPath": null, "keepAlive": true, "isShow": true @@ -426,7 +426,7 @@ "perms": null, "type": 1, "icon": "icon-menu", - "orderNum": 0, + "ordernum": 0, "viewPath": "cool/modules/base/views/param.vue", "keepAlive": true, "isShow": true @@ -442,7 +442,7 @@ "perms": "base:sys:param:add", "type": 2, "icon": null, - "orderNum": 0, + "ordernum": 0, "viewPath": null, "keepAlive": true, "isShow": true @@ -458,7 +458,7 @@ "perms": "base:sys:param:info,base:sys:param:update", "type": 2, "icon": null, - "orderNum": 0, + "ordernum": 0, "viewPath": null, "keepAlive": true, "isShow": true @@ -474,7 +474,7 @@ "perms": "base:sys:param:delete", "type": 2, "icon": null, - "orderNum": 0, + "ordernum": 0, "viewPath": null, "keepAlive": true, "isShow": true @@ -490,7 +490,7 @@ "perms": "base:sys:param:page,base:sys:param:list,base:sys:param:info", "type": 2, "icon": null, - "orderNum": 0, + "ordernum": 0, "viewPath": null, "keepAlive": true, "isShow": true @@ -506,7 +506,7 @@ "perms": null, "type": 0, "icon": "icon-radioboxfill", - "orderNum": 99, + "ordernum": 99, "viewPath": null, "keepAlive": true, "isShow": false @@ -522,7 +522,7 @@ "perms": null, "type": 1, "icon": "icon-favor", - "orderNum": 3, + "ordernum": 3, "viewPath": "cool/modules/demo/views/upload.vue", "keepAlive": true, "isShow": true @@ -538,7 +538,7 @@ "perms": "base:app:im:message:read,base:app:im:message:page,base:app:im:session:page,base:app:im:session:list,base:app:im:session:unreadCount,base:app:im:session:delete", "type": 2, "icon": null, - "orderNum": 0, + "ordernum": 0, "viewPath": null, "keepAlive": true, "isShow": true @@ -554,7 +554,7 @@ "perms": null, "type": 1, "icon": "icon-favor", - "orderNum": 0, + "ordernum": 0, "viewPath": "cool/modules/demo/views/demo.vue", "keepAlive": true, "isShow": true @@ -570,7 +570,7 @@ "perms": null, "type": 1, "icon": "icon-user", - "orderNum": 0, + "ordernum": 0, "viewPath": "cool/modules/base/views/user.vue", "keepAlive": true, "isShow": true @@ -586,7 +586,7 @@ "perms": "base:sys:user:add", "type": 2, "icon": null, - "orderNum": 0, + "ordernum": 0, "viewPath": null, "keepAlive": true, "isShow": true @@ -602,7 +602,7 @@ "perms": "base:sys:user:delete", "type": 2, "icon": null, - "orderNum": 0, + "ordernum": 0, "viewPath": null, "keepAlive": true, "isShow": true @@ -618,7 +618,7 @@ "perms": "base:sys:user:delete,base:sys:user:update", "type": 2, "icon": null, - "orderNum": 0, + "ordernum": 0, "viewPath": null, "keepAlive": true, "isShow": true @@ -634,7 +634,7 @@ "perms": "base:sys:user:page,base:sys:user:list,base:sys:user:info", "type": 2, "icon": null, - "orderNum": 0, + "ordernum": 0, "viewPath": null, "keepAlive": true, "isShow": true @@ -650,7 +650,7 @@ "perms": null, "type": 0, "icon": "icon-rank", - "orderNum": 6, + "ordernum": 6, "viewPath": null, "keepAlive": true, "isShow": true @@ -666,7 +666,7 @@ "perms": null, "type": 0, "icon": "icon-activity", - "orderNum": 5, + "ordernum": 5, "viewPath": null, "keepAlive": true, "isShow": true @@ -682,7 +682,7 @@ "perms": null, "type": 1, "icon": "icon-menu", - "orderNum": 0, + "ordernum": 0, "viewPath": "cool/modules/task/views/task.vue", "keepAlive": true, "isShow": true @@ -698,7 +698,7 @@ "perms": "task:info:page,task:info:list,task:info:info,task:info:add,task:info:delete,task:info:update,task:info:stop,task:info:start,task:info:once,task:info:log", "type": 2, "icon": null, - "orderNum": 0, + "ordernum": 0, "viewPath": null, "keepAlive": true, "isShow": true @@ -714,7 +714,7 @@ "perms": null, "type": 0, "icon": "icon-log", - "orderNum": 3, + "ordernum": 3, "viewPath": null, "keepAlive": true, "isShow": true @@ -730,7 +730,7 @@ "perms": null, "type": 1, "icon": "icon-menu", - "orderNum": 1, + "ordernum": 1, "viewPath": "modules/dict/views/list.vue", "keepAlive": true, "isShow": true @@ -746,7 +746,7 @@ "perms": "dict:info:delete", "type": 2, "icon": null, - "orderNum": 0, + "ordernum": 0, "viewPath": null, "keepAlive": true, "isShow": true @@ -762,7 +762,7 @@ "perms": "dict:info:update,dict:info:info", "type": 2, "icon": null, - "orderNum": 0, + "ordernum": 0, "viewPath": null, "keepAlive": true, "isShow": true @@ -778,7 +778,7 @@ "perms": "dict:info:data", "type": 2, "icon": null, - "orderNum": 0, + "ordernum": 0, "viewPath": null, "keepAlive": true, "isShow": true @@ -794,7 +794,7 @@ "perms": "dict:info:info", "type": 2, "icon": null, - "orderNum": 0, + "ordernum": 0, "viewPath": null, "keepAlive": true, "isShow": true @@ -810,7 +810,7 @@ "perms": "dict:info:list", "type": 2, "icon": null, - "orderNum": 0, + "ordernum": 0, "viewPath": null, "keepAlive": true, "isShow": true @@ -826,7 +826,7 @@ "perms": "dict:info:page", "type": 2, "icon": null, - "orderNum": 0, + "ordernum": 0, "viewPath": null, "keepAlive": true, "isShow": true @@ -842,7 +842,7 @@ "perms": "dict:info:add", "type": 2, "icon": null, - "orderNum": 0, + "ordernum": 0, "viewPath": null, "keepAlive": true, "isShow": true @@ -858,7 +858,7 @@ "perms": "dict:type:list,dict:type:update,dict:type:delete,dict:type:add", "type": 2, "icon": null, - "orderNum": 0, + "ordernum": 0, "viewPath": null, "keepAlive": true, "isShow": true @@ -874,7 +874,7 @@ "perms": null, "type": 1, "icon": null, - "orderNum": 0, + "ordernum": 0, "viewPath": "modules/demo/views/seer/petbag.vue", "keepAlive": true, "isShow": true @@ -890,7 +890,7 @@ "perms": null, "type": 1, "icon": "icon-discover", - "orderNum": 0, + "ordernum": 0, "viewPath": "modules/demo/views/pinyin.vue", "keepAlive": true, "isShow": true @@ -906,7 +906,7 @@ "perms": null, "type": 1, "icon": null, - "orderNum": 0, + "ordernum": 0, "viewPath": "modules/demo/views/unzip.vue", "keepAlive": true, "isShow": true @@ -922,7 +922,7 @@ "perms": null, "type": 1, "icon": "icon-hot", - "orderNum": 0, + "ordernum": 0, "viewPath": "modules/demo/views/seer/game.vue", "keepAlive": true, "isShow": true @@ -938,7 +938,7 @@ "perms": null, "type": 0, "icon": "icon-task", - "orderNum": 4, + "ordernum": 4, "viewPath": null, "keepAlive": true, "isShow": false @@ -954,7 +954,7 @@ "perms": "space:info:page,space:info:list,space:info:info,space:info:add,space:info:delete,space:info:update,space:type:page,space:type:list,space:type:info,space:type:add,space:type:delete,space:type:update,dict:type:list,dict:type:page,dict:type:info,dict:type:update,dict:type:delete,dict:type:add,dict:info:list,dict:info:page,dict:info:info,dict:info:update,dict:info:delete,dict:info:add,dict:info:data,base:sys:user:getSession", "type": 2, "icon": null, - "orderNum": 1, + "ordernum": 1, "viewPath": null, "keepAlive": true, "isShow": true @@ -970,7 +970,7 @@ "perms": "monster:refresh:add", "type": 2, "icon": null, - "orderNum": 0, + "ordernum": 0, "viewPath": null, "keepAlive": true, "isShow": true @@ -986,7 +986,7 @@ "perms": "monster:refresh:delete", "type": 2, "icon": null, - "orderNum": 0, + "ordernum": 0, "viewPath": null, "keepAlive": true, "isShow": true @@ -1002,7 +1002,7 @@ "perms": "monster:refresh:info", "type": 2, "icon": null, - "orderNum": 0, + "ordernum": 0, "viewPath": null, "keepAlive": true, "isShow": true @@ -1018,7 +1018,7 @@ "perms": "monster:refresh:list", "type": 2, "icon": null, - "orderNum": 0, + "ordernum": 0, "viewPath": null, "keepAlive": true, "isShow": true @@ -1034,7 +1034,7 @@ "perms": "monster:refresh:page", "type": 2, "icon": null, - "orderNum": 0, + "ordernum": 0, "viewPath": null, "keepAlive": true, "isShow": true @@ -1050,7 +1050,7 @@ "perms": "monster:refresh:update,monster:refresh:info", "type": 2, "icon": null, - "orderNum": 0, + "ordernum": 0, "viewPath": null, "keepAlive": true, "isShow": true @@ -1066,7 +1066,7 @@ "perms": null, "type": 1, "icon": "icon-emoji", - "orderNum": 0, + "ordernum": 0, "viewPath": "modules/demo/views/monster_refresh.vue", "keepAlive": true, "isShow": true @@ -1082,7 +1082,7 @@ "perms": null, "type": 1, "icon": "icon-auth", - "orderNum": 0, + "ordernum": 0, "viewPath": "modules/crud/views/refresh.vue", "keepAlive": false, "isShow": true diff --git a/modules/base/service/base_sys_department.go b/modules/base/service/base_sys_department.go index eba851ff3..7f45f19db 100644 --- a/modules/base/service/base_sys_department.go +++ b/modules/base/service/base_sys_department.go @@ -53,7 +53,7 @@ func (s *BaseSysDepartmentService) Order(ctx g.Ctx) (err error) { type item struct { Id uint32 `json:"id"` ParentId *uint32 `json:"parentId,omitempty"` - OrderNum int32 `json:"orderNum"` + ordernum int32 `json:"ordernum"` } var data *item diff --git a/modules/base/service/base_sys_menu.go b/modules/base/service/base_sys_menu.go index 64ba7b749..0a2eb93ab 100644 --- a/modules/base/service/base_sys_menu.go +++ b/modules/base/service/base_sys_menu.go @@ -48,10 +48,10 @@ func (s *BaseSysMenuService) GetMenus(roleIds []string, isAdmin bool) (result gd m := cool.DBM(s.Model).As("a").Fields("a.*") var err error if isAdmin { - result, err = m.Group("a.id").Order("a.orderNum", "asc").All() + result, err = m.Group("a.id").Order(`a.ordernum`, "asc").All() fmt.Println(err) } else { - result, _ = m.InnerJoin("base_sys_role_menu b", `a.id=b."menuId"`).Where(`b."roleId" IN (?)`, roleIds).Group("a.id").Order("a.orderNum asc").All() + result, _ = m.InnerJoin("base_sys_role_menu b", `a.id=b."menuId"`).Where(`b."roleId" IN (?)`, roleIds).Group("a.id").Order("a.ordernum asc").All() } return diff --git a/modules/base/service/base_sys_role.go b/modules/base/service/base_sys_role.go index 098ad815b..588c8391d 100644 --- a/modules/base/service/base_sys_role.go +++ b/modules/base/service/base_sys_role.go @@ -160,12 +160,12 @@ func NewBaseSysRoleService() *BaseSysRoleService { ) return [][]interface{}{ {"label != ?", g.Slice{"admin"}, true}, - {"(userId=? or id in (?))", g.Slice{userId, admin.RoleIds}, !roleIds.Contains(1)}, + {"(userid=? or id in (?))", g.Slice{gconv.String(userId), admin.RoleIds}, !roleIds.Contains(1)}, } }, }, InsertParam: func(ctx context.Context) map[string]interface{} { - return g.Map{"userId": cool.GetAdmin(ctx).UserId} + return g.Map{`"userid"`: cool.GetAdmin(ctx).UserId} }, UniqueKey: map[string]string{ "name": "角色名称不能重复", diff --git a/modules/base/service/base_sys_user.go b/modules/base/service/base_sys_user.go index 97dca7cac..45c3911a5 100644 --- a/modules/base/service/base_sys_user.go +++ b/modules/base/service/base_sys_user.go @@ -287,6 +287,7 @@ func NewBaseSysUserService() *BaseSysUserService { Where: func(ctx context.Context) []g.Array { r := g.RequestFromCtx(ctx).GetMap() return []g.Array{ + {"id != ?", g.Slice{"10001"}, true}, //排除管理员 {`("departmentId" IN (?))`, gconv.SliceStr(r["departmentIds"])}, } }, diff --git a/modules/blazing/model/pet.go b/modules/blazing/model/pet.go index efa7e21b5..d36a99793 100644 --- a/modules/blazing/model/pet.go +++ b/modules/blazing/model/pet.go @@ -304,7 +304,10 @@ func GenPetInfo( } } - p.SkillList = p.SkillList[:4] + if len(p.SkillList) > 4 { + p.SkillList = p.SkillList[:4] + } + // ---- 属性计算 ---- p.CalculatePetPane() p.Hp = p.MaxHp diff --git a/modules/blazing/service/info.go b/modules/blazing/service/info.go index 04ca272cc..aa08fd1cd 100644 --- a/modules/blazing/service/info.go +++ b/modules/blazing/service/info.go @@ -58,7 +58,7 @@ func (s *UserService) Person(userid uint32) *model.PlayerInfo { var tt model.PlayerEX err := m.Scan(&tt) if err != nil { - panic(err) + return nil } ret := tt.Data return &ret diff --git a/modules/dict/model/dict_info.go b/modules/dict/model/dict_info.go index 77417ff2b..3f6bda48c 100644 --- a/modules/dict/model/dict_info.go +++ b/modules/dict/model/dict_info.go @@ -11,7 +11,7 @@ type DictInfo struct { *cool.Model TypeID int32 `gorm:"column:typeId;type:int;not null" json:"typeId"` // 类型ID Name string `gorm:"column:name;type:varchar(255);not null" json:"name"` // 名称 - OrderNum int32 `gorm:"column:orderNum;type:int;not null" json:"orderNum"` // 排序 + ordernum int32 `gorm:"column:ordernum;type:int;not null" json:"ordernum"` // 排序 Remark *string `gorm:"column:remark;type:varchar(255)" json:"remark"` // 备注 ParentID *int32 `gorm:"column:parentId;type:int" json:"parentId"` // 父ID } diff --git a/modules/dict/resource/initjson/dict_info.json b/modules/dict/resource/initjson/dict_info.json index b00e1723b..86bab95ea 100644 --- a/modules/dict/resource/initjson/dict_info.json +++ b/modules/dict/resource/initjson/dict_info.json @@ -5,7 +5,7 @@ "updateTime": "2022-07-06 14:19:10.954000", "typeId": 1, "name": "衣服", - "orderNum": 2, + "ordernum": 2, "remark": null, "parentId": null }, @@ -15,7 +15,7 @@ "updateTime": "2022-07-06 14:18:59.834000", "typeId": 1, "name": "裤子", - "orderNum": 1, + "ordernum": 1, "remark": null, "parentId": null }, @@ -25,7 +25,7 @@ "updateTime": "2022-07-06 14:19:15.251000", "typeId": 1, "name": "鞋子", - "orderNum": 3, + "ordernum": 3, "remark": null, "parentId": null }, @@ -35,7 +35,7 @@ "updateTime": "2022-07-06 14:22:26.131000", "typeId": 2, "name": "闪酷", - "orderNum": 2, + "ordernum": 2, "remark": null, "parentId": null }, @@ -45,7 +45,7 @@ "updateTime": "2022-07-06 14:22:18.309000", "typeId": 2, "name": "SUN", - "orderNum": 1, + "ordernum": 1, "remark": null, "parentId": null } diff --git a/modules/dict/service/dict_info.go b/modules/dict/service/dict_info.go index c494b1e1c..24371b523 100644 --- a/modules/dict/service/dict_info.go +++ b/modules/dict/service/dict_info.go @@ -35,7 +35,7 @@ func (s *DictInfoService) Data(ctx context.Context, types []string) (data interf data = g.Map{} for _, v := range typeData { m := cool.DBM(dictInfoModel) - result, err := m.Where("typeId", v["id"]).Fields("id", "name", "parentId", "typeId").Order("orderNum asc").All() + result, err := m.Where("typeId", v["id"]).Fields("id", "name", "parentId", "typeId").Order("ordernum asc").All() if err != nil { return nil, err }