This commit is contained in:
likun 2025-07-29 11:57:20 +08:00
parent eb35e81936
commit df108f1cd8
10 changed files with 1344 additions and 168 deletions

View File

@ -67,14 +67,21 @@ func (svc *AccountService) GetWhiteListAll(projectId int) ([]*dto.WhiteListInfo,
if err != nil {
return nil, err
}
banList, err := svc.accountRepo.GetBanListAll(projectEt)
for _, ban := range banList {
if ban.BanType == consts.BanType_AccountTrade || ban.BanType == consts.BanType_RoleTrade {
list = append(list, &dto.WhiteListInfo{
WType: ban.BanType,
Value: ban.Value,
})
if projectEt.GetProjectPo().ProjectType == consts.RegisteredProjectId_shenmodalu {
// 神魔大陆实现封禁交易复用的白名单做存储。。。
banList, err := svc.accountRepo.GetBanListAll(projectEt)
if err != nil {
return nil, err
}
for _, ban := range banList {
if ban.BanType == consts.BanType_AccountTrade {
list = append(list, &dto.WhiteListInfo{
WType: ban.BanType,
Value: ban.Value,
})
}
}
}
return list, nil
}

View File

@ -8,11 +8,15 @@ import (
"admin/internal/model/dto"
"admin/lib/httpclient"
"admin/lib/xlog"
"fmt"
"net/url"
"strconv"
"time"
)
const crossMaxIncNo = 5
const crossIdPrefix = "208"
type BanHook struct {
}
@ -32,40 +36,10 @@ func (hook *BanHook) Create(projectInfo *entity.Project, resource string, dtoObj
case consts.BanType_RoleChat:
banApi = "banroletalk"
default:
if banInfo.BanType == consts.BanType_AccountTrade {
params := &url.Values{}
params.Add("cmd_data", "OpWhitelist")
params.Add("type", banInfo.BanType)
params.Add("value", banInfo.Value)
params.Add("op", "add")
// 所有区服
serverList, err := getAllRunningServers(projectInfo)
if err != nil {
return err
}
for _, v := range serverList {
params.Set("server", v.ServerId)
rsp := make(map[string]any)
err := httpclient.Request(alisrvAddr+"/gm", "get", params, &rsp)
if err != nil {
return errcode.New(errcode.ServerError, "发送新增禁止账号交易白名单请求:%+v错误:%v", banInfo, err)
}
}
return nil
} else if banInfo.BanType == consts.BanType_RoleTrade {
params := &url.Values{}
params.Add("cmd_data", "OpWhitelist")
params.Add("type", banInfo.BanType)
params.Add("value", banInfo.Value)
params.Add("op", "add")
params.Set("server", banInfo.ServerConfID)
rsp := make(map[string]any)
err := httpclient.Request(alisrvAddr+"/gm", "get", params, &rsp)
if err != nil {
return errcode.New(errcode.ServerError, "发送新增禁止角色交易白名单请求:%+v错误:%v", banInfo, err)
}
return nil
if banInfo.BanType == consts.BanType_AccountTrade ||
banInfo.BanType == consts.BanType_RoleTrade {
err := hook.triggerBanTradeInfoChange(projectInfo, "add", banInfo)
return err
}
xlog.Warnf("神魔大陆不支持此类型的封禁:%v", banInfo.BanType)
@ -122,40 +96,10 @@ func (hook *BanHook) Edit(projectInfo *entity.Project, resource string, dtoObj d
case consts.BanType_RoleChat:
banApi = "banroletalk"
default:
if banInfo.BanType == consts.BanType_AccountTrade {
params := &url.Values{}
params.Add("cmd_data", "OpWhitelist")
params.Add("type", banInfo.BanType)
params.Add("value", banInfo.Value)
params.Add("op", "add")
// 所有区服
serverList, err := getAllRunningServers(projectInfo)
if err != nil {
return err
}
for _, v := range serverList {
params.Set("server", v.ServerId)
rsp := make(map[string]any)
err := httpclient.Request(alisrvAddr+"/gm", "get", params, &rsp)
if err != nil {
return errcode.New(errcode.ServerError, "发送新增禁止账号交易白名单请求:%+v错误:%v", banInfo, err)
}
}
return nil
} else if banInfo.BanType == consts.BanType_RoleTrade {
params := &url.Values{}
params.Add("cmd_data", "OpWhitelist")
params.Add("type", banInfo.BanType)
params.Add("value", banInfo.Value)
params.Add("op", "add")
params.Set("server", banInfo.ServerConfID)
rsp := make(map[string]any)
err := httpclient.Request(alisrvAddr+"/gm", "get", params, &rsp)
if err != nil {
return errcode.New(errcode.ServerError, "发送新增禁止角色交易白名单请求:%+v错误:%v", banInfo, err)
}
return nil
if banInfo.BanType == consts.BanType_AccountTrade ||
banInfo.BanType == consts.BanType_RoleTrade {
err := hook.triggerBanTradeInfoChange(projectInfo, "add", banInfo)
return err
}
xlog.Warnf("神魔大陆不支持此类型的封禁:%v", banInfo.BanType)
@ -213,41 +157,12 @@ func (hook *BanHook) Delete(projectInfo *entity.Project, resource string, dtoObj
case consts.BanType_RoleChat:
banApi = "banroletalkdel"
default:
if banInfo.BanType == consts.BanType_AccountTrade {
params := &url.Values{}
params.Add("cmd_data", "OpWhitelist")
params.Add("type", banInfo.BanType)
params.Add("value", banInfo.Value)
params.Add("op", "remove")
// 所有区服
serverList, err := getAllRunningServers(projectInfo)
if err != nil {
return err
}
for _, v := range serverList {
params.Set("server", v.ServerId)
rsp := make(map[string]any)
err := httpclient.Request(alisrvAddr+"/gm", "get", params, &rsp)
if err != nil {
return errcode.New(errcode.ServerError, "发送新增禁止账号交易白名单请求:%+v错误:%v", banInfo, err)
}
}
return nil
} else if banInfo.BanType == consts.BanType_RoleTrade {
params := &url.Values{}
params.Add("cmd_data", "OpWhitelist")
params.Add("type", banInfo.BanType)
params.Add("value", banInfo.Value)
params.Add("op", "remove")
params.Set("server", banInfo.ServerConfID)
rsp := make(map[string]any)
err := httpclient.Request(alisrvAddr+"/gm", "get", params, &rsp)
if err != nil {
return errcode.New(errcode.ServerError, "发送新增禁止角色交易白名单请求:%+v错误:%v", banInfo, err)
}
return nil
if banInfo.BanType == consts.BanType_AccountTrade ||
banInfo.BanType == consts.BanType_RoleTrade {
err := hook.triggerBanTradeInfoChange(projectInfo, "remove", banInfo)
return err
}
xlog.Warnf("神魔大陆不支持此类型的封禁:%v", banInfo.BanType)
return nil
}
@ -270,3 +185,96 @@ func (hook *BanHook) Delete(projectInfo *entity.Project, resource string, dtoObj
return nil
}
func (hook *BanHook) triggerBanTradeInfoChange(projectInfo *entity.Project, op string, banInfo *model.Ban) error {
if banInfo.BanType == consts.BanType_AccountTrade {
params := &url.Values{}
params.Add("cmd_data", "OpWhitelist")
params.Add("type", banInfo.BanType)
params.Add("value", banInfo.Value)
params.Add("op", op)
// 所有区服
serverList, err := getAllRunningServers(projectInfo)
if err != nil {
return err
}
for _, v := range serverList {
params.Set("server", v.ServerId)
rsp := make(map[string]any)
err := httpclient.Request(projectInfo.GetApiAddr()+"/gm", "get", params, &rsp)
if err != nil {
err = errcode.New(errcode.ServerError, "发送新增禁止账号交易白名单请求:%+v错误:%v", banInfo, err)
xlog.Warnf("%v", err)
}
}
// 无论是封禁账号是还是角色,都要通知跨服,否则角色可以在跨服交易
for i := 0; i < crossMaxIncNo; i++ {
// 再通知下跨服,跨服因为没管理在服务器列表,先这样顶一下
crossServerId := fmt.Sprintf(crossIdPrefix+"%.2d", i)
params.Set("server", crossServerId)
rsp := make(map[string]any)
err := httpclient.Request(projectInfo.GetApiAddr()+"/gm", "get", params, &rsp)
if err != nil {
err = errcode.New(errcode.ServerError, "发送%v新增禁止账号交易白名单请求:%+v错误:%v", crossServerId, banInfo, err)
xlog.Warnf("%v", err)
}
}
for i := 0; i < crossMaxIncNo; i++ {
// 再通知下跨服,跨服因为没管理在服务器列表,先这样顶一下
bigCrossServerId := fmt.Sprintf("298%.2d", i)
params.Set("server", bigCrossServerId)
rsp := make(map[string]any)
err := httpclient.Request(projectInfo.GetApiAddr()+"/gm", "get", params, &rsp)
if err != nil {
err = errcode.New(errcode.ServerError, "发送%v新增禁止账号交易白名单请求:%+v错误:%v",
bigCrossServerId, banInfo, err)
xlog.Warnf("%v", err)
}
}
return nil
} else if banInfo.BanType == consts.BanType_RoleTrade {
params := &url.Values{}
params.Add("cmd_data", "OpWhitelist")
params.Add("type", banInfo.BanType)
params.Add("value", banInfo.Value)
params.Add("op", op)
params.Set("server", banInfo.ServerConfID)
rsp := make(map[string]any)
err := httpclient.Request(projectInfo.GetApiAddr()+"/gm", "get", params, &rsp)
if err != nil {
return errcode.New(errcode.ServerError, "发送新增禁止角色交易白名单请求:%+v错误:%v", banInfo, err)
}
// 无论是封禁账号是还是角色都要通知跨服否则角色可以在跨服交易通知错了跨服也不管因为角色id前缀就是服务器id
// 不会影响别的服逻辑判断
for i := 0; i < crossMaxIncNo; i++ {
// 再通知下跨服,跨服因为没管理在服务器列表,先这样顶一下
crossServerId := fmt.Sprintf(crossIdPrefix+"%.2d", i)
params.Set("server", crossServerId)
rsp := make(map[string]any)
err := httpclient.Request(projectInfo.GetApiAddr()+"/gm", "get", params, &rsp)
if err != nil {
err = errcode.New(errcode.ServerError, "发送%v新增禁止账号交易白名单请求:%+v错误:%v", crossServerId, banInfo, err)
xlog.Warnf("%v", err)
}
}
for i := 0; i < crossMaxIncNo; i++ {
// 再通知下跨服,跨服因为没管理在服务器列表,先这样顶一下
bigCrossServerId := fmt.Sprintf("298%.2d", i)
params.Set("server", bigCrossServerId)
rsp := make(map[string]any)
err := httpclient.Request(projectInfo.GetApiAddr()+"/gm", "get", params, &rsp)
if err != nil {
err = errcode.New(errcode.ServerError, "发送%v新增禁止账号交易白名单请求:%+v错误:%v",
bigCrossServerId, banInfo, err)
xlog.Warnf("%v", err)
}
}
return nil
}
return nil
}

View File

@ -38,6 +38,16 @@ var base64decodeFields = map[string]struct{}{
"chatlog_msg": {},
}
var reasonValueAlias = map[string]struct{}{
"gainitem_itempath": {},
"loseitem_itempath": {},
}
var reasonEnumValueAlias = map[string]struct{}{
"addcoin_coinpath": {},
"costcoin_coinpath": {},
}
func init() {
for i := 0; i < 15; i++ {
removeFields["chatlog_score"] = struct{}{}
@ -112,6 +122,11 @@ func (hook *GameLogHook) Trim(projectInfo *entity.Project, eventName []string, t
rows[j][i] = eventDate.Format(time.DateTime)
}
}
_, findReplaceValue := reasonValueAlias[f.Name]
if findReplaceValue {
// 需要替换值内容
}
// 修改每一行公共属性别名
alias, find := fieldsAlias[f.Name]
if find && f.Name == f.Alias {

File diff suppressed because one or more lines are too long

View File

@ -15,6 +15,12 @@ type ServerInfo struct {
TotalAccountCount int `json:"total_account_count"`
Addr string `json:"addr"`
IsServerDown bool `json:"open_whitelist_login"`
CrossUid bool `json:"cross_uid"`
CrossOutIp bool `json:"cross_out_ip"`
CrossInIp bool `json:"cross_in_ip"`
BigCrossUid bool `json:"big_cross_uid"`
BigCrossOutIp bool `json:"big_cross_out_ip"`
BigCrossInIp bool `json:"big_cross_in_ip"`
}
func (server *ServerInfo) Down(api string) error {

View File

@ -1,20 +0,0 @@
package model
import "time"
type Attribute struct {
ID int `gorm:"primarykey" readonly:"true"`
AppId int
Status int // 是否显示 0为不显示 1为显示 默认不显示
AttributeName string
ShowName string
DataType string
AttributeType int
AttributeSource int
CreateTime time.Time
UpdateTime time.Time
}
func (m *Attribute) TableName() string {
return "attribute"
}

View File

@ -1,17 +0,0 @@
package model
import "time"
type Event struct {
ID int `gorm:"primarykey" readonly:"true"`
Appid int
EventName string
ShowName string
YesterdayCount int
CreateTime time.Time
UpdateTime time.Time
}
func (m *Event) TableName() string {
return "mata_event"
}

View File

@ -1,12 +0,0 @@
package model
type EventAttribute struct {
ID int `gorm:"primarykey" readonly:"true"`
AppId int
EventName string
EventAttr string
}
func (m *EventAttribute) TableName() string {
return "meta_attr_relation"
}

View File

@ -137,21 +137,26 @@ func parseStr2FieldValue(field reflect.StructField, rawValue any) (realSetValue
typeName := field.Type.String()
if typeName == "[]string" {
list := make([]string, 0)
if rawValueStr, ok := rawValue.(string); ok {
elems := strings.Split(rawValueStr, ",")
list = append(list, elems...)
// 空的字符串
if rawValue == nil {
} else {
if rawValueList, ok := rawValue.([]string); ok {
for _, v := range rawValueList {
list = append(list, v)
}
if rawValueStr, ok := rawValue.(string); ok {
elems := strings.Split(rawValueStr, ",")
list = append(list, elems...)
// 空的字符串
} else {
for _, v := range rawValue.([]interface{}) {
list = append(list, v.(string))
if rawValueList, ok := rawValue.([]string); ok {
for _, v := range rawValueList {
list = append(list, v)
}
} else {
for _, v := range rawValue.([]interface{}) {
list = append(list, v.(string))
}
}
}
}
parsedValue = list
}
//else if typeName == "[]*model.MailAttachItem" {

Binary file not shown.