61 lines
1.5 KiB
Go
61 lines
1.5 KiB
Go
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)).
|
||
|
|
Offset((page - 1) * pageSize).Limit(pageSize).All(ctx)
|
||
|
|
if err != nil {
|
||
|
|
return nil, 0, err
|
||
|
|
}
|
||
|
|
return list, total, nil
|
||
|
|
}
|