Files
bl/modules/base/service/base_sys_log.go

173 lines
4.0 KiB
Go
Raw Normal View History

2025-06-20 17:13:51 +08:00
package service
import (
"blazing/cool"
"fmt"
2026-01-06 15:22:20 +00:00
"sync"
"blazing/modules/base/model"
"github.com/gogf/gf/v2/database/gdb"
2025-06-20 17:13:51 +08:00
"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"
2025-06-20 17:13:51 +08:00
)
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 `,
2025-06-20 17:13:51 +08:00
Join: []*cool.JoinOp{
{
Model: model.NewBaseSysUser(),
Alias: `"user"`,
2025-06-20 17:13:51 +08:00
Type: "LeftJoin",
Condition: `"user".id = base_sys_log."userId"`,
2025-06-20 17:13:51 +08:00
},
},
2026-01-06 15:22:20 +00:00
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
2026-01-06 15:22:20 +00:00
return data
2026-01-06 15:22:20 +00:00
},
2025-06-20 17:13:51 +08:00
},
},
}
}
// 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()
2026-01-06 15:22:20 +00:00
// // 从内存或缓存查询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,
// )
2025-06-20 17:13:51 +08:00
baseSysLog.Params = r.GetBodyString()
m := cool.DBM(s.Model)
if baseSysLog.UserID == 10001 {
return
}
2025-06-20 17:13:51 +08:00
m.Insert(g.Map{
"userId": baseSysLog.UserID,
"action": baseSysLog.Action,
"ip": baseSysLog.IP,
2026-01-06 15:22:20 +00:00
//"ipAddr": baseSysLog.IPAddr,
2025-06-20 17:13:51 +08:00
"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,
})
}
2026-02-02 01:01:01 +08:00
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,
})
}
2025-06-20 17:13:51 +08:00
// 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())
2025-06-20 17:13:51 +08:00
}
return
}
2026-01-06 15:22:20 +00:00
var ipdata sync.Once
2026-01-06 15:22:20 +00:00
// func init() {
// // 从文件加载IP数据库
// if err := qqwry.LoadFile("public/qqwry.ipdb"); err != nil {
// panic(err)
// }
// }