Files
be.ems/src/modules/oam/service/nb_state.go
2025-10-23 14:13:54 +08:00

67 lines
1.7 KiB
Go

package service
import (
"fmt"
"time"
"be.ems/src/framework/utils/date"
"github.com/tsmask/go-oam"
neDataModel "be.ems/src/modules/network_data/model"
neDataService "be.ems/src/modules/network_data/service"
neService "be.ems/src/modules/network_element/service"
wsService "be.ems/src/modules/ws/service"
)
// 实例化服务层 NBState 结构体
var NewNBState = &NBState{
neInfoService: neService.NewNeInfo,
wsService: wsService.NewWSSend,
nbStateService: neDataService.NewNBState,
}
// NBState 消息处理
type NBState struct {
neInfoService *neService.NeInfo
wsService *wsService.WSSend
nbStateService *neDataService.NBState
}
// Resolve 接收处理
func (s *NBState) Resolve(n oam.NBState) error {
// 是否存在网元
neInfo := s.neInfoService.FindByRmuid(n.NeUid)
if neInfo.NeType == "" || neInfo.RmUID != n.NeUid {
return fmt.Errorf("resolve nb_state network element does not exist %s", n.NeUid)
}
nbState := neDataModel.NBState{
NeType: neInfo.NeType,
NeId: neInfo.NeId,
RmUid: neInfo.RmUID,
Address: n.Address,
NbName: n.DeviceName,
NbId: n.DeviceId,
Name: n.Name,
Position: n.Position,
State: n.State,
Time: date.ParseDateToStr(n.StateTime, time.RFC3339),
}
insertId := s.nbStateService.Insert(nbState)
if insertId <= 0 {
return fmt.Errorf("add nb_state data fail")
}
nbState.ID = insertId
// 推送到ws订阅组
switch neInfo.NeType {
case "AMF":
s.wsService.ByGroupID(wsService.GROUP_AMF_NB, nbState)
s.wsService.ByGroupID(fmt.Sprintf("%s_%s", wsService.GROUP_AMF_NB, neInfo.NeId), nbState)
case "MME":
s.wsService.ByGroupID(wsService.GROUP_MME_NB, nbState)
s.wsService.ByGroupID(fmt.Sprintf("%s_%s", wsService.GROUP_MME_NB, neInfo.NeId), nbState)
}
return nil
}