From d59b127388b6064fb01d6f28834d49e560257f2f Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期一, 14 十月 2024 17:01:57 +0800
Subject: [PATCH] #
---
zy-acs-flow/src/map/constants.js | 11 +
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AgvDataService.java | 48 ++++++
zy-acs-flow/public/map/agv/ctuEmptyFullBattery.svg | 36 +++++
zy-acs-flow/public/map/agv/ctuEmptyHalfBattery.svg | 36 +++++
zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/MapWsAgvVo.java | 6
zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java | 5
zy-acs-flow/public/map/agv/ctuLoadedHalfBattery.svg | 42 ++++++
zy-acs-flow/public/map/agv/ctuLoadedNoBattery.svg | 43 ++++++
zy-acs-flow/src/map/tool.js | 98 ++++++++++++-
zy-acs-flow/public/map/agv/ctuLoadedFullBattery.svg | 42 ++++++
zy-acs-flow/src/map/MapPage.jsx | 4
zy-acs-flow/public/map/agv/ctuEmptyNoBattery.svg | 37 +++++
12 files changed, 392 insertions(+), 16 deletions(-)
diff --git a/zy-acs-flow/public/map/agv/ctuEmptyFullBattery.svg b/zy-acs-flow/public/map/agv/ctuEmptyFullBattery.svg
new file mode 100644
index 0000000..9943124
--- /dev/null
+++ b/zy-acs-flow/public/map/agv/ctuEmptyFullBattery.svg
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="_鍥惧眰_2" data-name="鍥惧眰 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 66.7 108.22">
+ <defs>
+ <style>
+ .cls-1 {
+ fill: #70b92f;
+ }
+
+ .cls-2 {
+ fill: #82e9f4;
+ }
+
+ .cls-3 {
+ fill: #5cbfcc;
+ }
+
+ .cls-4, .cls-5 {
+ fill: #eaeaea;
+ }
+
+ .cls-5 {
+ stroke: #4d9600;
+ stroke-miterlimit: 10;
+ stroke-width: 3.49px;
+ }
+ </style>
+ </defs>
+ <g id="_鍥惧眰_1-2" data-name="鍥惧眰 1">
+ <rect class="cls-3" x="5.3" y="7" width="56.1" height="97.85" rx="5.58" ry="5.58"/>
+ <rect class="cls-2" x="10.6" width="45.5" height="39" rx="10.53" ry="10.53"/>
+ <rect class="cls-5" x="10.49" y="9.5" width="45" height="23" rx="2.57" ry="2.57"/>
+ <rect class="cls-4" x="11.74" y="70.21" width="43.23" height="38.01" rx="2.53" ry="2.53"/>
+ <rect class="cls-2" x="0" y="41.63" width="66.7" height="34.34" rx="8.19" ry="8.19"/>
+ <rect class="cls-1" x="15.16" y="14" width="35.39" height="14"/>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/zy-acs-flow/public/map/agv/ctuEmptyHalfBattery.svg b/zy-acs-flow/public/map/agv/ctuEmptyHalfBattery.svg
new file mode 100644
index 0000000..8b5526a
--- /dev/null
+++ b/zy-acs-flow/public/map/agv/ctuEmptyHalfBattery.svg
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="_鍥惧眰_2" data-name="鍥惧眰 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 66.7 108.22">
+ <defs>
+ <style>
+ .cls-1 {
+ fill: #70b92f;
+ }
+
+ .cls-2 {
+ fill: #82e9f4;
+ }
+
+ .cls-3 {
+ fill: #5cbfcc;
+ }
+
+ .cls-4, .cls-5 {
+ fill: #eaeaea;
+ }
+
+ .cls-5 {
+ stroke: #4d9600;
+ stroke-miterlimit: 10;
+ stroke-width: 3.49px;
+ }
+ </style>
+ </defs>
+ <g id="_鍥惧眰_1-2" data-name="鍥惧眰 1">
+ <rect class="cls-3" x="5.3" y="7" width="56.1" height="97.85" rx="5.58" ry="5.58"/>
+ <rect class="cls-2" x="10.6" width="45.5" height="39" rx="10.53" ry="10.53"/>
+ <rect class="cls-5" x="10.49" y="9.5" width="45" height="23" rx="2.57" ry="2.57"/>
+ <rect class="cls-4" x="11.74" y="70.21" width="43.23" height="38.01" rx="2.53" ry="2.53"/>
+ <rect class="cls-2" x="0" y="41.63" width="66.7" height="34.34" rx="8.19" ry="8.19"/>
+ <rect class="cls-1" x="15.16" y="14" width="17.83" height="14"/>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/zy-acs-flow/public/map/agv/ctuEmptyNoBattery.svg b/zy-acs-flow/public/map/agv/ctuEmptyNoBattery.svg
new file mode 100644
index 0000000..eb541a1
--- /dev/null
+++ b/zy-acs-flow/public/map/agv/ctuEmptyNoBattery.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="_鍥惧眰_2" data-name="鍥惧眰 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 66.7 108.22">
+ <defs>
+ <style>
+ .cls-1 {
+ stroke: #e50012;
+ stroke-miterlimit: 10;
+ stroke-width: 3.49px;
+ }
+
+ .cls-1, .cls-2 {
+ fill: #eaeaea;
+ }
+
+ .cls-3 {
+ fill: #82e9f4;
+ }
+
+ .cls-4 {
+ fill: #5cbfcc;
+ }
+
+ .cls-5 {
+ font-family: huxiaobo-gdh, huxiaobo-gdh;
+ font-size: 26.52px;
+ }
+ </style>
+ </defs>
+ <g id="_鍥惧眰_1-2" data-name="鍥惧眰 1">
+ <rect class="cls-4" x="5.3" y="7" width="56.1" height="97.85" rx="5.58" ry="5.58"/>
+ <rect class="cls-3" x="10.6" width="45.5" height="39" rx="10.53" ry="10.53"/>
+ <rect class="cls-1" x="10.85" y="9.5" width="45" height="23" rx="2.57" ry="2.57"/>
+ <rect class="cls-2" x="11.74" y="70.21" width="43.23" height="38.01" rx="2.53" ry="2.53"/>
+ <rect class="cls-3" x="0" y="41.63" width="66.7" height="34.34" rx="8.19" ry="8.19"/>
+ <text class="cls-5" transform="translate(25.56 30.78) scale(.71 1)"><tspan x="0" y="0">锛�</tspan></text>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/zy-acs-flow/public/map/agv/ctuLoadedFullBattery.svg b/zy-acs-flow/public/map/agv/ctuLoadedFullBattery.svg
new file mode 100644
index 0000000..3cbc57d
--- /dev/null
+++ b/zy-acs-flow/public/map/agv/ctuLoadedFullBattery.svg
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="_鍥惧眰_2" data-name="鍥惧眰 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 66.7 108.22">
+ <defs>
+ <style>
+ .cls-1 {
+ fill: #70b92f;
+ }
+
+ .cls-2 {
+ fill: #82e9f4;
+ }
+
+ .cls-3 {
+ fill: #5cbfcc;
+ }
+
+ .cls-4 {
+ fill: #deaf76;
+ }
+
+ .cls-5, .cls-6 {
+ fill: #eaeaea;
+ }
+
+ .cls-6 {
+ stroke: #4d9600;
+ stroke-miterlimit: 10;
+ stroke-width: 3.49px;
+ }
+ </style>
+ </defs>
+ <g id="_鍥惧眰_1-2" data-name="鍥惧眰 1">
+ <rect class="cls-3" x="5.3" y="7" width="56.1" height="97.85" rx="5.58" ry="5.58"/>
+ <rect class="cls-2" x="10.6" width="45.5" height="39" rx="10.53" ry="10.53"/>
+ <rect class="cls-6" x="10.49" y="9.5" width="45" height="23" rx="2.57" ry="2.57"/>
+ <rect class="cls-5" x="11.74" y="70.21" width="43.23" height="38.01" rx="2.53" ry="2.53"/>
+ <rect class="cls-4" x="14.65" y="90" width="37.83" height="14.77" rx="1.59" ry="1.59"/>
+ <rect class="cls-4" x="14.65" y="72.06" width="37.83" height="14.77" rx="1.59" ry="1.59"/>
+ <rect class="cls-2" x="0" y="41.63" width="66.7" height="34.34" rx="8.19" ry="8.19"/>
+ <rect class="cls-1" x="15.16" y="14" width="35.39" height="14"/>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/zy-acs-flow/public/map/agv/ctuLoadedHalfBattery.svg b/zy-acs-flow/public/map/agv/ctuLoadedHalfBattery.svg
new file mode 100644
index 0000000..34940d0
--- /dev/null
+++ b/zy-acs-flow/public/map/agv/ctuLoadedHalfBattery.svg
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="_鍥惧眰_2" data-name="鍥惧眰 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 66.7 108.22">
+ <defs>
+ <style>
+ .cls-1 {
+ fill: #70b92f;
+ }
+
+ .cls-2 {
+ fill: #82e9f4;
+ }
+
+ .cls-3 {
+ fill: #5cbfcc;
+ }
+
+ .cls-4 {
+ fill: #deaf76;
+ }
+
+ .cls-5, .cls-6 {
+ fill: #eaeaea;
+ }
+
+ .cls-6 {
+ stroke: #4d9600;
+ stroke-miterlimit: 10;
+ stroke-width: 3.49px;
+ }
+ </style>
+ </defs>
+ <g id="_鍥惧眰_1-2" data-name="鍥惧眰 1">
+ <rect class="cls-3" x="5.3" y="7" width="56.1" height="97.85" rx="5.58" ry="5.58"/>
+ <rect class="cls-2" x="10.6" width="45.5" height="39" rx="10.53" ry="10.53"/>
+ <rect class="cls-6" x="10.49" y="9.5" width="45" height="23" rx="2.57" ry="2.57"/>
+ <rect class="cls-5" x="11.74" y="70.21" width="43.23" height="38.01" rx="2.53" ry="2.53"/>
+ <rect class="cls-4" x="14.65" y="90" width="37.83" height="14.77" rx="1.59" ry="1.59"/>
+ <rect class="cls-4" x="14.65" y="72.06" width="37.83" height="14.77" rx="1.59" ry="1.59"/>
+ <rect class="cls-2" x="0" y="41.63" width="66.7" height="34.34" rx="8.19" ry="8.19"/>
+ <rect class="cls-1" x="15.16" y="14" width="17.83" height="14"/>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/zy-acs-flow/public/map/agv/ctuLoadedNoBattery.svg b/zy-acs-flow/public/map/agv/ctuLoadedNoBattery.svg
new file mode 100644
index 0000000..1e7691e
--- /dev/null
+++ b/zy-acs-flow/public/map/agv/ctuLoadedNoBattery.svg
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="_鍥惧眰_2" data-name="鍥惧眰 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 66.7 108.22">
+ <defs>
+ <style>
+ .cls-1 {
+ stroke: #e50012;
+ stroke-miterlimit: 10;
+ stroke-width: 3.49px;
+ }
+
+ .cls-1, .cls-2 {
+ fill: #eaeaea;
+ }
+
+ .cls-3 {
+ fill: #82e9f4;
+ }
+
+ .cls-4 {
+ fill: #5cbfcc;
+ }
+
+ .cls-5 {
+ fill: #deaf76;
+ }
+
+ .cls-6 {
+ font-family: huxiaobo-gdh, huxiaobo-gdh;
+ font-size: 26.52px;
+ }
+ </style>
+ </defs>
+ <g id="_鍥惧眰_1-2" data-name="鍥惧眰 1">
+ <rect class="cls-4" x="5.3" y="7" width="56.1" height="97.85" rx="5.58" ry="5.58"/>
+ <rect class="cls-3" x="10.6" width="45.5" height="39" rx="10.53" ry="10.53"/>
+ <rect class="cls-1" x="10.85" y="9.5" width="45" height="23" rx="2.57" ry="2.57"/>
+ <rect class="cls-2" x="11.74" y="70.21" width="43.23" height="38.01" rx="2.53" ry="2.53"/>
+ <rect class="cls-5" x="14.43" y="91" width="37.83" height="14.77" rx="1.59" ry="1.59"/>
+ <rect class="cls-5" x="14.43" y="73.06" width="37.83" height="14.77" rx="1.59" ry="1.59"/>
+ <rect class="cls-3" x="0" y="41.63" width="66.7" height="34.34" rx="8.19" ry="8.19"/>
+ <text class="cls-6" transform="translate(25.56 30.81) scale(.71 1)"><tspan x="0" y="0">锛�</tspan></text>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/zy-acs-flow/src/map/MapPage.jsx b/zy-acs-flow/src/map/MapPage.jsx
index 17a7f13..1d34847 100644
--- a/zy-acs-flow/src/map/MapPage.jsx
+++ b/zy-acs-flow/src/map/MapPage.jsx
@@ -84,8 +84,8 @@
await Http.fetchMapData();
websocket.connect();
- websocket.onMessage = (data) => {
- Tool.generateDynamicGraphic(curZone, data);
+ websocket.onMessage = (wsMsg) => {
+ Tool.generateDynamicGraphic(curZone, JSON.parse(wsMsg));
}
setTimeout(() => {
diff --git a/zy-acs-flow/src/map/constants.js b/zy-acs-flow/src/map/constants.js
index 2256db6..00b8c0e 100644
--- a/zy-acs-flow/src/map/constants.js
+++ b/zy-acs-flow/src/map/constants.js
@@ -22,6 +22,15 @@
CHARGE: 1,
DIRECTION: 1,
- AGV: 2,
+ AGV: 3,
POINT: 2,
})
+
+export const AGV_STATUS_MODE = Object.freeze({
+ EMPTY_NO_BATTERY: 1,
+ EMPTY_HALF_BATTERY: 2,
+ EMPTY_FULL_BATTERY: 3,
+ LOADED_NO_BATTERY: 4,
+ LOADED_HALF_BATTERY: 5,
+ LOADED_FULL_BATTERY: 6,
+})
\ No newline at end of file
diff --git a/zy-acs-flow/src/map/tool.js b/zy-acs-flow/src/map/tool.js
index 2aafe7c..18ba33e 100644
--- a/zy-acs-flow/src/map/tool.js
+++ b/zy-acs-flow/src/map/tool.js
@@ -3,6 +3,7 @@
import {
DEVICE_TYPE,
DEVICE_Z_INDEX,
+ AGV_STATUS_MODE,
} from './constants';
import shelf from '/map/shelf.svg';
@@ -10,6 +11,13 @@
import station from '/map/station.svg';
import direction from '/map/direction.svg';
import point from '/map/point.svg';
+// agv
+import ctuEmptyNoBattery from '/map/agv/ctuEmptyNoBattery.svg';
+import ctuEmptyHalfBattery from '/map/agv/ctuEmptyHalfBattery.svg';
+import ctuEmptyFullBattery from '/map/agv/ctuEmptyFullBattery.svg';
+import ctuLoadedNoBattery from '/map/agv/ctuLoadedNoBattery.svg';
+import ctuLoadedHalfBattery from '/map/agv/ctuLoadedHalfBattery.svg';
+import ctuLoadedFullBattery from '/map/agv/ctuLoadedFullBattery.svg';
let app, mapContainer, themeMode;
let selectedSprite, effectTick, effectHalfCircle, effectRectangle;
@@ -47,7 +55,7 @@
}
}
-export const generateSprite = (deviceType) => {
+export const generateSprite = (deviceType, source) => {
let sprite;
switch (deviceType) {
case DEVICE_TYPE.SHELF:
@@ -75,6 +83,15 @@
sprite.zIndex = DEVICE_Z_INDEX.DIRECTION;
break;
+
+ case DEVICE_TYPE.AGV:
+ if (source) {
+ sprite = new PIXI.Sprite(PIXI.Texture.from(source, { resourceOptions: { scale: 1 } }));
+ }
+ sprite.width = 300;
+ sprite.height = 500;
+ sprite.zIndex = DEVICE_Z_INDEX.AGV;
+ break
case DEVICE_TYPE.POINT:
sprite = new PIXI.Sprite(PIXI.Texture.from(point, { resourceOptions: { scale: 1 } }));
// sprite.width = 112;
@@ -99,6 +116,17 @@
type: type,
uuid: generateID()
};
+}
+
+export const querySprite = (type, no) => {
+ if (!mapContainer) {
+ return;
+ }
+ for (const sprite of mapContainer.children) {
+ if (sprite.data?.type === type && sprite.data?.no === no) {
+ return sprite;
+ }
+ }
}
export const markSprite = (sprite) => {
@@ -379,23 +407,71 @@
}
+// service ------------------------
+export const getAgvStatusMode = (backpack, battery) => {
+ if (backpack === 0) {
+ if (battery < 10) {
+ return AGV_STATUS_MODE.EMPTY_NO_BATTERY;
+ }
+ if (battery < 80) {
+ return AGV_STATUS_MODE.EMPTY_HALF_BATTERY;
+ }
+ return AGV_STATUS_MODE.EMPTY_FULL_BATTERY;
+ } else {
+ if (battery < 10) {
+ return AGV_STATUS_MODE.LOADED_NO_BATTERY;
+ }
+ if (battery < 80) {
+ return AGV_STATUS_MODE.LOADED_HALF_BATTERY;
+ }
+ return AGV_STATUS_MODE.LOADED_FULL_BATTERY;
+ }
+}
-
-
-
-
-
-
-
-
+export const generateAgvSpriteTexture = (agvStatusMode) => {
+ switch (agvStatusMode) {
+ case AGV_STATUS_MODE.EMPTY_NO_BATTERY:
+ return ctuEmptyNoBattery;
+ case AGV_STATUS_MODE.EMPTY_HALF_BATTERY:
+ return ctuEmptyHalfBattery;
+ case AGV_STATUS_MODE.EMPTY_FULL_BATTERY:
+ return ctuEmptyFullBattery;
+ case AGV_STATUS_MODE.LOADED_NO_BATTERY:
+ return ctuLoadedNoBattery;
+ case AGV_STATUS_MODE.LOADED_HALF_BATTERY:
+ return ctuLoadedHalfBattery;
+ case AGV_STATUS_MODE.LOADED_FULL_BATTERY:
+ return ctuLoadedFullBattery;
+ default:
+ return;
+ }
+}
// dynamic graphic ----------------
export const generateDynamicGraphic = (curZone, data) => {
+ console.log("ws", curZone, data);
- const dynamicData = JSON.parse(data);
- console.log("ws", curZone, dynamicData);
+ for (const agvVo of data.agvVos) {
+ showAgvSprite(curZone, agvVo)
+ }
+}
+
+const showAgvSprite = (curZone, agvVo) => {
+ const { agvNo, code, direction, backpack, battery, ...rest } = agvVo;
+ if (!code) { return }
+ const codeSprite = querySprite(DEVICE_TYPE.POINT, code);
+ if (!codeSprite) { return }
+ let agvSprite = querySprite(DEVICE_TYPE.AGV, agvNo);
+ if (!agvSprite) {
+ agvSprite = generateSprite(DEVICE_TYPE.AGV, generateAgvSpriteTexture(getAgvStatusMode(backpack, battery)));
+ initSprite(agvSprite, DEVICE_TYPE.AGV);
+ agvSprite.data.no = agvNo;
+ agvSprite.position.set(codeSprite.position.x, codeSprite.position.y);
+ mapContainer.addChild(agvSprite);
+ // viewFeature(shuttle, setCurSPrite); // todo
+ }
}
\ No newline at end of file
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/MapWsAgvVo.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/MapWsAgvVo.java
index ff37c36..08adcab 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/MapWsAgvVo.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/MapWsAgvVo.java
@@ -12,4 +12,10 @@
private String code;
+ private Double direction = 0.0;
+
+ private Integer backpack = 0;
+
+ private Double battery;
+
}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java
index 84b7755..7a3095b 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java
@@ -52,8 +52,9 @@
MapWsAgvVo vo = new MapWsAgvVo();
vo.setAgvNo(agv.getUuid());
vo.setCode(code.getData());
-
-
+ vo.setDirection(agvDetail.getAgvAngle());
+ vo.setBackpack(agvDetail.getTempQua());
+ vo.setBattery(vo.getBattery());
agvVos.add(vo);
}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AgvDataService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AgvDataService.java
index b98d2ab..1371a0a 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AgvDataService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AgvDataService.java
@@ -166,6 +166,30 @@
detail.setSensorSts((long) mesBody.getSensorStatusFlags());
+ int tempQua = 0;
+ if (mesBody.isTempLoc1()) {
+ tempQua ++;
+ }
+ if (mesBody.isTempLoc2()) {
+ tempQua ++;
+ }
+ if (mesBody.isTempLoc3()) {
+ tempQua ++;
+ }
+ if (mesBody.isTempLoc4()) {
+ tempQua ++;
+ }
+ if (mesBody.isTempLoc5()) {
+ tempQua ++;
+ }
+ if (mesBody.isTempLoc6()) {
+ tempQua ++;
+ }
+ if (mesBody.isTempLoc7()) {
+ tempQua ++;
+ }
+ detail.setTempQua(tempQua);
+
}
// 鏃犵爜瀹炴椂鏁版嵁鍖�
@@ -194,6 +218,30 @@
detail.setSensorSts((long) mesBody.getSensorStatusFlags());
+ int tempQua = 0;
+ if (mesBody.isTempLoc1()) {
+ tempQua ++;
+ }
+ if (mesBody.isTempLoc2()) {
+ tempQua ++;
+ }
+ if (mesBody.isTempLoc3()) {
+ tempQua ++;
+ }
+ if (mesBody.isTempLoc4()) {
+ tempQua ++;
+ }
+ if (mesBody.isTempLoc5()) {
+ tempQua ++;
+ }
+ if (mesBody.isTempLoc6()) {
+ tempQua ++;
+ }
+ if (mesBody.isTempLoc7()) {
+ tempQua ++;
+ }
+ detail.setTempQua(tempQua);
+
}
// 蹇冭烦鍖�
--
Gitblit v1.9.1