From 7f9435bb4a074b4964f290c4d6905e0e233a19ec Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期五, 21 十一月 2025 12:56:18 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/core/network/fake/ZyStationFakeConnect.java | 98 +++++++++++++++++++
src/main/java/com/zy/core/network/fake/ZyRgvFakeConnect.java | 38 ++++++-
src/main/webapp/views/watch/console.html | 60 +++++++++--
src/main/java/com/zy/asrs/service/impl/BasMapServiceImpl.java | 10 ++
src/main/java/com/zy/common/utils/NavigateUtils.java | 34 ++++++
src/main/java/com/zy/asrs/controller/BasMapController.java | 30 +++--
src/main/java/com/zy/asrs/service/BasMapService.java | 5 +
src/main/java/com/zy/common/utils/NavigateSolution.java | 8
8 files changed, 246 insertions(+), 37 deletions(-)
diff --git a/src/main/java/com/zy/asrs/controller/BasMapController.java b/src/main/java/com/zy/asrs/controller/BasMapController.java
index 2c91165..f6d7573 100644
--- a/src/main/java/com/zy/asrs/controller/BasMapController.java
+++ b/src/main/java/com/zy/asrs/controller/BasMapController.java
@@ -140,6 +140,13 @@
return R.ok().add(basMap.getData());
}
+ @GetMapping("/basMap/getLevList")
+ @ManagerAuth
+ public R getLevList() {
+ List<Integer> levList = basMapService.getLevList();
+ return R.ok().add(levList);
+ }
+
@Autowired
private MapExcelUtils mapExcelUtils;
@@ -151,9 +158,9 @@
HashMap<Integer, List<List<HashMap<String, Object>>>> dataMap = mapExcelUtils.readExcel(filePath);
- List<List<HashMap<String, Object>>> dataList = new ArrayList<>();
for (Map.Entry<Integer, List<List<HashMap<String, Object>>>> entry : dataMap.entrySet()) {
- Integer key = entry.getKey();
+ Integer lev = entry.getKey();
+ List<List<HashMap<String, Object>>> dataList = new ArrayList<>();
List<List<HashMap<String, Object>>> list = entry.getValue();
for (int i = 0; i < list.size(); i++) {
@@ -195,17 +202,18 @@
}
dataList.add(arrayList);
}
- }
- BasMap basMap = basMapService.selectOne(new EntityWrapper<BasMap>().eq("lev", 1));
- if (basMap == null){
- basMap = new BasMap();
+ BasMap basMap = basMapService.selectOne(new EntityWrapper<BasMap>().eq("lev", lev));
+ if (basMap == null){
+ basMap = new BasMap();
+ }
+ basMap.setData(JSON.toJSONString(dataList));
+ basMap.setOriginData(JSON.toJSONString(dataList));
+ basMap.setCreateTime(new Date());
+ basMap.setUpdateTime(new Date());
+ basMap.setLev(lev);
+ basMapService.insertOrUpdate(basMap);
}
- basMap.setData(JSON.toJSONString(dataList));
- basMap.setOriginData(JSON.toJSONString(dataList));
- basMap.setCreateTime(new Date());
- basMap.setUpdateTime(new Date());
- basMapService.insertOrUpdate(basMap);
return R.ok();
}
diff --git a/src/main/java/com/zy/asrs/service/BasMapService.java b/src/main/java/com/zy/asrs/service/BasMapService.java
index 56b0095..ce57132 100644
--- a/src/main/java/com/zy/asrs/service/BasMapService.java
+++ b/src/main/java/com/zy/asrs/service/BasMapService.java
@@ -1,6 +1,9 @@
package com.zy.asrs.service;
import com.zy.asrs.entity.BasMap;
+
+import java.util.List;
+
import com.baomidou.mybatisplus.service.IService;
public interface BasMapService extends IService<BasMap> {
@@ -9,4 +12,6 @@
boolean deleteByLev(Integer lev);//鍒犻櫎鎸囧畾妤煎眰鍦板浘
+ List<Integer> getLevList();//鑾峰彇鎵�鏈夋ゼ灞傚湴鍥�
+
}
diff --git a/src/main/java/com/zy/asrs/service/impl/BasMapServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasMapServiceImpl.java
index 19abcca..a9e4d53 100644
--- a/src/main/java/com/zy/asrs/service/impl/BasMapServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/BasMapServiceImpl.java
@@ -3,7 +3,12 @@
import com.zy.asrs.mapper.BasMapMapper;
import com.zy.asrs.entity.BasMap;
import com.zy.asrs.service.BasMapService;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
import org.springframework.stereotype.Service;
@Service("basMapService")
@@ -19,4 +24,9 @@
return this.baseMapper.deleteByLev(lev);
}
+ @Override
+ public List<Integer> getLevList() {
+ return this.baseMapper.selectList(new EntityWrapper<>()).stream().map(BasMap::getLev).collect(Collectors.toList());
+ }
+
}
diff --git a/src/main/java/com/zy/common/utils/NavigateSolution.java b/src/main/java/com/zy/common/utils/NavigateSolution.java
index 0cd7bed..e6cb942 100644
--- a/src/main/java/com/zy/common/utils/NavigateSolution.java
+++ b/src/main/java/com/zy/common/utils/NavigateSolution.java
@@ -23,9 +23,9 @@
//鐢ㄦ潵瀛樻斁宸茬粡鍑虹幇杩囩殑缁撶偣銆�
Map<String, Integer> bestGMap = new HashMap<>();
- public List<List<NavigateNode>> getStationMap() {
+ public List<List<NavigateNode>> getStationMap(int lev) {
BasMapService basMapService = SpringUtils.getBean(BasMapService.class);
- BasMap basMap = basMapService.selectOne(new EntityWrapper<BasMap>().eq("lev", 1));
+ BasMap basMap = basMapService.selectOne(new EntityWrapper<BasMap>().eq("lev", lev));
if (basMap == null) {
throw new CoolException("鍦板浘涓嶅瓨鍦�");
}
@@ -63,9 +63,9 @@
return navigateNodeList;
}
- public List<List<NavigateNode>> getRgvTrackMap() {
+ public List<List<NavigateNode>> getRgvTrackMap(int lev) {
BasMapService basMapService = SpringUtils.getBean(BasMapService.class);
- BasMap basMap = basMapService.selectOne(new EntityWrapper<BasMap>().eq("lev", 1));
+ BasMap basMap = basMapService.selectOne(new EntityWrapper<BasMap>().eq("lev", lev));
if (basMap == null) {
throw new CoolException("鍦板浘涓嶅瓨鍦�");
}
diff --git a/src/main/java/com/zy/common/utils/NavigateUtils.java b/src/main/java/com/zy/common/utils/NavigateUtils.java
index e324def..4528427 100644
--- a/src/main/java/com/zy/common/utils/NavigateUtils.java
+++ b/src/main/java/com/zy/common/utils/NavigateUtils.java
@@ -14,9 +14,9 @@
@Component
public class NavigateUtils {
- public synchronized List<NavigateNode> calcByStationId(Integer startStationId, Integer endStationId) {
+ public synchronized List<NavigateNode> calcByStationId(int lev, Integer startStationId, Integer endStationId) {
NavigateSolution navigateSolution = new NavigateSolution();
- List<List<NavigateNode>> stationMap = navigateSolution.getStationMap();
+ List<List<NavigateNode>> stationMap = navigateSolution.getStationMap(lev);
NavigateNode startNode = navigateSolution.findStationNavigateNode(stationMap, startStationId);
if (startNode == null){
@@ -66,9 +66,9 @@
return fitlerList;
}
- public synchronized List<NavigateNode> calcByTrackSiteNo(Integer startTrackSiteNo, Integer endTrackSiteNo) {
+ public synchronized List<NavigateNode> calcByTrackSiteNo(int lev, Integer startTrackSiteNo, Integer endTrackSiteNo) {
NavigateSolution navigateSolution = new NavigateSolution();
- List<List<NavigateNode>> rgvTrackMap = navigateSolution.getRgvTrackMap();
+ List<List<NavigateNode>> rgvTrackMap = navigateSolution.getRgvTrackMap(lev);
NavigateNode startNode = navigateSolution.findTrackSiteNoNavigateNode(rgvTrackMap, startTrackSiteNo);
if (startNode == null){
@@ -118,4 +118,30 @@
return fitlerList;
}
+ public synchronized List<NavigateNode> findLiftStationList(int lev) {
+ NavigateSolution navigateSolution = new NavigateSolution();
+ List<List<NavigateNode>> stationMap = navigateSolution.getStationMap(lev);
+
+ List<NavigateNode> liftStationList = new ArrayList<>();
+ for (List<NavigateNode> navigateNodes : stationMap) {
+ for (NavigateNode navigateNode : navigateNodes) {
+ String nodeType = navigateNode.getNodeType();
+ if(nodeType == null){
+ continue;
+ }
+ if(!nodeType.equals("devp")){
+ continue;
+ }
+ JSONObject valuObject = JSON.parseObject(navigateNode.getNodeValue());
+ if(valuObject == null){
+ continue;
+ }
+ if (valuObject.containsKey("liftNo")) {
+ liftStationList.add(navigateNode);
+ }
+ }
+ }
+
+ return liftStationList;
+ }
}
diff --git a/src/main/java/com/zy/core/network/fake/ZyRgvFakeConnect.java b/src/main/java/com/zy/core/network/fake/ZyRgvFakeConnect.java
index eca22e9..5f959b0 100644
--- a/src/main/java/com/zy/core/network/fake/ZyRgvFakeConnect.java
+++ b/src/main/java/com/zy/core/network/fake/ZyRgvFakeConnect.java
@@ -4,16 +4,15 @@
import com.alibaba.fastjson.JSONObject;
import com.core.common.SpringUtils;
import com.zy.asrs.entity.DeviceConfig;
+import com.zy.asrs.service.BasMapService;
import com.zy.common.model.NavigateNode;
import com.zy.common.utils.NavigateUtils;
-import com.zy.core.enums.RgvModeType;
import com.zy.core.enums.RgvStatusType;
import com.zy.core.enums.RgvTaskModeType;
import com.zy.core.model.CommandResponse;
import com.zy.core.model.command.RgvCommand;
import com.zy.core.network.api.ZyRgvConnectApi;
import com.zy.core.network.entity.ZyRgvStatusEntity;
-import com.zy.core.network.entity.ZyStationStatusEntity;
import java.util.List;
import java.util.concurrent.ExecutorService;
@@ -73,9 +72,21 @@
return;
}
+ BasMapService basMapService = SpringUtils.getBean(BasMapService.class);
+ if (basMapService == null) {
+ return;
+ }
+
+ List<Integer> levList = basMapService.getLevList();
+
List<NavigateNode> navigateNodes = null;
try {
- navigateNodes = navigateUtils.calcByTrackSiteNo(status.getRgvPos(), sourcePos);
+ for (Integer lev : levList) {
+ navigateNodes = navigateUtils.calcByTrackSiteNo(lev, status.getRgvPos(), sourcePos);
+ if (navigateNodes != null) {
+ break;
+ }
+ }
} catch (Exception e) {
e.printStackTrace();
}
@@ -86,7 +97,12 @@
List<NavigateNode> targetNavigateNodes = null;
try {
- targetNavigateNodes = navigateUtils.calcByTrackSiteNo(sourcePos, targetPos);
+ for (Integer lev : levList) {
+ targetNavigateNodes = navigateUtils.calcByTrackSiteNo(lev, sourcePos, targetPos);
+ if (targetNavigateNodes != null) {
+ break;
+ }
+ }
} catch (Exception e) {
e.printStackTrace();
}
@@ -133,9 +149,21 @@
return;
}
+ BasMapService basMapService = SpringUtils.getBean(BasMapService.class);
+ if (basMapService == null) {
+ return;
+ }
+
+ List<Integer> levList = basMapService.getLevList();
+
List<NavigateNode> navigateNodes = null;
try {
- navigateNodes = navigateUtils.calcByTrackSiteNo(status.getRgvPos(), targetPos);
+ for (Integer lev : levList) {
+ navigateNodes = navigateUtils.calcByTrackSiteNo(lev, status.getRgvPos(), targetPos);
+ if (navigateNodes != null) {
+ break;
+ }
+ }
} catch (Exception e) {
e.printStackTrace();
}
diff --git a/src/main/java/com/zy/core/network/fake/ZyStationFakeConnect.java b/src/main/java/com/zy/core/network/fake/ZyStationFakeConnect.java
index 2425a7f..b1281e2 100644
--- a/src/main/java/com/zy/core/network/fake/ZyStationFakeConnect.java
+++ b/src/main/java/com/zy/core/network/fake/ZyStationFakeConnect.java
@@ -77,6 +77,20 @@
}
private void handleCommand(StationCommand command) {
+ Integer stationId = command.getStationId();
+ Integer targetStationId = command.getTargetStaNo();
+
+ String startLev = String.valueOf(stationId).substring(0, 1);
+ String endLev = String.valueOf(targetStationId).substring(0, 1);
+
+ if (startLev.equals(endLev)) {
+ currentLevCommand(command);
+ }else {
+ diffLevCommand(command);
+ }
+ }
+
+ private void currentLevCommand(StationCommand command) {
NavigateUtils navigateUtils = SpringUtils.getBean(NavigateUtils.class);
if (navigateUtils == null) {
return;
@@ -86,10 +100,12 @@
Integer stationId = command.getStationId();
Integer targetStationId = command.getTargetStaNo();
+ String startLev = String.valueOf(stationId).substring(0, 1);
+
List<NavigateNode> navigateNodes = null;
try {
- navigateNodes = navigateUtils.calcByStationId(stationId, targetStationId);
+ navigateNodes = navigateUtils.calcByStationId(Integer.parseInt(startLev), stationId, targetStationId);
} catch (Exception e) {
e.printStackTrace();
}
@@ -98,6 +114,86 @@
return;
}
+ stationMove(navigateNodes, taskNo, targetStationId);
+ }
+
+ private void diffLevCommand(StationCommand command) {
+ NavigateUtils navigateUtils = SpringUtils.getBean(NavigateUtils.class);
+ if (navigateUtils == null) {
+ return;
+ }
+
+ Integer taskNo = command.getTaskNo();
+ Integer stationId = command.getStationId();
+ Integer targetStationId = command.getTargetStaNo();
+
+ String startLev = String.valueOf(stationId).substring(0, 1);
+ String endLev = String.valueOf(targetStationId).substring(0, 1);
+
+ List<NavigateNode> navigateNodes = null;
+ List<NavigateNode> targetNavigateNodes = null;
+
+ try {
+ List<NavigateNode> liftStationList = navigateUtils.findLiftStationList(Integer.parseInt(startLev));
+ if(liftStationList.isEmpty()){
+ //鏈壘鍒版彁鍗囨満鑺傜偣
+ return;
+ }
+
+ List<NavigateNode> targetLiftStationList = navigateUtils.findLiftStationList(Integer.parseInt(endLev));
+ if(targetLiftStationList.isEmpty()){
+ //鏈壘鍒版彁鍗囨満鑺傜偣
+ return;
+ }
+ for (NavigateNode liftStation : liftStationList) {
+ JSONObject valuObject = JSON.parseObject(liftStation.getNodeValue());
+ if(valuObject == null){
+ continue;
+ }
+ Integer liftStationId = valuObject.getInteger("stationId");
+ Integer liftNo = valuObject.getInteger("liftNo");
+
+ Integer targetLiftStationId = null;
+ for (NavigateNode targetLiftStation : targetLiftStationList) {
+ JSONObject targetValuObject = JSON.parseObject(targetLiftStation.getNodeValue());
+ if(targetValuObject == null){
+ continue;
+ }
+ Integer targetLiftNo = targetValuObject.getInteger("liftNo");
+ if(liftNo.equals(targetLiftNo)){
+ targetLiftStationId = targetValuObject.getInteger("stationId");
+ break;
+ }
+ }
+
+ if(targetLiftStationId == null){
+ continue;
+ }
+
+ navigateNodes = navigateUtils.calcByStationId(Integer.parseInt(startLev), stationId, liftStationId);
+ if(navigateNodes == null){
+ continue;
+ }
+
+ //璁$畻鎻愬崌鏈哄埌鐩爣绔欑殑璺緞
+ targetNavigateNodes = navigateUtils.calcByStationId(Integer.parseInt(endLev), targetLiftStationId, targetStationId);
+ if(targetNavigateNodes == null) {
+ continue;
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ if (navigateNodes == null || targetNavigateNodes == null) {
+ return;
+ }
+
+ stationMove(navigateNodes, taskNo, stationId);
+ stationMove(targetNavigateNodes, taskNo, targetStationId);
+ }
+
+ private void stationMove(List<NavigateNode> navigateNodes, Integer taskNo, Integer targetStationId) {
Integer lastStationId = null;
for (int i = 0; i < navigateNodes.size(); i++) {
NavigateNode navigateNode = navigateNodes.get(i);
diff --git a/src/main/webapp/views/watch/console.html b/src/main/webapp/views/watch/console.html
index 1108d29..8dda836 100644
--- a/src/main/webapp/views/watch/console.html
+++ b/src/main/webapp/views/watch/console.html
@@ -32,7 +32,14 @@
</el-tab-pane>
</el-tabs>
</div>
- <div id="mapDataId" style="position: relative;" :style="{zoom: mapSettingParam.zoom / 100}">
+
+ <div style="position: absolute;top: 15px;left: 50%;display: flex;">
+ <div v-if="levList.length > 1" v-for="(lev,index) in levList" :key="index" style="margin-right: 10px;">
+ <el-button :type="currentLev == lev ? 'primary' : ''" @click="switchLev(lev)" size="mini">{{ lev }}F</el-button>
+ </div>
+ </div>
+
+ <div id="mapDataId" style="position: relative;margin-top: 50px;" :style="{zoom: mapSettingParam.zoom / 100}">
<table class="excel-table">
<tr v-for="(row,index) in map" :key="index">
<td
@@ -63,10 +70,6 @@
</div>
</td>
-<!-- <td>-->
-<!-- <!– 鏄剧ず琛屽彿 –>-->
-<!-- <div class="item" style="background: none;color: #000;">#{{index+1}}</div>-->
-<!-- </td>-->
</tr>
</table>
</div>
@@ -83,7 +86,8 @@
el: '#app',
data: {
map: [],//鍦板浘鏁版嵁
- crnList: [], //鍫嗗灈鏈洪泦鍚�
+ levList: [],
+ currentLev: 1,
systemStatus: true,//绯荤粺杩愯鐘舵��
consoleInterval: null,//瀹氭椂鍣ㄥ瓨鍌ㄥ彉閲�
crnInitPosition: [],
@@ -112,6 +116,7 @@
init() {
this.getMap()
this.getSystemRunningStatus() //鑾峰彇绯荤粺杩愯鐘舵��
+ this.getLevList() //鑾峰彇鍦板浘灞傜骇鍒楄〃
this.consoleInterval = setInterval(() => {
this.getCrnInfo() //鑾峰彇鍫嗗灈鏈烘暟鎹�
@@ -119,13 +124,28 @@
this.getRgvInfo() //鑾峰彇RGV鏁版嵁
}, 1000)
},
+ getLevList() {
+ let that = this;
+ $.ajax({
+ url: baseUrl + "/basMap/getLevList",
+ headers: {
+ 'token': localStorage.getItem('token')
+ },
+ method: "get",
+ success: (res) => {
+ let data = res.data;
+ that.levList = data;
+ }
+ })
+ },
//鑾峰彇鍦板浘鏁版嵁
getMap() {
+ let that = this
let rowPx = 35;
let colPx = 35;
$.ajax({
- url: baseUrl + "/basMap/lev/1/auth",
+ url: baseUrl + "/basMap/lev/" + this.currentLev + "/auth",
headers: {
'token': localStorage.getItem('token')
},
@@ -147,9 +167,13 @@
col.width = (col.cellWidth / 30) + "px";
})
})
- this.map = mapData;
+ that.map = mapData;
}
})
+ },
+ switchLev(lev) {
+ this.currentLev = lev;
+ this.getMap()
},
openCrn(id) {
this.crnParam.crnNo = id;
@@ -204,6 +228,9 @@
let position = []
for (var i = 0; i < crns.length; i++) {
var crnEl = $("#crn-" + crns[i].crnId);
+ if(crnEl.offset() == undefined) {
+ continue;
+ }
position.push({
id: crns[i].crnId,
left: crnEl.offset().left + crnEl.width()
@@ -241,8 +268,6 @@
crnStatus: crns[i].crnStatus
})
}
- that.crnList = crnList;
-
} else if (res.code === 403) {
parent.location.href = baseUrl + "/login";
} else {
@@ -266,6 +291,9 @@
let position = []
for (var i = 0; i < rgvs.length; i++) {
var rgvEl = $("#rgv-" + rgvs[i].rgvNo);
+ if(rgvEl.offset() == undefined) {
+ continue;
+ }
position.push({
id: rgvs[i].rgvNo,
trackSiteNo: rgvs[i].trackSiteNo,
@@ -278,15 +306,23 @@
for (var i = 0; i < rgvs.length; i++) {
var rgvEl = $("#rgv-" + rgvs[i].rgvNo);
- if (rgvs[i].rgvStatus == 'IDLE') {
+ if (rgvs[i].rgvStatus == 'idle') {
rgvEl.attr("class", "rgv-item");
- }else if (rgvs[i].rgvStatus == 'WORKING') {
+ }else if (rgvs[i].rgvStatus == 'working') {
rgvEl.attr("class", "rgv-item machine-working");
+ }else if (rgvs[i].rgvStatus == 'waiting') {
+ rgvEl.attr("class", "rgv-item machine-working");
+ }else {
+ rgvEl.attr("class", "rgv-item machine-un-auto");
}
let trackSiteNo = rgvs[i].trackSiteNo;
let trackSiteEl = $("#rgvTrackSiteNo-" + trackSiteNo);
+ if(rgvEl.offsetParent().offset() == undefined) {
+ continue;
+ }
+
let parentLeft = rgvEl.offsetParent().offset().left;
let targetPosition = trackSiteEl.parent().parent().offset().left - parentLeft;
let rgvPosition = rgvEl.position().left;
--
Gitblit v1.9.1