From c9b270dae703ee077a4e41013d7662c5e61afd29 Mon Sep 17 00:00:00 2001 From: 野心家 <1051256694@qq.com> Date: 星期一, 26 五月 2025 23:02:15 +0800 Subject: [PATCH] #ZH --- src/main/java/com/zy/asrs/utils/SortTheExecutionOfTheCarUtil.java | 200 ++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 176 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/zy/asrs/utils/SortTheExecutionOfTheCarUtil.java b/src/main/java/com/zy/asrs/utils/SortTheExecutionOfTheCarUtil.java index 1a45689..d586715 100644 --- a/src/main/java/com/zy/asrs/utils/SortTheExecutionOfTheCarUtil.java +++ b/src/main/java/com/zy/asrs/utils/SortTheExecutionOfTheCarUtil.java @@ -29,20 +29,40 @@ 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(); } } @@ -50,20 +70,35 @@ return result; } - //鑾峰彇鏈�杩戝苟鍦ㄥ綋鍓嶄綅缃悗杈圭殑浣嶇疆 - public static Integer LatelyAndLessThanWcs(List<BasDevpPosition> devpPosition, long nowPosition){ - Integer result = 0; - Integer integer = LatelyAndLessThan(devpPosition, nowPosition); +// //鑾峰彇鏈�杩戝苟鍦ㄥ綋鍓嶄綅缃悗杈圭殑浣嶇疆 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() == 101){ - result = 133; + if (basDevpPosition.getDevNo() == 134){ + result = 101; } break; } result = basDevpPosition.getDevNo(); } - return result; + return result == -1? 101 : result; } // //鑾峰彇鏈�杩戝苟鍦ㄥ綋鍓嶄綅缃墠杈圭殑浣嶇疆 // public static Long LatelyAndLessThan(long[] devpPosition,long nowPosition){ @@ -85,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(); } } @@ -402,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; + } + } + } -- Gitblit v1.9.1