Kaynağa Gözat

列车运行

zhanghaijun 2 yıl önce
ebeveyn
işleme
b5d44a5ba4

+ 8 - 3
train-server/src/main/java/top/haijunit/train/domain/constant/DirectionEnum.java

@@ -1,4 +1,4 @@
-package top.haijunit.train.domain.constant;
+package top.haijunit.train.constant;
 
 import com.baomidou.mybatisplus.annotation.EnumValue;
 import com.fasterxml.jackson.annotation.JsonCreator;
@@ -7,6 +7,7 @@ import lombok.AllArgsConstructor;
 import lombok.Getter;
 
 import java.util.Objects;
+import java.util.function.DoubleBinaryOperator;
 
 /**
  * @author zhanghaijun
@@ -16,13 +17,17 @@ import java.util.Objects;
 @Getter
 @AllArgsConstructor
 public enum DirectionEnum {
-    top("up", "上行,从右向左"),
-    down("down", "下行,从左向右");
+    // 上行 从右向左 里程越来越小
+    top("up", "上行", (start, end) -> end - start),
+    // 下行 从左向右 里程越来越大
+    down("down", "下行,从左向右", (start, end) -> start - end);
+
 
     @JsonValue
     @EnumValue
     private final String code;
     private final String describe;
+    private final DoubleBinaryOperator compare;
 
     @JsonCreator(mode = JsonCreator.Mode.DELEGATING)
     public static DirectionEnum getByValue(String value) {

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

@@ -1,4 +1,4 @@
-package top.haijunit.train.domain.constant;
+package top.haijunit.train.constant;
 
 import com.baomidou.mybatisplus.annotation.EnumValue;
 import com.fasterxml.jackson.annotation.JsonCreator;

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

@@ -1,4 +1,4 @@
-package top.haijunit.train.domain.constant;
+package top.haijunit.train.constant;
 
 import com.baomidou.mybatisplus.annotation.EnumValue;
 import com.fasterxml.jackson.annotation.JsonCreator;

+ 14 - 0
train-server/src/main/java/top/haijunit/train/constant/TrainConstant.java

@@ -0,0 +1,14 @@
+package top.haijunit.train.constant;
+
+/**
+ * @author zhanghaijun
+ * @date 2023/11/13 17:52
+ * @description [一句话描述该类的功能]
+ */
+public interface TrainConstant {
+
+    // 加速度 m/s
+    double SPEED_UP = 50.00;
+    // 减速度 m/s
+    double SPEED_DOWN = 50.00;
+}

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

@@ -1,4 +1,4 @@
-package top.haijunit.train.domain.constant;
+package top.haijunit.train.constant;
 
 import com.baomidou.mybatisplus.annotation.EnumValue;
 import com.fasterxml.jackson.annotation.JsonCreator;

+ 4 - 4
train-server/src/main/java/top/haijunit/train/domain/entity/SignEntity.java

@@ -5,9 +5,9 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import top.haijunit.mybatis.domain.BaseEntity;
-import top.haijunit.train.domain.constant.DirectionEnum;
-import top.haijunit.train.domain.constant.SignEnum;
-import top.haijunit.train.domain.constant.StatusEnum;
+import top.haijunit.train.constant.DirectionEnum;
+import top.haijunit.train.constant.SignEnum;
+import top.haijunit.train.constant.StatusEnum;
 
 /**
  * @author zhanghaijun
@@ -27,7 +27,7 @@ public class SignEntity extends BaseEntity {
     /** 点位 编号 */
     private String code;
     /** 点位 公里标 */
-    private Long kilometer;
+    private Double kilometer;
     /** 上行/下行 */
     private DirectionEnum direction;
     /** 状态 */

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

@@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import top.haijunit.mybatis.domain.BaseEntity;
-import top.haijunit.train.domain.constant.UserStatusEnum;
+import top.haijunit.train.constant.UserStatusEnum;
 
 /**
  * @author zhanghaijun

+ 47 - 0
train-server/src/main/java/top/haijunit/train/service/TrainRun.java

@@ -0,0 +1,47 @@
+package top.haijunit.train.service;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import top.haijunit.train.constant.DirectionEnum;
+import top.haijunit.train.domain.entity.SignEntity;
+import top.haijunit.train.utils.CalculateUtil;
+
+import java.time.Duration;
+import java.time.LocalDateTime;
+import java.util.LinkedList;
+
+/**
+ * @author zhanghaijun
+ * @date 2023/11/13 17:19
+ * @description 列车运行
+ */
+@Getter
+@RequiredArgsConstructor
+public class TrainRun {
+
+    private final String trainCode;
+    private final LocalDateTime data;
+    private final double mileage;
+    private final double speed = 0.00;
+    private final double speedFull = 0.00;
+    // 方向
+    private DirectionEnum direction;
+    // 进路区间
+    private LinkedList<SignEntity> distanceList;
+
+    public void run() {
+        LocalDateTime now = LocalDateTime.now();
+        Duration duration = Duration.between(this.getData(), now);
+        long seconds = duration.getSeconds();
+        double m = CalculateUtil.calculateDistance(this.getMileage(), this.getSpeed(), this.getSpeedFull(), seconds);
+        // TODO
+        for (SignEntity sign : distanceList) {
+            if (direction.getCompare().applyAsDouble(sign.getKilometer(), m) > 0) {
+
+            }
+
+        }
+
+
+    }
+}

+ 1 - 1
train-server/src/main/java/top/haijunit/train/service/UserService.java

@@ -4,7 +4,7 @@ import cn.hutool.core.util.RandomUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
-import top.haijunit.train.domain.constant.UserStatusEnum;
+import top.haijunit.train.constant.UserStatusEnum;
 import top.haijunit.train.domain.entity.UserEntity;
 import top.haijunit.train.mapper.UserMapper;
 

+ 25 - 0
train-server/src/main/java/top/haijunit/train/utils/CalculateUtil.java

@@ -0,0 +1,25 @@
+package top.haijunit.train.utils;
+
+import lombok.experimental.UtilityClass;
+
+/**
+ * @author zhanghaijun
+ * @date 2023/11/13 17:38
+ * @description [一句话描述该类的功能]
+ */
+@UtilityClass
+public class CalculateUtil {
+
+    /**
+     * 输入当前的距离、速度、加速度和时间
+     *
+     * @param s0 // 初始位置
+     * @param v0 // 初始速度
+     * @param a  // 加速度
+     * @param t  // 时间
+     * @return 位置距离
+     */
+    public double calculateDistance(double s0, double v0, double a, double t) {
+        return s0 + v0 * t + 0.5 * a * t * t;
+    }
+}

+ 1 - 1
train-server/src/main/resources/db/changelog/db-server-train.xml

@@ -11,7 +11,7 @@
             </column>
             <column name="name" type="VARCHAR(128)" defaultValue="" remarks="名称"/>
             <column name="code" type="VARCHAR(64)" defaultValue="" remarks="编号"/>
-            <column name="kilometer" type="${number.type}" defaultValueNumeric="0" remarks="公里标(单位Km)"/>
+            <column name="kilometer" type="DOUBLE(10,5)" defaultValueNumeric="0" remarks="公里标(单位Km)"/>
             <column name="direction" type="VARCHAR(64)" defaultValue="" remarks="上行/下行"/>
             <column name="sign_status" type="VARCHAR(128)" defaultValue="" remarks="状态行"/>
             <column name="sign_type" type="VARCHAR(128)" defaultValue="" remarks="点位类型"/>