本次提交覆盖多个业务模块的功能完善与体验优化:
1. **鉴权与配置调整**:
- 统一JWT滑动续签逻辑,简化Token存储,移除RefreshToken相关冗余代码
- 调整多项目配置文件中JWT过期时间为3600秒,统一会话闲置窗口
- 工位配置放开1~12限制,改为仅校验大于0
2. **术语统一替换**:全链路将"精密件"替换为"电气件",修正物料管理描述
3. **功能新增**:
- 新增工位类型、工艺路线与产线点位台账模块
- 添加工艺PDF预览面板、工位终端代理转发接口
- 新增操作日志按操作人列表筛选、工位登出日志记录
- 新增PLC移料指令与产线点位状态管理
4. **业务流程优化**:
- 调整BOM物料删除校验逻辑,优化工单备料计算
- 补充物料图号、检测单号等追溯字段
- 完善工艺流程图与工位绑定关系说明
- 优化前端页面文案与交互细节
5. **代码规范与维护**:
- 新增通用工具函数与前端静态资源
- 整理路由权限与中间件逻辑
- 修复部分接口与配置的不兼容问题
74 lines
2.2 KiB
Go
74 lines
2.2 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()
|
||
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
|
||
} |