package com.zy.asrs.utils; import com.zy.asrs.entity.BasDevpPosition; import com.zy.asrs.entity.TaskWrk; import com.zy.asrs.entity.WrkMast; import com.zy.core.enums.RouteCollectCountType; 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; /** * Created by Monkey D. Luffy on 2023/7/18 */ public class RouteUtils { //排序 执行方向(面朝轨道 定位值左小右大) 0:左 小 1:右 大 public static List[] gradeRange(List staNoList, List basDevpPositionList, boolean itSmall) { List[] avoidRangeArray = new ArrayList[2]; Integer[] rangeList = new Integer[staNoList.size()]; List rangeList1 = new ArrayList<>(); List 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 belongToRange(List staNoList, Long[] avoid, List basDevpPositions) { List 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 BasDevpPositionExtractSites(List basDevpPositions) { List siteList = new ArrayList<>(); for (BasDevpPosition basDevpPosition : basDevpPositions) { if (!siteList.contains(basDevpPosition.getDevNo())) { siteList.add(basDevpPosition.getDevNo()); } } return siteList; } //提取站点集合//就近排序 public static List SortNearby(List staNoList, Long rgvNowPos, List basDevpPositionList) { List siteList = new ArrayList<>(); List 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 devpNoSort(List devpPositionList, Long rgvNowPos) { List basDevpPositions = new ArrayList<>(); List basDevpPositionSort = new ArrayList<>(); ArrayList 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 staNoList, Long staNoNowPos, List basDevpPositionList, boolean itSmall) { List siteList = new ArrayList<>(); 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; } } } 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); } }