Merge remote-tracking branch 'origin/test' into test
This commit is contained in:
commit
f7910e91cc
@ -102,7 +102,7 @@ public abstract class Simulation<U extends SimulationUser, M extends Simulation
|
|||||||
|
|
||||||
public void updateState(int state) {
|
public void updateState(int state) {
|
||||||
this.state.set(state);
|
this.state.set(state);
|
||||||
this.fireWatcher();
|
this.fireWatcher("state", this.state);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void loadModule() {
|
public void loadModule() {
|
||||||
@ -556,14 +556,19 @@ public abstract class Simulation<U extends SimulationUser, M extends Simulation
|
|||||||
watchable.simulation = this;
|
watchable.simulation = this;
|
||||||
watcherMap.forEach((typeName, watcher) -> {
|
watcherMap.forEach((typeName, watcher) -> {
|
||||||
if (typeName.equals(watchable.getClass().getTypeName())) {
|
if (typeName.equals(watchable.getClass().getTypeName())) {
|
||||||
watchable.register(watcher);
|
watchable.register(watcher, null);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void watch(Watchable watchable, Watcher watcher) {
|
public void watch(Watchable watchable, Watcher watcher) {
|
||||||
watchable.simulation = this;
|
watchable.simulation = this;
|
||||||
watchable.register(watcher);
|
watchable.register(watcher, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void watchField(Watcher watcher, Watchable watchable, List<String> fieldList) {
|
||||||
|
watchable.simulation = this;
|
||||||
|
watchable.register(watcher, fieldList);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void saveOperation(Operation memberOperation) {
|
public void saveOperation(Operation memberOperation) {
|
||||||
|
@ -23,7 +23,7 @@ public abstract class SimulationTriggerMessagePublisher extends SimulationMessag
|
|||||||
public abstract Object buildMessage(Watchable watchable);
|
public abstract Object buildMessage(Watchable watchable);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleStateChange(Simulation simulation, Watchable watchable) {
|
public void handleFieldChange(Simulation simulation, Watchable watchable, String field, Object val) {
|
||||||
List<String> destinationList = this.getNeedBuildDestination(watchable);
|
List<String> destinationList = this.getNeedBuildDestination(watchable);
|
||||||
if (!destinationList.isEmpty()) {
|
if (!destinationList.isEmpty()) {
|
||||||
Object message = this.buildMessage(watchable);
|
Object message = this.buildMessage(watchable);
|
||||||
|
@ -6,16 +6,28 @@ import java.util.Objects;
|
|||||||
|
|
||||||
public abstract class Watchable {
|
public abstract class Watchable {
|
||||||
Simulation simulation;
|
Simulation simulation;
|
||||||
List<Watcher> watcherList = new ArrayList<>();
|
List<FieldWatcher> watcherList = new ArrayList<>();
|
||||||
|
|
||||||
public void register(Watcher watcher) {
|
public void register(Watcher watcher, List<String> fieldList) {
|
||||||
Objects.requireNonNull(watcher);
|
Objects.requireNonNull(watcher);
|
||||||
this.watcherList.add(watcher);
|
this.watcherList.add(new FieldWatcher(watcher, fieldList));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void fireWatcher() {
|
public void fireWatcher(String field, Object val) {
|
||||||
for (Watcher watcher : this.watcherList) {
|
for (FieldWatcher fieldWatcher : this.watcherList) {
|
||||||
watcher.handleStateChange(simulation, this);
|
if (fieldWatcher.fieldList == null || fieldWatcher.fieldList.contains(field)) {
|
||||||
|
fieldWatcher.watcher.handleFieldChange(simulation, this, field, val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class FieldWatcher{
|
||||||
|
Watcher watcher;
|
||||||
|
List<String> fieldList;
|
||||||
|
|
||||||
|
public FieldWatcher(Watcher watcher, List<String> fieldList) {
|
||||||
|
this.watcher = watcher;
|
||||||
|
this.fieldList = fieldList;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
package club.joylink.rtss.simulation;
|
package club.joylink.rtss.simulation;
|
||||||
|
|
||||||
public interface Watcher<W extends Watchable> {
|
public interface Watcher<W extends Watchable> {
|
||||||
void handleStateChange(Simulation simulation, W watchable);
|
void handleFieldChange(Simulation simulation, W watchable, String filed, Object val);
|
||||||
}
|
}
|
||||||
|
@ -157,10 +157,7 @@ public class AtsRouteService {
|
|||||||
Signal signal = simulation.getRepository().getByCode(signalCode, Signal.class);
|
Signal signal = simulation.getRepository().getByCode(signalCode, Signal.class);
|
||||||
List<Route> routeList = signal.getRouteList();
|
List<Route> routeList = signal.getRouteList();
|
||||||
if (!CollectionUtils.isEmpty(routeList)) {
|
if (!CollectionUtils.isEmpty(routeList)) {
|
||||||
for (Route route : routeList) {
|
routeList.stream().filter(Route::isArs).forEach(route -> {
|
||||||
if (!route.isArs()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (route.isFleetMode()) {
|
if (route.isFleetMode()) {
|
||||||
throw new SimulationException(SimulationExceptionType.Operation_Conflict,
|
throw new SimulationException(SimulationExceptionType.Operation_Conflict,
|
||||||
String.format("进路[%s(%s)]自动通过已开启,不能设置自动追踪", route.getName(), route.getCode()));
|
String.format("进路[%s(%s)]自动通过已开启,不能设置自动追踪", route.getName(), route.getCode()));
|
||||||
@ -171,9 +168,11 @@ public class AtsRouteService {
|
|||||||
if (simulation.getRepository().getConfig().isSignalHumanControlBeforeSetAtsControlOrCIAutoTrigger()) {
|
if (simulation.getRepository().getConfig().isSignalHumanControlBeforeSetAtsControlOrCIAutoTrigger()) {
|
||||||
BusinessExceptionAssertEnum.OPERATION_NOT_SUPPORTED.assertTrue(signal.isHumanControl(), String.format("信号机[%s]需处于人工控", signal.getCode()));
|
BusinessExceptionAssertEnum.OPERATION_NOT_SUPPORTED.assertTrue(signal.isHumanControl(), String.format("信号机[%s]需处于人工控", signal.getCode()));
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
for (Route route : routeList) {
|
||||||
route.setAtsControl(false);
|
route.setAtsControl(false);
|
||||||
|
if (route.isArs())
|
||||||
route.setCiControl(true);
|
route.setCiControl(true);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -303,6 +303,7 @@ public class AtsStationService {
|
|||||||
List<Route> routeList = repository.getRouteList();
|
List<Route> routeList = repository.getRouteList();
|
||||||
for (Route route : routeList) {
|
for (Route route : routeList) {
|
||||||
if (Objects.equals(route.getInterlockStation(), station)) {
|
if (Objects.equals(route.getInterlockStation(), station)) {
|
||||||
|
route.setAtsControl(false);
|
||||||
if (!route.isArs() || route.isFleetMode() || route.isCiControl()) {
|
if (!route.isArs() || route.isFleetMode() || route.isCiControl()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -467,13 +467,32 @@ public class Route extends MapNamedElement {
|
|||||||
public boolean isCiTrigger() {
|
public boolean isCiTrigger() {
|
||||||
List<SectionPath> approachPathList = this.start.getApproachPathList();
|
List<SectionPath> approachPathList = this.start.getApproachPathList();
|
||||||
for (SectionPath sectionPath : approachPathList) {
|
for (SectionPath sectionPath : approachPathList) {
|
||||||
|
//检查区段占用
|
||||||
List<Section> sectionList = sectionPath.getSectionList();
|
List<Section> sectionList = sectionPath.getSectionList();
|
||||||
|
boolean sectionOccupied = false;
|
||||||
for (Section section : sectionList) {
|
for (Section section : sectionList) {
|
||||||
if (section.isOccupiedOn(this.getStart().isRight())) {
|
if (section.isOccupiedOn(this.getStart().isRight())) {
|
||||||
|
sectionOccupied = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!sectionOccupied)
|
||||||
|
continue;
|
||||||
|
//检查道岔位置
|
||||||
|
if (CollectionUtils.isEmpty(sectionPath.getSwitchList())) {
|
||||||
|
boolean switchOnPosition = true;
|
||||||
|
for (SwitchElement switchElement : sectionPath.getSwitchList()) {
|
||||||
|
if (!switchElement.isOnPosition()) {
|
||||||
|
switchOnPosition = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!switchOnPosition)
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,6 +8,9 @@ import org.springframework.stereotype.Component;
|
|||||||
public class AtsTrainRouteService {
|
public class AtsTrainRouteService {
|
||||||
|
|
||||||
public void triggerRouteForTrain(AtsRepository atsRepository, AtsTrain atsTrain) {
|
public void triggerRouteForTrain(AtsRepository atsRepository, AtsTrain atsTrain) {
|
||||||
|
if (!atsRepository.getConfig().isArsOpen()) { // 列车进路触发服务是否开启
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (atsTrain.isPlanTrain()) { // 计划车
|
if (atsTrain.isPlanTrain()) { // 计划车
|
||||||
this.triggerForPlanTrain(atsRepository, atsTrain);
|
this.triggerForPlanTrain(atsRepository, atsTrain);
|
||||||
} else if (atsTrain.isHeadTrain()) { // 头码车
|
} else if (atsTrain.isHeadTrain()) { // 头码车
|
||||||
|
@ -0,0 +1,26 @@
|
|||||||
|
package club.joylink.rtss.simulation.rt.ATS;
|
||||||
|
|
||||||
|
import club.joylink.rtss.simulation.rt.ATS.bo.AtsRepository;
|
||||||
|
import club.joylink.rtss.simulation.rt.ATS.bo.AtsTrain;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ATS列车追踪服务
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class AtsTrainTraceService {
|
||||||
|
|
||||||
|
public void traceTrain(AtsRepository atsRepository) {
|
||||||
|
for (AtsTrain atsTrain : atsRepository.getTrainMap().values()) {
|
||||||
|
if (atsTrain.isCtc()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String axcSectionId = atsTrain.getAxcSectionId();
|
||||||
|
if (axcSectionId == null) { // 没有实际列车
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
package club.joylink.rtss.simulation.rt.ATS.bo;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
public class AtsConfig {
|
||||||
|
boolean arsOpen;
|
||||||
|
|
||||||
|
}
|
@ -4,8 +4,8 @@ import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
|
|||||||
import club.joylink.rtss.simulation.SimulationRepository;
|
import club.joylink.rtss.simulation.SimulationRepository;
|
||||||
import club.joylink.rtss.simulation.cbtc.data.map.Station;
|
import club.joylink.rtss.simulation.cbtc.data.map.Station;
|
||||||
import club.joylink.rtss.simulation.rt.ATS.bo.plan.AtsRunPlan;
|
import club.joylink.rtss.simulation.rt.ATS.bo.plan.AtsRunPlan;
|
||||||
import club.joylink.rtss.simulation.rt.ATS.bo.plan.AtsStationPlan;
|
|
||||||
import club.joylink.rtss.simulation.rt.ATS.bo.plan.AtsTripPlan;
|
import club.joylink.rtss.simulation.rt.ATS.bo.plan.AtsTripPlan;
|
||||||
|
import club.joylink.rtss.simulation.rt.RtSimulation;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@ -15,6 +15,8 @@ import java.util.Map;
|
|||||||
public class AtsRepository extends SimulationRepository {
|
public class AtsRepository extends SimulationRepository {
|
||||||
public static final String NAME = "ATS";
|
public static final String NAME = "ATS";
|
||||||
|
|
||||||
|
AtsConfig config;
|
||||||
|
|
||||||
AtsRunPlan runPlan;
|
AtsRunPlan runPlan;
|
||||||
|
|
||||||
Map<String, AtsRoute> routeMap = new HashMap<>();
|
Map<String, AtsRoute> routeMap = new HashMap<>();
|
||||||
@ -23,21 +25,27 @@ public class AtsRepository extends SimulationRepository {
|
|||||||
Map<String, AtsSignal> signalMap = new HashMap<>();
|
Map<String, AtsSignal> signalMap = new HashMap<>();
|
||||||
Map<String, AtsStand> standMap = new HashMap<>();
|
Map<String, AtsStand> standMap = new HashMap<>();
|
||||||
Map<String, Station> stationMap = new HashMap<>();
|
Map<String, Station> stationMap = new HashMap<>();
|
||||||
Map<String, AtsStationPlan> stationPlanMap = new HashMap<>();
|
|
||||||
Map<String, AtsSwitch> switchMap = new HashMap<>();
|
Map<String, AtsSwitch> switchMap = new HashMap<>();
|
||||||
Map<String, AtsTrain> trainMap = new HashMap<>();
|
Map<String, AtsTrain> trainMap = new HashMap<>();
|
||||||
Map<String, AtsTripPlan> tripPlanMap = new HashMap<>();
|
|
||||||
Map<String, AtsUnitPath> unitPathMap = new HashMap<>();
|
Map<String, AtsUnitPath> unitPathMap = new HashMap<>();
|
||||||
|
|
||||||
public AtsRepository() {
|
public AtsRepository() {
|
||||||
super(NAME);
|
super(NAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static AtsRepository getInstanceFrom(RtSimulation simulation) {
|
||||||
|
return simulation.getRepository(NAME, AtsRepository.class);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initState() {
|
public void initState() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setRunPlan(AtsRunPlan atsRunPlan) {
|
||||||
|
this.runPlan = atsRunPlan;
|
||||||
|
}
|
||||||
|
|
||||||
public AtsRunPlan getRunPlan() {
|
public AtsRunPlan getRunPlan() {
|
||||||
return runPlan;
|
return runPlan;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package club.joylink.rtss.simulation.rt.ATS.bo;
|
package club.joylink.rtss.simulation.rt.ATS.bo;
|
||||||
|
|
||||||
import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
|
import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
|
||||||
|
import club.joylink.rtss.simulation.rt.ATS.bo.plan.AtsRunPlanBuilder;
|
||||||
import club.joylink.rtss.vo.map.*;
|
import club.joylink.rtss.vo.map.*;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -28,7 +28,7 @@ public class AtsSection extends AtsDevice {
|
|||||||
if (this.occupy != occ) {
|
if (this.occupy != occ) {
|
||||||
this.occupy = occ;
|
this.occupy = occ;
|
||||||
this.stateList.set(1, this.convert(this.occupy));
|
this.stateList.set(1, this.convert(this.occupy));
|
||||||
this.fireWatcher();
|
this.fireWatcher("occupy", this.occupy);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -38,7 +38,7 @@ public class AtsSection extends AtsDevice {
|
|||||||
if (this.ctOccupy != ctOcc) {
|
if (this.ctOccupy != ctOcc) {
|
||||||
this.ctOccupy = ctOcc;
|
this.ctOccupy = ctOcc;
|
||||||
this.stateList.set(2, this.convert(this.ctOccupy));
|
this.stateList.set(2, this.convert(this.ctOccupy));
|
||||||
this.fireWatcher();
|
this.fireWatcher("ctOccupy", this.ctOccupy);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -48,7 +48,7 @@ public class AtsSection extends AtsDevice {
|
|||||||
if (this.rl != rl) {
|
if (this.rl != rl) {
|
||||||
this.rl = rl;
|
this.rl = rl;
|
||||||
this.stateList.set(3, this.convert(this.rl));
|
this.stateList.set(3, this.convert(this.rl));
|
||||||
this.fireWatcher();
|
this.fireWatcher("rl", this.rl);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -58,7 +58,7 @@ public class AtsSection extends AtsDevice {
|
|||||||
if (this.lr != lr) {
|
if (this.lr != lr) {
|
||||||
this.lr = lr;
|
this.lr = lr;
|
||||||
this.stateList.set(4, this.convert(this.lr));
|
this.stateList.set(4, this.convert(this.lr));
|
||||||
this.fireWatcher();
|
this.fireWatcher("lr", this.lr);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -68,7 +68,7 @@ public class AtsSection extends AtsDevice {
|
|||||||
if (this.ol != ol) {
|
if (this.ol != ol) {
|
||||||
this.ol = ol;
|
this.ol = ol;
|
||||||
this.stateList.set(5, this.convert(this.ol));
|
this.stateList.set(5, this.convert(this.ol));
|
||||||
this.fireWatcher();
|
this.fireWatcher("ol", this.ol);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -78,7 +78,7 @@ public class AtsSection extends AtsDevice {
|
|||||||
if (this.delayTime != delayTime) {
|
if (this.delayTime != delayTime) {
|
||||||
this.delayTime = delayTime;
|
this.delayTime = delayTime;
|
||||||
this.stateList.set(6, this.delayTime);
|
this.stateList.set(6, this.delayTime);
|
||||||
this.fireWatcher();
|
this.fireWatcher("delayTime", this.delayTime);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -34,7 +34,7 @@ public class AtsSignal extends AtsDevice {
|
|||||||
if (this.signalAspect != signalAspect) {
|
if (this.signalAspect != signalAspect) {
|
||||||
this.signalAspect = signalAspect;
|
this.signalAspect = signalAspect;
|
||||||
this.stateList.set(1, this.signalAspect);
|
this.stateList.set(1, this.signalAspect);
|
||||||
this.fireWatcher();
|
this.fireWatcher("signalAspect", this.signalAspect);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -44,7 +44,7 @@ public class AtsSignal extends AtsDevice {
|
|||||||
if (this.logic != logic) {
|
if (this.logic != logic) {
|
||||||
this.logic = logic;
|
this.logic = logic;
|
||||||
this.stateList.set(2, this.convert(this.logic));
|
this.stateList.set(2, this.convert(this.logic));
|
||||||
this.fireWatcher();
|
this.fireWatcher("logic", this.logic);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -54,7 +54,7 @@ public class AtsSignal extends AtsDevice {
|
|||||||
if (this.forceLight != forceLight) {
|
if (this.forceLight != forceLight) {
|
||||||
this.forceLight = forceLight;
|
this.forceLight = forceLight;
|
||||||
this.stateList.set(3, this.convert(this.forceLight));
|
this.stateList.set(3, this.convert(this.forceLight));
|
||||||
this.fireWatcher();
|
this.fireWatcher("forceLight", this.forceLight);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -64,7 +64,7 @@ public class AtsSignal extends AtsDevice {
|
|||||||
if (this.bl != bl) {
|
if (this.bl != bl) {
|
||||||
this.bl = bl;
|
this.bl = bl;
|
||||||
this.stateList.set(4, this.convert(this.bl));
|
this.stateList.set(4, this.convert(this.bl));
|
||||||
this.fireWatcher();
|
this.fireWatcher("bl", this.bl);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -74,7 +74,7 @@ public class AtsSignal extends AtsDevice {
|
|||||||
if (this.rbl != rbl) {
|
if (this.rbl != rbl) {
|
||||||
this.rbl = rbl;
|
this.rbl = rbl;
|
||||||
this.stateList.set(5, this.convert(this.rbl));
|
this.stateList.set(5, this.convert(this.rbl));
|
||||||
this.fireWatcher();
|
this.fireWatcher("rbl", this.rbl);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -84,7 +84,7 @@ public class AtsSignal extends AtsDevice {
|
|||||||
if (this.level != level) {
|
if (this.level != level) {
|
||||||
this.level = level;
|
this.level = level;
|
||||||
this.stateList.set(6, this.level);
|
this.stateList.set(6, this.level);
|
||||||
this.fireWatcher();
|
this.fireWatcher("level", this.level);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -94,7 +94,7 @@ public class AtsSignal extends AtsDevice {
|
|||||||
if (!Objects.equals(this.lrId, lrId)) {
|
if (!Objects.equals(this.lrId, lrId)) {
|
||||||
this.lrId = lrId;
|
this.lrId = lrId;
|
||||||
this.stateList.set(7, this.lrId);
|
this.stateList.set(7, this.lrId);
|
||||||
this.fireWatcher();
|
this.fireWatcher("lrId", this.lrId);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -104,7 +104,7 @@ public class AtsSignal extends AtsDevice {
|
|||||||
if (this.delayTime != delayTime) {
|
if (this.delayTime != delayTime) {
|
||||||
this.delayTime = delayTime;
|
this.delayTime = delayTime;
|
||||||
this.stateList.set(8, this.delayTime);
|
this.stateList.set(8, this.delayTime);
|
||||||
this.fireWatcher();
|
this.fireWatcher("delayTime", this.delayTime);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -114,7 +114,7 @@ public class AtsSignal extends AtsDevice {
|
|||||||
if (this.guideTime != guideTime) {
|
if (this.guideTime != guideTime) {
|
||||||
this.guideTime = guideTime;
|
this.guideTime = guideTime;
|
||||||
this.stateList.set(9, this.guideTime);
|
this.stateList.set(9, this.guideTime);
|
||||||
this.fireWatcher();
|
this.fireWatcher("guideTime", this.guideTime);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -30,7 +30,7 @@ public class AtsSwitch extends AtsDevice {
|
|||||||
if (this.position != position) {
|
if (this.position != position) {
|
||||||
this.position = position;
|
this.position = position;
|
||||||
this.stateList.set(1, this.position);
|
this.stateList.set(1, this.position);
|
||||||
this.fireWatcher();
|
this.fireWatcher("position", this.position);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -40,7 +40,7 @@ public class AtsSwitch extends AtsDevice {
|
|||||||
if (this.bl != bl) {
|
if (this.bl != bl) {
|
||||||
this.bl = bl;
|
this.bl = bl;
|
||||||
this.stateList.set(2, this.convert(this.bl));
|
this.stateList.set(2, this.convert(this.bl));
|
||||||
this.fireWatcher();
|
this.fireWatcher("bl", this.bl);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -50,7 +50,7 @@ public class AtsSwitch extends AtsDevice {
|
|||||||
if (this.sl != sl) {
|
if (this.sl != sl) {
|
||||||
this.sl = sl;
|
this.sl = sl;
|
||||||
this.stateList.set(3, this.convert(this.sl));
|
this.stateList.set(3, this.convert(this.sl));
|
||||||
this.fireWatcher();
|
this.fireWatcher("sl", this.sl);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -60,7 +60,7 @@ public class AtsSwitch extends AtsDevice {
|
|||||||
if (this.rl != rl) {
|
if (this.rl != rl) {
|
||||||
this.rl = rl;
|
this.rl = rl;
|
||||||
this.stateList.set(4, this.convert(this.rl));
|
this.stateList.set(4, this.convert(this.rl));
|
||||||
this.fireWatcher();
|
this.fireWatcher("rl", this.rl);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -70,7 +70,7 @@ public class AtsSwitch extends AtsDevice {
|
|||||||
if (this.ol != ol) {
|
if (this.ol != ol) {
|
||||||
this.ol = ol;
|
this.ol = ol;
|
||||||
this.stateList.set(5, this.convert(this.ol));
|
this.stateList.set(5, this.convert(this.ol));
|
||||||
this.fireWatcher();
|
this.fireWatcher("ol", this.ol);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -80,7 +80,7 @@ public class AtsSwitch extends AtsDevice {
|
|||||||
if (this.fl != fl) {
|
if (this.fl != fl) {
|
||||||
this.fl = fl;
|
this.fl = fl;
|
||||||
this.stateList.set(6, this.convert(this.fl));
|
this.stateList.set(6, this.convert(this.fl));
|
||||||
this.fireWatcher();
|
this.fireWatcher("fl", this.fl);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -19,9 +19,11 @@ public class AtsTrain extends AtsDevice {
|
|||||||
public static final int DIRECTION_N = 0; // 未知
|
public static final int DIRECTION_N = 0; // 未知
|
||||||
public static final int DIRECTION_R = 1; // 右
|
public static final int DIRECTION_R = 1; // 右
|
||||||
public static final int DIRECTION_L = -1; // 左
|
public static final int DIRECTION_L = -1; // 左
|
||||||
|
boolean ctc; // 是否连续通信列车
|
||||||
String sectionId; // 轨道区段(计轴区段或道岔区段)
|
String sectionId; // 轨道区段(计轴区段或道岔区段)
|
||||||
int offset; // 轨道区段偏移
|
int offset; // 轨道区段偏移
|
||||||
String logicSectionId; // 逻辑区段(逻辑区段或道岔计轴区段或岔心)
|
String axcSectionId; // 所在计轴id
|
||||||
|
String trainWindowId; // 所在车次窗id
|
||||||
String sn;// 服务号/表号
|
String sn;// 服务号/表号
|
||||||
String tn;// 车次号/圈数
|
String tn;// 车次号/圈数
|
||||||
String dn;// 目的地号
|
String dn;// 目的地号
|
||||||
|
@ -3,9 +3,9 @@ package club.joylink.rtss.simulation.rt.ATS.bo.plan;
|
|||||||
import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
|
import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.time.LocalTime;
|
import java.time.LocalTime;
|
||||||
import java.util.List;
|
import java.util.*;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
public class AtsRunPlan {
|
public class AtsRunPlan {
|
||||||
@ -27,11 +27,17 @@ public class AtsRunPlan {
|
|||||||
*/
|
*/
|
||||||
Map<String, List<AtsTripPlan>> endTripMap;
|
Map<String, List<AtsTripPlan>> endTripMap;
|
||||||
|
|
||||||
|
public AtsRunPlan() {
|
||||||
|
this.serviceMap = new HashMap<>();
|
||||||
|
this.tripPlanMap = new HashMap<>();
|
||||||
|
this.endTripMap = new HashMap<>();
|
||||||
|
}
|
||||||
|
|
||||||
public AtsTripPlan queryNextTripPlanOfPlan(AtsTripPlan atsTripPlan) {
|
public AtsTripPlan queryNextTripPlanOfPlan(AtsTripPlan atsTripPlan) {
|
||||||
return this.queryNextTripPlanOfEnd(atsTripPlan.getEndSectionId(), atsTripPlan.getEndTime());
|
return this.queryNextTripPlanOfEnd(atsTripPlan.getEndSectionId(), atsTripPlan.getEndTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
public AtsTripPlan queryNextTripPlanOfEnd(String endId, LocalTime time) {
|
public AtsTripPlan queryNextTripPlanOfEnd(String endId, LocalDateTime time) {
|
||||||
List<AtsTripPlan> tripPlanList = this.endTripMap.get(endId);
|
List<AtsTripPlan> tripPlanList = this.endTripMap.get(endId);
|
||||||
AtsTripPlan next = null;
|
AtsTripPlan next = null;
|
||||||
if (tripPlanList != null) {
|
if (tripPlanList != null) {
|
||||||
@ -53,4 +59,32 @@ public class AtsRunPlan {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void save(AtsTripPlan atsTripPlan) {
|
||||||
|
String stNumber = atsTripPlan.getStNumber();
|
||||||
|
BusinessExceptionAssertEnum.DATA_ERROR.assertNotTrue(this.tripPlanMap.containsKey(stNumber));
|
||||||
|
this.tripPlanMap.put(stNumber, atsTripPlan);
|
||||||
|
|
||||||
|
List<AtsTripPlan> tripPlanList = this.serviceMap.get(atsTripPlan.sn);
|
||||||
|
if (tripPlanList == null) {
|
||||||
|
tripPlanList = new ArrayList<>();
|
||||||
|
this.serviceMap.put(atsTripPlan.sn, tripPlanList);
|
||||||
|
}
|
||||||
|
tripPlanList.add(atsTripPlan);
|
||||||
|
|
||||||
|
List<AtsTripPlan> endPlanList = this.endTripMap.get(atsTripPlan.getStartSectionId());
|
||||||
|
if (endPlanList == null) {
|
||||||
|
endPlanList = new ArrayList<>();
|
||||||
|
this.endTripMap.put(atsTripPlan.getStartSectionId(), endPlanList);
|
||||||
|
}
|
||||||
|
endPlanList.add(atsTripPlan);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sort() {
|
||||||
|
this.serviceMap.forEach((sn, list) -> {
|
||||||
|
list.sort(Comparator.comparing(AtsTripPlan::getStartTime));
|
||||||
|
});
|
||||||
|
this.endTripMap.forEach((stn, list) -> {
|
||||||
|
list.sort(Comparator.comparing(AtsTripPlan::getStartTime));
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,74 @@
|
|||||||
|
package club.joylink.rtss.simulation.rt.ATS.bo.plan;
|
||||||
|
|
||||||
|
import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
|
||||||
|
import club.joylink.rtss.simulation.rt.repo.CommonRepository;
|
||||||
|
import club.joylink.rtss.vo.client.runplan.RunPlanTripTimeVO;
|
||||||
|
import club.joylink.rtss.vo.client.runplan.RunPlanTripVO;
|
||||||
|
import club.joylink.rtss.vo.client.runplan.RunPlanVO;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.LocalTime;
|
||||||
|
import java.time.ZoneOffset;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class AtsRunPlanBuilder {
|
||||||
|
|
||||||
|
public static AtsRunPlan buildFrom(RunPlanVO runPlanVO, LocalDate date, CommonRepository commonRepo) {
|
||||||
|
AtsRunPlan atsRunPlan = new AtsRunPlan();
|
||||||
|
List<RunPlanTripVO> tripList = runPlanVO.getTripList();
|
||||||
|
for (RunPlanTripVO tripVO : tripList) {
|
||||||
|
AtsTripPlan atsTripPlan = buildAtsTripPlan(tripVO, date, commonRepo);
|
||||||
|
atsRunPlan.save(atsTripPlan);
|
||||||
|
}
|
||||||
|
atsRunPlan.sort();
|
||||||
|
return atsRunPlan;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static AtsTripPlan buildAtsTripPlan(RunPlanTripVO tripVO, LocalDate date, CommonRepository commonRepo) {
|
||||||
|
AtsTripPlan tripPlan = new AtsTripPlan();
|
||||||
|
tripPlan.sn = tripVO.getServiceNumber();
|
||||||
|
tripPlan.tn = tripVO.getTripNumber();
|
||||||
|
tripPlan.dn = tripVO.getDestinationCode();
|
||||||
|
tripPlan.in = tripVO.getIsInbound();
|
||||||
|
tripPlan.out = tripVO.getIsOutbound();
|
||||||
|
tripPlan.spare = tripVO.getIsBackUp();
|
||||||
|
commonRepo.getSectionById(tripVO.getStartSectionCode());
|
||||||
|
commonRepo.getSectionById(tripVO.getEndSectionCode());
|
||||||
|
BusinessExceptionAssertEnum.DATA_ERROR.assertNotNull(tripVO.getStartTime());
|
||||||
|
BusinessExceptionAssertEnum.DATA_ERROR.assertNotNull(tripVO.getEndTime());
|
||||||
|
tripPlan.startSectionId = tripVO.getStartSectionCode();
|
||||||
|
tripPlan.startTime = handleRunPlanDataTime(date, tripVO.getStartTime());
|
||||||
|
tripPlan.endSectionId = tripVO.getEndSectionCode();
|
||||||
|
tripPlan.endTime = handleRunPlanDataTime(date, tripVO.getEndTime());
|
||||||
|
tripPlan.stationPlanList = buildStationPlanList(tripVO, date, commonRepo);
|
||||||
|
return tripPlan;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ZoneOffset zoneOffset = ZoneOffset.ofHours(0);
|
||||||
|
|
||||||
|
private static List<AtsStationPlan> buildStationPlanList(RunPlanTripVO tripVO, LocalDate date, CommonRepository commonRepo) {
|
||||||
|
List<RunPlanTripTimeVO> timeList = tripVO.getTimeList();
|
||||||
|
List<AtsStationPlan> list = new ArrayList<>();
|
||||||
|
for (RunPlanTripTimeVO tripTimeVO : timeList) {
|
||||||
|
commonRepo.getStationById(tripTimeVO.getStationCode());
|
||||||
|
commonRepo.getSectionById(tripTimeVO.getSectionCode());
|
||||||
|
AtsStationPlan atsStationPlan = new AtsStationPlan();
|
||||||
|
atsStationPlan.stationId = tripTimeVO.getStationCode();
|
||||||
|
atsStationPlan.sectionId = tripTimeVO.getSectionCode();
|
||||||
|
BusinessExceptionAssertEnum.DATA_ERROR.assertNotNull(tripTimeVO.getArrivalTime());
|
||||||
|
BusinessExceptionAssertEnum.DATA_ERROR.assertNotNull(tripTimeVO.getDepartureTime());
|
||||||
|
atsStationPlan.arriveTime = handleRunPlanDataTime(date, tripTimeVO.getArrivalTime());
|
||||||
|
atsStationPlan.leaveTime = handleRunPlanDataTime(date, tripTimeVO.getDepartureTime());
|
||||||
|
atsStationPlan.parkTime = (int) (atsStationPlan.leaveTime.toEpochSecond(zoneOffset) - atsStationPlan.arriveTime.toEpochSecond(zoneOffset));
|
||||||
|
list.add(atsStationPlan);
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static LocalDateTime handleRunPlanDataTime(LocalDate date, LocalTime startTime) {
|
||||||
|
return date.atTime(startTime).plusHours(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -2,13 +2,13 @@ package club.joylink.rtss.simulation.rt.ATS.bo.plan;
|
|||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
import java.time.LocalTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
public class AtsStationPlan {
|
public class AtsStationPlan {
|
||||||
String stationId;
|
String stationId;
|
||||||
String sectionId;
|
String sectionId;
|
||||||
LocalTime arriveTime;// 到站时间
|
LocalDateTime arriveTime;// 到站时间
|
||||||
LocalTime leaveTime;// 出发时间
|
LocalDateTime leaveTime;// 出发时间
|
||||||
int parkTime;// 停靠时长
|
int parkTime;// 停靠时长
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@ package club.joylink.rtss.simulation.rt.ATS.bo.plan;
|
|||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
import java.time.LocalTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@ -14,16 +14,18 @@ public class AtsTripPlan {
|
|||||||
boolean in;// 回库
|
boolean in;// 回库
|
||||||
boolean out;// 出库
|
boolean out;// 出库
|
||||||
boolean spare;// 备用
|
boolean spare;// 备用
|
||||||
String startStationId;
|
|
||||||
String startSectionId;
|
String startSectionId;
|
||||||
LocalTime startTime;
|
LocalDateTime startTime;
|
||||||
String endStationId;
|
|
||||||
String endSectionId;
|
String endSectionId;
|
||||||
LocalTime endTime;
|
LocalDateTime endTime;
|
||||||
List<AtsStationPlan> stationPlanList;
|
List<AtsStationPlan> stationPlanList;
|
||||||
boolean depart; // 是否已经发车
|
boolean depart; // 是否已经发车
|
||||||
|
|
||||||
public static String buildSTNumber(String sn, String tn) {
|
public static String buildSTNumber(String sn, String tn) {
|
||||||
return String.format("%s%s", StringUtils.hasText(sn)?sn:"", StringUtils.hasText(tn)?tn:"");
|
return String.format("%s%s", StringUtils.hasText(sn)?sn:"", StringUtils.hasText(tn)?tn:"");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getStNumber() {
|
||||||
|
return buildSTNumber(this.sn, this.tn);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,8 +10,9 @@ import org.springframework.stereotype.Component;
|
|||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class CilSectionAtsWatcher implements Watcher<CilSection> {
|
public class CilSectionAtsWatcher implements Watcher<CilSection> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleStateChange(Simulation simulation, CilSection watchable) {
|
public void handleFieldChange(Simulation simulation, CilSection watchable, String filed, Object val) {
|
||||||
AtsRepository repository = (AtsRepository) simulation.getRepository(AtsRepository.NAME, AtsRepository.class);
|
AtsRepository repository = (AtsRepository) simulation.getRepository(AtsRepository.NAME, AtsRepository.class);
|
||||||
AtsMessagePublisher messagePublisher = (AtsMessagePublisher) simulation.getMessagePublisher(AtsMessagePublisher.NAME, AtsMessagePublisher.class);
|
AtsMessagePublisher messagePublisher = (AtsMessagePublisher) simulation.getMessagePublisher(AtsMessagePublisher.NAME, AtsMessagePublisher.class);
|
||||||
AtsSection atsSection = repository.getSectionById(watchable.getId());
|
AtsSection atsSection = repository.getSectionById(watchable.getId());
|
||||||
|
@ -11,7 +11,7 @@ import org.springframework.stereotype.Component;
|
|||||||
@Component
|
@Component
|
||||||
public class CilSignalAtsWatcher implements Watcher<CilSignal> {
|
public class CilSignalAtsWatcher implements Watcher<CilSignal> {
|
||||||
@Override
|
@Override
|
||||||
public void handleStateChange(Simulation simulation, CilSignal watchable) {
|
public void handleFieldChange(Simulation simulation, CilSignal watchable, String filed, Object val) {
|
||||||
AtsRepository repository = (AtsRepository) simulation.getRepository(AtsRepository.NAME, AtsRepository.class);
|
AtsRepository repository = (AtsRepository) simulation.getRepository(AtsRepository.NAME, AtsRepository.class);
|
||||||
AtsMessagePublisher messagePublisher = (AtsMessagePublisher) simulation.getMessagePublisher(AtsMessagePublisher.NAME, AtsMessagePublisher.class);
|
AtsMessagePublisher messagePublisher = (AtsMessagePublisher) simulation.getMessagePublisher(AtsMessagePublisher.NAME, AtsMessagePublisher.class);
|
||||||
AtsSignal atsSignal = repository.getSignalById(watchable.getId());
|
AtsSignal atsSignal = repository.getSignalById(watchable.getId());
|
||||||
|
@ -11,7 +11,7 @@ import org.springframework.stereotype.Component;
|
|||||||
@Component
|
@Component
|
||||||
public class CilSwitchAtsWatcher implements Watcher<CilSwitch> {
|
public class CilSwitchAtsWatcher implements Watcher<CilSwitch> {
|
||||||
@Override
|
@Override
|
||||||
public void handleStateChange(Simulation simulation, CilSwitch watchable) {
|
public void handleFieldChange(Simulation simulation, CilSwitch watchable, String filed, Object val) {
|
||||||
AtsRepository repository = (AtsRepository) simulation.getRepository(AtsRepository.NAME, AtsRepository.class);
|
AtsRepository repository = (AtsRepository) simulation.getRepository(AtsRepository.NAME, AtsRepository.class);
|
||||||
AtsMessagePublisher messagePublisher = (AtsMessagePublisher) simulation.getMessagePublisher(AtsMessagePublisher.NAME, AtsMessagePublisher.class);
|
AtsMessagePublisher messagePublisher = (AtsMessagePublisher) simulation.getMessagePublisher(AtsMessagePublisher.NAME, AtsMessagePublisher.class);
|
||||||
AtsSwitch atsSwitch = repository.getSwitchById(watchable.getId());
|
AtsSwitch atsSwitch = repository.getSwitchById(watchable.getId());
|
||||||
|
@ -7,6 +7,7 @@ import club.joylink.rtss.simulation.rt.SRD.bo.SrTrain;
|
|||||||
import club.joylink.rtss.simulation.rt.SRD.bo.SrdRepository;
|
import club.joylink.rtss.simulation.rt.SRD.bo.SrdRepository;
|
||||||
import club.joylink.rtss.simulation.rt.SRD.bo.TrackPosition;
|
import club.joylink.rtss.simulation.rt.SRD.bo.TrackPosition;
|
||||||
import club.joylink.rtss.simulation.rt.repo.*;
|
import club.joylink.rtss.simulation.rt.repo.*;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
@ -17,6 +18,7 @@ import java.util.List;
|
|||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
@Component
|
@Component
|
||||||
public class CilRouteLogicService {
|
public class CilRouteLogicService {
|
||||||
|
|
||||||
@ -44,7 +46,11 @@ public class CilRouteLogicService {
|
|||||||
.sorted(Comparator.comparing(commonRoute -> commonRoute.getPathElement().getReverseSwitchCount()))
|
.sorted(Comparator.comparing(commonRoute -> commonRoute.getPathElement().getReverseSwitchCount()))
|
||||||
.findFirst().get();
|
.findFirst().get();
|
||||||
if (!cilRepository.isSupervised(route.getId())) {
|
if (!cilRepository.isSupervised(route.getId())) {
|
||||||
|
try {
|
||||||
this.setRoute(rtSimulation, route.getId());
|
this.setRoute(rtSimulation, route.getId());
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("联锁自动触发进路失败:", e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -24,19 +24,18 @@ public class CilSection extends CilDevice {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init() {
|
public void init() {
|
||||||
axcOccupy = false;
|
this.updateAxcOccupy(false);
|
||||||
routeId = null;
|
this.updateRouteId(null);
|
||||||
rl = false;
|
this.updateRl(false);
|
||||||
lr = false;
|
this.updateLr(false);
|
||||||
ol = false;
|
this.updateOl(false);
|
||||||
delayTime = 0;
|
this.updateDelayTime(0);
|
||||||
this.fireWatcher();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean updateAxcOccupy(boolean axcOccupy) {
|
private boolean updateAxcOccupy(boolean axcOccupy) {
|
||||||
if (this.axcOccupy != axcOccupy) {
|
if (this.axcOccupy != axcOccupy) {
|
||||||
this.axcOccupy = axcOccupy;
|
this.axcOccupy = axcOccupy;
|
||||||
this.fireWatcher();
|
this.fireWatcher("axcOccupy", this.axcOccupy);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -45,7 +44,7 @@ public class CilSection extends CilDevice {
|
|||||||
private boolean updateRouteId(String routeId) {
|
private boolean updateRouteId(String routeId) {
|
||||||
if (!Objects.equals(this.routeId, routeId)) {
|
if (!Objects.equals(this.routeId, routeId)) {
|
||||||
this.routeId = routeId;
|
this.routeId = routeId;
|
||||||
this.fireWatcher();
|
this.fireWatcher("routeId", this.routeId);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -54,7 +53,7 @@ public class CilSection extends CilDevice {
|
|||||||
private boolean updateRl(boolean rl) {
|
private boolean updateRl(boolean rl) {
|
||||||
if (this.rl != rl) {
|
if (this.rl != rl) {
|
||||||
this.rl = rl;
|
this.rl = rl;
|
||||||
this.fireWatcher();
|
this.fireWatcher("rl", this.rl);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -63,7 +62,7 @@ public class CilSection extends CilDevice {
|
|||||||
private boolean updateOl(boolean ol) {
|
private boolean updateOl(boolean ol) {
|
||||||
if (this.ol != ol) {
|
if (this.ol != ol) {
|
||||||
this.ol = ol;
|
this.ol = ol;
|
||||||
this.fireWatcher();
|
this.fireWatcher("ol", this.ol);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -72,7 +71,7 @@ public class CilSection extends CilDevice {
|
|||||||
private boolean updateLr(boolean lr) {
|
private boolean updateLr(boolean lr) {
|
||||||
if (this.lr != lr) {
|
if (this.lr != lr) {
|
||||||
this.lr = lr;
|
this.lr = lr;
|
||||||
this.fireWatcher();
|
this.fireWatcher("lr", this.lr);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -81,7 +80,7 @@ public class CilSection extends CilDevice {
|
|||||||
private boolean updateDelayTime(int delayTime) {
|
private boolean updateDelayTime(int delayTime) {
|
||||||
if (this.delayTime != delayTime) {
|
if (this.delayTime != delayTime) {
|
||||||
this.delayTime = delayTime;
|
this.delayTime = delayTime;
|
||||||
this.fireWatcher();
|
this.fireWatcher("delayTime", this.delayTime);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -45,24 +45,23 @@ public class CilSignal extends CilDevice {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init() {
|
public void init() {
|
||||||
signalAspect = SrSignal.H;
|
this.updateSignalAspect(SrSignal.H);
|
||||||
logic = false;
|
this.updateLogic(false);
|
||||||
forceLight = false;
|
this.updateForceLight(false);
|
||||||
bl = false;
|
this.updateBl(false);
|
||||||
rbl = false;
|
this.updateRbl(false);
|
||||||
uta = false;
|
this.updateUta(false);
|
||||||
level = LEVEL_1;
|
this.updateLevel(LEVEL_1);
|
||||||
fl = false;
|
this.updateFl(false);
|
||||||
routeId = null;
|
this.updateRouteId(null);
|
||||||
delayTime = 0;
|
this.updateDelayTime(0);
|
||||||
guideTime = 0;
|
this.updateGuideTime(0);
|
||||||
this.fireWatcher();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean updateSignalAspect(int signalAspect) {
|
private boolean updateSignalAspect(int signalAspect) {
|
||||||
if (this.signalAspect != signalAspect) {
|
if (this.signalAspect != signalAspect) {
|
||||||
this.signalAspect = signalAspect;
|
this.signalAspect = signalAspect;
|
||||||
this.fireWatcher();
|
this.fireWatcher("signalAspect", this.signalAspect);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -71,7 +70,7 @@ public class CilSignal extends CilDevice {
|
|||||||
private boolean updateLogic(boolean logic) {
|
private boolean updateLogic(boolean logic) {
|
||||||
if (this.logic != logic) {
|
if (this.logic != logic) {
|
||||||
this.logic = logic;
|
this.logic = logic;
|
||||||
this.fireWatcher();
|
this.fireWatcher("logic", this.logic);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -80,7 +79,7 @@ public class CilSignal extends CilDevice {
|
|||||||
private boolean updateForceLight(boolean forceLight) {
|
private boolean updateForceLight(boolean forceLight) {
|
||||||
if (this.forceLight != forceLight) {
|
if (this.forceLight != forceLight) {
|
||||||
this.forceLight = forceLight;
|
this.forceLight = forceLight;
|
||||||
this.fireWatcher();
|
this.fireWatcher("forceLight", this.forceLight);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -89,7 +88,7 @@ public class CilSignal extends CilDevice {
|
|||||||
private boolean updateBl(boolean bl) {
|
private boolean updateBl(boolean bl) {
|
||||||
if (this.bl != bl) {
|
if (this.bl != bl) {
|
||||||
this.bl = bl;
|
this.bl = bl;
|
||||||
this.fireWatcher();
|
this.fireWatcher("bl", this.bl);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -98,7 +97,16 @@ public class CilSignal extends CilDevice {
|
|||||||
private boolean updateRbl(boolean rbl) {
|
private boolean updateRbl(boolean rbl) {
|
||||||
if (this.rbl != rbl) {
|
if (this.rbl != rbl) {
|
||||||
this.rbl = rbl;
|
this.rbl = rbl;
|
||||||
this.fireWatcher();
|
this.fireWatcher("rbl", this.rbl);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean updateUta(boolean uta) {
|
||||||
|
if (this.uta != uta) {
|
||||||
|
this.uta = uta;
|
||||||
|
this.fireWatcher("uta", this.uta);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -107,7 +115,7 @@ public class CilSignal extends CilDevice {
|
|||||||
private boolean updateFl(boolean fl) {
|
private boolean updateFl(boolean fl) {
|
||||||
if (this.fl != fl) {
|
if (this.fl != fl) {
|
||||||
this.fl = fl;
|
this.fl = fl;
|
||||||
this.fireWatcher();
|
this.fireWatcher("fl", this.fl);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -116,7 +124,7 @@ public class CilSignal extends CilDevice {
|
|||||||
private boolean updateLevel(int level) {
|
private boolean updateLevel(int level) {
|
||||||
if (this.level != level) {
|
if (this.level != level) {
|
||||||
this.level = level;
|
this.level = level;
|
||||||
this.fireWatcher();
|
this.fireWatcher("level", this.level);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -125,7 +133,7 @@ public class CilSignal extends CilDevice {
|
|||||||
private boolean updateRouteId(String routeId) {
|
private boolean updateRouteId(String routeId) {
|
||||||
if (!Objects.equals(this.routeId, routeId)) {
|
if (!Objects.equals(this.routeId, routeId)) {
|
||||||
this.routeId = routeId;
|
this.routeId = routeId;
|
||||||
this.fireWatcher();
|
this.fireWatcher("routeId", this.routeId);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -134,7 +142,7 @@ public class CilSignal extends CilDevice {
|
|||||||
private boolean updateDelayTime(int delayTime) {
|
private boolean updateDelayTime(int delayTime) {
|
||||||
if (this.delayTime != delayTime) {
|
if (this.delayTime != delayTime) {
|
||||||
this.delayTime = delayTime;
|
this.delayTime = delayTime;
|
||||||
this.fireWatcher();
|
this.fireWatcher("delayTime", this.delayTime);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -143,7 +151,7 @@ public class CilSignal extends CilDevice {
|
|||||||
private boolean updateGuideTime(int guideTime) {
|
private boolean updateGuideTime(int guideTime) {
|
||||||
if (this.guideTime != guideTime) {
|
if (this.guideTime != guideTime) {
|
||||||
this.guideTime = guideTime;
|
this.guideTime = guideTime;
|
||||||
this.fireWatcher();
|
this.fireWatcher("guideTime", this.guideTime);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -33,22 +33,21 @@ public class CilSwitch extends CilDevice {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init() {
|
public void init() {
|
||||||
position = NORMAL;
|
this.updatePosition(NORMAL);
|
||||||
routeUseToPosition = NONE;
|
this.updateRouteUseToPosition(NONE);
|
||||||
bl = false;
|
this.updateBl(false);
|
||||||
sl = false;
|
this.updateSl(false);
|
||||||
this.routeId = null;
|
this.updateRouteId(null);
|
||||||
rl = false;
|
this.updateRl(false);
|
||||||
ol = false;
|
this.updateOl(false);
|
||||||
fl = false;
|
this.updateFl(false);
|
||||||
mgl = false;
|
this.updateMgl(false);
|
||||||
this.fireWatcher();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean updatePosition(int position) {
|
private boolean updatePosition(int position) {
|
||||||
if (this.position != position) {
|
if (this.position != position) {
|
||||||
this.position = position;
|
this.position = position;
|
||||||
this.fireWatcher();
|
this.fireWatcher("position", this.position);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -57,7 +56,7 @@ public class CilSwitch extends CilDevice {
|
|||||||
private boolean updateRouteUseToPosition(int routeUseToPosition) {
|
private boolean updateRouteUseToPosition(int routeUseToPosition) {
|
||||||
if (this.routeUseToPosition != routeUseToPosition) {
|
if (this.routeUseToPosition != routeUseToPosition) {
|
||||||
this.routeUseToPosition = routeUseToPosition;
|
this.routeUseToPosition = routeUseToPosition;
|
||||||
this.fireWatcher();
|
this.fireWatcher("routeUseToPosition", this.routeUseToPosition);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -66,7 +65,7 @@ public class CilSwitch extends CilDevice {
|
|||||||
private boolean updateBl(boolean bl) {
|
private boolean updateBl(boolean bl) {
|
||||||
if (this.bl != bl) {
|
if (this.bl != bl) {
|
||||||
this.bl = bl;
|
this.bl = bl;
|
||||||
this.fireWatcher();
|
this.fireWatcher("bl", this.bl);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -75,7 +74,7 @@ public class CilSwitch extends CilDevice {
|
|||||||
private boolean updateSl(boolean sl) {
|
private boolean updateSl(boolean sl) {
|
||||||
if (this.sl != sl) {
|
if (this.sl != sl) {
|
||||||
this.sl = sl;
|
this.sl = sl;
|
||||||
this.fireWatcher();
|
this.fireWatcher("sl", this.sl);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -84,7 +83,7 @@ public class CilSwitch extends CilDevice {
|
|||||||
private boolean updateRouteId(String routeId) {
|
private boolean updateRouteId(String routeId) {
|
||||||
if (!Objects.equals(this.routeId, routeId)) {
|
if (!Objects.equals(this.routeId, routeId)) {
|
||||||
this.routeId = routeId;
|
this.routeId = routeId;
|
||||||
this.fireWatcher();
|
this.fireWatcher("routeId", this.routeId);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -93,7 +92,7 @@ public class CilSwitch extends CilDevice {
|
|||||||
private boolean updateRl(boolean rl) {
|
private boolean updateRl(boolean rl) {
|
||||||
if (this.rl != rl) {
|
if (this.rl != rl) {
|
||||||
this.rl = rl;
|
this.rl = rl;
|
||||||
this.fireWatcher();
|
this.fireWatcher("rl", this.rl);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -102,7 +101,7 @@ public class CilSwitch extends CilDevice {
|
|||||||
private boolean updateOl(boolean ol) {
|
private boolean updateOl(boolean ol) {
|
||||||
if (this.ol != ol) {
|
if (this.ol != ol) {
|
||||||
this.ol = ol;
|
this.ol = ol;
|
||||||
this.fireWatcher();
|
this.fireWatcher("ol", this.ol);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -111,7 +110,7 @@ public class CilSwitch extends CilDevice {
|
|||||||
private boolean updateFl(boolean fl) {
|
private boolean updateFl(boolean fl) {
|
||||||
if (this.fl != fl) {
|
if (this.fl != fl) {
|
||||||
this.fl = fl;
|
this.fl = fl;
|
||||||
this.fireWatcher();
|
this.fireWatcher("fl", this.fl);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -120,7 +119,7 @@ public class CilSwitch extends CilDevice {
|
|||||||
private boolean updateMgl(boolean mgl) {
|
private boolean updateMgl(boolean mgl) {
|
||||||
if (this.mgl != mgl) {
|
if (this.mgl != mgl) {
|
||||||
this.mgl = mgl;
|
this.mgl = mgl;
|
||||||
this.fireWatcher();
|
this.fireWatcher("mgl", this.mgl);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -10,15 +10,8 @@ import org.springframework.stereotype.Component;
|
|||||||
public class SrAxcCilWatcher implements Watcher<SrAXC> {
|
public class SrAxcCilWatcher implements Watcher<SrAXC> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleStateChange(Simulation simulation, SrAXC watchable) {
|
public void handleFieldChange(Simulation simulation, SrAXC watchable, String filed, Object val) {
|
||||||
CilSyncRepository cilSyncRepository = (CilSyncRepository) simulation.getRepository(CilSyncRepository.NAME, CilSyncRepository.class);
|
CilSyncRepository cilSyncRepository = (CilSyncRepository) simulation.getRepository(CilSyncRepository.NAME, CilSyncRepository.class);
|
||||||
cilSyncRepository.collectSrAXC(watchable);
|
cilSyncRepository.collectSrAXC(watchable);
|
||||||
// CilRepository cilRepository = (CilRepository) simulation.getRepository(CilRepository.NAME, CilRepository.class);
|
|
||||||
// CilSection cilSection = cilRepository.getSectionById(watchable.getId());
|
|
||||||
// cilSection.applyAxcOccupyState(watchable.isOccupy());
|
|
||||||
// List<CilSection> logicList = cilRepository.queryLogicListOfAxc(watchable.getId());
|
|
||||||
// for (CilSection section : logicList) {
|
|
||||||
// section.applyAxcOccupyState(watchable.isOccupy());
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,11 +10,8 @@ import org.springframework.stereotype.Component;
|
|||||||
public class SrSignalCilWatcher implements Watcher<SrSignal> {
|
public class SrSignalCilWatcher implements Watcher<SrSignal> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleStateChange(Simulation simulation, SrSignal watchable) {
|
public void handleFieldChange(Simulation simulation, SrSignal watchable, String filed, Object val) {
|
||||||
CilSyncRepository cilSyncRepository = (CilSyncRepository) simulation.getRepository(CilSyncRepository.NAME, CilSyncRepository.class);
|
CilSyncRepository cilSyncRepository = (CilSyncRepository) simulation.getRepository(CilSyncRepository.NAME, CilSyncRepository.class);
|
||||||
cilSyncRepository.collectSrSignal(watchable);
|
cilSyncRepository.collectSrSignal(watchable);
|
||||||
// CilRepository cilRepository = (CilRepository) simulation.getRepository(CilRepository.NAME, CilRepository.class);
|
|
||||||
// CilSignal cilSignal = cilRepository.getSignalById(watchable.getId());
|
|
||||||
// cilSignal.updateByDeviceState(watchable.getState());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,11 +10,8 @@ import org.springframework.stereotype.Component;
|
|||||||
public class SrSwitchCilWatcher implements Watcher<SrSwitch> {
|
public class SrSwitchCilWatcher implements Watcher<SrSwitch> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleStateChange(Simulation simulation, SrSwitch watchable) {
|
public void handleFieldChange(Simulation simulation, SrSwitch watchable, String filed, Object val) {
|
||||||
CilSyncRepository cilSyncRepository = (CilSyncRepository) simulation.getRepository(CilSyncRepository.NAME, CilSyncRepository.class);
|
CilSyncRepository cilSyncRepository = (CilSyncRepository) simulation.getRepository(CilSyncRepository.NAME, CilSyncRepository.class);
|
||||||
cilSyncRepository.collectSrSwitch(watchable);
|
cilSyncRepository.collectSrSwitch(watchable);
|
||||||
// CilRepository cilRepository = (CilRepository) simulation.getRepository(CilRepository.NAME, CilRepository.class);
|
|
||||||
// CilSwitch cilSwitch = cilRepository.getSwitchById(watchable.getId());
|
|
||||||
// cilSwitch.applyPosition(watchable.getState());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,9 +3,16 @@ package club.joylink.rtss.simulation.rt;
|
|||||||
import club.joylink.rtss.constants.MapPrdTypeEnum;
|
import club.joylink.rtss.constants.MapPrdTypeEnum;
|
||||||
import club.joylink.rtss.constants.Project;
|
import club.joylink.rtss.constants.Project;
|
||||||
import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
|
import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
|
||||||
|
import club.joylink.rtss.services.IDailyRunPlanService;
|
||||||
|
import club.joylink.rtss.services.ILoadPlanService;
|
||||||
|
import club.joylink.rtss.services.IRunPlanTemplateService;
|
||||||
import club.joylink.rtss.services.MapService;
|
import club.joylink.rtss.services.MapService;
|
||||||
import club.joylink.rtss.simulation.SimulationManager;
|
import club.joylink.rtss.simulation.SimulationManager;
|
||||||
|
import club.joylink.rtss.simulation.cbtc.constant.SimulationConstants;
|
||||||
import club.joylink.rtss.simulation.rt.ATS.AtsLogicService;
|
import club.joylink.rtss.simulation.rt.ATS.AtsLogicService;
|
||||||
|
import club.joylink.rtss.simulation.rt.ATS.bo.AtsRepository;
|
||||||
|
import club.joylink.rtss.simulation.rt.ATS.bo.plan.AtsRunPlan;
|
||||||
|
import club.joylink.rtss.simulation.rt.ATS.bo.plan.AtsRunPlanBuilder;
|
||||||
import club.joylink.rtss.simulation.rt.CIL.CilLogicService;
|
import club.joylink.rtss.simulation.rt.CIL.CilLogicService;
|
||||||
import club.joylink.rtss.simulation.rt.SRD.SrdLogicService;
|
import club.joylink.rtss.simulation.rt.SRD.SrdLogicService;
|
||||||
import club.joylink.rtss.simulation.rt.SRD.bo.SrTrain;
|
import club.joylink.rtss.simulation.rt.SRD.bo.SrTrain;
|
||||||
@ -17,10 +24,13 @@ import club.joylink.rtss.simulation.rt.repo.CommonRepository;
|
|||||||
import club.joylink.rtss.simulation.rt.repo.CommonStation;
|
import club.joylink.rtss.simulation.rt.repo.CommonStation;
|
||||||
import club.joylink.rtss.simulation.rt.vo.RtSimulationInfoVO;
|
import club.joylink.rtss.simulation.rt.vo.RtSimulationInfoVO;
|
||||||
import club.joylink.rtss.vo.AccountVO;
|
import club.joylink.rtss.vo.AccountVO;
|
||||||
|
import club.joylink.rtss.vo.client.runplan.RunPlanLoadVO;
|
||||||
|
import club.joylink.rtss.vo.client.runplan.RunPlanVO;
|
||||||
import club.joylink.rtss.vo.map.MapVO;
|
import club.joylink.rtss.vo.map.MapVO;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@ -28,6 +38,12 @@ public class RtSimulationService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private MapService mapService;
|
private MapService mapService;
|
||||||
@Autowired
|
@Autowired
|
||||||
|
private IDailyRunPlanService iDailyRunPlanService;
|
||||||
|
@Autowired
|
||||||
|
private ILoadPlanService iLoadPlanService;
|
||||||
|
@Autowired
|
||||||
|
private IRunPlanTemplateService iRunPlanTemplateService;
|
||||||
|
@Autowired
|
||||||
private SimulationManager simulationManager;
|
private SimulationManager simulationManager;
|
||||||
@Autowired
|
@Autowired
|
||||||
private CommonRepoService commonRepoService;
|
private CommonRepoService commonRepoService;
|
||||||
@ -51,7 +67,8 @@ public class RtSimulationService {
|
|||||||
this.simulationManager.save(rtSimulation);
|
this.simulationManager.save(rtSimulation);
|
||||||
try {
|
try {
|
||||||
rtSimulation.mapVO = mapVO;
|
rtSimulation.mapVO = mapVO;
|
||||||
this.loading(rtSimulation, mapVO);
|
this.loadingMap(rtSimulation, mapVO);
|
||||||
|
this.loadRunPlan(rtSimulation, this.queryUserRunPlan(accountVO.getId(), mapId));
|
||||||
this.initSimulationMember(rtSimulation);
|
this.initSimulationMember(rtSimulation);
|
||||||
this.initCreatorPlayMember(rtSimulation, mapVO);
|
this.initCreatorPlayMember(rtSimulation, mapVO);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -68,6 +85,35 @@ public class RtSimulationService {
|
|||||||
return rtSimulation;
|
return rtSimulation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private RunPlanVO queryUserRunPlan(Long mapId, Long userId) {
|
||||||
|
RunPlanLoadVO loadPlan = null;
|
||||||
|
LocalDate runPlanDate = SimulationConstants.getRunPlanDate();
|
||||||
|
// 仿真运行计划的查询:先找用户的,如果不存在找通用的
|
||||||
|
loadPlan = this.iLoadPlanService.findUserLoadPlan(userId, mapId, runPlanDate);
|
||||||
|
if (Objects.isNull(loadPlan)) {
|
||||||
|
loadPlan = this.iLoadPlanService.findCommonLoadPlanOfMap(mapId);
|
||||||
|
}
|
||||||
|
if (loadPlan != null) {
|
||||||
|
return this.iRunPlanTemplateService.getRunPlan(loadPlan.getTemplatePlanId());
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void loadRunPlan(String id, RunPlanVO runPlanVO) {
|
||||||
|
RtSimulation simulation = this.simulationManager.getById(id, RtSimulation.class);
|
||||||
|
this.loadRunPlan(simulation, runPlanVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void loadRunPlan(RtSimulation simulation, RunPlanVO runPlanVO) {
|
||||||
|
if (runPlanVO == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
AtsRunPlan atsRunPlan = AtsRunPlanBuilder.buildFrom(runPlanVO,
|
||||||
|
simulation.getSystemTime().toLocalDate(), CommonRepository.getInstanceFrom(simulation));
|
||||||
|
AtsRepository atsRepository = AtsRepository.getInstanceFrom(simulation);
|
||||||
|
atsRepository.setRunPlan(atsRunPlan);
|
||||||
|
}
|
||||||
|
|
||||||
private void initCreatorPlayMember(RtSimulation rtSimulation, MapVO mapVO) {
|
private void initCreatorPlayMember(RtSimulation rtSimulation, MapVO mapVO) {
|
||||||
// RtSimulationMember simulationMember = rtSimulation.querySimulationMemberById("2");
|
// RtSimulationMember simulationMember = rtSimulation.querySimulationMemberById("2");
|
||||||
// List<RtSimulationMember> memberList = rtSimulation.querySimulationMembersOfRole(RtSimulationMember.Role.LOWS);
|
// List<RtSimulationMember> memberList = rtSimulation.querySimulationMembersOfRole(RtSimulationMember.Role.LOWS);
|
||||||
@ -106,7 +152,7 @@ public class RtSimulationService {
|
|||||||
/**
|
/**
|
||||||
* 加载相关数据
|
* 加载相关数据
|
||||||
*/
|
*/
|
||||||
private void loading(RtSimulation rtSimulation, MapVO mapVO) {
|
private void loadingMap(RtSimulation rtSimulation, MapVO mapVO) {
|
||||||
this.commonRepoService.loading(rtSimulation, mapVO);
|
this.commonRepoService.loading(rtSimulation, mapVO);
|
||||||
SrdRepository srdRepository = this.srdLogicService.loading(rtSimulation, mapVO);
|
SrdRepository srdRepository = this.srdLogicService.loading(rtSimulation, mapVO);
|
||||||
this.cilLogicService.loading(rtSimulation, mapVO);
|
this.cilLogicService.loading(rtSimulation, mapVO);
|
||||||
|
@ -160,6 +160,7 @@ public class SrdLogicService {
|
|||||||
float speed = srTrain.getSpeed();
|
float speed = srTrain.getSpeed();
|
||||||
TlRepository tlRepository = TlRepository.getInstanceFrom((RtSimulation) repository.getSimulation());
|
TlRepository tlRepository = TlRepository.getInstanceFrom((RtSimulation) repository.getSimulation());
|
||||||
TlTrain tlTrain = tlRepository.getTrainById(srTrain.getId());
|
TlTrain tlTrain = tlRepository.getTrainById(srTrain.getId());
|
||||||
|
tlTrain.changeGear();
|
||||||
float f = tlTrain.calculateF();
|
float f = tlTrain.calculateF();
|
||||||
float a = f / (srTrain.getMass() + srTrain.getLoadMass());
|
float a = f / (srTrain.getMass() + srTrain.getLoadMass());
|
||||||
float cv = (speed + a * TRAIN_RUN_RATE / 1000); // 当前速度
|
float cv = (speed + a * TRAIN_RUN_RATE / 1000); // 当前速度
|
||||||
|
@ -8,15 +8,31 @@ import club.joylink.rtss.simulation.rt.SRD.bo.SrdRepository;
|
|||||||
import club.joylink.rtss.simulation.rt.SRD.bo.TrackPosition;
|
import club.joylink.rtss.simulation.rt.SRD.bo.TrackPosition;
|
||||||
import club.joylink.rtss.simulation.rt.TL.bo.TlRepository;
|
import club.joylink.rtss.simulation.rt.TL.bo.TlRepository;
|
||||||
import club.joylink.rtss.simulation.rt.TL.bo.TlTrain;
|
import club.joylink.rtss.simulation.rt.TL.bo.TlTrain;
|
||||||
|
import club.joylink.rtss.simulation.rt.repo.CommonRepository;
|
||||||
|
import club.joylink.rtss.simulation.rt.repo.CommonSection;
|
||||||
|
import club.joylink.rtss.simulation.rt.repo.CommonSignal;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class SrdTrainService {
|
public class SrdTrainService {
|
||||||
public void loadTrain(RtSimulation simulation, String trainId, boolean right, String trackId) {
|
public void loadTrain(RtSimulation simulation, String trainId, boolean right, String trackId) {
|
||||||
SrdRepository srdRepository = simulation.getRepository(SrdRepository.NAME, SrdRepository.class);
|
SrdRepository srdRepository = SrdRepository.getInstanceFrom(simulation);
|
||||||
SrTrain train = srdRepository.getTrainById(trainId);
|
SrTrain train = srdRepository.getTrainById(trainId);
|
||||||
SrTrack track = srdRepository.getTrackById(trackId);
|
SrTrack track = srdRepository.getTrackById(trackId);
|
||||||
TrackPosition trackPosition = new TrackPosition(track, 5000);
|
CommonRepository commonRepo = CommonRepository.getInstanceFrom(simulation);
|
||||||
|
CommonSection section = commonRepo.getSectionById(trackId);
|
||||||
|
CommonSignal signal = section.queryMoreDistanceSignalOf(right);
|
||||||
|
int loadOffset = 10000; // 10m
|
||||||
|
int offset = 0;
|
||||||
|
if (signal != null) {
|
||||||
|
offset = right ? signal.getOffset() - loadOffset : signal.getOffset() + loadOffset;
|
||||||
|
}
|
||||||
|
if (offset <= 0) {
|
||||||
|
offset = right ? track.getLen() - loadOffset : loadOffset;
|
||||||
|
}
|
||||||
|
TrackPosition trackPosition = new TrackPosition(track, offset);
|
||||||
train.initPosition(trackPosition, right);
|
train.initPosition(trackPosition, right);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ public class SrAXC extends SrDevice {
|
|||||||
if (this.state != state) {
|
if (this.state != state) {
|
||||||
this.state = state;
|
this.state = state;
|
||||||
this.stateList.set(1, this.state);
|
this.stateList.set(1, this.state);
|
||||||
this.fireWatcher();
|
this.fireWatcher("state", this.state);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -47,9 +47,8 @@ public class SrAXC extends SrDevice {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initState() {
|
public void initState() {
|
||||||
this.updateState(OFF);
|
|
||||||
this.fault = null;
|
this.fault = null;
|
||||||
this.fireWatcher();
|
this.updateState(OFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -41,7 +41,7 @@ public class SrPSD extends SrDevice {
|
|||||||
if (this.state != state) {
|
if (this.state != state) {
|
||||||
this.state = state;
|
this.state = state;
|
||||||
this.stateList.set(1, this.state);
|
this.stateList.set(1, this.state);
|
||||||
this.fireWatcher();
|
this.fireWatcher("state", this.state);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -51,7 +51,7 @@ public class SrPSD extends SrDevice {
|
|||||||
if (this.command != command) {
|
if (this.command != command) {
|
||||||
this.command = (command);
|
this.command = (command);
|
||||||
this.stateList.set(2, this.command);
|
this.stateList.set(2, this.command);
|
||||||
this.fireWatcher();
|
this.fireWatcher("command", this.command);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -47,7 +47,7 @@ public class SrSignal extends SrDevice {
|
|||||||
if (this.state != state) {
|
if (this.state != state) {
|
||||||
this.state = state;
|
this.state = state;
|
||||||
this.stateList.set(1, this.state);
|
this.stateList.set(1, this.state);
|
||||||
this.fireWatcher();
|
this.fireWatcher("state", this.state);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -56,7 +56,7 @@ public class SrSignal extends SrDevice {
|
|||||||
private boolean updateCommand(int command) {
|
private boolean updateCommand(int command) {
|
||||||
if (this.command != command) {
|
if (this.command != command) {
|
||||||
this.command = (command);
|
this.command = (command);
|
||||||
this.fireWatcher();
|
this.fireWatcher("command", this.command);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -36,7 +36,7 @@ public class SrSwitch extends SrDevice {
|
|||||||
if (this.state != state) {
|
if (this.state != state) {
|
||||||
this.state = state;
|
this.state = state;
|
||||||
this.stateList.set(1, this.state);
|
this.stateList.set(1, this.state);
|
||||||
this.fireWatcher();
|
this.fireWatcher("state", this.state);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -46,7 +46,7 @@ public class SrSwitch extends SrDevice {
|
|||||||
if (this.command != command) {
|
if (this.command != command) {
|
||||||
this.command = (command);
|
this.command = (command);
|
||||||
this.stateList.set(2, this.command);
|
this.stateList.set(2, this.command);
|
||||||
this.fireWatcher();
|
this.fireWatcher("command", this.command);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package club.joylink.rtss.simulation.rt.TL.bo;
|
package club.joylink.rtss.simulation.rt.TL.bo;
|
||||||
|
|
||||||
|
import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
|
||||||
import club.joylink.rtss.simulation.rt.SRD.bo.SrTrain;
|
import club.joylink.rtss.simulation.rt.SRD.bo.SrTrain;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@ -17,6 +18,7 @@ public class TlTrain extends TlDevice {
|
|||||||
*/
|
*/
|
||||||
float speed;
|
float speed;
|
||||||
int controlPosition;//司控器手柄位置
|
int controlPosition;//司控器手柄位置
|
||||||
|
boolean autoGear; // 是否自动挡
|
||||||
int gear; // 档位(-1~9,1挡为起步挡,2~9实际为1~8挡)
|
int gear; // 档位(-1~9,1挡为起步挡,2~9实际为1~8挡)
|
||||||
int throttlePosition; // 油门杆位置(0~100)
|
int throttlePosition; // 油门杆位置(0~100)
|
||||||
int changeOverSwitch; // 换向开关(-1, 0, 1, 2:手动)
|
int changeOverSwitch; // 换向开关(-1, 0, 1, 2:手动)
|
||||||
@ -28,6 +30,7 @@ public class TlTrain extends TlDevice {
|
|||||||
public TlTrain(SrTrain train) {
|
public TlTrain(SrTrain train) {
|
||||||
super(train.getId());
|
super(train.getId());
|
||||||
this.srTrain = train;
|
this.srTrain = train;
|
||||||
|
this.autoGear = true; // 大铁驾驶暂时默认自动挡
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -147,90 +150,101 @@ public class TlTrain extends TlDevice {
|
|||||||
this.singleBreak, this.autoBreak);
|
this.singleBreak, this.autoBreak);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void changeGear() {
|
||||||
|
if (this.isAutoGear()) { // 自动挡,根据油门和列车速度自动调整档位
|
||||||
|
// int throttlePosition = this.throttlePosition;
|
||||||
|
// double speedMax = GearParam.G.vmax / 3.6;
|
||||||
|
// double ts = speedMax * throttlePosition / 100; // 油门最高速度
|
||||||
|
// int tgear = this.calculateGearBySpeed((float) ts); // 油门对应档位
|
||||||
|
// float speed = this.srTrain.getSpeed();
|
||||||
|
// int sgear = this.calculateGearBySpeed(speed);
|
||||||
|
// int gear = Math.min(tgear, sgear);
|
||||||
|
this.updateGear(GearParam.G.gear);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int calculateGearBySpeed(float speed) {
|
||||||
|
for (GearParam param : GearParam.values()) {
|
||||||
|
float vc = param.vmax / 3.6f * 0.8f;
|
||||||
|
if (speed < vc) {
|
||||||
|
return param.gear;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return GearParam.G.gear;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static enum GearParam {
|
||||||
|
// GF1(-1, 3, 25, 1.89f, 1.64f),
|
||||||
|
// G0(0, 0, 0, 0, 0),
|
||||||
|
// G1(1, 3, 30, 1.89f, 1.64f),
|
||||||
|
// G2(2, 20, 56, 1.38f, 1.15f),
|
||||||
|
// G3(3, 32, 85, 0.92f, 0.73f),
|
||||||
|
// G4(4, 48, 118, 0.75f, 0.58f),
|
||||||
|
// G5(5, 62, 150, 0.57f, 0.42f),
|
||||||
|
// G6(6, 75, 190, 0.50f, 0.31f),
|
||||||
|
// G7(7, 95, 250, 0.41f, 0.29f),
|
||||||
|
// G8(8, 120, 300, 0.35f, 0.21f),
|
||||||
|
// G9(9, 150, 360, 0.26f, 0.16f),
|
||||||
|
G(1, 3, 360, 1.69f, 0.18f)
|
||||||
|
;
|
||||||
|
|
||||||
|
int gear;
|
||||||
|
float vmin;
|
||||||
|
float vmax;
|
||||||
|
float amax;
|
||||||
|
float amin;
|
||||||
|
|
||||||
|
GearParam(int gear, float vmin, float vmax, float amax, float amin) {
|
||||||
|
this.gear = gear;
|
||||||
|
this.vmin = vmin;
|
||||||
|
this.vmax = vmax;
|
||||||
|
this.amax = amax;
|
||||||
|
this.amin = amin;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getVminMps() {
|
||||||
|
return this.vmin / 3.6f;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getVmaxMps() {
|
||||||
|
return this.vmax / 3.6f;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static GearParam getByGear(int gear) {
|
||||||
|
for (GearParam param : GearParam.values()) {
|
||||||
|
if (param.gear == gear) {
|
||||||
|
return param;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw BusinessExceptionAssertEnum.ARGUMENT_ILLEGAL.exception("无效的档位");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
for (int i = 0; i <= 100; i++) {
|
||||||
|
float fx = GearParam.G.vmin + i * i / 100f * (GearParam.G.vmax - GearParam.G.vmin) / 100f;
|
||||||
|
System.out.println(fx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public float calculateF() {
|
public float calculateF() {
|
||||||
float f = 0;
|
float f = 0;
|
||||||
float speed = this.srTrain.getSpeed();
|
float speed = this.srTrain.getSpeed();
|
||||||
// 根据列车档位和油门计算牵引力或制动力
|
// 根据列车档位和油门计算牵引力或制动力
|
||||||
float vmin = 0;
|
GearParam param = GearParam.G;
|
||||||
float vmax = 0;
|
|
||||||
float amin = 0;
|
|
||||||
float amax = 0;
|
|
||||||
switch (this.gear) {
|
|
||||||
case -1: // 倒车:3~7km/h; 1.89 ~ 1.64 m/s^2
|
|
||||||
vmin = 3;
|
|
||||||
vmax = 7;
|
|
||||||
amax = 1.89f;
|
|
||||||
amin = 1.64f;
|
|
||||||
break;
|
|
||||||
case 0: // 空挡
|
|
||||||
break;
|
|
||||||
case 1: // 起步挡:3~8km/h; 1.89 ~ 1.64 m/s^2
|
|
||||||
vmin = 3;
|
|
||||||
vmax = 8;
|
|
||||||
amax = 1.89f;
|
|
||||||
amin = 1.64f;
|
|
||||||
break;
|
|
||||||
case 2: // 1挡:5~15km/h; 1.38 ~ 1.15 m/s^2
|
|
||||||
vmin = 5;
|
|
||||||
vmax = 15;
|
|
||||||
amax = 1.38f;
|
|
||||||
amin = 1.15f;
|
|
||||||
break;
|
|
||||||
case 3: // 2挡:9~20km/h; 0.92 ~ 0.73 m/s^2
|
|
||||||
vmin = 9;
|
|
||||||
vmax = 20;
|
|
||||||
amax = 0.92f;
|
|
||||||
amin = 0.73f;
|
|
||||||
break;
|
|
||||||
case 4: // 3挡:13~28km/h; 0.65 ~ 0.48 m/s^2
|
|
||||||
vmin = 13;
|
|
||||||
vmax = 28;
|
|
||||||
amax = 0.65f;
|
|
||||||
amin = 0.48f;
|
|
||||||
break;
|
|
||||||
case 5: // 4挡:20~38km/h; 0.47 ~ 0.32 m/s^2
|
|
||||||
vmin = 20;
|
|
||||||
vmax = 38;
|
|
||||||
amax = 0.47f;
|
|
||||||
amin = 0.32f;
|
|
||||||
break;
|
|
||||||
case 6: // 5挡:26~50km/h; 0.30 ~ 0.21 m/s^2
|
|
||||||
vmin = 26;
|
|
||||||
vmax = 50;
|
|
||||||
amax = 0.30f;
|
|
||||||
amin = 0.21f;
|
|
||||||
break;
|
|
||||||
case 7: // 6挡:33~60km/h; 0.21 ~ 0.15 m/s^2
|
|
||||||
vmin = 33;
|
|
||||||
vmax = 60;
|
|
||||||
amax = 0.21f;
|
|
||||||
amin = 0.15f;
|
|
||||||
break;
|
|
||||||
case 8: // 7挡:52~75km/h; 0.15 ~ 0.11 m/s^2
|
|
||||||
vmin = 52;
|
|
||||||
vmax = 75;
|
|
||||||
amax = 0.15f;
|
|
||||||
amin = 0.11f;
|
|
||||||
break;
|
|
||||||
case 9: // 8挡:60~90km/h; 0.11 ~ 0.08 m/s^2
|
|
||||||
vmin = 60;
|
|
||||||
vmax = 90;
|
|
||||||
amax = 0.11f;
|
|
||||||
amin = 0.08f;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new RuntimeException("无效的档位");
|
|
||||||
}
|
|
||||||
float fk = 0;
|
float fk = 0;
|
||||||
float fb = 0;
|
float fb = 0;
|
||||||
|
int tp = this.throttlePosition;
|
||||||
if (this.gear != 0 && this.changeOverState != 0) { // 非空挡
|
if (this.gear != 0 && this.changeOverState != 0) { // 非空挡
|
||||||
float vs = (float) ((vmin + (Float.valueOf(vmax - vmin) * this.throttlePosition / 100)) / 3.6);
|
float vs = (param.vmin + (((param.vmax - param.vmin) / 100f) * (tp * tp / 100f))) / 3.6f;
|
||||||
if (speed > vs) {
|
if (speed > vs) {
|
||||||
fb += this.calculateAccOf(speed - vs) * this.srTrain.getTotalMass();
|
fb += this.calculateAccOf(speed - vs) * this.srTrain.getMass();
|
||||||
} else {
|
} else {
|
||||||
fk = (float) ((amin + ((vs - vmin) / (vmax - vmin) * (amax - amin))) * this.srTrain.getTotalMass());
|
fk = ((param.amin + ((vs - speed) / (param.getVmaxMps() - param.getVminMps()) * (param.amax - param.amin))) * this.srTrain.getMass());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 摩擦阻力
|
||||||
|
fb += 0.034 * this.srTrain.getTotalMass();
|
||||||
// 根据制动阀计算制动力
|
// 根据制动阀计算制动力
|
||||||
fb += this.calculateFb();
|
fb += this.calculateFb();
|
||||||
// 计算合力
|
// 计算合力
|
||||||
@ -254,7 +268,7 @@ public class TlTrain extends TlDevice {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private float calculateAccOf(float v) {
|
private float calculateAccOf(float v) {
|
||||||
return v / 20;
|
return v / 60;
|
||||||
}
|
}
|
||||||
|
|
||||||
private float calculateFriction(float speed, float mass) {
|
private float calculateFriction(float speed, float mass) {
|
||||||
|
@ -24,7 +24,7 @@ public class TrainLoadService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private List<AtsTripPlan> queryLoadTrips(RtSimulation rtSimulation, LocalDateTime dateTime) {
|
private List<AtsTripPlan> queryLoadTrips(RtSimulation rtSimulation, LocalDateTime dateTime) {
|
||||||
LocalTime time = dateTime.toLocalTime();
|
LocalDateTime time = dateTime;
|
||||||
AtsRepository atsRepository = rtSimulation.getRepository(AtsRepository.NAME, AtsRepository.class);
|
AtsRepository atsRepository = rtSimulation.getRepository(AtsRepository.NAME, AtsRepository.class);
|
||||||
AtsRunPlan runPlan = atsRepository.getRunPlan();
|
AtsRunPlan runPlan = atsRepository.getRunPlan();
|
||||||
List<AtsTripPlan> loadTripList = new ArrayList<>();
|
List<AtsTripPlan> loadTripList = new ArrayList<>();
|
||||||
@ -57,7 +57,7 @@ public class TrainLoadService {
|
|||||||
LocalDateTime systemTime = rtSimulation.convertToSystemTime(dateTime);
|
LocalDateTime systemTime = rtSimulation.convertToSystemTime(dateTime);
|
||||||
List<AtsTripPlan> loadTripList = this.queryLoadTrips(rtSimulation, systemTime);
|
List<AtsTripPlan> loadTripList = this.queryLoadTrips(rtSimulation, systemTime);
|
||||||
loadTripList.sort(Comparator.comparing(AtsTripPlan::getStartTime)); // 按时间排序
|
loadTripList.sort(Comparator.comparing(AtsTripPlan::getStartTime)); // 按时间排序
|
||||||
LocalTime time = systemTime.toLocalTime();
|
LocalDateTime time = systemTime;
|
||||||
for (AtsTripPlan tripPlan : loadTripList) {
|
for (AtsTripPlan tripPlan : loadTripList) {
|
||||||
if (!time.isAfter(tripPlan.getEndTime())) {// 在车次计划中
|
if (!time.isAfter(tripPlan.getEndTime())) {// 在车次计划中
|
||||||
List<AtsStationPlan> stationPlanList = tripPlan.getStationPlanList();
|
List<AtsStationPlan> stationPlanList = tripPlan.getStationPlanList();
|
||||||
|
@ -84,4 +84,10 @@ public class CommonRepository extends SimulationRepository {
|
|||||||
public List<CommonSignal> querySignalsByDirection(boolean right) {
|
public List<CommonSignal> querySignalsByDirection(boolean right) {
|
||||||
return this.signalMap.values().stream().filter(cs -> cs.isRight() == right).collect(Collectors.toList());
|
return this.signalMap.values().stream().filter(cs -> cs.isRight() == right).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public CommonStation getStationById(String id) {
|
||||||
|
CommonStation commonStation = this.stationMap.get(id);
|
||||||
|
BusinessExceptionAssertEnum.DATA_ERROR.assertNotNull(commonStation, String.format("不存在id为[%s]的车站", id));
|
||||||
|
return commonStation;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
|
|||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@ -96,6 +97,17 @@ public class CommonSection extends CommonDevice {
|
|||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public CommonSignal queryMoreDistanceSignalOf(boolean right) {
|
||||||
|
List<CommonSignal> list = this.getSignalOf(right);
|
||||||
|
if (list.size() == 1) {
|
||||||
|
return list.get(0);
|
||||||
|
} else if (list.size() > 1) {
|
||||||
|
list.sort(Comparator.comparing(signal -> right ? signal.getOffset() : this.getLen() - signal.getOffset()));
|
||||||
|
return list.get(list.size() - 1);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public enum Type {
|
public enum Type {
|
||||||
/** 一般计轴区段 */
|
/** 一般计轴区段 */
|
||||||
NAx,
|
NAx,
|
||||||
|
Loading…
Reference in New Issue
Block a user