package service import ( "blazing/cool" "fmt" "blazing/modules/base/model" "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"`, }, }, }, }, } } // 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) 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 } func init() { // 从文件加载IP数据库 if err := qqwry.LoadFile("public/qqwry.ipdb"); err != nil { panic(err) } }