Merge remote-tracking branch 'origin/test' into simulation-new-logic
This commit is contained in:
commit
8ba8d915dc
@ -120,7 +120,7 @@ public class VirtualRealityIbpService implements IVirtualRealityIbpService {
|
||||
break;
|
||||
case ALARM:
|
||||
break;
|
||||
case KM:
|
||||
case KM: {
|
||||
element.setOn(true);
|
||||
List<VirtualRealityIbp.IbpElement> key;
|
||||
if (element.getUp()) {
|
||||
@ -132,6 +132,24 @@ public class VirtualRealityIbpService implements IVirtualRealityIbpService {
|
||||
stands.forEach(stand -> ciApiService.openScreenDoor(simulation, stand.getCode()));
|
||||
}
|
||||
break;
|
||||
}
|
||||
case GM: {
|
||||
element.setOn(true);
|
||||
List<VirtualRealityIbp.IbpElement> key;
|
||||
if (element.getUp() != null) {
|
||||
if (element.getUp()) {
|
||||
key = ibp.query(VirtualRealityIbp.Mean.SXYS, element.getUp());
|
||||
} else {
|
||||
key = ibp.query(VirtualRealityIbp.Mean.XXYS, element.getUp());
|
||||
}
|
||||
} else {
|
||||
key = ibp.queryByType(VirtualRealityIbp.Type.KEY);
|
||||
}
|
||||
if (key.stream().allMatch(VirtualRealityIbp.IbpElement::isOn)) {
|
||||
stands.forEach(stand -> ciApiService.closeScreenDoor(simulation, stand.getCode()));
|
||||
}
|
||||
break;
|
||||
}
|
||||
case XXYS:
|
||||
case SXYS:
|
||||
element.setOn(!element.isOn());
|
||||
@ -289,6 +307,7 @@ public class VirtualRealityIbpService implements IVirtualRealityIbpService {
|
||||
case QXJJTC:
|
||||
case BJQC:
|
||||
case KM:
|
||||
case GM:
|
||||
case AXLE_RESET:
|
||||
case PRERESET_Z:
|
||||
case ALARM:
|
||||
|
@ -123,6 +123,7 @@ public class VirtualRealityPslService implements IVirtualRealityPslService{
|
||||
private VirtualRealityPsl collectStatus(Stand stand) {
|
||||
VirtualRealityPsl vrPsl = stand.getVrPsl();
|
||||
PSD psd = stand.getPsd();
|
||||
vrPsl.setQbgmLight(vrPsl.isSdButton() || psd.isCloseAndLock());
|
||||
vrPsl.setPslczLight(vrPsl.isSdButton() || vrPsl.isYxjzKey());
|
||||
vrPsl.setHsjcLight(vrPsl.isSdButton() || vrPsl.isHsjcKey());
|
||||
vrPsl.setKmLight(vrPsl.isSdButton() || !psd.isCloseAndLock());
|
||||
|
@ -172,17 +172,15 @@ public class ZCLogicLoop {
|
||||
}
|
||||
}
|
||||
// 道岔
|
||||
MovementAuthority.End end = checkSwitch(section);
|
||||
MovementAuthority.End end = checkSwitch(section, right);
|
||||
if (end != null)
|
||||
endList.add(end);
|
||||
//前方列车
|
||||
MovementAuthority.End trainEnd = checkSectionOccupied(section);
|
||||
// 轨道尽头/问题道岔
|
||||
Section temp = section.getNextRunningSectionOf(right);
|
||||
if (Objects.isNull(temp)) { // 到尽头
|
||||
if (section.isSwitchTrack()) { // 问题道岔
|
||||
if (Objects.nonNull(section.getSectionOf(!right))) {
|
||||
endList.add(new MovementAuthority.End(section.getSectionOf(!right), MovementAuthority.EndType.FAULT_SWITCH));
|
||||
}
|
||||
} else {
|
||||
if (!section.isSwitchTrack()) { // 问题道岔
|
||||
endList.add(new MovementAuthority.End(section, MovementAuthority.EndType.END_TRACK));
|
||||
}
|
||||
break;
|
||||
@ -202,28 +200,37 @@ public class ZCLogicLoop {
|
||||
|
||||
section = temp;
|
||||
}
|
||||
// 前方列车
|
||||
VirtualRealityTrain frontTrain = this.queryFrontTrain(train, trainList);
|
||||
if (Objects.nonNull(frontTrain)) {
|
||||
Section baseSection;
|
||||
if (Objects.equals(frontTrain.isRight(), train.isRight())) {
|
||||
baseSection = frontTrain.calculateTailPosition().getSection();
|
||||
} else {
|
||||
baseSection = frontTrain.getHeadPosition().getSection();
|
||||
}
|
||||
endList.add(new MovementAuthority.End(frontTrain,
|
||||
MovementAuthority.EndType.FRONT_TRAIN,
|
||||
baseSection));
|
||||
}
|
||||
// // 前方列车
|
||||
// VirtualRealityTrain frontTrain = this.queryFrontTrain(train, trainList);
|
||||
// if (Objects.nonNull(frontTrain)) {
|
||||
// Section baseSection;
|
||||
// if (Objects.equals(frontTrain.isRight(), train.isRight())) {
|
||||
// baseSection = frontTrain.calculateTailPosition().getSection();
|
||||
// } else {
|
||||
// baseSection = frontTrain.getHeadPosition().getSection();
|
||||
// }
|
||||
// endList.add(new MovementAuthority.End(frontTrain,
|
||||
// MovementAuthority.EndType.FRONT_TRAIN,
|
||||
// baseSection));
|
||||
// }
|
||||
return endList;
|
||||
}
|
||||
|
||||
private MovementAuthority.End checkSectionOccupied(Section section) {
|
||||
for (Section logic : section.getLogicList()) {
|
||||
if (logic.isCtOccupied()) {
|
||||
return new MovementAuthority.End(section, MovementAuthority.EndType.FRONT_TRAIN, null);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private MovementAuthority.End checkSwitch(Section tailSection, Section headSection, boolean right) {
|
||||
Section section = tailSection;
|
||||
for (int i = 0; i < 10; i++) {
|
||||
if (section.equals(headSection))
|
||||
if (section == null || section.equals(headSection))
|
||||
break;
|
||||
MovementAuthority.End end = checkSwitch(section);
|
||||
MovementAuthority.End end = checkSwitch(section, right);
|
||||
if (end != null)
|
||||
return end;
|
||||
section = section.getNextRunningSectionOf(right);
|
||||
@ -231,20 +238,26 @@ public class ZCLogicLoop {
|
||||
return null;
|
||||
}
|
||||
|
||||
private MovementAuthority.End checkSwitch(Section section) {
|
||||
private MovementAuthority.End checkSwitch(Section section, boolean right) {
|
||||
Switch relSwitch = section.getRelSwitch();
|
||||
if (relSwitch != null) {
|
||||
Section nextSection = section.getNextRunningSectionOf(right);
|
||||
if (relSwitch != null) { //是道岔区段
|
||||
Route route = relSwitch.getRoute();
|
||||
if (relSwitch.isLoss()) {
|
||||
return new MovementAuthority.End(section, MovementAuthority.EndType.FAULT_SWITCH);
|
||||
} else if (route != null) {
|
||||
List<RouteFls> flsList = route.getFlsList();
|
||||
if (!CollectionUtils.isEmpty(flsList)) {
|
||||
List<RouteFls> fls = flsList.stream()
|
||||
.filter(routeFls -> routeFls.getBase().getASwitch().equals(relSwitch))
|
||||
.collect(Collectors.toList());
|
||||
if (!routeService.isFlsCheckPass(fls)) {
|
||||
return new MovementAuthority.End(section, MovementAuthority.EndType.FAULT_SWITCH);
|
||||
Section previousSection = section.getNextRunningSectionOf(!right);
|
||||
if (previousSection == null)
|
||||
return null;
|
||||
if (route != null) { //道岔进路锁闭
|
||||
if (relSwitch.isLoss()) { //失表且下个区段
|
||||
return new MovementAuthority.End(previousSection, MovementAuthority.EndType.FAULT_SWITCH);
|
||||
} else {
|
||||
List<RouteFls> flsList = route.getFlsList();
|
||||
if (!CollectionUtils.isEmpty(flsList)) {
|
||||
List<RouteFls> fls = flsList.stream()
|
||||
.filter(routeFls -> routeFls.getBase().getASwitch().equals(relSwitch))
|
||||
.collect(Collectors.toList());
|
||||
if (!routeService.isFlsCheckPass(fls)) {
|
||||
return new MovementAuthority.End(previousSection, MovementAuthority.EndType.FAULT_SWITCH);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -346,27 +359,12 @@ public class ZCLogicLoop {
|
||||
// 轨道尽头/问题道岔
|
||||
Section temp = section.getNextRunningSectionOf(right);
|
||||
if (Objects.isNull(temp)) { // 到尽头
|
||||
if (section.isSwitchTrack()) { // 问题道岔
|
||||
if (Objects.nonNull(section.getSectionOf(!right))) {
|
||||
endList.add(new MovementAuthority.End(section.getSectionOf(!right),
|
||||
MovementAuthority.EndType.FAULT_SWITCH));
|
||||
// deviceEnd = new MovementAuthority.End(section.getSectionOf(!right),
|
||||
// MovementAuthority.EndType.FAULT_SWITCH);
|
||||
}
|
||||
} else {
|
||||
if (!section.isSwitchTrack()) { // 问题道岔
|
||||
endList.add(new MovementAuthority.End(section,
|
||||
MovementAuthority.EndType.END_TRACK));
|
||||
// deviceEnd = new MovementAuthority.End(section,
|
||||
// MovementAuthority.EndType.END_TRACK);
|
||||
}
|
||||
break;
|
||||
}
|
||||
// else {
|
||||
// if (temp.isNonCbtcOccupy() && temp.isInvalid()) {
|
||||
// endList.add(new MovementAuthority.End(temp, MovementAuthority.EndType.NCT_OCCUPIED_SECTION));
|
||||
// }
|
||||
// }
|
||||
section = temp;
|
||||
}
|
||||
if (Objects.nonNull(deviceEnd)) {
|
||||
endList.add(deviceEnd);
|
||||
@ -374,20 +372,6 @@ public class ZCLogicLoop {
|
||||
return endList;
|
||||
}
|
||||
|
||||
private MovementAuthority.End checkFaultSwitchAfterSignal(Signal signal) {
|
||||
if (Objects.nonNull(signal)) {
|
||||
Section section = signal.getSection().getSectionOf(signal.isRight());
|
||||
if (Objects.nonNull(section) && section.isSwitchTrack()) {
|
||||
Switch relSwitch = section.getRelSwitch();
|
||||
if (relSwitch.isLoss() && relSwitch.isLoss()) {
|
||||
return new MovementAuthority.End(signal.getSection(),
|
||||
MovementAuthority.EndType.FAULT_SWITCH);
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 比较并构建移动授权数据
|
||||
*
|
||||
|
@ -396,7 +396,7 @@ public class CommandBO {
|
||||
} else {
|
||||
doorIsRight = train.judgeDirection4DoorIsRight(train.getDoor1());
|
||||
}
|
||||
stepList.add(buildDoorOnOffOperationStep(train.getGroupNumber(), doorIsRight, false));
|
||||
stepList.add(buildDoorOnOffOperationStep(train.getGroupNumber(), doorIsRight, true));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1244,18 +1244,9 @@ public class CalculateService {
|
||||
if (section.isPhysical()) {
|
||||
return sectionPosition;
|
||||
} else {
|
||||
int offset = 0;
|
||||
Section parent = section.getParent();
|
||||
if (parent != null) {
|
||||
for (Section logicSection : parent.getLogicList()) {
|
||||
if (!logicSection.equals(section)) {
|
||||
offset += logicSection.getLen();
|
||||
} else {
|
||||
offset += sectionPosition.getOffset();
|
||||
break;
|
||||
}
|
||||
}
|
||||
return new SectionPosition(parent, offset);
|
||||
return new SectionPosition(parent, section.getMinOffset() + sectionPosition.getOffset());
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
@ -109,40 +109,40 @@ public class MovementAuthority {
|
||||
return new SectionPosition(section, offset);
|
||||
}
|
||||
case FRONT_TRAIN: {
|
||||
VirtualRealityTrain train = (VirtualRealityTrain) this.device;
|
||||
boolean trainRight = train.isRight();
|
||||
SectionPosition headPosition = train.getHeadPosition();
|
||||
SectionPosition tailPosition = CalculateService
|
||||
.calculateNextPositionByStartAndLen(headPosition, !right, train.getLen());
|
||||
float offset;
|
||||
if (Objects.equals(trainRight, right)) { // 同向,取车尾
|
||||
offset = right
|
||||
?
|
||||
tailPosition.getOffset() - 2 * SimulationConstants.TRAIN_SAFE_DISTANCE
|
||||
:
|
||||
tailPosition.getOffset() + 2 * SimulationConstants.TRAIN_SAFE_DISTANCE;
|
||||
} else { // 方向相反,取车头
|
||||
offset = right
|
||||
?
|
||||
headPosition.getOffset() - 2 * SimulationConstants.TRAIN_SAFE_DISTANCE
|
||||
:
|
||||
headPosition.getOffset() + 2 * SimulationConstants.TRAIN_SAFE_DISTANCE;
|
||||
}
|
||||
return new SectionPosition(this.baseSection, offset);
|
||||
Section section = (Section) this.device;
|
||||
return new SectionPosition(section.getParent(), right ? section.getMinOffset() : section.getMaxOffset());
|
||||
|
||||
|
||||
// VirtualRealityTrain train = (VirtualRealityTrain) this.device;
|
||||
// boolean trainRight = train.isRight();
|
||||
// SectionPosition headPosition = train.getHeadPosition();
|
||||
// SectionPosition tailPosition = CalculateService
|
||||
// .calculateNextPositionByStartAndLen(headPosition, !right, train.getLen());
|
||||
// float offset;
|
||||
// if (Objects.equals(trainRight, right)) { // 同向,取车尾
|
||||
// offset = right
|
||||
// ?
|
||||
// tailPosition.getOffset() - 2 * SimulationConstants.TRAIN_SAFE_DISTANCE
|
||||
// :
|
||||
// tailPosition.getOffset() + 2 * SimulationConstants.TRAIN_SAFE_DISTANCE;
|
||||
// } else { // 方向相反,取车头
|
||||
// offset = right
|
||||
// ?
|
||||
// headPosition.getOffset() - 2 * SimulationConstants.TRAIN_SAFE_DISTANCE
|
||||
// :
|
||||
// headPosition.getOffset() + 2 * SimulationConstants.TRAIN_SAFE_DISTANCE;
|
||||
// }
|
||||
// return new SectionPosition(this.baseSection, offset);
|
||||
}
|
||||
case END_TRACK: {
|
||||
Section section = (Section) this.device;
|
||||
float offset = right ? section.getLen() : 0;
|
||||
return new SectionPosition(section, offset);
|
||||
}
|
||||
case UNLOCKED_OVERLAP: { //这种情况下section是进路的最后一个区段
|
||||
Section section = (Section) this.device;
|
||||
float offset = right ? Math.max(0, section.getLen() - 100) : Math.min(100, section.getLen());
|
||||
return new SectionPosition(section, offset);
|
||||
}
|
||||
case UNLOCKED_OVERLAP:
|
||||
case FAULT_SWITCH: {
|
||||
Section section = (Section) this.device;
|
||||
float offset = right ? 0 : section.getLen();
|
||||
float offset = right ? section.getLen() : 0;
|
||||
SectionPosition stopPosition = new SectionPosition(section, offset);
|
||||
return CalculateService.calculateNextPositionByStartAndLen(stopPosition, !right, 100);
|
||||
}
|
||||
|
@ -164,6 +164,7 @@ public class VirtualRealityIbp {
|
||||
* 下行屏蔽门开门
|
||||
*/
|
||||
KM,
|
||||
GM,
|
||||
/**
|
||||
* 下行钥匙
|
||||
*/
|
||||
|
@ -6,6 +6,10 @@ import lombok.Setter;
|
||||
@Getter
|
||||
@Setter
|
||||
public class VirtualRealityPsl {
|
||||
|
||||
/** 所有滑动门/应急门关闭且紧锁指示灯 */
|
||||
private boolean qbgmLight;
|
||||
|
||||
/** psl操作指示灯 */
|
||||
private boolean pslczLight;
|
||||
|
||||
|
@ -4,6 +4,7 @@ import club.joylink.rtss.simulation.cbtc.data.vr.VirtualRealityIbp;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -33,11 +34,19 @@ public class IbpData {
|
||||
public static class SquareButtonVO {
|
||||
private String code;
|
||||
|
||||
private VirtualRealityIbp.Mean mean;
|
||||
private String mean;
|
||||
|
||||
private String sectionCode;
|
||||
|
||||
private Boolean direction;
|
||||
|
||||
public VirtualRealityIbp.Mean getMean() {
|
||||
if (StringUtils.hasText(this.mean)) {
|
||||
return VirtualRealityIbp.Mean.valueOf(this.mean);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Getter
|
||||
@ -55,9 +64,17 @@ public class IbpData {
|
||||
public static class CircularLampVO {
|
||||
private String code;
|
||||
|
||||
private VirtualRealityIbp.Mean mean;
|
||||
private String mean;
|
||||
|
||||
private Boolean direction;
|
||||
|
||||
public VirtualRealityIbp.Mean getMean() {
|
||||
if (StringUtils.hasText(this.mean)) {
|
||||
return VirtualRealityIbp.Mean.valueOf(this.mean);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Getter
|
||||
@ -66,8 +83,16 @@ public class IbpData {
|
||||
public static class KeyVO {
|
||||
private String code;
|
||||
|
||||
private VirtualRealityIbp.Mean mean;
|
||||
private String mean;
|
||||
|
||||
private Boolean direction; //暂时没用
|
||||
|
||||
public VirtualRealityIbp.Mean getMean() {
|
||||
if (StringUtils.hasText(this.mean)) {
|
||||
return VirtualRealityIbp.Mean.valueOf(this.mean);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -14,6 +14,11 @@ import java.util.Objects;
|
||||
@NoArgsConstructor
|
||||
public class PslStatus {
|
||||
|
||||
/**
|
||||
* 所有滑动门/应急门关闭且紧锁
|
||||
*/
|
||||
private Boolean qbgmLight;
|
||||
|
||||
/**
|
||||
* psl操作指示灯
|
||||
*/
|
||||
@ -60,6 +65,7 @@ public class PslStatus {
|
||||
private Boolean sdButton;
|
||||
|
||||
public PslStatus(VirtualRealityPsl psl) {
|
||||
this.qbgmLight = psl.isQbgmLight();
|
||||
this.pslczLight = psl.isPslczLight();
|
||||
this.hsjcLight = psl.isHsjcLight();
|
||||
this.kmLight = psl.isKmLight();
|
||||
@ -74,6 +80,11 @@ public class PslStatus {
|
||||
public PslStatus collectDifference(VirtualRealityPsl psl) {
|
||||
PslStatus pslStatus = new PslStatus();
|
||||
boolean change = false;
|
||||
if (!Objects.equals(this.qbgmLight, psl.isQbgmLight())) {
|
||||
this.qbgmLight = psl.isQbgmLight();
|
||||
pslStatus.setQbgmLight(this.qbgmLight);
|
||||
change = true;
|
||||
}
|
||||
if (!Objects.equals(this.pslczLight, psl.isPslczLight())) {
|
||||
this.pslczLight = psl.isPslczLight();
|
||||
pslStatus.setPslczLight(this.pslczLight);
|
||||
|
@ -1,6 +1,7 @@
|
||||
package club.joylink.rtss.vo.map;
|
||||
|
||||
import club.joylink.rtss.util.JsonUtils;
|
||||
import club.joylink.rtss.vo.map.display.DisplayVO;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.springframework.util.StringUtils;
|
||||
@ -38,6 +39,10 @@ public class MapGraphDataNewVO {
|
||||
* 大屏配置
|
||||
*/
|
||||
private BigScreenConfig bigScreenConfig;
|
||||
|
||||
/** 显示配置 */
|
||||
private List<DisplayVO> displayList;
|
||||
|
||||
/**
|
||||
* 联锁数据生成配置
|
||||
*/
|
||||
|
@ -0,0 +1,16 @@
|
||||
package club.joylink.rtss.vo.map.display;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
public class DisplayVO {
|
||||
private List<String> stationCodeList;
|
||||
|
||||
private List<String> elementList;
|
||||
}
|
Loading…
Reference in New Issue
Block a user