fix: rebuild MES as compilable go-zero+ent backend (renamed bj_power_mes), restore 3 workstation projects from pristine original, align naming; all Go projects go build clean
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
package alarm
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
|
||||
"bj_power_mes/constants"
|
||||
"bj_power_mes/ent"
|
||||
"bj_power_mes/ent/alarm"
|
||||
"bj_power_mes/internal/eventbus"
|
||||
)
|
||||
|
||||
// Service 报警服务,负责创建报警并发布事件。
|
||||
type Service struct {
|
||||
entClient *ent.Client
|
||||
bus eventbus.Bus
|
||||
}
|
||||
|
||||
// NewService 创建报警服务。
|
||||
func NewService(entClient *ent.Client, bus eventbus.Bus) *Service {
|
||||
return &Service{entClient: entClient, bus: bus}
|
||||
}
|
||||
|
||||
// Raise 创建报警并发布 ALARM_RAISED 事件。
|
||||
func (s *Service) Raise(ctx context.Context, alarmCode string, alarmMessage string,
|
||||
level constants.AlarmLevel, equipmentID int, jobID int, source string) (*ent.Alarm, error) {
|
||||
|
||||
a, err := s.entClient.Alarm.Create().
|
||||
SetAlarmCode(alarmCode).
|
||||
SetAlarmMessage(alarmMessage).
|
||||
SetLevel(level).
|
||||
SetNillableEquipmentId(&equipmentID).
|
||||
SetNillableJobId(&jobID).
|
||||
SetSource(source).
|
||||
Save(ctx)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("create alarm: %w", err)
|
||||
}
|
||||
|
||||
evt := eventbus.NewAlarmRaisedEvent(a.ID, alarmCode, string(level), equipmentID, source)
|
||||
if err := s.bus.Publish(ctx, evt); err != nil {
|
||||
slog.Error("alarm: publish event failed", "alarmId", a.ID, "error", err)
|
||||
}
|
||||
|
||||
return a, nil
|
||||
}
|
||||
|
||||
// FindActive 检查是否已存在同编码的未处理报警(去重)。
|
||||
func (s *Service) FindActive(ctx context.Context, alarmCode string) (*ent.Alarm, error) {
|
||||
return s.entClient.Alarm.Query().
|
||||
Where(alarm.AlarmCodeEQ(alarmCode), alarm.ResolvedEQ(false)).
|
||||
First(ctx)
|
||||
}
|
||||
Reference in New Issue
Block a user