zhanghaijun 2 anni fa
parent
commit
9cec5cce05

+ 2 - 0
train-server/src/main/java/top/haijunit/train/simulation/domain/TrainItem.java

@@ -40,6 +40,8 @@ public class TrainItem {
     // 运行加速度
     // 运行加速度
     private BigDecimal acceleration;
     private BigDecimal acceleration;
 
 
+    private boolean isOpenDoor = false;
+
     public TrainItem(TrainEntity train, String sectionName, DirectionEnum direction) {
     public TrainItem(TrainEntity train, String sectionName, DirectionEnum direction) {
         this.trainId = train.getId();
         this.trainId = train.getId();
         this.trainLength = train.getTrainLength();
         this.trainLength = train.getTrainLength();

+ 16 - 12
train-server/src/main/java/top/haijunit/train/simulation/train/TrainComputerService.java

@@ -63,7 +63,7 @@ public class TrainComputerService {
         long timeDifference = Math.abs(nowMillis - train.getUpdateTimeMillis());
         long timeDifference = Math.abs(nowMillis - train.getUpdateTimeMillis());
         if (NumberUtil.isLessOrEqual(distance, BigDecimal.ZERO) && timeDifference <= TrainConstant.STOP_TIME_SECOND * 1000) {
         if (NumberUtil.isLessOrEqual(distance, BigDecimal.ZERO) && timeDifference <= TrainConstant.STOP_TIME_SECOND * 1000) {
             // 停车状态 时间不足30S
             // 停车状态 时间不足30S
-            this.openOrCloseDoor(sectionList, train, timeDifference > (TrainConstant.STOP_TIME_SECOND - 2) * 1000 ? 1 : 0);
+            train.setOpenDoor(this.openOrCloseDoor(sectionList, train, timeDifference > (TrainConstant.STOP_TIME_SECOND - 2) * 1000 ? 0 : 1));
             return train;
             return train;
         }
         }
         if (NumberUtil.isGreater(distance, BigDecimal.ZERO)) {
         if (NumberUtil.isGreater(distance, BigDecimal.ZERO)) {
@@ -135,8 +135,12 @@ public class TrainComputerService {
     }
     }
 
 
     // 开关屏蔽门
     // 开关屏蔽门
-    @Async
-    public void openOrCloseDoor(LinkedList<SectionItem> sectionList, TrainItem train, int state) {
+    public boolean openOrCloseDoor(LinkedList<SectionItem> sectionList, TrainItem train, int state) {
+        // 0 关门 1 开门
+        if ((train.isOpenDoor() && state == 1) || (!train.isOpenDoor() && state == 0)) {
+            // 避免重复发送
+            return train.isOpenDoor();
+        }
         // 列车开关门
         // 列车开关门
         JSONObject trainData = JSONUtil.createObj();
         JSONObject trainData = JSONUtil.createObj();
         trainData.set(CommandEnum.TRAIN_OPEN_DOOR.getNameStr(), train.getTrainNo());
         trainData.set(CommandEnum.TRAIN_OPEN_DOOR.getNameStr(), train.getTrainNo());
@@ -144,15 +148,15 @@ public class TrainComputerService {
         TrainWebSocketUtils.sendMessage(CommandEnum.TRAIN_OPEN_DOOR, trainData);
         TrainWebSocketUtils.sendMessage(CommandEnum.TRAIN_OPEN_DOOR, trainData);
         // 站台屏蔽门开关门
         // 站台屏蔽门开关门
         Optional<SectionItem> optional = sectionList.stream().filter(item -> item.getSectionId().equals(train.getTrainId())).findFirst();
         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);
+        if (optional.isPresent()) {
+            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);
+            }
         }
         }
+        return state != 0;
     }
     }
 }
 }

+ 6 - 1
train-server/src/main/java/top/haijunit/train/utils/TrainWebSocketUtils.java

@@ -1,5 +1,6 @@
 package top.haijunit.train.utils;
 package top.haijunit.train.utils;
 
 
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import cn.hutool.json.JSONUtil;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
@@ -20,7 +21,11 @@ import top.haijunit.websocket.utils.WebSocketUtils;
 public class TrainWebSocketUtils {
 public class TrainWebSocketUtils {
 
 
     public static void sendMessage(CommandEnum command, Object message) {
     public static void sendMessage(CommandEnum command, Object message) {
-        WebSocketUtils.sendMessage(JsonUtils.toJsonString(new SocketMessage(command, message)));
+        String data = JsonUtils.toJsonString(new SocketMessage(command, message));
+        if (StrUtil.isNotBlank(command.getNameStr())) {
+            log.info("发送消息:{}", data);
+        }
+        WebSocketUtils.sendMessage(data);
     }
     }
 
 
     public static void sendMessage(String trainNo, int state) {
     public static void sendMessage(String trainNo, int state) {