| | |
| | | import com.zy.core.model.RgvSlave; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | |
| | | import static java.util.stream.Collectors.toList; |
| | |
| | | */ |
| | | public class RouteUtils { |
| | | //排序 执行方向(面朝轨道 定位值左小右大) 0:左 小 1:右 大 |
| | | public static List<Integer>[] gradeRange(List<Integer> staNoList,List<BasDevpPosition> basDevpPositions) { |
| | | public static List<Integer>[] gradeRange(List<Integer> staNoList, List<BasDevpPosition> basDevpPositionList, boolean itSmall) { |
| | | List<Integer>[] avoidRangeArray = new ArrayList[2]; |
| | | |
| | | Integer[] rangeList = new Integer[staNoList.size()]; |
| | | List<Integer> rangeList1 = new ArrayList<>(); |
| | | List<Integer> rangeList2 = new ArrayList<>(); |
| | | |
| | | int i = 0; |
| | | for (BasDevpPosition basDevpPosition : basDevpPositionList) { |
| | | for (Integer staNo : staNoList) { |
| | | if (basDevpPosition.getDevNo().equals(staNo)) { |
| | | rangeList[i] = staNo; |
| | | i = i + 1; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | boolean sign = true; |
| | | for (int j = 0; j < rangeList.length; j++) { |
| | | if (itSmall) { |
| | | if (sign) { |
| | | rangeList1.add(rangeList[j]); |
| | | } else { |
| | | rangeList2.add(rangeList[j]); |
| | | } |
| | | if (sign && j >= rangeList.length / 2) { |
| | | sign = false; |
| | | } |
| | | } else { |
| | | if (sign && j >= rangeList.length / 2) { |
| | | sign = false; |
| | | } |
| | | if (sign) { |
| | | rangeList1.add(rangeList[j]); |
| | | } else { |
| | | rangeList2.add(rangeList[j]); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | avoidRangeArray[0] = rangeList1; |
| | | avoidRangeArray[1] = rangeList2; |
| | | return avoidRangeArray; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | //获取在范围的站点 |
| | | public static List<Integer> belongToRange(List<Integer> staNoList,Long position,List<BasDevpPosition> basDevpPositions){ |
| | | public static List<Integer> belongToRange(List<Integer> staNoList, Long[] avoid, List<BasDevpPosition> basDevpPositions) { |
| | | List<Integer> siteList = new ArrayList<>(); |
| | | |
| | | for (BasDevpPosition basDevpPosition : basDevpPositions) { |
| | | if (new TrackRangeUtils().avoidRange(basDevpPosition.getPlcPosition(), avoid)) { |
| | | for (Integer staNo : staNoList) { |
| | | if (basDevpPosition.getDevNo().equals(staNo)) { |
| | | siteList.add(staNo); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | return siteList; |
| | | } |
| | | |
| | | //提取站点集合 |
| | | public static List<Integer> BasDevpPositionExtractSites(List<BasDevpPosition> basDevpPositions){ |
| | | public static List<Integer> BasDevpPositionExtractSites(List<BasDevpPosition> basDevpPositions) { |
| | | List<Integer> siteList = new ArrayList<>(); |
| | | for (BasDevpPosition basDevpPosition : basDevpPositions){ |
| | | if (!siteList.contains(basDevpPosition.getDevNo())){ |
| | | for (BasDevpPosition basDevpPosition : basDevpPositions) { |
| | | if (!siteList.contains(basDevpPosition.getDevNo())) { |
| | | siteList.add(basDevpPosition.getDevNo()); |
| | | } |
| | | } |
| | | return siteList; |
| | | } |
| | | |
| | | //提取站点集合 |
| | | public static List<Integer> SortNearby(List<Integer> staNoList,Long rgvNowPos,List<BasDevpPosition> basDevpPositions){ |
| | | //提取站点集合//就近排序 |
| | | public static List<Integer> SortNearby(List<Integer> staNoList, Long rgvNowPos, List<BasDevpPosition> basDevpPositionList) { |
| | | List<Integer> siteList = new ArrayList<>(); |
| | | |
| | | List<BasDevpPosition> basDevpPositions = devpNoSort(basDevpPositionList, rgvNowPos); |
| | | for (BasDevpPosition basDevpPosition : basDevpPositions) { |
| | | for (Integer staNo : staNoList) { |
| | | if (basDevpPosition.getDevNo().equals(staNo)) { |
| | | siteList.add(staNo); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | return siteList; |
| | | } |
| | | |
| | | //站点过滤 |
| | | public static List<BasDevpPosition> devpNoSort(List<BasDevpPosition> devpPositionList, Long rgvNowPos) { |
| | | |
| | | List<BasDevpPosition> basDevpPositions = new ArrayList<>(); |
| | | List<BasDevpPosition> basDevpPositionSort = new ArrayList<>(); |
| | | ArrayList<Long> arrayList = new ArrayList<>(); |
| | | for (BasDevpPosition basDevpPosition : devpPositionList) { |
| | | long position = Math.abs(basDevpPosition.getPlcPosition() - rgvNowPos); |
| | | BasDevpPosition devpPosition = new BasDevpPosition(basDevpPosition, position); |
| | | basDevpPositions.add(devpPosition); |
| | | arrayList.add(position); |
| | | } |
| | | Collections.sort(arrayList); // 升序排序 |
| | | for (Long position : arrayList) { |
| | | for (BasDevpPosition basDevpPosition : basDevpPositions) { |
| | | if (basDevpPosition.getPlcPosition().equals(position)) { |
| | | basDevpPositionSort.add(basDevpPosition); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | return basDevpPositionSort; |
| | | } |
| | | |
| | | //检测是否在范围 |
| | | public static boolean CheckIfItIsWithinTheRange(List<Integer> staNoList,Integer staNo,List<BasDevpPosition> basDevpPositions){ |
| | | public static boolean CheckIfItIsWithinTheRange(List<Integer> staNoList, Long staNoNowPos, List<BasDevpPosition> basDevpPositionList, boolean itSmall) { |
| | | List<Integer> siteList = new ArrayList<>(); |
| | | if (staNoList.isEmpty()){ |
| | | return true; |
| | | |
| | | |
| | | Integer[] rangeList = new Integer[staNoList.size()]; |
| | | int i = 0; |
| | | for (BasDevpPosition basDevpPosition : basDevpPositionList) { |
| | | for (Integer staNo : staNoList) { |
| | | if (basDevpPosition.getDevNo().equals(staNo)) { |
| | | rangeList[i] = staNo; |
| | | i = i + 1; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | return false; |
| | | if (itSmall) { |
| | | return staNoNowPos <= rangeList[rangeList.length - 1]; |
| | | } |
| | | return staNoNowPos >= rangeList[0]; |
| | | } |
| | | |
| | | public static long absoluteDifference(Long a, Long b) { |
| | | if (a == null || b == null) { |
| | | a = 0L; |
| | | b = 0L; |
| | | // throw new IllegalArgumentException(""); |
| | | System.out.println("a or b is null"); |
| | | } |
| | | return Math.abs(a - b); |
| | | } |
| | | |
| | | } |