package smdl import ( "admin/apps/game/domain/entity" dto2 "admin/internal/model/dto" "admin/lib/xlog" "encoding/base64" "strconv" ) type GameLogHook struct { } var removeFields = map[string]struct{}{ "pub_mediaid": {}, "pub_role_name": {}, "pub_udid": {}, } var alias = map[string]string{ "pub_viplev": "vip等级", "pub_userid": "账号", "pub_totalcash": "总充值金额", "pub_serverid": "服务器id", "pub_rolename": "角色名", "pub_roleid": "角色id", "pub_lev": "等级", "pub_language": "语言", "pub_ip": "IP", } var base64decodeFields = map[string]struct{}{ "pub_rolename": {}, "chatlog_msg": {}, } func init() { for i := 0; i < 15; i++ { removeFields["chatlog_score"] = struct{}{} removeFields["chatlog_score"+strconv.Itoa(i)] = struct{}{} removeFields["chatlog_label"] = struct{}{} removeFields["chatlog_label"+strconv.Itoa(i)] = struct{}{} removeFields["chatlog_checklevel"] = struct{}{} removeFields["chatlog_checklevel"+strconv.Itoa(i)] = struct{}{} } removeFields["chatlog_code"] = struct{}{} removeFields["chatlog_checkresult"] = struct{}{} } func (hook *GameLogHook) Trim(projectInfo *entity.Project, eventName []string, totalCount int, fieldsDescInfo []*dto2.GameLogFieldInfo, rows [][]any) ( int, []*dto2.GameLogFieldInfo, [][]any) { // 删除不需要的字段 i := 0 for { if i >= len(fieldsDescInfo) { break } field := fieldsDescInfo[i] if _, find := removeFields[field.Name]; find { // 找到这个字段在去掉的列表里 fieldsDescInfo = append(fieldsDescInfo[:i], fieldsDescInfo[i+1:]...) // 对应所有数据行里也删除这个值 for _, row := range rows { row = append(row[:i], row[i+1:]...) } } else { // 查找要不要把value做base64解码 if _, find := base64decodeFields[field.Name]; find { for _, row := range rows { newValue, err := base64.StdEncoding.DecodeString((*(row[i].(*interface{}))).(string)) if err != nil { xlog.Warnf("base64 decode field:%v value:%v error:%v", field.Name, row[i], err) } else { row[i] = string(newValue) } } } i++ } } // 查找别名 for _, en := range eventName { // 查找全局eventName描述表信息,对里面没有别的字段名改为表里的名字 descInfo, find := globEventList[en] if find { for _, f := range fieldsDescInfo { find := false for _, f1 := range descInfo.fields { if f.Name == f1.Name && f1.Alias != "" { if f.Name == f.Alias { f.Alias = f1.Alias } find = true break } } if !find { aliasName, find1 := alias[f.Name] if find1 && f.Name == f.Alias && f.Alias != "" { f.Alias = aliasName } } } } } return totalCount, fieldsDescInfo, rows }