【修改link中节点的关联逻辑】
This commit is contained in:
parent
253d6f9889
commit
300232fda4
@ -108,7 +108,7 @@ func calcGraphicLenBySection(section *buildCalcSectionStruct) int32 {
|
|||||||
}
|
}
|
||||||
var length int64 // 两端公里标相减即可
|
var length int64 // 两端公里标相减即可
|
||||||
for _, a := range section.axlePoints {
|
for _, a := range section.axlePoints {
|
||||||
if a.KilometerSystem == nil || a.KilometerSystem.CoordinateSystem == "" {
|
if !judgeKilometerIsVaild(a.KilometerSystem) {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
length = a.KilometerSystem.Kilometer - length
|
length = a.KilometerSystem.Kilometer - length
|
||||||
@ -119,11 +119,11 @@ func calcGraphicLenBySection(section *buildCalcSectionStruct) int32 {
|
|||||||
// 计算道岔端长度
|
// 计算道岔端长度
|
||||||
func calcGraphicLenByTurnout(turnout *buildCalcTurnoutStruct, p graphicData.RelatedRef_DevicePort) int32 {
|
func calcGraphicLenByTurnout(turnout *buildCalcTurnoutStruct, p graphicData.RelatedRef_DevicePort) int32 {
|
||||||
endPoint := turnout.axlePoints[p]
|
endPoint := turnout.axlePoints[p]
|
||||||
if endPoint == nil || endPoint.KilometerSystem == nil || endPoint.KilometerSystem.CoordinateSystem == "" {
|
if endPoint == nil || !judgeKilometerIsVaild(endPoint.KilometerSystem) {
|
||||||
zap.S().Warnf("道岔【%s】对应端口【%s】数据无计轴", turnout.Data.Common.Id, p.String())
|
zap.S().Warnf("道岔【%s】对应端口【%s】数据无计轴", turnout.Data.Common.Id, p.String())
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
if turnout.CrossKilometerSystem == nil {
|
if !judgeKilometerIsVaild(turnout.CrossKilometerSystem) {
|
||||||
zap.S().Warnf("道岔【%s】数据错误,岔心公里标为空", turnout.Data.Common.Id)
|
zap.S().Warnf("道岔【%s】数据错误,岔心公里标为空", turnout.Data.Common.Id)
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@ -165,7 +165,7 @@ func getGraphicSectionRefDevices(deviceMap map[string]*graphicData.CalculateLink
|
|||||||
spof := deviceMap[startPoint.Common.Id].Offset // 相对的起点offset
|
spof := deviceMap[startPoint.Common.Id].Offset // 相对的起点offset
|
||||||
// 信号机信息
|
// 信号机信息
|
||||||
for _, s := range section.signals {
|
for _, s := range section.signals {
|
||||||
if s.KilometerSystem != nil && s.KilometerSystem.CoordinateSystem != "" && deviceMap[s.Common.Id] == nil {
|
if judgeKilometerIsVaild(s.KilometerSystem) && deviceMap[s.Common.Id] == nil {
|
||||||
deviceMap[s.Common.Id] = &graphicData.CalculateLink_DevicePosition{
|
deviceMap[s.Common.Id] = &graphicData.CalculateLink_DevicePosition{
|
||||||
DeviceId: s.Common.Id,
|
DeviceId: s.Common.Id,
|
||||||
Offset: spof + int32(math.Abs(float64(s.KilometerSystem.Kilometer-sppk))),
|
Offset: spof + int32(math.Abs(float64(s.KilometerSystem.Kilometer-sppk))),
|
||||||
@ -175,7 +175,7 @@ func getGraphicSectionRefDevices(deviceMap map[string]*graphicData.CalculateLink
|
|||||||
}
|
}
|
||||||
// 停车标信息
|
// 停车标信息
|
||||||
for _, s := range section.stopPositions {
|
for _, s := range section.stopPositions {
|
||||||
if s.KilometerSystem != nil && s.KilometerSystem.CoordinateSystem != "" && deviceMap[s.Common.Id] == nil {
|
if judgeKilometerIsVaild(s.KilometerSystem) && deviceMap[s.Common.Id] == nil {
|
||||||
deviceMap[s.Common.Id] = &graphicData.CalculateLink_DevicePosition{
|
deviceMap[s.Common.Id] = &graphicData.CalculateLink_DevicePosition{
|
||||||
DeviceId: s.Common.Id,
|
DeviceId: s.Common.Id,
|
||||||
Offset: spof + int32(math.Abs(float64(s.KilometerSystem.Kilometer-sppk))),
|
Offset: spof + int32(math.Abs(float64(s.KilometerSystem.Kilometer-sppk))),
|
||||||
@ -185,7 +185,7 @@ func getGraphicSectionRefDevices(deviceMap map[string]*graphicData.CalculateLink
|
|||||||
}
|
}
|
||||||
// 应答器信息
|
// 应答器信息
|
||||||
for _, t := range section.transponders {
|
for _, t := range section.transponders {
|
||||||
if t.KilometerSystem != nil && t.KilometerSystem.CoordinateSystem != "" && deviceMap[t.Common.Id] == nil {
|
if judgeKilometerIsVaild(t.KilometerSystem) && deviceMap[t.Common.Id] == nil {
|
||||||
deviceMap[t.Common.Id] = &graphicData.CalculateLink_DevicePosition{
|
deviceMap[t.Common.Id] = &graphicData.CalculateLink_DevicePosition{
|
||||||
DeviceId: t.Common.Id,
|
DeviceId: t.Common.Id,
|
||||||
Offset: spof + int32(math.Abs(float64(t.KilometerSystem.Kilometer-sppk))),
|
Offset: spof + int32(math.Abs(float64(t.KilometerSystem.Kilometer-sppk))),
|
||||||
@ -210,7 +210,7 @@ func getGraphicTurnoutRefDevices(refVal *graphicData.RelatedRef, deviceMap map[s
|
|||||||
}
|
}
|
||||||
// 查看是否存在连接计轴
|
// 查看是否存在连接计轴
|
||||||
point := turnout.axlePoints[refVal.DevicePort]
|
point := turnout.axlePoints[refVal.DevicePort]
|
||||||
if point != nil && point.KilometerSystem != nil && deviceMap[point.Common.Id] == nil {
|
if point != nil && judgeKilometerIsVaild(point.KilometerSystem) && deviceMap[point.Common.Id] == nil {
|
||||||
deviceMap[point.Common.Id] = &graphicData.CalculateLink_DevicePosition{
|
deviceMap[point.Common.Id] = &graphicData.CalculateLink_DevicePosition{
|
||||||
DeviceId: point.Common.Id,
|
DeviceId: point.Common.Id,
|
||||||
Offset: offset + int32(math.Abs(float64(point.KilometerSystem.Kilometer-prevKm))),
|
Offset: offset + int32(math.Abs(float64(point.KilometerSystem.Kilometer-prevKm))),
|
||||||
@ -219,20 +219,18 @@ func getGraphicTurnoutRefDevices(refVal *graphicData.RelatedRef, deviceMap map[s
|
|||||||
}
|
}
|
||||||
// 处理道岔上的信号机
|
// 处理道岔上的信号机
|
||||||
signal := turnout.signals[refVal.DevicePort]
|
signal := turnout.signals[refVal.DevicePort]
|
||||||
if signal != nil {
|
if signal != nil && judgeKilometerIsVaild(signal.KilometerSystem) && deviceMap[signal.Common.Id] == nil {
|
||||||
if signal.KilometerSystem != nil && signal.KilometerSystem.CoordinateSystem != "" && deviceMap[signal.Common.Id] == nil {
|
|
||||||
deviceMap[signal.Common.Id] = &graphicData.CalculateLink_DevicePosition{
|
deviceMap[signal.Common.Id] = &graphicData.CalculateLink_DevicePosition{
|
||||||
DeviceId: signal.Common.Id,
|
DeviceId: signal.Common.Id,
|
||||||
Offset: offset + int32(math.Abs(float64(signal.KilometerSystem.Kilometer-prevKm))),
|
Offset: offset + int32(math.Abs(float64(signal.KilometerSystem.Kilometer-prevKm))),
|
||||||
DeviceType: "Signal",
|
DeviceType: "Signal",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
// 处理道岔上的应答器
|
// 处理道岔上的应答器
|
||||||
transponders := turnout.transponders[refVal.DevicePort]
|
transponders := turnout.transponders[refVal.DevicePort]
|
||||||
if transponders != nil {
|
if transponders != nil {
|
||||||
for _, t := range transponders {
|
for _, t := range transponders {
|
||||||
if t.KilometerSystem != nil && t.KilometerSystem.CoordinateSystem != "" && deviceMap[t.Common.Id] == nil {
|
if judgeKilometerIsVaild(t.KilometerSystem) && deviceMap[t.Common.Id] == nil {
|
||||||
deviceMap[t.Common.Id] = &graphicData.CalculateLink_DevicePosition{
|
deviceMap[t.Common.Id] = &graphicData.CalculateLink_DevicePosition{
|
||||||
DeviceId: t.Common.Id,
|
DeviceId: t.Common.Id,
|
||||||
Offset: offset + int32(math.Abs(float64(t.KilometerSystem.Kilometer-prevKm))),
|
Offset: offset + int32(math.Abs(float64(t.KilometerSystem.Kilometer-prevKm))),
|
||||||
@ -253,10 +251,14 @@ func getGraphicSectionPointRef(section *buildCalcSectionStruct, b bool, defaultR
|
|||||||
}
|
}
|
||||||
apoint := section.axlePoints[graphicData.RelatedRef_A]
|
apoint := section.axlePoints[graphicData.RelatedRef_A]
|
||||||
bpoint := section.axlePoints[graphicData.RelatedRef_B]
|
bpoint := section.axlePoints[graphicData.RelatedRef_B]
|
||||||
if apoint == nil || bpoint == nil {
|
if apoint == nil && bpoint == nil {
|
||||||
return defaultRelateRef
|
return defaultRelateRef
|
||||||
|
} else if apoint != nil && bpoint == nil {
|
||||||
|
return &graphicData.RelatedRef{DeviceType: graphicData.RelatedRef_AxleCounting, Id: apoint.Common.Id}
|
||||||
|
} else if apoint == nil && bpoint != nil {
|
||||||
|
return &graphicData.RelatedRef{DeviceType: graphicData.RelatedRef_AxleCounting, Id: bpoint.Common.Id}
|
||||||
}
|
}
|
||||||
if apoint.KilometerSystem.Kilometer < bpoint.KilometerSystem.Kilometer && b {
|
if b {
|
||||||
return &graphicData.RelatedRef{DeviceType: graphicData.RelatedRef_AxleCounting, Id: apoint.Common.Id}
|
return &graphicData.RelatedRef{DeviceType: graphicData.RelatedRef_AxleCounting, Id: apoint.Common.Id}
|
||||||
} else {
|
} else {
|
||||||
return &graphicData.RelatedRef{DeviceType: graphicData.RelatedRef_AxleCounting, Id: bpoint.Common.Id}
|
return &graphicData.RelatedRef{DeviceType: graphicData.RelatedRef_AxleCounting, Id: bpoint.Common.Id}
|
||||||
@ -276,7 +278,7 @@ func getGraphicDataDeviceMap(gd *graphicData.RtssGraphicStorage) (*buildCalcStru
|
|||||||
for _, t := range gd.Turnouts {
|
for _, t := range gd.Turnouts {
|
||||||
var op *graphicData.KilometerSystem
|
var op *graphicData.KilometerSystem
|
||||||
for _, k := range t.KilometerSystem {
|
for _, k := range t.KilometerSystem {
|
||||||
if k.CoordinateSystem == "MAIN_LINE" && k.Kilometer != 0 {
|
if judgeKilometerIsVaild(k) {
|
||||||
op = k
|
op = k
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -317,6 +319,10 @@ func getGraphicDataDeviceMap(gd *graphicData.RtssGraphicStorage) (*buildCalcStru
|
|||||||
}
|
}
|
||||||
// 信号机关联到对应区段或道岔上
|
// 信号机关联到对应区段或道岔上
|
||||||
for _, s := range gd.Signals {
|
for _, s := range gd.Signals {
|
||||||
|
// 过滤掉没有公里标数据的信号机
|
||||||
|
if !judgeKilometerIsVaild(s.KilometerSystem) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
switch s.RefDev.DeviceType {
|
switch s.RefDev.DeviceType {
|
||||||
case graphicData.RelatedRef_Section:
|
case graphicData.RelatedRef_Section:
|
||||||
gm.SectionMap[s.RefDev.Id].signals = append(gm.SectionMap[s.RefDev.Id].signals, s)
|
gm.SectionMap[s.RefDev.Id].signals = append(gm.SectionMap[s.RefDev.Id].signals, s)
|
||||||
@ -326,6 +332,10 @@ func getGraphicDataDeviceMap(gd *graphicData.RtssGraphicStorage) (*buildCalcStru
|
|||||||
}
|
}
|
||||||
// 应答器关联到对应区段或道岔
|
// 应答器关联到对应区段或道岔
|
||||||
for _, t := range gd.Transponders {
|
for _, t := range gd.Transponders {
|
||||||
|
// 过滤掉没有公里标数据的应答器
|
||||||
|
if !judgeKilometerIsVaild(t.KilometerSystem) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
switch t.TransponderRef.DeviceType {
|
switch t.TransponderRef.DeviceType {
|
||||||
case graphicData.RelatedRef_Section:
|
case graphicData.RelatedRef_Section:
|
||||||
gm.SectionMap[t.TransponderRef.Id].transponders = append(gm.SectionMap[t.TransponderRef.Id].transponders, t)
|
gm.SectionMap[t.TransponderRef.Id].transponders = append(gm.SectionMap[t.TransponderRef.Id].transponders, t)
|
||||||
@ -335,6 +345,10 @@ func getGraphicDataDeviceMap(gd *graphicData.RtssGraphicStorage) (*buildCalcStru
|
|||||||
}
|
}
|
||||||
// 停车标关联到对应区段或道岔
|
// 停车标关联到对应区段或道岔
|
||||||
for _, s := range gd.StopPositions {
|
for _, s := range gd.StopPositions {
|
||||||
|
// 过滤掉没有公里标数据的停车标
|
||||||
|
if !judgeKilometerIsVaild(s.KilometerSystem) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
switch s.RefDev.DeviceType {
|
switch s.RefDev.DeviceType {
|
||||||
case graphicData.RelatedRef_Section:
|
case graphicData.RelatedRef_Section:
|
||||||
gm.SectionMap[s.RefDev.Id].stopPositions = append(gm.SectionMap[s.RefDev.Id].stopPositions, s)
|
gm.SectionMap[s.RefDev.Id].stopPositions = append(gm.SectionMap[s.RefDev.Id].stopPositions, s)
|
||||||
@ -450,14 +464,14 @@ func handleFunc(gm *buildCalcStruct, ref *graphicData.RelatedRef) (int, bool) {
|
|||||||
case graphicData.RelatedRef_Section:
|
case graphicData.RelatedRef_Section:
|
||||||
section := gm.SectionMap[ref.Id]
|
section := gm.SectionMap[ref.Id]
|
||||||
point := section.axlePoints[ref.DevicePort]
|
point := section.axlePoints[ref.DevicePort]
|
||||||
if point == nil || point.KilometerSystem == nil {
|
if point == nil || !judgeKilometerIsVaild(point.KilometerSystem) {
|
||||||
zap.S().Warnf("区段【%s】【%s】端缺少关联计轴信息", ref.Id, ref.DevicePort.String())
|
zap.S().Warnf("区段【%s】【%s】端缺少关联计轴信息", ref.Id, ref.DevicePort.String())
|
||||||
} else {
|
} else {
|
||||||
return int(point.KilometerSystem.Kilometer), true
|
return int(point.KilometerSystem.Kilometer), true
|
||||||
}
|
}
|
||||||
case graphicData.RelatedRef_Turnout:
|
case graphicData.RelatedRef_Turnout:
|
||||||
turnout := gm.TurnoutMap[ref.Id]
|
turnout := gm.TurnoutMap[ref.Id]
|
||||||
if turnout.CrossKilometerSystem == nil {
|
if !judgeKilometerIsVaild(turnout.CrossKilometerSystem) {
|
||||||
zap.S().Warnf("道岔【%s】缺少岔心公里标数据", ref.Id)
|
zap.S().Warnf("道岔【%s】缺少岔心公里标数据", ref.Id)
|
||||||
} else {
|
} else {
|
||||||
return int(turnout.CrossKilometerSystem.Kilometer), true
|
return int(turnout.CrossKilometerSystem.Kilometer), true
|
||||||
@ -483,10 +497,15 @@ func getStartKilometer(gm *buildCalcStruct, ref *graphicData.RelatedRef) (int64,
|
|||||||
return resultKilometer, 0
|
return resultKilometer, 0
|
||||||
case graphicData.RelatedRef_Turnout:
|
case graphicData.RelatedRef_Turnout:
|
||||||
turnout := gm.TurnoutMap[ref.Id]
|
turnout := gm.TurnoutMap[ref.Id]
|
||||||
if turnout.CrossKilometerSystem == nil {
|
if !judgeKilometerIsVaild(turnout.CrossKilometerSystem) {
|
||||||
panic(dto.ErrorDto{Code: dto.ArgumentParseError, Message: "道岔岔心无公里标"})
|
panic(dto.ErrorDto{Code: dto.ArgumentParseError, Message: "道岔岔心无公里标"})
|
||||||
}
|
}
|
||||||
return turnout.CrossKilometerSystem.Kilometer, 0
|
return turnout.CrossKilometerSystem.Kilometer, 0
|
||||||
}
|
}
|
||||||
panic(dto.ErrorDto{Code: dto.ArgumentParseError, Message: "错误的设备类型类型"})
|
panic(dto.ErrorDto{Code: dto.ArgumentParseError, Message: "错误的设备类型类型"})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 判断公里标是否有效
|
||||||
|
func judgeKilometerIsVaild(k *graphicData.KilometerSystem) bool {
|
||||||
|
return k != nil && k.CoordinateSystem == "MAIN_LINE" && k.Kilometer != 0
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user