1. 移除工单、工件、日排产中的冗余工位组合/接驳台字段 2. 新增工位接驳台编码字段与唯一约束,关联WMS接驳台主数据 3. 重构日排产为工位产量分配模式,替代原接驳台列表 4. 新增备料单工位级字段与分批出库支持 5. 移除定时同步可生产数量,改为WMS实时拉取接口 6. 过滤操作日志,排除登录/退出相关日志 7. 调整仪表盘工序展示逻辑为今日派工路线 8. 新增接驳台维护菜单与基础数据
76 lines
2.4 KiB
Go
76 lines
2.4 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 表示不限)。
|
||
// Query 支持按事件类型/工单号/操作人/时间范围查询。
|
||
// from/to 传时间戳毫秒(0 表示不限)。
|
||
// operators:操作人候选列表(任一命中即算),历史数据里 operator 中文名/用户名混杂,调用方应同时传两者;
|
||
// admin 精确筛选单人时传单元素即可,传空切片=不过滤。
|
||
func (w *Writer) Query(ctx context.Context, eventType, workOrderNo string, operators []string, fromMs, toMs int64, page, pageSize int) ([]*ent.EventLog, int, error) {
|
||
q := w.client.EventLog.Query()
|
||
// 操作日志只收录业务操作,登录/退出(auth.*)不属于操作日志范畴,一律不展示。
|
||
q = q.Where(eventlog.Not(eventlog.EventTypeHasPrefix("auth.")))
|
||
if eventType != "" {
|
||
// 前缀匹配:前端按业务域"族"筛选(如 work.order. / daily.plan.)
|
||
q = q.Where(eventlog.EventTypeHasPrefix(eventType))
|
||
}
|
||
if workOrderNo != "" {
|
||
q = q.Where(eventlog.WorkOrderNo(workOrderNo))
|
||
}
|
||
if len(operators) > 0 {
|
||
q = q.Where(eventlog.OperatorIn(operators...))
|
||
}
|
||
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
|
||
} |