2025-06-20 17:13:51 +08:00
|
|
|
|
package service
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
2025-06-20 22:03:38 +00:00
|
|
|
|
"blazing/cool"
|
2026-01-08 05:15:10 +08:00
|
|
|
|
"fmt"
|
2026-01-06 15:22:20 +00:00
|
|
|
|
"sync"
|
2025-06-20 22:03:38 +00:00
|
|
|
|
|
|
|
|
|
|
"blazing/modules/base/model"
|
|
|
|
|
|
|
2026-01-08 03:30:18 +08:00
|
|
|
|
"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"
|
2026-01-08 03:30:18 +08:00
|
|
|
|
"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"},
|
2025-11-06 12:26:23 +08:00
|
|
|
|
Select: `base_sys_log.*,"user".username `,
|
2025-06-20 17:13:51 +08:00
|
|
|
|
Join: []*cool.JoinOp{
|
|
|
|
|
|
{
|
|
|
|
|
|
Model: model.NewBaseSysUser(),
|
2025-07-11 03:36:42 +08:00
|
|
|
|
Alias: `"user"`,
|
2025-06-20 17:13:51 +08:00
|
|
|
|
Type: "LeftJoin",
|
2025-07-11 03:36:42 +08:00
|
|
|
|
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{} {
|
2026-01-08 05:15:10 +08:00
|
|
|
|
|
|
|
|
|
|
var rr []g.MapStrAny
|
2026-01-08 03:30:18 +08:00
|
|
|
|
r, _ := gconv.Map(data)["list"].(gdb.Result)
|
2026-01-08 05:15:10 +08:00
|
|
|
|
for i := 0; i < len(r); i++ {
|
|
|
|
|
|
subm := r[i].GMap()
|
|
|
|
|
|
ipaddr, err := qqwry.QueryIP(r[i].Map()["ip"].(string))
|
2026-01-08 03:30:18 +08:00
|
|
|
|
if err == nil {
|
2026-01-08 05:15:10 +08:00
|
|
|
|
// 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,
|
|
|
|
|
|
))
|
|
|
|
|
|
|
2026-01-08 03:30:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-08 05:15:10 +08:00
|
|
|
|
rr = append(rr, subm.MapStrAny())
|
2026-01-08 03:30:18 +08:00
|
|
|
|
}
|
2026-01-08 05:15:10 +08:00
|
|
|
|
|
|
|
|
|
|
data.(map[string]interface{})["list"] = rr
|
|
|
|
|
|
|
2026-01-06 15:22:20 +00:00
|
|
|
|
return data
|
2026-01-08 05:15:10 +08:00
|
|
|
|
|
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-04 00:16:49 +08:00
|
|
|
|
|
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)
|
2025-12-26 05:41:51 +08:00
|
|
|
|
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,
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
2026-01-31 03:55:58 +08:00
|
|
|
|
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"))
|
2025-10-19 03:17:03 +08:00
|
|
|
|
_, err = m.Delete(`"createTime" < ?`, gtime.Now().AddDate(0, 0, -keepDays).String())
|
2025-06-20 17:13:51 +08:00
|
|
|
|
}
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
2026-01-04 01:31:11 +08:00
|
|
|
|
|
2026-01-06 15:22:20 +00:00
|
|
|
|
var ipdata sync.Once
|
2026-01-04 01:31:11 +08:00
|
|
|
|
|
2026-01-06 15:22:20 +00:00
|
|
|
|
// func init() {
|
|
|
|
|
|
// // 从文件加载IP数据库
|
|
|
|
|
|
// if err := qqwry.LoadFile("public/qqwry.ipdb"); err != nil {
|
|
|
|
|
|
// panic(err)
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
// }
|