From 98f1c4c9ffbbb3347ad752821505bc3c70ea4efc Mon Sep 17 00:00:00 2001 From: lsh <lsh@163.com> Date: 星期日, 27 四月 2025 10:52:50 +0800 Subject: [PATCH] * --- src/main/java/com/zy/asrs/utils/RouteUtils.java | 132 +++++++++++++++++++++++++++++---- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 16 ++- src/main/java/com/zy/asrs/entity/BasDevpPosition.java | 15 +++ src/main/java/com/zy/asrs/utils/TrackRangeUtils.java | 34 ++++++++ 4 files changed, 173 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/zy/asrs/entity/BasDevpPosition.java b/src/main/java/com/zy/asrs/entity/BasDevpPosition.java index e1795f8..26587cd 100644 --- a/src/main/java/com/zy/asrs/entity/BasDevpPosition.java +++ b/src/main/java/com/zy/asrs/entity/BasDevpPosition.java @@ -42,7 +42,20 @@ this.plcPosition = plcPosition; } -// BasDevpPosition basDevpPosition = new BasDevpPosition( + public BasDevpPosition(BasDevpPosition basDevpPosition) { + this.id = basDevpPosition.getId(); + this.devNo = basDevpPosition.getDevNo(); + this.plcId = basDevpPosition.getPlcId(); + this.plcPosition = basDevpPosition.getPlcPosition(); + } + + public BasDevpPosition(BasDevpPosition basDevpPosition,Long plcPosition) { + this.id = basDevpPosition.getId(); + this.devNo = basDevpPosition.getDevNo(); + this.plcId = basDevpPosition.getPlcId(); + this.plcPosition = plcPosition; + } + // BasDevpPosition basDevpPosition = new BasDevpPosition( // null, // // null, // // null // diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java index 1fbc07a..be3b65a 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -1211,7 +1211,7 @@ if (rgvOtherStatusEnable(rgvSlave)){ //鍒嗘垚涓婁笅涓ら儴鍒嗕换鍔� - List<Integer>[] avoidRange = RouteUtils.gradeRange(staList, basDevpPositions); + List<Integer>[] avoidRange = RouteUtils.gradeRange(staList, basDevpPositions,itSmall); List<Integer> rangeListSou = avoidRange[itSmall ? 0 : 1]; List<Integer> rangeListSouOther = avoidRange[itSmall ? 1 : 0]; //灏辫繎鎺掑簭 @@ -1223,15 +1223,17 @@ //绛涢�夎寖鍥村唴浠诲姟 //灏辫繎鎺掑簭 - RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(rgvSlave.getOtherId()); //绛涢�夊湪鑼冨洿浠诲姟 - List<Integer> belongToRange = RouteUtils.belongToRange(rangeList, rgvProtocolOther.getRgvPosDestination(), basDevpPositions); + Long[][] avoidedRange = new TrackRangeUtils().avoidRangeArr(rgvSlave, trackEntireLength, trackBenchmark, avoidDistance); + List<Integer> belongToRange = RouteUtils.SortNearby(RouteUtils.belongToRange(rangeList, avoidedRange[0], basDevpPositions), rgvProtocol.RgvPos, basDevpPositions); + for (Integer staNoNow : belongToRange){ for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()){ if (rgvStn.getStaNo().equals(staNoNow)){ TaskWrk taskWrk = deviceDetection(rgvStn); if (taskWrk!=null){ - if (RouteUtils.CheckIfItIsWithinTheRange(rangeList,taskWrk.getTargetPointConvert(),basDevpPositions)){ + BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", taskWrk.getTargetPointConvert())); + if (RouteUtils.CheckIfItIsWithinTheRange(rangeList,basDevpPosition.getPlcPosition(),basDevpPositions,itSmall)){ sign = taskGenerate(rgvSlave,rgvStn,0); } } @@ -1263,7 +1265,8 @@ if (rgvStn.getStaNo().equals(staNoNow)){ TaskWrk taskWrk = deviceDetection(rgvStn); if (taskWrk!=null){ - if (RouteUtils.CheckIfItIsWithinTheRange(rangeList,taskWrk.getTargetPointConvert(),basDevpPositions)){ + BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", taskWrk.getTargetPointConvert())); + if (RouteUtils.CheckIfItIsWithinTheRange(rangeList,basDevpPosition.getPlcPosition(),basDevpPositions,itSmall)){ sign = taskGenerate(rgvSlave,rgvStn,0); } } @@ -1296,7 +1299,8 @@ if (rgvStn.getStaNo().equals(staNoNow)){ TaskWrk taskWrk = deviceDetection(rgvStn); if (taskWrk!=null){ - if (RouteUtils.CheckIfItIsWithinTheRange(rangeList,taskWrk.getTargetPointConvert(),basDevpPositions)){ + BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", taskWrk.getTargetPointConvert())); + if (RouteUtils.CheckIfItIsWithinTheRange(rangeList,basDevpPosition.getPlcPosition(),basDevpPositions,itSmall)){ sign = taskGenerate(rgvSlave,rgvStn,0); } } diff --git a/src/main/java/com/zy/asrs/utils/RouteUtils.java b/src/main/java/com/zy/asrs/utils/RouteUtils.java index 899c8d1..905be8d 100644 --- a/src/main/java/com/zy/asrs/utils/RouteUtils.java +++ b/src/main/java/com/zy/asrs/utils/RouteUtils.java @@ -7,6 +7,7 @@ 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; @@ -16,55 +17,154 @@ */ 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); } } diff --git a/src/main/java/com/zy/asrs/utils/TrackRangeUtils.java b/src/main/java/com/zy/asrs/utils/TrackRangeUtils.java index 2be2744..35648dc 100644 --- a/src/main/java/com/zy/asrs/utils/TrackRangeUtils.java +++ b/src/main/java/com/zy/asrs/utils/TrackRangeUtils.java @@ -23,7 +23,7 @@ RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId()); RgvProtocol rgvProtocolE, rgvProtocolB; - if (rgvProtocol.getRgvPos() < rgvProtocolOther.getRgvPos()) { + if (IsItSmall(slave)) { rgvProtocolE = rgvProtocolOther; rgvProtocolB = rgvProtocol; } else { @@ -42,6 +42,38 @@ } + public Long[][] avoidRangeArr(RgvSlave slave, Long trackEntireLength, Long trackBenchmark, Long avoidDistance) { + RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId()); + RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId()); + + RgvProtocol rgvProtocolE, rgvProtocolB; + if (IsItSmall(slave)) { + rgvProtocolE = rgvProtocolOther; + rgvProtocolB = rgvProtocol; + + long entireLength = rgvProtocolE.getRgvPosDestination() - rgvProtocolE.getCarBodyJiaoMing() - avoidDistance - rgvProtocolB.getCarBodyKunPeng(); + long benchmark = trackBenchmark + rgvProtocolB.getCarBodyJiaoMing(); + + long entireLengthOther = trackEntireLength - rgvProtocolE.getCarBodyKunPeng(); + long benchmarkOther = rgvProtocolB.getRgvPosDestination() + rgvProtocolB.getCarBodyKunPeng() + avoidDistance + rgvProtocolE.getCarBodyJiaoMing(); + + return new Long[][]{new Long[]{entireLength, benchmark}, new Long[]{entireLengthOther, benchmarkOther}}; + + } else { + rgvProtocolE = rgvProtocol; + rgvProtocolB = rgvProtocolOther; + + long entireLength = trackEntireLength - rgvProtocolE.getCarBodyKunPeng(); + long benchmark = rgvProtocolB.getRgvPosDestination() + rgvProtocolB.getCarBodyKunPeng() + avoidDistance + rgvProtocolE.getCarBodyJiaoMing(); + + long entireLengthOther = rgvProtocolE.getRgvPosDestination() - rgvProtocolE.getCarBodyJiaoMing() - avoidDistance - rgvProtocolB.getCarBodyKunPeng(); + long benchmarkOther = trackBenchmark + rgvProtocolB.getCarBodyJiaoMing(); + + return new Long[][]{new Long[]{entireLength, benchmark}, new Long[]{entireLengthOther, benchmarkOther}}; + } + + } + public boolean avoidRange(Long avoid, Long[] range) { return avoid < range[0] && avoid > range[1]; } -- Gitblit v1.9.1