From 2ec33de134bb69ede62df6ae2c119d03906c8f15 Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期三, 10 四月 2024 10:00:53 +0800 Subject: [PATCH] # --- zy-asrs-flow/src/pages/map/utils.js | 168 ++++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 126 insertions(+), 42 deletions(-) diff --git a/zy-asrs-flow/src/pages/map/utils.js b/zy-asrs-flow/src/pages/map/utils.js index 4c708ce..4578c9a 100644 --- a/zy-asrs-flow/src/pages/map/utils.js +++ b/zy-asrs-flow/src/pages/map/utils.js @@ -6,6 +6,7 @@ import agv from '/public/img/map/agv.svg' import shelf from '/public/img/map/shelf.png' +import conveyor from '/public/img/map/conveyor.png' import point from '/public/img/map/point.svg' import shuttle from '/public/img/map/shuttle.svg' @@ -36,6 +37,7 @@ export const SENSOR_TYPE = Object.freeze({ SHELF: "SHELF", + CONVEYOR: "CONVEYOR", SHUTTLE: "SHUTTLE", POINT: "POINT", AGV: "AGV", @@ -43,7 +45,9 @@ export const SENSOR_ZINDEX = Object.freeze({ SHELF: 1, + CONVEYOR: 1, POINT: 1, + TRAVEL_PATH: 80, SHUTTLE: 100, AGV: 100, }) @@ -51,6 +55,8 @@ export const SHELF_TYPE = Object.freeze({ STORE: 0, TRACK: 3, + LIFT: 67, + CHARGE: 5, DISABLE: 1, }) @@ -90,6 +96,12 @@ sprite.width = 60; sprite.height = 60; sprite.zIndex = SENSOR_ZINDEX.SHELF; + break; + case SENSOR_TYPE.CONVEYOR: + sprite = new PIXI.Sprite(PIXI.Texture.from(conveyor, { resourceOptions: { scale: 5 } })); + sprite.width = 112; + sprite.height = 63; + sprite.zIndex = SENSOR_ZINDEX.CONVEYOR; break; case SENSOR_TYPE.POINT: sprite = new PIXI.Sprite(PIXI.Texture.from(point, { resourceOptions: { scale: 5 } })); @@ -334,7 +346,6 @@ } export const copySprite = (sprite) => { - // const copiedSprite = new PIXI.Sprite(sprite.texture); const copiedSprite = generateSprite(sprite.data.type) initSprite(copiedSprite); copiedSprite.position.set(sprite.position.x, sprite.position.y); @@ -440,23 +451,30 @@ await Http.doPostPromise('api/map/list', { floor: curFloor }, (res) => { const mapItemList = eval(res.data); mapItemList.forEach(item => { - const sprite = generateSprite(item.type); - if (sprite) { - initSprite(sprite, item.type); - // data - sprite.data.uuid = item.uuid; - sprite.data.no = item.no; + if (!( + item.type === SENSOR_TYPE.SHUTTLE + || item.type === SENSOR_TYPE.AGV + )) { + const sprite = generateSprite(item.type); + if (sprite) { + initSprite(sprite, item.type); + // data + sprite.data.uuid = item.uuid; + sprite.data.no = item.no; - // dynamical data - Object.assign(sprite.data, item.property); + // dynamical data + Object.assign(sprite.data, item.property); - showSheflType(sprite); - // graph - sprite.position.set(item.positionX, item.positionY); - sprite.scale.set(item.scaleX, item.scaleY); - sprite.rotation = rotationParseNum(item.rotation); + showSheflType(sprite); + // graph + setTimeout(() => { + sprite.position.set(item.positionX, item.positionY); + sprite.scale.set(item.scaleX, item.scaleY); + sprite.rotation = rotationParseNum(item.rotation); + }, 50); - mapContainer.addChild(sprite); + mapContainer.addChild(sprite); + } } }) @@ -474,20 +492,25 @@ mapContainer?.children.forEach(child => { if (child.data?.uuid) { const { type, uuid, no, ...property } = child.data; - mapItemList.push({ - // data - type: type, - uuid: uuid, - no: no, - property: property, + if (!( + type === SENSOR_TYPE.SHUTTLE + || type === SENSOR_TYPE.AGV + )) { + mapItemList.push({ + // data + type: type, + uuid: uuid, + no: no, + property: property, - // graph - positionX: child.position.x, - positionY: child.position.y, - scaleX: child.scale.x, - scaleY: child.scale.y, - rotation: rotationToNum(child.rotation) - }) + // graph + positionX: child.position.x, + positionY: child.position.y, + scaleX: child.scale.x, + scaleY: child.scale.y, + rotation: rotationToNum(child.rotation) + }) + } } }) @@ -567,6 +590,12 @@ case SHELF_TYPE.TRACK: showColor = '#faf6e9'; break; + case SHELF_TYPE.LIFT: + showColor = '#EBDEF0'; + break; + case SHELF_TYPE.CHARGE: + showColor = '#D4EFDF'; + break; case SHELF_TYPE.DISABLE: showColor = '#ffc8c8'; break; @@ -613,21 +642,76 @@ return row + '-' + bay + '-' + lev; } -export const updateMapStatusInRealTime = (data) => { +export const updateMapStatusInRealTime = (data, curFloorGetter, setCurSPrite) => { + const curFloor = curFloorGetter(); + if (isNullOfUndefined(curFloor)) { return; } const mapVo = JSON.parse(data); - // shuttle + // shuttleVo for (const shuttleVo of mapVo.shuttleVos) { - console.log(shuttleVo); - const shuttle = querySprite(SENSOR_TYPE.SHUTTLE, shuttleVo.shuttleNo); - if (!shuttle && !shuttleVo.curLocNo) { continue; } - const { row, bay, lev } = parseLocNo(shuttleVo.curLocNo); - const shelf = querySprite(SENSOR_TYPE.SHELF, row + '-' + bay); - if (!shelf) { continue; } - new TWEEDLE.Tween(shuttle?.position).easing(TWEEDLE.Easing.Linear.None).to({ - x: shelf.position.x, - y: shelf.position.y - }, 1000).onUpdate(() => { - updateEffect(shuttle); - }).start(); + // path + drawTravelPath(shuttleVo, curFloor); + // shuttle + showShuttle(shuttleVo, curFloor, setCurSPrite); } +} + +export const drawTravelPath = (shuttleVo, curFloor) => { + const { shuttleNo, curLocNo, travelPath: path } = shuttleVo; + if (!mapContainer) { + return; + } + const pathLineName = 'preTravelPath-' + shuttleNo; + let pathLine = mapContainer.getChildByName(pathLineName); + if (pathLine) { + mapContainer.removeChild(pathLine); + } + + pathLine = new PIXI.Graphics(); + pathLine.name = pathLineName; + pathLine.lineStyle(2 * (1 / mapContainer.scale.x), 0x3498db, 0.8); + pathLine.zIndex = SENSOR_ZINDEX.TRAVEL_PATH; + let firstNode = true; + for (let i = Math.max(0, path.indexOf(curLocNo) - 1); i < path.length; i++) { + const { row, bay, lev } = parseLocNo(path[i]); + if (Number(lev) !== curFloor) { continue } + const shelf = querySprite(SENSOR_TYPE.SHELF, row + '-' + bay); + if (!shelf) { continue }; + let position = shelf.position; + let x = position.x; + let y = position.y; + if (firstNode) { + pathLine.moveTo(x, y); + firstNode = false; + } else { + pathLine.lineTo(x, y); + } + } + mapContainer.addChild(pathLine); +} + +export const showShuttle = (shuttleVo, curFloor, setCurSPrite) => { + const { shuttleNo, curLocNo } = shuttleVo; + if (!curLocNo) { return } + const { row, bay, lev } = parseLocNo(curLocNo); + if (Number(lev) !== curFloor) { return } + + const shelf = querySprite(SENSOR_TYPE.SHELF, row + '-' + bay); + if (!shelf) { return } + + let shuttle = querySprite(SENSOR_TYPE.SHUTTLE, shuttleNo); + if (!shuttle) { + shuttle = generateSprite(SENSOR_TYPE.SHUTTLE); + initSprite(shuttle, SENSOR_TYPE.SHUTTLE); + shuttle.data.no = shuttleNo; + shuttle.position.set(shelf.position.x, shelf.position.y); + mapContainer.addChild(shuttle); + viewFeature(shuttle, setCurSPrite); + } + + new TWEEDLE.Tween(shuttle?.position).easing(TWEEDLE.Easing.Linear.None).to({ + x: shelf.position.x, + y: shelf.position.y + }, 1000).onUpdate(() => { + updateEffect(shuttle); + }).start(); } \ No newline at end of file -- Gitblit v1.9.1