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/tool.js |   98 +++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 87 insertions(+), 11 deletions(-)

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

--
Gitblit v1.9.1