#
luxiaotao1123
2024-10-14 d59b127388b6064fb01d6f28834d49e560257f2f
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
    }
}