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