应答器增加可变报文状态及操作
This commit is contained in:
parent
5ee14ba52e
commit
ec48b5f48a
@ -665,9 +665,9 @@ func baliseTelegramModify(c *gin.Context) {
|
||||
}
|
||||
simulation := checkDeviceDataAndReturn(req.SimulationId)
|
||||
slog.Info("传入状态参数", req)
|
||||
err := memory.BaliseTelegramModify(simulation, req)
|
||||
var err *sys_error.BusinessError = memory.BaliseTelegramModify(simulation, req)
|
||||
if err != nil {
|
||||
panic(sys_error.New(fmt.Sprintf("应答器修改报文操作失败,%s", err.Error()), err))
|
||||
panic(err)
|
||||
}
|
||||
c.JSON(http.StatusOK, "ok")
|
||||
}
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit e800ded2c3b80a73cab3efc07c7146b7ae48035a
|
||||
Subproject commit 1a75420f049a7b5838d9024a3abb1b9c2e7b7074
|
@ -39,7 +39,7 @@ logging:
|
||||
# 日志文件名
|
||||
fileName: bjrtsts.log
|
||||
# 单个日志文件大小,单位mb,超过会自动滚动
|
||||
fileMaxSize: 5
|
||||
fileMaxSize: 50
|
||||
# 日志文件最大备份数量
|
||||
fileMaxBackups: 100
|
||||
# 日志文件最大保留时间,单位 天
|
||||
|
@ -234,11 +234,13 @@ type BaliseMoveReqDto struct {
|
||||
|
||||
// BaliseModifyTelegramReqDto 修改应答器报文
|
||||
type BaliseModifyTelegramReqDto struct {
|
||||
SimulationId string `json:"simulationId" form:"simulationId"` //仿真ID
|
||||
MapId int32 `json:"mapId" form:"mapId"` //地图ID
|
||||
BaliseId uint32 `json:"baliseId" form:"baliseId"` //应答器ID
|
||||
FixedTelegram string `json:"fixedTelegram" from:"fixedTelegram"` //固定报文(16进制字符串)
|
||||
FixedUserTelegram string `json:"fixedUserTelegram" from:"fixedUserTelegram"` //固定用户报文(16进制字符串)
|
||||
SimulationId string `json:"simulationId" form:"simulationId"` //仿真ID
|
||||
MapId int32 `json:"mapId" form:"mapId"` //地图ID
|
||||
BaliseId uint32 `json:"baliseId" form:"baliseId"` //应答器ID
|
||||
FixedTelegram string `json:"fixedTelegram" from:"fixedTelegram"` //固定报文(16进制字符串)
|
||||
FixedUserTelegram string `json:"fixedUserTelegram" from:"fixedUserTelegram"` //固定用户报文(16进制字符串)
|
||||
VariableTelegram string `json:"variableTelegram" from:"variableTelegram"` //可变报文
|
||||
VariableUserTelegram string `json:"variableUserTelegram" from:"variableUserTelegram"` //可变用户报文
|
||||
}
|
||||
|
||||
// BaliseReqDto 应答器请求
|
||||
|
@ -2952,10 +2952,12 @@ type BaliseState struct {
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
|
||||
Km *data_proto.KilometerSystem `protobuf:"bytes,2,opt,name=km,proto3" json:"km,omitempty"` //当前公里标
|
||||
FixedTelegram string `protobuf:"bytes,3,opt,name=fixedTelegram,proto3" json:"fixedTelegram,omitempty"` //固定报文
|
||||
FixedUserTelegram string `protobuf:"bytes,4,opt,name=fixedUserTelegram,proto3" json:"fixedUserTelegram,omitempty"` //固定用户报文
|
||||
Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
|
||||
Km *data_proto.KilometerSystem `protobuf:"bytes,2,opt,name=km,proto3" json:"km,omitempty"` //当前公里标
|
||||
FixedTelegram string `protobuf:"bytes,3,opt,name=fixedTelegram,proto3" json:"fixedTelegram,omitempty"` //固定报文
|
||||
FixedUserTelegram string `protobuf:"bytes,4,opt,name=fixedUserTelegram,proto3" json:"fixedUserTelegram,omitempty"` //固定用户报文
|
||||
VariableTelegram string `protobuf:"bytes,5,opt,name=variableTelegram,proto3" json:"variableTelegram,omitempty"` //可变报文
|
||||
VariableUserTelegram string `protobuf:"bytes,6,opt,name=variableUserTelegram,proto3" json:"variableUserTelegram,omitempty"` //可变用户报文
|
||||
}
|
||||
|
||||
func (x *BaliseState) Reset() {
|
||||
@ -3018,6 +3020,20 @@ func (x *BaliseState) GetFixedUserTelegram() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *BaliseState) GetVariableTelegram() string {
|
||||
if x != nil {
|
||||
return x.VariableTelegram
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *BaliseState) GetVariableUserTelegram() string {
|
||||
if x != nil {
|
||||
return x.VariableUserTelegram
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
// 仿真运行时状态变化量,当前时刻与上一时刻比较得到
|
||||
type VariationStatus struct {
|
||||
state protoimpl.MessageState
|
||||
@ -3962,7 +3978,7 @@ var file_device_state_proto_rawDesc = []byte{
|
||||
0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x31, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x53, 0x74,
|
||||
0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x74, 0x61, 0x74,
|
||||
0x65, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0a, 0x72, 0x65,
|
||||
0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x9f, 0x01, 0x0a, 0x0b, 0x42, 0x61, 0x6c,
|
||||
0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0xff, 0x01, 0x0a, 0x0b, 0x42, 0x61, 0x6c,
|
||||
0x69, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,
|
||||
0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x02, 0x6b, 0x6d, 0x18, 0x02,
|
||||
0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61,
|
||||
@ -3972,6 +3988,12 @@ var file_device_state_proto_rawDesc = []byte{
|
||||
0x69, 0x78, 0x65, 0x64, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x12, 0x2c, 0x0a, 0x11,
|
||||
0x66, 0x69, 0x78, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61,
|
||||
0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x66, 0x69, 0x78, 0x65, 0x64, 0x55, 0x73,
|
||||
0x65, 0x72, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x12, 0x2a, 0x0a, 0x10, 0x76, 0x61,
|
||||
0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x05,
|
||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x65,
|
||||
0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x12, 0x32, 0x0a, 0x14, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62,
|
||||
0x6c, 0x65, 0x55, 0x73, 0x65, 0x72, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x06,
|
||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x73,
|
||||
0x65, 0x72, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x22, 0xa1, 0x02, 0x0a, 0x0f, 0x56,
|
||||
0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x38,
|
||||
0x0a, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x18, 0x01,
|
||||
|
@ -89,6 +89,11 @@ func collectBaliseStates(world ecs.World, mapId int32) ([]*state_proto.BaliseSta
|
||||
FixedTelegram: fmt.Sprintf("%X", baliseFixedTelegram.Telegram),
|
||||
FixedUserTelegram: fmt.Sprintf("%X", baliseFixedTelegram.UserTelegram),
|
||||
}
|
||||
if entry.HasComponent(component.BaliseVariableTelegramType) {
|
||||
baliseVariableTelegram := component.BaliseVariableTelegramType.Get(entry)
|
||||
baliseState.VariableTelegram = fmt.Sprintf("%X", baliseVariableTelegram.Telegram)
|
||||
baliseState.VariableUserTelegram = fmt.Sprintf("%X", baliseVariableTelegram.UserTelegram)
|
||||
}
|
||||
transponderStates = append(transponderStates, baliseState)
|
||||
km := component.KmType.Get(entry)
|
||||
baliseState.Km = &data_proto.KilometerSystem{
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit 247003d00b1d1c37e467242ac9b3c35e012b0eb8
|
||||
Subproject commit 7372a5fa72e0dbd55ecdcd3fb9161a7ef4af0998
|
@ -3,6 +3,7 @@ package memory
|
||||
import (
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"joylink.club/ecs"
|
||||
"strings"
|
||||
|
||||
"joylink.club/bj-rtsts-server/dto"
|
||||
@ -102,7 +103,7 @@ func BalisePositionModify(simulation *VerifySimulation, req *dto.BaliseMoveReqDt
|
||||
}
|
||||
|
||||
// BalisePositionReset 应答器复位
|
||||
func BalisePositionReset(simulation *VerifySimulation, req *dto.BaliseReqDto) error {
|
||||
func BalisePositionReset(simulation *VerifySimulation, req *dto.BaliseReqDto) *sys_error.BusinessError {
|
||||
uid := QueryMapUidMapByType(req.MapId, &data_proto.Transponder{})[req.BaliseId].Uid
|
||||
balise := simulation.Repo.FindTransponder(uid)
|
||||
if balise == nil {
|
||||
@ -111,7 +112,7 @@ func BalisePositionReset(simulation *VerifySimulation, req *dto.BaliseReqDto) er
|
||||
return balisePositionReset(simulation, balise)
|
||||
}
|
||||
|
||||
func balisePositionReset(simulation *VerifySimulation, balise *repository.Transponder) error {
|
||||
func balisePositionReset(simulation *VerifySimulation, balise *repository.Transponder) *sys_error.BusinessError {
|
||||
entry, _ := entity.GetEntityByUid(simulation.World, balise.Id())
|
||||
component.KmType.Set(entry, balise.Km())
|
||||
component.LinkPositionType.SetValue(entry, component_data.LinkPosition{
|
||||
@ -122,7 +123,7 @@ func balisePositionReset(simulation *VerifySimulation, balise *repository.Transp
|
||||
}
|
||||
|
||||
// BaliseTelegramModify 修改应答器报文
|
||||
func BaliseTelegramModify(simulation *VerifySimulation, req *dto.BaliseModifyTelegramReqDto) error {
|
||||
func BaliseTelegramModify(simulation *VerifySimulation, req *dto.BaliseModifyTelegramReqDto) *sys_error.BusinessError {
|
||||
uid := QueryMapUidMapByType(req.MapId, &data_proto.Transponder{})[req.BaliseId].Uid
|
||||
entry, ok := entity.GetEntityByUid(simulation.World, uid)
|
||||
if !ok {
|
||||
@ -144,15 +145,31 @@ func BaliseTelegramModify(simulation *VerifySimulation, req *dto.BaliseModifyTel
|
||||
if err != nil {
|
||||
return sys_error.New("固定用户报文解析出错", err)
|
||||
}
|
||||
component.BaliseFixedTelegramType.SetValue(entry, component.BaliseState{
|
||||
Telegram: ft,
|
||||
UserTelegram: fut,
|
||||
vt, err := hex.DecodeString(req.VariableTelegram)
|
||||
if err != nil {
|
||||
return sys_error.New("可变报文解析出错", err)
|
||||
}
|
||||
vut, err := hex.DecodeString(req.VariableUserTelegram)
|
||||
if err != nil {
|
||||
return sys_error.New("可变用户报文解析出错", err)
|
||||
}
|
||||
return sendEcsRequest(simulation.World, func() error {
|
||||
component.BaliseFixedTelegramType.SetValue(entry, component.BaliseState{
|
||||
Telegram: ft,
|
||||
UserTelegram: fut,
|
||||
})
|
||||
if entry.HasComponent(component.BaliseVariableTelegramType) {
|
||||
component.BaliseVariableTelegramType.SetValue(entry, component.BaliseState{
|
||||
Telegram: vt,
|
||||
UserTelegram: vut,
|
||||
})
|
||||
}
|
||||
return nil
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
// BaliseTelegramReset 重置应答器报文
|
||||
func BaliseTelegramReset(simulation *VerifySimulation, req *dto.BaliseReqDto) error {
|
||||
func BaliseTelegramReset(simulation *VerifySimulation, req *dto.BaliseReqDto) *sys_error.BusinessError {
|
||||
uid := QueryMapUidMapByType(req.MapId, &data_proto.Transponder{})[req.BaliseId].Uid
|
||||
worldData := entity.GetWorldData(simulation.World)
|
||||
balise := worldData.Repo.FindTransponder(uid)
|
||||
@ -162,17 +179,22 @@ func BaliseTelegramReset(simulation *VerifySimulation, req *dto.BaliseReqDto) er
|
||||
return baliseTelegramReset(simulation, balise)
|
||||
}
|
||||
|
||||
func baliseTelegramReset(simulation *VerifySimulation, balise *repository.Transponder) error {
|
||||
func baliseTelegramReset(simulation *VerifySimulation, balise *repository.Transponder) *sys_error.BusinessError {
|
||||
entry, _ := entity.GetEntityByUid(simulation.World, balise.Id())
|
||||
component.BaliseFixedTelegramType.SetValue(entry, component.BaliseState{
|
||||
Telegram: balise.FixedTelegram(),
|
||||
UserTelegram: balise.FixedUserTelegram(),
|
||||
return sendEcsRequest(simulation.World, func() error {
|
||||
component.BaliseFixedTelegramType.SetValue(entry, component.BaliseState{
|
||||
Telegram: balise.FixedTelegram(),
|
||||
UserTelegram: balise.FixedUserTelegram(),
|
||||
})
|
||||
if entry.HasComponent(component.BaliseVariableTelegramType) {
|
||||
component.BaliseVariableTelegramType.SetValue(entry, component.BaliseState{})
|
||||
}
|
||||
return nil
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
// BaliseReset 重置应答器所有状态
|
||||
func BaliseReset(simulation *VerifySimulation) error {
|
||||
func BaliseReset(simulation *VerifySimulation) *sys_error.BusinessError {
|
||||
var errs []error
|
||||
for _, balise := range simulation.Repo.ResponderList() {
|
||||
err := baliseTelegramReset(simulation, balise)
|
||||
@ -196,3 +218,17 @@ func BaliseReset(simulation *VerifySimulation) error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func sendEcsRequest(w ecs.World, handler func() error) *sys_error.BusinessError {
|
||||
result := <-ecs.Request(w, func() ecs.Result[ecs.EmptyType] {
|
||||
err := handler()
|
||||
if err != nil {
|
||||
return ecs.NewErrResult(err)
|
||||
}
|
||||
return ecs.NewOkEmptyResult()
|
||||
})
|
||||
if result.Err != nil {
|
||||
return sys_error.New("仿真世界请求执行失败", result.Err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user