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 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 }