go-common/app/admin/main/workflow/service/wlog.go

200 lines
5.2 KiB
Go
Raw Normal View History

2019-04-22 10:49:16 +00:00
package service
import (
"context"
"fmt"
"time"
"go-common/app/admin/main/workflow/model"
"go-common/app/admin/main/workflow/model/search"
"go-common/library/ecode"
"go-common/library/log"
"go-common/library/queue/databus/report"
)
const (
_wkfReplyLog = 11
_wkfAuditLog = 12
)
// LastLog .
func (s *Service) LastLog(c context.Context, targets []int64, modules []int) (logs map[int64]string, err error) {
var (
resp *search.AuditLogSearchCommonResult
uids []int64
uNames map[int64]string
)
logs = make(map[int64]string)
if len(targets) == 0 {
return
}
cond := &search.AuditReportSearchCond{
Fields: []string{"int_1", "ctime", "str_0", "uid"},
Business: _wkfAuditLog,
Type: modules,
Order: "ctime",
Sort: "desc",
Int1: targets,
Distinct: "int_1",
IndexTimeType: "year",
IndexTimeFrom: time.Now().AddDate(-1, 0, 0),
IndexTimeEnd: time.Now(),
}
if resp, err = s.dao.SearchAuditReportLog(c, cond); err != nil {
log.Error("s.dao.SearchAuditReportLog(%+v) error(%v)", cond, err)
return
}
if resp == nil {
log.Error("len resp.result == 0")
err = ecode.Degrade
return
}
// wrap uname
for _, l := range resp.Result {
uids = append(uids, l.UID)
}
if uNames, err = s.dao.BatchUNameByUID(c, uids); err != nil {
log.Error("s.dao.SearchUNameByUid(%v) error(%v)", uids, err)
err = nil
}
for _, l := range resp.Result {
logs[l.Int1] = fmt.Sprintf("%s\n操作时间:%s\n操作人:", l.Str0, l.CTime)
if uname, ok := uNames[l.UID]; ok {
logs[l.Int1] = fmt.Sprint(logs[l.Int1], uname)
} else {
logs[l.Int1] = fmt.Sprint(logs[l.Int1], l.UID)
}
}
return
}
// LastLogStat .
func (s *Service) LastLogStat(c context.Context, targets []int64, modules []int, fields []string) (logs map[int64]*search.ReportLog, err error) {
var resp *search.AuditLogSearchCommonResult
logs = make(map[int64]*search.ReportLog)
if len(targets) == 0 {
return
}
cond := &search.AuditReportSearchCond{
Fields: fields,
Business: _wkfAuditLog,
Type: modules,
Order: "ctime",
Sort: "desc",
Int1: targets,
Distinct: "int_1",
IndexTimeType: "year",
IndexTimeFrom: time.Now().AddDate(-1, 0, 0),
IndexTimeEnd: time.Now(),
}
if resp, err = s.dao.SearchAuditReportLog(c, cond); err != nil {
log.Error("s.dao.SearchAuditReportLog(%+v) error(%v)", cond, err)
return
}
if resp == nil {
log.Error("len resp.result == 0")
err = ecode.NothingFound
return
}
for _, l := range resp.Result {
logs[l.Int1] = l
}
return
}
// AllAuditLog search all audit log of target & modules
func (s *Service) AllAuditLog(c context.Context, target int64, modules []int) (logs []*model.WLog, err error) {
var (
resp *search.AuditLogSearchCommonResult
uids []int64
uNames map[int64]string
)
if target == 0 {
return
}
cond := &search.AuditReportSearchCond{
Fields: []string{"int_1", "ctime", "str_0", "uid", "uname"},
Business: _wkfAuditLog,
Type: modules,
Order: "ctime",
Sort: "desc",
Int1: []int64{target},
IndexTimeType: "year",
IndexTimeFrom: time.Now().AddDate(-1, 0, 0),
IndexTimeEnd: time.Now(),
}
if resp, err = s.dao.SearchAuditReportLog(c, cond); err != nil {
log.Error("s.dao.SearchAuditReportLog(%+v) error(%v)", cond, err)
return
}
if resp == nil {
log.Error("len resp.result == 0")
err = ecode.Degrade
return
}
// wrap uname
for _, l := range resp.Result {
uids = append(uids, l.UID)
}
if uNames, err = s.dao.BatchUNameByUID(c, uids); err != nil {
log.Error("s.dao.SearchUNameByUid(%v) error(%v)", uids, err)
err = nil
}
for _, r := range resp.Result {
wl := &model.WLog{
AdminID: r.UID,
Admin: r.UName,
Target: r.Int1,
Remark: r.Str0,
}
t, _ := time.ParseInLocation("2006-01-02 15:04:05", r.CTime, time.Local)
wl.CTime.Scan(t)
wl.Admin = uNames[wl.AdminID]
logs = append(logs, wl)
}
return
}
func (s *Service) writeAuditLog(l *model.WLog) {
var err error
info := &report.ManagerInfo{
Uname: l.Admin,
UID: l.AdminID,
Business: _wkfAuditLog,
Type: int(l.Module),
Oid: l.Oid,
Action: "audit_log",
Ctime: time.Now(),
Index: []interface{}{l.Business, l.Target, l.TimeConsume, l.Mid, l.Remark, l.Note, l.OpType, l.PreRid},
Content: map[string]interface{}{"wlog": l, "param": l.Param, "mids": l.Mids},
}
log.Info("start report audit log target:%v oid:%v uid:%v business:%v mid:%v", l.Target, l.Oid, l.AdminID, l.Business, l.Mid)
if err = report.Manager(info); err != nil {
log.Error("failed to produce report.Manager(%+v), err(%v)", info, err)
}
}
func (s *Service) writeReplyLog(l *model.WLog) {
var err error
info := &report.ManagerInfo{
Uname: l.Admin,
UID: l.AdminID,
Business: _wkfReplyLog,
Type: int(l.Module),
Oid: l.Oid,
Action: "reply_log",
Ctime: time.Now(),
Index: []interface{}{l.Business, l.Target, l.Mid, l.Remark, l.Note},
Content: map[string]interface{}{"wlog": l},
}
log.Info("start report reply log target:%v oid:%v uid:%v business:%v mid:%v", l.Target, l.Oid, l.AdminID, l.Business, l.Mid)
if err = report.Manager(info); err != nil {
log.Error("failed to produce report.Manager(%+v), err(%v)", info, err)
}
}