|
|
@@ -1,14 +1,19 @@
|
|
|
package top.haijunit.train.simulation.train;
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
+import cn.hutool.json.JSONObject;
|
|
|
+import cn.hutool.json.JSONUtil;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.scheduling.annotation.Async;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import top.haijunit.common.utils.ErrorUtil;
|
|
|
import top.haijunit.common.utils.StreamUtils;
|
|
|
-import top.haijunit.train.domain.constant.DirectionEnum;
|
|
|
+import top.haijunit.train.device.domain.CommandEnum;
|
|
|
import top.haijunit.train.domain.constant.TrainConstant;
|
|
|
+import top.haijunit.train.domain.entity.PlatformDoorEntity;
|
|
|
import top.haijunit.train.domain.entity.SignStopEntity;
|
|
|
+import top.haijunit.train.domain.repository.PlatformDoorRepository;
|
|
|
import top.haijunit.train.service.SectionService;
|
|
|
import top.haijunit.train.simulation.domain.SectionItem;
|
|
|
import top.haijunit.train.simulation.domain.TrainItem;
|
|
|
@@ -30,6 +35,7 @@ import java.util.*;
|
|
|
@RequiredArgsConstructor
|
|
|
public class TrainComputerService {
|
|
|
private final SectionService sectionService;
|
|
|
+ private final PlatformDoorRepository platformDoorRepository;
|
|
|
|
|
|
public void run(TrainItem trainItem) {
|
|
|
try {
|
|
|
@@ -57,7 +63,7 @@ public class TrainComputerService {
|
|
|
long timeDifference = Math.abs(nowMillis - train.getUpdateTimeMillis());
|
|
|
if (NumberUtil.isLessOrEqual(distance, BigDecimal.ZERO) && timeDifference <= TrainConstant.STOP_TIME_SECOND * 1000) {
|
|
|
// 停车状态 时间不足30S
|
|
|
- TrainWebSocketUtils.sendMessage(train.getTrainNo(), timeDifference > (TrainConstant.STOP_TIME_SECOND - 2) * 1000 ? 1 : 0);
|
|
|
+ this.openOrCloseDoor(sectionList, train, timeDifference > (TrainConstant.STOP_TIME_SECOND - 2) * 1000 ? 1 : 0);
|
|
|
return train;
|
|
|
}
|
|
|
if (NumberUtil.isGreater(distance, BigDecimal.ZERO)) {
|
|
|
@@ -127,4 +133,26 @@ public class TrainComputerService {
|
|
|
}
|
|
|
return getDistanceMa(list, nextSectionOptional.get(), null, totalDistance);
|
|
|
}
|
|
|
+
|
|
|
+ // 开关屏蔽门
|
|
|
+ @Async
|
|
|
+ public void openOrCloseDoor(LinkedList<SectionItem> sectionList, TrainItem train, int state) {
|
|
|
+ // 列车开关门
|
|
|
+ JSONObject trainData = JSONUtil.createObj();
|
|
|
+ trainData.set(CommandEnum.TRAIN_OPEN_DOOR.getNameStr(), train.getTrainNo());
|
|
|
+ trainData.set(CommandEnum.TRAIN_OPEN_DOOR.getStatusStr(), state);
|
|
|
+ TrainWebSocketUtils.sendMessage(CommandEnum.TRAIN_OPEN_DOOR, trainData);
|
|
|
+ // 站台屏蔽门开关门
|
|
|
+ Optional<SectionItem> optional = sectionList.stream().filter(item -> item.getSectionId().equals(train.getTrainId())).findFirst();
|
|
|
+ if (optional.isEmpty()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ List<PlatformDoorEntity> doorList = platformDoorRepository.findByStationIdAndDirection(optional.get().getStationId(), train.getDirection());
|
|
|
+ for (PlatformDoorEntity entity : doorList) {
|
|
|
+ JSONObject doorData = JSONUtil.createObj();
|
|
|
+ doorData.set(CommandEnum.PLATFORM_DOOR_LOCK.getNameStr(), entity.getId());
|
|
|
+ doorData.set(CommandEnum.PLATFORM_DOOR_LOCK.getStatusStr(), state);
|
|
|
+ TrainWebSocketUtils.sendMessage(CommandEnum.PLATFORM_DOOR_LOCK, doorData);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|