123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- package bo
- import (
- "fmt"
- "rtzh_elec_temperature/enum"
- "rtzh_elec_temperature/logger"
- "rtzh_elec_temperature/tools"
- "strconv"
- "strings"
- "github.com/astaxie/beego/orm"
- _ "github.com/astaxie/beego/orm"
- )
- //系统操作日志管理
- type SystemLog struct {
- UserInfo map[string]interface{}
- //操作分类
- Logtype enum.LogType
- //审计分类
- Audittype enum.AuditType
- //事件分类
- Eventtype enum.OptEventType
- //事件等级
- Eventlevel enum.OptEventLevel
- //日志内容
- Description string
- }
- type Global_syslog struct {
- Id int64 `orm:"pk;auto"`
- Insdate string `orm:"size(20)"`
- Description string `orm:"size(500)"`
- Staff string `orm:"size(50)"`
- //操作分类
- Logtype int
- //审计分类
- Audittype int
- //事件分类
- Eventtype int
- //事件等级
- Eventlevel int
- Success int
- Ip string
- }
- func init() {
- orm.RegisterModel(new(Global_syslog))
- }
- //操作失败日志记录
- //该方法通过属性设置方式完成属性值的赋予
- func (c *SystemLog) Fail2() {
- c.Fail(c.Audittype, c.Logtype, c.Eventtype, c.Eventlevel, c.Description, c.UserInfo)
- }
- //操作失败日志记录
- //该方法通过参数方式完成属性值的赋予
- func (c *SystemLog) Fail(module enum.AuditType, logtype enum.LogType, event enum.OptEventType, eventlevel enum.OptEventLevel, desc string, uinfo ...map[string]interface{}) {
- if c.UserInfo == nil {
- if len(uinfo) > 0 {
- c.UserInfo = uinfo[0]
- } else {
- logger.Logger.Error("写日志记录失败:未指定的当前用户对象")
- return
- }
- }
- username := tools.IsEmpty(c.UserInfo["name"])
- if username == "" {
- username = "系统内置用户"
- }
- go SaveSyslog(desc, module, logtype, event, eventlevel, enum.OptResult_Fail, username, tools.IsEmpty(c.UserInfo["ip"]))
- }
- //操作成功日志记录
- //该方法通过属性设置方式完成属性值的赋予
- func (c *SystemLog) Success2() {
- c.Success(c.Audittype, c.Logtype, c.Eventtype, c.Eventlevel, c.Description, c.UserInfo)
- }
- //操作成功日志记录
- //该方法通过参数方式完成属性值的赋予
- func (c *SystemLog) Success(module enum.AuditType, logtype enum.LogType, event enum.OptEventType, eventlevel enum.OptEventLevel, desc string, uinfo ...map[string]interface{}) {
- if c.UserInfo == nil {
- if len(uinfo) > 0 {
- c.UserInfo = uinfo[0]
- } else {
- logger.Logger.Error("写日志记录失败:未指定的当前用户对象")
- return
- }
- }
- username := tools.IsEmpty(c.UserInfo["name"])
- if username == "" {
- username = "系统内置用户"
- }
- go SaveSyslog(desc, module, logtype, event, eventlevel, enum.OptResult_Success, username, tools.IsEmpty(c.UserInfo["ip"]))
- }
- //清除所有日志数据
- func ClearAllSyslog() (err error) {
- o := orm.NewOrm()
- sqlCommandText := "delete from global_syslog"
- _, err = o.Raw(sqlCommandText).Exec()
- if err != nil {
- return err
- } else {
- return nil
- }
- }
- //根据日志配置(如存储时长、容量限制等)自动清除符合条件的日志数据
- func ClearSyslog(clearbeforedate string) (err error) {
- o := orm.NewOrm()
- sqlCommandText := "delete from global_syslog where insdate<?"
- _, err = o.Raw(sqlCommandText, clearbeforedate).Exec()
- dblog := new(SystemLog)
- dblog.UserInfo = map[string]interface{}{"name": "", "ip": "127.0.0.1"}
- dblog.Audittype = enum.AuditType_admin_system_logclear
- dblog.Logtype = enum.LogType_Delete
- dblog.Eventtype = enum.OptEventType_System
- dblog.Eventlevel = enum.OptEventLevel_Hight
- sqllog := fmt.Sprintf("SQL:%s 参数:%s", sqlCommandText, clearbeforedate)
- if err != nil {
- logger.Logger.Error(err, sqllog)
- dblog.Description = sqllog
- dblog.Fail2()
- return err
- } else {
- dblog.Description = sqllog
- dblog.Fail2()
- return nil
- }
- }
- //保存操作日志记录。(已过时,建议使用SystemLog对象的Fail/Success方法代替)
- func SaveSyslog(desc string, module enum.AuditType, logtype enum.LogType, event enum.OptEventType, eventlevel enum.OptEventLevel, state enum.OptResult, staff string, ip ...string) (result int64, err error) {
- o := orm.NewOrm()
- var obj = Global_syslog{
- Description: desc,
- Audittype: int(module),
- Logtype: int(logtype),
- Eventtype: int(event),
- Eventlevel: int(eventlevel),
- Success: int(state),
- Staff: staff,
- Insdate: tools.NowTime(),
- }
- if len(ip) > 0 {
- obj.Ip = ip[0]
- }
- var id int64
- id, err = o.Insert(&obj)
- if err != nil {
- logger.Logger.Error(err)
- }
- return id, err
- }
- //查询系统日志
- func (c *SystemLog) SearchLogList(cond map[string]string, pageIndex, pageSize int) ([]orm.Params, int, error) {
- o := orm.NewOrm()
- var totalSql string
- var sqlCondition []string
- var sqlParameter []interface{}
- var sqlCommandText = `
- select t.*,t1.name audittypename,t2.name logtypename,t3.name eventtypename,t4.name optresultname,t5.name eventlevelname
- from global_syslog t left join global_const_code t1 on t.audittype=t1.code and t1.parentcode='log_audittype'
- left join global_const_code t2 on t.logtype=t2.code and t2.parentcode='log_opttype'
- left join global_const_code t3 on t.eventtype=t3.code and t3.parentcode='log_eventtype'
- left join global_const_code t4 on t.success=t4.code and t4.parentcode='log_optresult'
- left join global_const_code t5 on t.eventlevel=t5.code and t5.parentcode='log_eventlevel'
- `
- endDate := cond["enddate"]
- if endDate != "" {
- endDate += " 23:59:59"
- }
- startDate := cond["startdate"]
- if startDate != "" && endDate != "" {
- sqlCondition = append(sqlCondition, "t.insdate between ? and ? ")
- sqlParameter = append(sqlParameter, startDate+" 00:00:00", endDate)
- } else if startDate != "" {
- sqlCondition = append(sqlCondition, "t.insdate>=? ")
- sqlParameter = append(sqlParameter, startDate+" 00:00:00")
- } else if endDate != "" {
- sqlCondition = append(sqlCondition, "t.insdate<=? ")
- sqlParameter = append(sqlParameter, endDate)
- }
- description := cond["description"]
- if description != "" {
- sqlCondition = append(sqlCondition, "t.description like concat('%',?,'%')")
- sqlParameter = append(sqlParameter, description)
- }
- success := cond["success"]
- if success != "" {
- sqlCondition = append(sqlCondition, "t.success=?")
- sqlParameter = append(sqlParameter, success)
- }
- logtype := cond["logtype"]
- if logtype != "" {
- sqlCondition = append(sqlCondition, "t.logtype=?")
- sqlParameter = append(sqlParameter, logtype)
- }
- audittype := cond["audittype"]
- if audittype != "" {
- sqlCondition = append(sqlCondition, "t.audittype=?")
- sqlParameter = append(sqlParameter, audittype)
- }
- eventtype := cond["eventtype"]
- if eventtype != "" {
- sqlCondition = append(sqlCondition, "t.eventtype=?")
- sqlParameter = append(sqlParameter, eventtype)
- }
- eventlevel := cond["eventlevel"]
- if eventlevel != "" {
- sqlCondition = append(sqlCondition, "t.eventlevel=?")
- sqlParameter = append(sqlParameter, eventlevel)
- }
- if len(sqlCondition) > 0 {
- sqlCommandText += " where " + strings.Join(sqlCondition, " and ")
- totalSql = "select count(1) number from global_syslog t where " + strings.Join(sqlCondition, " and ")
- } else {
- totalSql = "select count(1) number from global_syslog t "
- }
- var limit = " limit " + strconv.Itoa((pageIndex-1)*pageSize) + "," + strconv.Itoa(pageSize)
- sqlCommandText += " order by t.id desc " + limit
- var tableData []orm.Params
- var number int
- _, err := o.Raw(sqlCommandText, sqlParameter).Values(&tableData)
- c.Audittype = enum.AuditType_admin_system_logquery
- c.Logtype = enum.LogType_Query
- c.Eventtype = enum.OptEventType_Bus
- c.Eventlevel = enum.OptEventLevel_Hight
- sqllog := fmt.Sprintf("SQL:%s 参数:%+v", sqlCommandText, sqlParameter)
- c.Description = sqllog
- if err == nil {
- c.Success2()
- if len(tableData) > 0 {
- var totalData []orm.Params
- _, err = o.Raw(totalSql, sqlParameter).Values(&totalData)
- if err == nil {
- number, _ = strconv.Atoi(totalData[0]["number"].(string))
- }
- }
- } else {
- c.Fail2()
- }
- return tableData, number, err
- }
|