package eventlog import ( "context" "bj_power_mes/ent" "bj_power_mes/ent/eventlog" ) // Writer 封装操作日志写入 type Writer struct { client *ent.Client } func NewWriter(client *ent.Client) *Writer { return &Writer{client: client} } // Payload 可选载荷 type Payload = map[string]any // Write 记录一条操作日志(event_log 必含 workOrderNo、operator 字段) func (w *Writer) Write(ctx context.Context, eventType, workOrderNo, operator, entityType, entityId, description string, payload Payload) { b := w.client.EventLog.Create(). SetEventType(eventType). SetWorkOrderNo(workOrderNo). SetOperator(operator). SetEntityType(entityType). SetEntityId(entityId). SetDescription(description) if payload != nil { b.SetPayload(payload) } if _, err := b.Save(ctx); err != nil { _ = err } } // Writer Query 支持按工单号/操作人/时间查询 func (w *Writer) Query(ctx context.Context, eventType, workOrderNo, operator string, page, pageSize int) ([]*ent.EventLog, int, error) { q := w.client.EventLog.Query() if eventType != "" { q = q.Where(eventlog.EventType(eventType)) } if workOrderNo != "" { q = q.Where(eventlog.WorkOrderNo(workOrderNo)) } if operator != "" { q = q.Where(eventlog.Operator(operator)) } total, err := q.Count(ctx) if err != nil { return nil, 0, err } list, err := q.Order(ent.Desc(eventlog.FieldCreatedAt), ent.Desc(eventlog.FieldID)). Offset((page - 1) * pageSize).Limit(pageSize).All(ctx) if err != nil { return nil, 0, err } return list, total, nil }