rts-sim-module/entity/ci_ls.go
2024-06-26 17:27:47 +08:00

135 lines
3.9 KiB
Go

package entity
import (
"fmt"
"joylink.club/ecs"
"joylink.club/rtsssimulation/component"
"joylink.club/rtsssimulation/repository"
"joylink.club/rtsssimulation/repository/model/proto"
)
// 创建信号机故障报警仪实体
func NewSFAEntity(w ecs.World, station *repository.Station) error {
data := GetWorldData(w)
repo := data.Repo
for _, de := range station.DeviceEcc() {
if de.DeviceType == proto.DeviceType_DeviceType_SignalFaultAlarm {
var dsbj *ecs.Entry
for _, ecg := range de.Egs {
if ecg.Code == "LS" {
if len(ecg.ComponentIds) == 1 {
relay := repo.FindById(ecg.ComponentIds[0])
if relay == nil {
return fmt.Errorf("信号机故障报警仪构建错误: 找不到id=%s的继电器", ecg.ComponentIds[0])
}
dsbj = NewRelayEntity(w, relay.(*repository.Relay), data.EntityMap)
}
}
}
entry := w.Entry(w.Create(component.SFATag, component.SFAEccType))
component.SFAEccType.Set(entry, &component.SFAEcc{
DSBJ: dsbj,
})
}
}
return nil
}
// 创建断路器实体
func NewDLQEntity(w ecs.World, station *repository.Station) error {
data := GetWorldData(w)
repo := data.Repo
for _, de := range station.DeviceEcc() {
if de.DeviceType == proto.DeviceType_DeviceType_Breakers {
var rsbj *ecs.Entry
for _, ecg := range de.Egs {
if ecg.Code == "LS" {
if len(ecg.ComponentIds) == 1 {
relay := repo.FindById(ecg.ComponentIds[0])
if relay == nil {
return fmt.Errorf("断路器实体构建错误: 找不到id=%s的继电器", ecg.ComponentIds[0])
}
rsbj = NewRelayEntity(w, relay.(*repository.Relay), data.EntityMap)
}
}
}
entry := w.Entry(w.Create(component.DLQTag, component.DLQEccType))
component.DLQEccType.Set(entry, &component.DLQEcc{
RSBJ: rsbj,
})
}
}
return nil
}
// 创建电源屏实体
func NewDYPEntity(w ecs.World, station *repository.Station) error {
data := GetWorldData(w)
repo := data.Repo
for _, de := range station.DeviceEcc() {
if de.DeviceType == proto.DeviceType_DeviceType_PowerScreen {
var zdyj *ecs.Entry
var fdyj *ecs.Entry
var dybj *ecs.Entry
for _, ecg := range de.Egs {
if ecg.Code == "LS" {
if len(ecg.ComponentIds) == 3 {
for _, id := range ecg.ComponentIds {
d := repo.FindById(id)
if d == nil {
return fmt.Errorf("电源屏实体构建错误: 找不到id=%s的继电器", ecg.ComponentIds[0])
}
if d.Type() == proto.DeviceType_DeviceType_Relay {
relay := d.(*repository.Relay)
if relay.Code() == "ZDYJ" {
zdyj = NewRelayEntity(w, relay, data.EntityMap)
} else if relay.Code() == "FDYJ" {
fdyj = NewRelayEntity(w, relay, data.EntityMap)
} else if relay.Code() == "DYBJ" {
dybj = NewRelayEntity(w, relay, data.EntityMap)
} else {
return fmt.Errorf("电源屏实体构建错误: 未知的继电器编码'%s'", relay.Code())
}
} else {
return fmt.Errorf("电源屏实体构建错误: id=%s的设备不是继电器", ecg.ComponentIds[0])
}
}
}
}
}
entry := w.Entry(w.Create(component.DYPTag, component.DYPEccType))
component.DYPEccType.Set(entry, &component.DYPEcc{
ZDYJ: zdyj,
FDYJ: fdyj,
DYBJ: dybj,
})
}
}
return nil
}
// NewLsEntity 创建零散继电器实体
func NewLsEntity(w ecs.World, station *repository.Station) error {
data := GetWorldData(w)
repo := data.Repo
for _, ecc := range station.DeviceEcc() {
if ecc.DeviceType != proto.DeviceType_DeviceType_LS {
continue
}
for _, eg := range ecc.Egs {
if eg.Code != "LS" {
continue
}
for _, componentId := range eg.ComponentIds {
relay := repo.FindById(componentId)
if relay == nil {
return fmt.Errorf("零散继电器实体构建错误: 找不到id=%s的继电器", componentId)
}
NewRelayEntity(w, relay.(*repository.Relay), data.EntityMap)
}
}
}
return nil
}