package service import ( "blazing/cool" "fmt" "sync" "blazing/modules/base/model" "github.com/gogf/gf/v2/database/gdb" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/os/gtime" "github.com/gogf/gf/v2/util/gconv" "github.com/xiaoqidun/qqwry" ) type BaseSysLogService struct { *cool.Service } func NewBaseSysLogService() *BaseSysLogService { return &BaseSysLogService{ &cool.Service{ Model: model.NewBaseSysLog(), PageQueryOp: &cool.QueryOp{ KeyWordField: []string{"name", "params", "ipAddr"}, Select: `base_sys_log.*,"user".username `, Join: []*cool.JoinOp{ { Model: model.NewBaseSysUser(), Alias: `"user"`, Type: "LeftJoin", Condition: `"user".id = base_sys_log."userId"`, }, }, ModifyResult: func(ctx g.Ctx, data interface{}) interface{} { var rr []g.MapStrAny r, _ := gconv.Map(data)["list"].(gdb.Result) for i := 0; i < len(r); i++ { subm := r[i].GMap() ipaddr, err := qqwry.QueryIP(r[i].Map()["ip"].(string)) if err == nil { // baseSysLog.IPAddr = fmt.Sprintf("国家:%s,省份:%s,城市:%s,区县:%s,运营商:%s\n", // location.Country, // location.Province, // location.City, // location.District, // location.ISP, // ) subm.Set("ipAddr", fmt.Sprintf("国家:%s,省份:%s,城市:%s,区县:%s,运营商:%s\n", ipaddr.Country, ipaddr.Province, ipaddr.City, ipaddr.District, ipaddr.ISP, )) } rr = append(rr, subm.MapStrAny()) } data.(map[string]interface{})["list"] = rr return data }, }, }, } } // Record 记录日志 func (s *BaseSysLogService) Record(ctx g.Ctx) { var ( admin = cool.GetAdmin(ctx) r = g.RequestFromCtx(ctx) ) baseSysLog := model.NewBaseSysLog() baseSysLog.UserID = admin.UserId baseSysLog.Action = r.Method + ":" + r.URL.Path baseSysLog.IP = r.GetClientIp() // // 从内存或缓存查询IP // location, err := qqwry.QueryIP(baseSysLog.IP) // if err != nil { // fmt.Printf("错误:%v\n", err) // return // } // baseSysLog.IPAddr = fmt.Sprintf("国家:%s,省份:%s,城市:%s,区县:%s,运营商:%s\n", // location.Country, // location.Province, // location.City, // location.District, // location.ISP, // ) baseSysLog.Params = r.GetBodyString() m := cool.DBM(s.Model) if baseSysLog.UserID == 10001 { return } m.Insert(g.Map{ "userId": baseSysLog.UserID, "action": baseSysLog.Action, "ip": baseSysLog.IP, //"ipAddr": baseSysLog.IPAddr, "params": baseSysLog.Params, }) } func (s *BaseSysLogService) RecordFight(userid uint32, desc string) { baseSysLog := model.NewBaseSysLog() baseSysLog.UserID = uint(userid) baseSysLog.Action = "fight" baseSysLog.Params = desc m := cool.DBM(s.Model) if baseSysLog.UserID == 10001 { return } m.Insert(g.Map{ "userId": baseSysLog.UserID, "action": baseSysLog.Action, "ip": baseSysLog.IP, //"ipAddr": baseSysLog.IPAddr, "params": baseSysLog.Params, }) } func (s *BaseSysLogService) RecordKick(userid uint32, desc string) { baseSysLog := model.NewBaseSysLog() baseSysLog.UserID = uint(userid) baseSysLog.Action = "kick" baseSysLog.Params = desc m := cool.DBM(s.Model) if baseSysLog.UserID == 10001 { return } m.Insert(g.Map{ "userId": baseSysLog.UserID, "action": baseSysLog.Action, "ip": baseSysLog.IP, //"ipAddr": baseSysLog.IPAddr, "params": baseSysLog.Params, }) } // Clear 清除日志 func (s *BaseSysLogService) Clear(isAll bool) (err error) { BaseSysConfService := NewBaseSysConfService() m := cool.DBM(s.Model) if isAll { _, err = m.Delete("1=1") } else { keepDays := gconv.Int(BaseSysConfService.GetValue("logKeep")) _, err = m.Delete(`"createTime" < ?`, gtime.Now().AddDate(0, 0, -keepDays).String()) } return } var ipdata sync.Once // func init() { // // 从文件加载IP数据库 // if err := qqwry.LoadFile("public/qqwry.ipdb"); err != nil { // panic(err) // } // }