diff --git a/api/simulation.go b/api/simulation.go index 817cb7d..b4c9017 100644 --- a/api/simulation.go +++ b/api/simulation.go @@ -244,7 +244,11 @@ func addTrain(c *gin.Context) { WheelDiameter: req.WheelDiameter, Speed: req.TrainSpeed, } - memory.AddTrainStateNew(simulation, rsp, req.ConfigTrain, req.TrainEndsA, req.TrainEndsB, req.MapId) + var err *sys_error.BusinessError = memory.AddTrainStateNew(simulation, + rsp, req.ConfigTrain, req.TrainEndsA, req.TrainEndsB, req.MapId) + if err != nil { + panic(sys_error.New("添加列车失败", err)) + } c.JSON(http.StatusOK, &rsp) } diff --git a/ts/simulation/wayside/memory/wayside_memory_train.go b/ts/simulation/wayside/memory/wayside_memory_train.go index eb7b8a6..5cc06c3 100644 --- a/ts/simulation/wayside/memory/wayside_memory_train.go +++ b/ts/simulation/wayside/memory/wayside_memory_train.go @@ -35,11 +35,14 @@ func CreateMsgTrainConfig(trainId int, trainLen int64, configTrainData dto.Confi // 增加列车状态 func AddTrainStateNew(vs *VerifySimulation, status *state_proto.TrainState, configTrainData dto.ConfigTrainData, trainEndsA dto.ConfigTrainEnds, - trainEndsB dto.ConfigTrainEnds, mapId int32) *state_proto.TrainState { + trainEndsB dto.ConfigTrainEnds, mapId int32) *sys_error.BusinessError { allTrainMap := &vs.Memory.Status.TrainStateMap - _, ok := allTrainMap.Load(status.Id) + value, ok := allTrainMap.Load(status.Id) if ok { - panic(fmt.Sprintf("列车【%s】已存在", status.Id)) + trainState := value.(*state_proto.TrainState) + if trainState.Show { + return sys_error.New(fmt.Sprintf("列车【%s】已存在", status.Id)) + } } // 显示状态 status.Show = true @@ -108,7 +111,7 @@ func AddTrainStateNew(vs *VerifySimulation, status *state_proto.TrainState, conf }) // 将信息合并到当前设备状态中 allTrainMap.Store(status.Id, status) - return status + return nil } // 增加列车状态 @@ -345,12 +348,14 @@ func RemoveAllTrain(vs *VerifySimulation) { return } allTrainMap.Range(func(k any, t any) bool { - train := t.(*state_proto.TrainState) - err := removeTrain(vs, train.Id, train) - if err != nil { - slog.Error("列车id:", train.Id, "移除失败,原因:", err.Error()) - } - allTrainMap.Store(train.Id, t) + id := k.(string) + RemoveTrainState(vs, id) + //train := t.(*state_proto.TrainState) + //err := removeTrain(vs, train.Id, train) + //if err != nil { + // slog.Error("列车id:", train.Id, "移除失败,原因:", err.Error()) + //} + //allTrainMap.Store(train.Id, t) return true }) } @@ -364,8 +369,7 @@ func removeTrain(vs *VerifySimulation, trainId string, train *state_proto.TrainS return err } train.Show = false - fi.RemoveTrainFromWorld(vs.World, trainId) - return nil + return fi.RemoveTrainFromWorld(vs.World, trainId) } // 删除列车状态