Files
bj_power/bj_power_mes/internal/eventlog/eventlog.go
T

70 lines
1.9 KiB
Go
Raw Normal View History

2026-08-28 15:06:01 +08:00
package eventlog
import (
"context"
"time"
2026-08-28 15:06:01 +08:00
"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 支持按事件类型/工单号/操作人/时间范围查询。
// from/to 传时间戳毫秒(0 表示不限)。
func (w *Writer) Query(ctx context.Context, eventType, workOrderNo, operator string, fromMs, toMs int64, page, pageSize int) ([]*ent.EventLog, int, error) {
2026-08-28 15:06:01 +08:00
q := w.client.EventLog.Query()
if eventType != "" {
// 前缀匹配:前端按业务域"族"筛选(如 work.order. / daily.plan.
q = q.Where(eventlog.EventTypeHasPrefix(eventType))
2026-08-28 15:06:01 +08:00
}
if workOrderNo != "" {
q = q.Where(eventlog.WorkOrderNo(workOrderNo))
}
if operator != "" {
q = q.Where(eventlog.Operator(operator))
}
if fromMs > 0 {
q = q.Where(eventlog.CreatedAtGTE(time.UnixMilli(fromMs)))
}
if toMs > 0 {
q = q.Where(eventlog.CreatedAtLTE(time.UnixMilli(toMs)))
}
2026-08-28 15:06:01 +08:00
total, err := q.Count(ctx)
if err != nil {
return nil, 0, err
}
2026-09-03 18:13:59 +08:00
list, err := q.Order(ent.Desc(eventlog.FieldCreatedAt), ent.Desc(eventlog.FieldID)).
2026-08-28 15:06:01 +08:00
Offset((page - 1) * pageSize).Limit(pageSize).All(ctx)
if err != nil {
return nil, 0, err
}
return list, total, nil
}