#ZH
野心家
2025-05-26 c9b270dae703ee077a4e41013d7662c5e61afd29
src/main/java/com/zy/asrs/utils/SortTheExecutionOfTheCarUtil.java
@@ -29,25 +29,76 @@
        return ints;
    }
    //获取最近并在当前位置前边的位置
    public static Integer LatelyAndLessThan(List<BasDevpPosition> devpPosition, long nowPosition){
//    //获取最近并在当前位置前边的位置1000000===>10000==>0==>1000000
//    public static Integer LatelyAndLessThan(List<BasDevpPosition> devpPosition, long nowPosition,long perimeter){
//        Integer result = 0;
//        long Difference = perimeter;
//        for (BasDevpPosition positions : devpPosition){
//            Long position = positions.getPlcPosition();
//            if (position<=nowPosition){
//                if ((nowPosition-position) < Difference){
//                    Difference = nowPosition-position;
//                    result = positions.getDevNo();
//                }
//            } else {
//                if ((nowPosition-(position - perimeter)) < Difference){
//                    Difference = nowPosition-(position - perimeter);
//                    result = positions.getDevNo();
//                }
//            }
//        }
//        return result;
//    }
    //获取最近并在当前位置前边的位置 0==>1000===>1000000==>0
    public static Integer LatelyAndLessThan(List<BasDevpPosition> devpPosition, long nowPosition,long perimeter){
        Integer result = 0;
        long Difference = 1737000L;
        long Difference = perimeter;
        for (BasDevpPosition positions : devpPosition){
            Long position = positions.getPlcPosition();
            if (position<=nowPosition){
                if ((nowPosition-position) < Difference){
                    Difference = nowPosition-position;
            if (position >= nowPosition){
                if ((position-nowPosition) < Difference){
                    Difference = position-nowPosition;
                    result = positions.getDevNo();
                }
            } else {
                if ((nowPosition-(position - 1737000L)) < Difference){
                    Difference = nowPosition-(position - 1737000L);
                if (perimeter - (nowPosition - position) < Difference){
                    Difference = perimeter - (nowPosition - position);
                    result = positions.getDevNo();
                }
            }
        }
        return result;
    }
//    //获取最近并在当前位置后边的位置 1000000===>10000==>0==>1000000
//    public static Integer LatelyAndLessThanWcs(List<BasDevpPosition> devpPosition, long nowPosition,long perimeter){
//        Integer result = 0;
//        Integer integer = LatelyAndLessThan(devpPosition, nowPosition,perimeter);
//        for (BasDevpPosition basDevpPosition:devpPosition){
//            if (basDevpPosition.getDevNo().equals(integer)){
//                if (basDevpPosition.getDevNo() == 101){
//                    result = 133;
//                }
//                break;
//            }
//            result = basDevpPosition.getDevNo();
//        }
//        return result;
//    }
    //获取最近并在当前位置后边的位置 0==>1000===>1000000==>0
    public static Integer LatelyAndLessThanWcs(List<BasDevpPosition> devpPosition, long nowPosition,long perimeter){
        Integer result = -1;
        Integer integer = LatelyAndLessThan(devpPosition, nowPosition,perimeter);
        for (BasDevpPosition basDevpPosition:devpPosition){
            if (basDevpPosition.getDevNo().equals(integer)){
                if (basDevpPosition.getDevNo() == 134){
                    result = 101;
                }
                break;
            }
            result = basDevpPosition.getDevNo();
        }
        return result == -1? 101 : result;
    }
//    //获取最近并在当前位置前边的位置
//    public static Long LatelyAndLessThan(long[] devpPosition,long nowPosition){
@@ -69,20 +120,41 @@
//        return result;
//    }
    //获取最近并在当前位置后边的位置
    public static Integer LatelyAndGreaterThan(List<List<Long>> sitePosition, long nowPosition){
        int result = 0;
        long Difference = 1737000L;
//    //获取最近并在当前位置后边的位置  1000000===>10000==>0==>1000000
//    public static Integer LatelyAndGreaterThan(List<List<Long>> sitePosition, long nowPosition ,long perimeter){
//        int result = 0;
//        long Difference = perimeter;
//        for (List<Long> rgvPositions: sitePosition){
//            Long position = rgvPositions.get(1);
//            if (position>nowPosition){
//                if ((position - nowPosition) < Difference){
//                    Difference = position - nowPosition;
//                    result = rgvPositions.get(0).intValue();
//                }
//            } else {
//                if ((perimeter - (nowPosition - position)) < Difference){
//                    Difference = perimeter - (nowPosition - position);
//                    result = rgvPositions.get(0).intValue();
//                }
//            }
//        }
//        return result;
//    }
    //获取最近并在当前位置后边的位置   0==>1000===>1000000==>0
    public static Integer LatelyAndGreaterThan(List<List<Long>> sitePosition, long nowPosition ,long perimeter){
        int result = -1;
        long Difference = perimeter;
        for (List<Long> rgvPositions: sitePosition){
            Long position = rgvPositions.get(1);
            if (position>nowPosition){
                if ((position - nowPosition) < Difference){
                    Difference = position - nowPosition;
            if (position <= nowPosition){
                if ((nowPosition - position) < Difference){
                    Difference = nowPosition - position;
                    result = rgvPositions.get(0).intValue();
                }
            } else {
                if ((1737000L - (nowPosition - position)) < Difference){
                    Difference = 1737000L - (nowPosition - position);
                if ((perimeter - (nowPosition - position)) < Difference){
                    Difference = perimeter - (nowPosition - position);
                    result = rgvPositions.get(0).intValue();
                }
            }
@@ -386,4 +458,100 @@
//    }
    //获取最近并在当前位置前边的位置 0==>1000===>1000000==>0
    public static Double LatelyAndLessThan(long devPosition,long rgvPosition,long perimeter){
        long Difference = perimeter;
        if (devPosition >= rgvPosition){
//            if ((devPosition-rgvPosition) < Difference){
                Difference = devPosition-rgvPosition;
//            }
        } else {
//            if (perimeter - (rgvPosition - devPosition) < Difference){
                Difference = perimeter - (rgvPosition - devPosition);
//            }
        }
        return Double.valueOf(Difference);
    }
    public static int calculateShortestDistanceDistance(List<Integer> data, int a, int b) {
        Result result = calculateShortestDistance(data, a, b);
        return result.distance;
    }
    public static List<Integer> calculateShortestDistancePassedData(List<Integer> data, int a, int b) {
        Result result = calculateShortestDistance(data, a, b);
        return result.passedData;
    }
//    public static String calculateShortestDistanceDirection(List<Integer> data, int a, int b) {
//        Result result = calculateShortestDistance(data, a, b);
//        return result.direction;
//    }
    public static boolean calculateShortestDistanceDirection(List<Integer> data, int a, int b) {
        Result result = calculateShortestDistance(data, a, b);
        return result.direction.equals("向前走(顺时针)");
    }
    public static void main(String[] args) {
        List<Integer> data = new ArrayList<>();
        // 用 List<Integer> 初始化数据
        for (int i = 1; i <= 9; i++) {
            data.add(i);
        }
        int a = 3; // 起点
        int b = 3; // 终点
        Result result = calculateShortestDistance(data, a, b);
        System.out.println("最近的距离是: " + result.distance);
        System.out.println("经过的数据: " + result.passedData);
        System.out.println("方向: " + result.direction);
    }
    public static Result calculateShortestDistance(List<Integer> data, int a, int b) {
        int length = data.size();
        int indexA = data.indexOf(a);
        int indexB = data.indexOf(b);
        if (indexA == -1 || indexB == -1) {
            throw new IllegalArgumentException("列表中未找到指定的元素");
        }
        // 顺时针方向的距离及经过的数据
        List<Integer> clockwiseData = new ArrayList<>();
        int clockwiseDistance = (indexB - indexA + length) % length;
        for (int i = 0; i <= clockwiseDistance; i++) {
            clockwiseData.add(data.get((indexA + i) % length));
        }
        // 逆时针方向的距离及经过的数据
        List<Integer> counterClockwiseData = new ArrayList<>();
        int counterClockwiseDistance = (indexA - indexB + length) % length;
        for (int i = 0; i <= counterClockwiseDistance; i++) {
            counterClockwiseData.add(data.get((indexA - i + length) % length));
        }
        // 比较距离并返回结果
        if (clockwiseDistance <= counterClockwiseDistance) {
            return new Result(clockwiseDistance, clockwiseData, "向前走(顺时针)");
        } else {
            return new Result(counterClockwiseDistance, counterClockwiseData, "向后走(逆时针)");
        }
    }
    // 用于返回结果的类
    static class Result {
        public int distance;
        public List<Integer> passedData;
        public String direction;
        public Result(int distance, List<Integer> passedData, String direction) {
            this.distance = distance;
            this.passedData = passedData;
            this.direction = direction;
        }
    }
}