zhanghaijun %!s(int64=2) %!d(string=hai) anos
pai
achega
2a2b2573f6

+ 2 - 1
train-server/src/main/java/top/haijunit/train/domain/constant/DirectionEnum.java

@@ -16,11 +16,12 @@ import java.util.Objects;
 @AllArgsConstructor
 public enum DirectionEnum {
 
-    UP(1, "上行"), DOWN(2, "下行");
+    UP(1, "上行", -1), DOWN(2, "下行", 1);
 
     @JsonValue
     private final Integer code;
     private final String describe;
+    private final int factor;
 
     @JsonCreator(mode = JsonCreator.Mode.DELEGATING)
     public static DirectionEnum getByCode(Integer code) {

+ 3 - 2
train-server/src/main/java/top/haijunit/train/domain/constant/TrainConstant.java

@@ -10,10 +10,11 @@ import java.math.RoundingMode;
  */
 public interface TrainConstant {
 
+    BigDecimal SPEED_LIMIT = new BigDecimal("80");
     // 全线列车限速默认为80km/h 转换单位公式:速度(m/s) = 速度(km/h) * 1000 / 3600
-    BigDecimal SPEED_LIMIT_EBI = new BigDecimal("80").multiply(new BigDecimal("1000").divide(new BigDecimal("3600"), 10, RoundingMode.HALF_UP));
+    BigDecimal SPEED_LIMIT_EBI = SPEED_LIMIT.multiply(new BigDecimal("1000").divide(new BigDecimal("3600"), 10, RoundingMode.HALF_UP));
     // 推荐惰性速度为80-2=78km/h
-    BigDecimal SPEED_LIMIT_SBI = new BigDecimal("80").multiply(new BigDecimal("1000").divide(new BigDecimal("3600"), 10, RoundingMode.HALF_UP));
+    BigDecimal SPEED_LIMIT_SBI = SPEED_LIMIT.subtract(new BigDecimal("2")).multiply(new BigDecimal("1000").divide(new BigDecimal("3600"), 10, RoundingMode.HALF_UP));
     // 列车加速度固定为0.8 m/s2
     BigDecimal ACCELERATION_LIMIT = new BigDecimal("0.8");
     // 制动减速度固定为-0.6 m/s2

+ 0 - 7
train-server/src/main/java/top/haijunit/train/listener/ReportTimeHandle.java

@@ -47,13 +47,6 @@ public class ReportTimeHandle {
     public void sendRouterStatus() {
         Map<Long, LinkedList<RouteItem>> routeMap = TrainSimulationHolder.getRouteMap();
         TrainWebSocketUtils.sendMessage(CommandEnum.ROUTE_STATUS, new HashMap<>(routeMap));
-        log.info("------------");
-        for (Map.Entry<Long, LinkedList<RouteItem>> entry : routeMap.entrySet()) {
-            log.info("进路资源, 列车:{},进路:{}", entry.getKey(), entry.getValue().stream().map(item -> {
-                return item.getId() + "--" + item.getRouteStatus().getDescribe();
-            }).collect(Collectors.joining(",")));
-        }
-        log.info("------------");
     }
 
     /** 定时计算进路 */

+ 4 - 0
train-server/src/main/java/top/haijunit/train/simulation/domain/RouteItem.java

@@ -72,6 +72,10 @@ public class RouteItem implements Serializable {
         return this.getSelectionList().stream().map(SelectionEntity::getId).collect(Collectors.toCollection(LinkedList::new));
     }
 
+    public LinkedList<String> getSelectionNames() {
+        return this.getSelectionList().stream().map(SelectionEntity::getName).collect(Collectors.toCollection(LinkedList::new));
+    }
+
     /**
      * @param kilometer 公里标
      * @param direction 方向

+ 10 - 1
train-server/src/main/java/top/haijunit/train/simulation/train/RouteComputerService.java

@@ -14,6 +14,8 @@ import top.haijunit.train.simulation.domain.RouteItem;
 import top.haijunit.train.simulation.domain.TrainItem;
 
 import java.util.LinkedList;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @author zhanghaijun
@@ -30,7 +32,14 @@ public class RouteComputerService {
 
     public void run(TrainItem train) {
         // 更新进路共享数据
-        TrainSimulationHolder.addRouteList(train.getTrainId(), routeCompute(train));
+        LinkedList<RouteItem> list = routeCompute(train);
+        // log.info("------------");
+        // log.info("列车的位置:{},方向:{}", train.getHeadKilometer(), train.getDirection());
+        // log.info("进路资源:{}", list.stream().map(item -> item.getId() + "--" + item.getRouteStatus().getDescribe() + "--" + item.getSelectionNames()).collect(Collectors.joining(",")));
+        // log.info("------------");
+        if (CollUtil.isNotEmpty(list)) {
+            TrainSimulationHolder.addRouteList(train.getTrainId(), list);
+        }
     }
 
     public LinkedList<RouteItem> routeCompute(TrainItem train) {

+ 10 - 8
train-server/src/main/java/top/haijunit/train/simulation/train/TrainComputerService.java

@@ -30,18 +30,20 @@ public class TrainComputerService {
     public void run(TrainItem trainItem) {
         LinkedList<RouteItem> routeList = TrainSimulationHolder.getRouteList(trainItem.getTrainId());
         if (routeList == null || routeList.isEmpty()) {
-            // 没有触发进路
+            log.error("列车没有进路,列车位置: {},列车速度: {},列车方向: {}", trainItem.getHeadKilometer(), trainItem.getSpeed(), trainItem.getDirection());
             return;
         }
-        // 更新列车的位置
+        // 获取当前的世家
         LocalTime now = LocalTime.now();
-        // 运行距离
+        // 开始更新列车的数据:位置、速度、方向
+        // 1、距离上一个周期 列车运行的距离
         BigDecimal decimal = trainItem.getDistance(now);
-        BigDecimal kilometer = trainItem.getKilometer();
-        switch (trainItem.getDirection()) {
-            case UP -> kilometer = kilometer.subtract(decimal).abs();
-            case DOWN -> kilometer = kilometer.add(decimal).abs();
-        }
+
+        // 2、计算当前时间列车的应该的位置
+        BigDecimal kilometer = switch (trainItem.getDirection()) {
+            case UP -> trainItem.getKilometer().subtract(decimal).abs();
+            case DOWN -> trainItem.getKilometer().add(decimal).abs();
+        };
         SelectionEntity selection = selectionService.getSelection(kilometer, trainItem.getDirection());
         trainItem.setHeadKilometer(now, kilometer, selection);
 

+ 9 - 9
train-web/src/store/modules/train.ts

@@ -1,6 +1,6 @@
-import { defineStore } from "pinia";
-import { signalAll, selectionAll, switchAll } from '@/api/train'
-import { SignalItem, SelectionItem, SwitchItem } from '@/types/train-travel'
+import {defineStore} from "pinia";
+import {signalAll, selectionAll, switchAll} from '@/api/train'
+import {SignalItem, SelectionItem, SwitchItem} from '@/types/train-travel'
 
 export const StoreTrain = defineStore("train", {
   state: () => {
@@ -35,22 +35,22 @@ export const StoreTrain = defineStore("train", {
   },
   actions: {
     updateSignal() {
-      signalAll().then(res => {
-        if (res.code === 200) {
+      signalAll().then((res: any) => {
+        if (res?.code === 200) {
           this.signalList = res.data as SignalItem[];
         }
       })
     },
     updateSelection() {
-      selectionAll().then(res => {
-        if (res.code === 200) {
+      selectionAll().then((res: any) => {
+        if (res?.code === 200) {
           this.selectionList = res.data as SelectionItem[];
         }
       })
     },
     updateSwitch() {
-      switchAll().then(res => {
-        if (res.code === 200) {
+      switchAll().then((res: any) => {
+        if (res?.code === 200) {
           this.switchList = res.data as SwitchItem[];
         }
       })