Bläddra i källkod

进路触发逻辑

zhanghaijun 2 år sedan
förälder
incheckning
31684bdba6

+ 1 - 1
train-server/src/main/java/top/haijunit/train/domain/entity/RouteEntity.java

@@ -60,7 +60,7 @@ public class RouteEntity implements Serializable {
     }
 
     public ArrayList<Long> getSwitchList() {
-        if (StrUtil.isBlank(this.getSwitchId())) {
+        if (StrUtil.isBlank(this.getSwitchId()) || StrUtil.equals(this.getSwitchId(), "-1")) {
             return new ArrayList<>();
         }
         return StrUtil.split(this.getSwitchId(), "-").stream().map(item -> Convert.toLong(item, 0L)).collect(Collectors.toCollection(ArrayList::new));

+ 12 - 5
train-server/src/main/java/top/haijunit/train/listener/ReportTimeHandle.java

@@ -13,9 +13,9 @@ import top.haijunit.train.simulation.TrainSimulationHolder;
 import top.haijunit.train.socket.CommandEnum;
 import top.haijunit.train.socket.TrainWebSocketUtils;
 
-import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @author zhanghaijun
@@ -40,11 +40,18 @@ public class ReportTimeHandle {
     }
 
     /** 定时发送进路占用数据 */
-    // @Async
-    // @Scheduled(fixedRate = 50)
+    @Async
+    @Scheduled(fixedRate = 5000)
     public void sendRouterStatus() {
         Map<Long, LinkedList<RouteEntity>> routeMap = TrainSimulationHolder.getRouteMap();
-        TrainWebSocketUtils.sendMessage(CommandEnum.ROUTE_STATUS, new HashMap<>(routeMap));
+        // TrainWebSocketUtils.sendMessage(CommandEnum.ROUTE_STATUS, new HashMap<>(routeMap));
+        log.info("------------");
+        for (Map.Entry<Long, LinkedList<RouteEntity>> entry : routeMap.entrySet()) {
+            log.info("进路资源, 列车:{},进路:{}", entry.getKey(), entry.getValue().stream().map(item -> {
+                return item.getId() + "--" + item.getRouteStatus().getDescribe();
+            }).collect(Collectors.joining(",")));
+        }
+        log.info("------------");
     }
 
     @Async
@@ -54,7 +61,7 @@ public class ReportTimeHandle {
 
     /** 定时计算进路 */
     @Async
-    @Scheduled(fixedRate = 10000)
+    @Scheduled(fixedRate = 1000)
     public void runRouteCompute() {
         for (TrainItem trainItem : TrainSimulationHolder.getTrainItem()) {
             routeComputerService.run(trainItem);

+ 3 - 4
train-server/src/main/java/top/haijunit/train/simulation/RouteComputerService.java

@@ -26,7 +26,6 @@ public class RouteComputerService {
     private final SwitchService switchService;
     private final RouteService routeService;
 
-    @Async
     public void run(TrainItem train) {
         // 占用、 列车 车头 过了信号灯 变成红色
         // 列车 车尾离开 进路 型号等 空闲状态
@@ -55,7 +54,7 @@ public class RouteComputerService {
         }
         // 找到下一个进路
         RouteEntity nextRoute = routeService.getNextRoute(routeTrigger.getId());
-        if (null == nextRoute) {
+        if (null == nextRoute || routeList.contains(nextRoute)) {
             // 没有找到下一个进路
             return routeList;
         }
@@ -64,9 +63,9 @@ public class RouteComputerService {
             // 下一跳进路为非出清状态
             return routeList;
         }
-        if (!routeTrigger.getSwitchList().isEmpty()) {
+        if (!nextRoute.getSwitchList().isEmpty()) {
             // b)检查进路中道岔状态是否与进路要求的状态一致
-            boolean changed = switchService.changeSwitchState(routeTrigger.getSwitchMap());
+            boolean changed = switchService.changeSwitchState(nextRoute.getSwitchMap());
             if (changed) {
                 // TODo 切换道岔需要时间
                 return routeList;

+ 0 - 1
train-server/src/main/java/top/haijunit/train/simulation/TrainComputerService.java

@@ -15,7 +15,6 @@ import org.springframework.stereotype.Service;
 @RequiredArgsConstructor
 public class TrainComputerService {
 
-    @Async
     public void run(TrainItem trainItem) {
 
     }

+ 1 - 1
train-server/src/main/resources/application.yml

@@ -60,7 +60,7 @@ spring:
     open-in-view: false
     hibernate:
       ddl-auto: none
-    show-sql: true
+    show-sql: false
 
 ---
 websocket: