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