本次迭代覆盖MES与WMS核心业务: 1. 新增接驳台托盘传感器读取与AGV对接能力 2. 完善工单排产、备料流程与权限体系拆分 3. 优化看板接口与前端路由、样式 4. 新增操作日志、库存盘点与角色保护逻辑 5. 修复代理地址、BOM保存等已知问题
70 lines
1.9 KiB
Go
70 lines
1.9 KiB
Go
package eventlog
|
||
|
||
import (
|
||
"context"
|
||
"time"
|
||
|
||
"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) {
|
||
q := w.client.EventLog.Query()
|
||
if eventType != "" {
|
||
// 前缀匹配:前端按业务域"族"筛选(如 work.order. / daily.plan.)
|
||
q = q.Where(eventlog.EventTypeHasPrefix(eventType))
|
||
}
|
||
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)))
|
||
}
|
||
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
|
||
} |