From 7635dc25bd2a4d565df496b2d96354639966768d Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期四, 25 九月 2025 11:09:44 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/common/utils/NavigateUtils.java | 70 +++++++++++++++++++++++++++++++++-
1 files changed, 67 insertions(+), 3 deletions(-)
diff --git a/src/main/java/com/zy/common/utils/NavigateUtils.java b/src/main/java/com/zy/common/utils/NavigateUtils.java
index dd88872..9197cd8 100644
--- a/src/main/java/com/zy/common/utils/NavigateUtils.java
+++ b/src/main/java/com/zy/common/utils/NavigateUtils.java
@@ -2,6 +2,8 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.SnowflakeIdWorker;
import com.core.exception.CoolException;
import com.zy.asrs.utils.Utils;
import com.zy.common.model.MapNode;
@@ -10,6 +12,8 @@
import com.zy.core.News;
import com.zy.core.enums.MapNodeType;
import com.zy.core.model.PythonSimilarityResult;
+import com.zy.system.entity.Config;
+import com.zy.system.service.ConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@@ -30,6 +34,10 @@
private String pythonCalcSimilarity;
@Autowired
private NavigateMapData navigateMapData;
+ @Autowired
+ private SnowflakeIdWorker snowflakeIdWorker;
+ @Autowired
+ private ConfigService configService;
public List<NavigateNode> calc(String startPoint, String endPoint, List<NavigationMapType> mapTypes, List<int[]> shuttlePoints, List<int[]> whites) {
return calcJava(startPoint, endPoint, mapTypes, shuttlePoints, whites);
@@ -223,9 +231,51 @@
return findTargetLocation(endPath);
}
+ public String calcFirstLocation(String startPoint, String endPoint, List<NavigationMapType> mapTypes, List<int[]> shuttlePoints, List<int[]> whites, int firstPathNumber) {
+ //璁$畻璺緞
+ List<NavigateNode> navigateNodes = calc(startPoint, endPoint, mapTypes, shuttlePoints, whites);
+ if (navigateNodes == null) {
+ News.error("{} dash {} can't find navigate path!", startPoint, endPoint);
+ return null;
+ }
+
+ //鑾峰彇鍒嗘璺緞
+ List<List<NavigateNode>> partList = this.getSectionPath(navigateNodes);
+ List<NavigateNode> firstList = partList.get(0);
+
+ NavigateNode targetNode = null;
+ if(firstList.size() <= firstPathNumber){
+ targetNode = firstList.get(firstList.size() - 1);
+ }else {
+ targetNode = firstList.get(firstPathNumber);
+ }
+
+ String locNo = NavigatePositionConvert.nodeToLocNo(targetNode);
+ return locNo;
+ }
+
public String findTargetLocation(List<List<NavigateNode>> partList) {
- List<NavigateNode> nodes = partList.get(partList.size() - 1);
- NavigateNode targetNode = nodes.get(0);
+ NavigateNode targetNode = null;
+ for (int i = partList.size(); i > 0; i--) {
+ List<NavigateNode> nodes = partList.get(i - 1);
+ for (NavigateNode node : nodes) {
+ if (node.getNodeValue() == MapNodeType.MAIN_PATH.id) {
+ continue;
+ }
+ targetNode = node;
+ break;
+ }
+
+ if(targetNode != null){
+ break;
+ }
+ }
+
+ if (targetNode == null) {
+ List<NavigateNode> list = partList.get(partList.size() - 1);
+ targetNode = list.get(0);
+ }
+
String locNo = NavigatePositionConvert.nodeToLocNo(targetNode);
return locNo;
}
@@ -315,15 +365,23 @@
//灏嗘渶鍚庝竴娈垫暟鎹坊鍔犺繘鍏�
list.add(data);
+ //鍒嗘璺緞-澶勭悊瓒呴暱鐩寸嚎娈佃矾寰�
List<List<NavigateNode>> paths = getSectionPathToSplitOverLength(list);
return paths;
}
//鍒嗘璺緞-澶勭悊瓒呴暱鐩寸嚎娈佃矾寰�
public List<List<NavigateNode>> getSectionPathToSplitOverLength(List<List<NavigateNode>> list) {
+ int overLength = 9;//榛樿9鑺�
+ Config shuttleMoveOverLengthConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "shuttleMoveOverLength"));
+ if (shuttleMoveOverLengthConfig != null) {
+ overLength = Integer.parseInt(shuttleMoveOverLengthConfig.getValue());
+ }
+
List<List<NavigateNode>> paths = new ArrayList<>();
- int overLength = 9;
for (List<NavigateNode> nodes : list) {
+ long nextId = snowflakeIdWorker.nextId();
+
if (nodes.size() > overLength) {
List<NavigateNode> copy = JSON.parseArray(JSON.toJSONString(nodes), NavigateNode.class);
List<NavigateNode> tmp = new ArrayList<>();
@@ -337,10 +395,12 @@
if (lastNode == null) {
NavigateNode startNode = tmp.get(0);
startNode.setLinePartAllowGo(true);//鐩寸嚎娈佃秴闀块儴鍒嗗厑璁哥洿鎺ヨ璧�
+ startNode.setLinePartFlag(nextId);//鐩寸嚎娈垫暟鎹爣璇�
tmp.set(0, startNode);
}
NavigateNode targetNode = tmp.get(tmp.size() - 1);
targetNode.setLinePartAllowGo(true);//鐩寸嚎娈佃秴闀块儴鍒嗗厑璁哥洿鎺ヨ璧�
+ targetNode.setLinePartFlag(nextId);//鐩寸嚎娈垫暟鎹爣璇�
if (lastNode != null) {
tmp.add(0, lastNode);
}
@@ -357,6 +417,10 @@
paths.add(tmp);
}
}else {
+ NavigateNode startNode = nodes.get(0);
+ startNode.setLinePartAllowGo(true);//鐩寸嚎娈佃秴闀块儴鍒嗗厑璁哥洿鎺ヨ璧�
+ startNode.setLinePartFlag(nextId);//鐩寸嚎娈垫暟鎹爣璇�
+ nodes.set(0, startNode);
paths.add(nodes);
}
}
--
Gitblit v1.9.1