2026-08-27 10:56:41 +08:00
|
|
|
package eventbus
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"fmt"
|
|
|
|
|
"strconv"
|
2026-08-28 09:22:19 +08:00
|
|
|
"strings"
|
2026-08-27 10:56:41 +08:00
|
|
|
"time"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// 事件构造辅助函数
|
|
|
|
|
|
2026-08-28 09:22:19 +08:00
|
|
|
// NewProductionEvent 构建装配线操作日志事件(payload 内可含
|
|
|
|
|
// workOrderNo/orderNo、workpieceNo/sn、operator、stepCode 等键,写入事件日志表)
|
|
|
|
|
func NewProductionEvent(eventType EventType, description string, payload map[string]any) Event {
|
|
|
|
|
if payload == nil {
|
|
|
|
|
payload = map[string]any{}
|
|
|
|
|
}
|
|
|
|
|
payload["description"] = description
|
|
|
|
|
return Event{
|
|
|
|
|
ID: fmt.Sprintf("%s-%d", strings.ToLower(string(eventType)), time.Now().UnixNano()),
|
|
|
|
|
Type: eventType,
|
|
|
|
|
Source: "production",
|
|
|
|
|
Timestamp: time.Now(),
|
|
|
|
|
Payload: payload,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-08-27 10:56:41 +08:00
|
|
|
// NewTempSlotChangedEvent 构建暂存台槽位变更事件
|
|
|
|
|
func NewTempSlotChangedEvent(slotNo, jobID int, action string) Event {
|
|
|
|
|
return Event{
|
|
|
|
|
ID: fmt.Sprintf("tsc-%d-%d", slotNo, time.Now().UnixNano()),
|
|
|
|
|
Type: EventTempSlotChanged,
|
|
|
|
|
Source: "processor",
|
|
|
|
|
EntityType: string(EntityTempSlot),
|
|
|
|
|
EntityID: strconv.Itoa(slotNo),
|
|
|
|
|
Timestamp: time.Now(),
|
|
|
|
|
Payload: map[string]any{
|
|
|
|
|
"slotNo": slotNo,
|
|
|
|
|
"jobId": jobID,
|
|
|
|
|
"action": action,
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// NewAlarmRaisedEvent 构建报警触发事件
|
|
|
|
|
func NewAlarmRaisedEvent(alarmID int, alarmCode string, level string, equipmentID int, source string) Event {
|
|
|
|
|
return Event{
|
|
|
|
|
ID: fmt.Sprintf("alarm-%d-%d", alarmID, time.Now().UnixNano()),
|
|
|
|
|
Type: EventAlarmRaised,
|
|
|
|
|
Source: source,
|
|
|
|
|
EntityType: "alarm",
|
|
|
|
|
EntityID: strconv.Itoa(alarmID),
|
|
|
|
|
Timestamp: time.Now(),
|
|
|
|
|
Payload: map[string]any{
|
|
|
|
|
"alarmId": alarmID,
|
|
|
|
|
"alarmCode": alarmCode,
|
|
|
|
|
"level": level,
|
|
|
|
|
"equipmentId": equipmentID,
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// NewAlarmAckedEvent 构建报警确认事件
|
|
|
|
|
func NewAlarmAckedEvent(alarmID int) Event {
|
|
|
|
|
return Event{
|
|
|
|
|
ID: fmt.Sprintf("alarm-ack-%d-%d", alarmID, time.Now().UnixNano()),
|
|
|
|
|
Type: EventAlarmAcked,
|
|
|
|
|
Source: "api",
|
|
|
|
|
EntityType: "alarm",
|
|
|
|
|
EntityID: strconv.Itoa(alarmID),
|
|
|
|
|
Timestamp: time.Now(),
|
|
|
|
|
Payload: map[string]any{
|
|
|
|
|
"alarmId": alarmID,
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// NewEquipmentAvailabilityChangedEvent 构建设备可用状态变更事件
|
|
|
|
|
func NewEquipmentAvailabilityChangedEvent(equipmentID int, equipmentName string, enabled bool) Event {
|
|
|
|
|
return Event{
|
|
|
|
|
ID: fmt.Sprintf("equipment-availability-%d-%d", equipmentID, time.Now().UnixNano()),
|
|
|
|
|
Type: EventEquipmentAvailabilityChanged,
|
|
|
|
|
Source: "api",
|
|
|
|
|
EntityType: "equipment",
|
|
|
|
|
EntityID: strconv.Itoa(equipmentID),
|
|
|
|
|
Timestamp: time.Now(),
|
|
|
|
|
Payload: map[string]any{
|
|
|
|
|
"equipmentId": equipmentID,
|
|
|
|
|
"equipmentName": equipmentName,
|
|
|
|
|
"enabled": enabled,
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// NewManualActionCreatedEvent 构建人工交互创建事件
|
|
|
|
|
func NewManualActionCreatedEvent(actionID int, actionType string, orderID int) Event {
|
|
|
|
|
return Event{
|
|
|
|
|
ID: fmt.Sprintf("ma-%d-%d", actionID, time.Now().UnixNano()),
|
|
|
|
|
Type: EventManualActionCreated,
|
|
|
|
|
Source: "processor",
|
|
|
|
|
EntityType: "manual_action",
|
|
|
|
|
EntityID: strconv.Itoa(actionID),
|
|
|
|
|
Timestamp: time.Now(),
|
|
|
|
|
Payload: map[string]any{
|
|
|
|
|
"actionId": actionID,
|
|
|
|
|
"actionType": actionType,
|
|
|
|
|
"orderId": orderID,
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// NewManualActionResolvedEvent 构建人工交互解决事件
|
|
|
|
|
func NewManualActionResolvedEvent(actionID int, actionType string, resolvedAction string) Event {
|
|
|
|
|
return Event{
|
|
|
|
|
ID: fmt.Sprintf("ma-resolve-%d-%d", actionID, time.Now().UnixNano()),
|
|
|
|
|
Type: EventManualActionResolved,
|
|
|
|
|
Source: "api",
|
|
|
|
|
EntityType: "manual_action",
|
|
|
|
|
EntityID: strconv.Itoa(actionID),
|
|
|
|
|
Timestamp: time.Now(),
|
|
|
|
|
Payload: map[string]any{
|
|
|
|
|
"actionId": actionID,
|
|
|
|
|
"actionType": actionType,
|
|
|
|
|
"resolvedAction": resolvedAction,
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
}
|