You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
199 lines
5.2 KiB
199 lines
5.2 KiB
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) |
|
} |
|
}
|
|
|