From 1b007b8d43f82cf86e3cf5f2a316f30bae51deb2 Mon Sep 17 00:00:00 2001 From: Junjie <xjj@123> Date: 星期五, 23 五月 2025 12:53:40 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/shuttle_rcs' into shuttle_rcs --- /dev/null | 0 src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java | 6 src/main/java/com/zy/common/model/MapNode.java | 4 src/main/java/com/zy/core/thread/impl/NyShuttleThread.java | 21 src/main/webapp/views/admin/locMap/locMap.html | 1031 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 12 src/main/java/com/zy/common/utils/NavigateUtils.java | 11 src/main/java/com/zy/common/utils/NavigateMapData.java | 3 src/main/resources/sql/20250513125153.nb3 | 0 src/main/resources/sql/库位地图sql | 2 10 files changed, 1,080 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java index ed1fcb3..c21959d 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -309,6 +309,12 @@ return false; } + boolean checkLocPathIsAvailable = navigateUtils.checkLocPathIsAvailable(wrkMast.getSourceLocNo(), liftSta.getLocNo()); + if(!checkLocPathIsAvailable) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾湭璁$畻鍒板彲鎵ц璺緞锛岀瓑寰呬腑", wrkMast.getWrkNo()); + return false; + } + if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴� //寮哄埗棰勭暀涓�鍙板皬杞︾粰鍏ュ簱浠诲姟 int lev = Utils.getLev(wrkMast.getSourceLocNo()); @@ -531,6 +537,12 @@ //灏忚溅绉诲姩鑷崇珯鐐� 501.鐢熸垚绉诲簱浠诲姟 ==> 502.灏忚溅鎼繍涓� if (wrkMast.getWrkSts() == WrkStsType.NEW_LOC_MOVE.sts) { + boolean checkLocPathIsAvailable = navigateUtils.checkLocPathIsAvailable(wrkMast.getSourceLocNo(), wrkMast.getLocNo()); + if(!checkLocPathIsAvailable) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾湭璁$畻鍒板彲鎵ц璺緞锛岀瓑寰呬腑", wrkMast.getWrkNo()); + return false; + } + if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴� boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒拌揣鐗╃偣杩涜鍙栬揣 News.info("{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触"); diff --git a/src/main/java/com/zy/common/model/MapNode.java b/src/main/java/com/zy/common/model/MapNode.java index 32da26a..a6a8ae6 100644 --- a/src/main/java/com/zy/common/model/MapNode.java +++ b/src/main/java/com/zy/common/model/MapNode.java @@ -37,6 +37,10 @@ private Integer bay; + private String locSts; + + private String locNo; + //鑺傜偣琚攣瀹氭椂鎵�灞炶澶囧彿 private Integer lockDeviceNo; diff --git a/src/main/java/com/zy/common/utils/NavigateMapData.java b/src/main/java/com/zy/common/utils/NavigateMapData.java index cf5a6c0..0d92ea3 100644 --- a/src/main/java/com/zy/common/utils/NavigateMapData.java +++ b/src/main/java/com/zy/common/utils/NavigateMapData.java @@ -225,6 +225,9 @@ } } + mapNode.setLocSts(locMast.getLocSts()); + mapNode.setLocNo(locMast.getLocNo()); + //鏇存柊list list.set(bay, mapNode); lists.set(row, list); diff --git a/src/main/java/com/zy/common/utils/NavigateUtils.java b/src/main/java/com/zy/common/utils/NavigateUtils.java index cb21ea1..bf19aa9 100644 --- a/src/main/java/com/zy/common/utils/NavigateUtils.java +++ b/src/main/java/com/zy/common/utils/NavigateUtils.java @@ -426,6 +426,17 @@ return 0D; } + //妫�娴嬪簱浣嶈矾寰勬槸鍚﹀彲鐢�(鐢ㄤ簬搴撲綅鏄惁鍙Щ鍔ㄦ娴�) + public boolean checkLocPathIsAvailable(String startLocNo, String endLocNo) { + List<int[]> shuttlePoints = Utils.getShuttlePoints(0, Utils.getLev(startLocNo)); + //璁$畻搴撲綅鍒版彁鍗囨満搴撲綅锛岃矾寰勬槸鍚﹀彲鐢� + List<NavigateNode> nodeList = this.calc(startLocNo, endLocNo, NavigationMapType.DFX.id, shuttlePoints, null); + if (nodeList == null) { + return false; + } + return true; + } + public static void main(String[] args) { // //璁$畻璺緞 // List<NavigateNode> calc = calc("1000901", "1800201", NavigationMapType.NONE.id, null); diff --git a/src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java b/src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java index 0fe2dd8..2600041 100644 --- a/src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java +++ b/src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java @@ -57,14 +57,14 @@ /** * 璋冨害杞﹁締-璋冨害鎸囧畾绌挎杞� */ - public boolean dispatchShuttle(Integer wrkNo, String locNo, Integer shuttleNo) { + public synchronized boolean dispatchShuttle(Integer wrkNo, String locNo, Integer shuttleNo) { return shuttleMoveGenerate(wrkNo, locNo, shuttleNo); } /** * 璋冨害杞﹁締 */ - public boolean dispatchShuttle(Integer wrkNo, String locNo) { + public synchronized boolean dispatchShuttle(Integer wrkNo, String locNo) { ArrayList<ShuttleThread> sameLev = new ArrayList<>();//鐩稿悓妤煎眰鐨勭┛姊溅 ArrayList<ShuttleThread> diffLev = new ArrayList<>();//涓嶅悓妤煎眰鐨勭┛姊溅 @@ -202,7 +202,7 @@ * 灏忚溅杩佺Щ浠诲姟鐢熸垚 */ @Transactional - public boolean shuttleMoveGenerate(Integer wrkNo, String locNo, Integer shuttleNo) { + public synchronized boolean shuttleMoveGenerate(Integer wrkNo, String locNo, Integer shuttleNo) { Date now = new Date(); //鑾峰彇鍥涘悜绌挎杞︾嚎绋� ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo); diff --git a/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java b/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java index 126281a..33142bc 100644 --- a/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java +++ b/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java @@ -42,6 +42,7 @@ import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; +import java.net.InetAddress; import java.net.Socket; import java.text.MessageFormat; import java.util.*; @@ -1067,12 +1068,15 @@ @Override public boolean connect() { try { - Socket socket = new Socket(slave.getIp(), slave.getPort()); - socket.setSoTimeout(10000); - socket.setKeepAlive(true); - this.socket = socket; - log.info(MessageFormat.format("銆恵0}銆戝洓鍚戠┛姊溅Socket閾炬帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); - } catch (IOException e) { + InetAddress address = InetAddress.getByName(slave.getIp()); + if (address.isReachable(10000)) { + Socket socket = new Socket(slave.getIp(), slave.getPort()); + socket.setSoTimeout(10000); + socket.setKeepAlive(true); + this.socket = socket; + log.info(MessageFormat.format("銆恵0}銆戝洓鍚戠┛姊溅Socket閾炬帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); + } + } catch (Exception e) { OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戠┛姊溅Socket閾炬帴澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); return false; } @@ -1194,7 +1198,10 @@ writer.flush(); // System.out.println("Sent message to server: " + JSON.toJSONString(httpCommand)); }catch (Exception e) { - e.printStackTrace(); +// e.printStackTrace(); +// System.out.println("socket write error"); + this.socket.close(); + this.socket = null; } } diff --git a/src/main/resources/sql/20250208165620.nb3 b/src/main/resources/sql/20250208165620.nb3 deleted file mode 100644 index 25c7c6c..0000000 --- a/src/main/resources/sql/20250208165620.nb3 +++ /dev/null Binary files differ diff --git a/src/main/resources/sql/20250210133035.nb3 b/src/main/resources/sql/20250210133035.nb3 deleted file mode 100644 index b289c3a..0000000 --- a/src/main/resources/sql/20250210133035.nb3 +++ /dev/null Binary files differ diff --git a/src/main/resources/sql/20250213165543.nb3 b/src/main/resources/sql/20250213165543.nb3 deleted file mode 100644 index aeb73c2..0000000 --- a/src/main/resources/sql/20250213165543.nb3 +++ /dev/null Binary files differ diff --git a/src/main/resources/sql/20250313155617.nb3 b/src/main/resources/sql/20250313155617.nb3 deleted file mode 100644 index b31edc4..0000000 --- a/src/main/resources/sql/20250313155617.nb3 +++ /dev/null Binary files differ diff --git a/src/main/resources/sql/20250331102933.nb3 b/src/main/resources/sql/20250331102933.nb3 deleted file mode 100644 index be73caa..0000000 --- a/src/main/resources/sql/20250331102933.nb3 +++ /dev/null Binary files differ diff --git a/src/main/resources/sql/20250423154227.nb3 b/src/main/resources/sql/20250513125153.nb3 similarity index 86% rename from src/main/resources/sql/20250423154227.nb3 rename to src/main/resources/sql/20250513125153.nb3 index 12de8e4..1c4f477 100644 --- a/src/main/resources/sql/20250423154227.nb3 +++ b/src/main/resources/sql/20250513125153.nb3 Binary files differ diff --git "a/src/main/resources/sql/\345\272\223\344\275\215\345\234\260\345\233\276sql" "b/src/main/resources/sql/\345\272\223\344\275\215\345\234\260\345\233\276sql" new file mode 100644 index 0000000..b56b4d1 --- /dev/null +++ "b/src/main/resources/sql/\345\272\223\344\275\215\345\234\260\345\233\276sql" @@ -0,0 +1,2 @@ +INSERT INTO `shuttle_rcs`.`sys_resource` (`code`, `name`, `resource_id`, `level`, `sort`, `status`) VALUES ('locMap/locMap.html', '搴撲綅鍦板浘', 40541, 2, 8, 1); +INSERT INTO `shuttle_rcs`.`sys_resource` (`code`, `name`, `resource_id`, `level`, `sort`, `status`) VALUES ('locMap#query', '鏌ヨ', '', 3, 0, 1); \ No newline at end of file diff --git a/src/main/webapp/views/admin/locMap/locMap.html b/src/main/webapp/views/admin/locMap/locMap.html new file mode 100644 index 0000000..4b25c9a --- /dev/null +++ b/src/main/webapp/views/admin/locMap/locMap.html @@ -0,0 +1,1031 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <title>搴撲綅鍦板浘</title> + <link rel="stylesheet" href="../../../static/css/animate.min.css"> + <link rel="stylesheet" href="../../../static/vue/element/element.css"> + <link rel="stylesheet" href="../../../static/css/console_vue.css"> + <link rel="stylesheet" href="../../../static/css/toggle-switch.css"> + <script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script> + <script type="text/javascript" src="../../../static/layui/layui.js"></script> + <script type="text/javascript" src="../../../static/js/handlebars/handlebars-v4.5.3.js"></script> + <script type="text/javascript" src="../../../static/js/common.js"></script> + <script type="text/javascript" src="../../../static/vue/js/vue.min.js"></script> + <script type="text/javascript" src="../../../static/vue/element/element.js"></script> + <script src="../../../static/js/gsap.min.js"></script> + <script src="../../../static/js/pixi-legacy.min.js"></script> + <style> + *{ + margin: 0; + padding: 0; + } + </style> +</head> +<body> +<div id="app"> + <div id="pixiView"> + + </div> + + <!--杈撳嚭鎿嶄綔鍜孎PS--> + <div style="position: absolute;top: 20px;right: 50px;"> + <div>FPS:{{mapFps}}</div> + <el-button @click="drawer = true">鎿嶄綔</el-button> + </div> + + <el-drawer + title="鎿嶄綔鍖哄煙" + :visible.sync="drawer" + :with-header="true" + :modal="false" + > + <div class="floorBtnBox" v-for="(lev,idx) in floorList"> + <el-button :style="{background:currentLev === lev ? '#7DCDFF':''}" @click="changeFloor(lev)">{{lev}}F</el-button> + </div> +<!-- <div>--> +<!-- <el-button @click="testMove()">娴嬭瘯绉诲姩杞�</el-button>--> +<!-- </div>--> +<!-- <div style="margin-top: 10px;">--> +<!-- <el-button @click="resetMap()">閲嶇疆鍦板浘</el-button>--> +<!-- </div>--> + </el-drawer> + + <el-drawer + title="搴撲綅璇︽儏" + :visible.sync="drawerLocNo" + :with-header="true" + :modal="false" + > + <div v-if="drawerLocNoData!=null"> + <div style="margin: 10px;"> + <div style="margin-top: 5px;">X锛歿{drawerLocNoData.x}}</div> + <div style="margin-top: 5px;">Y锛歿{drawerLocNoData.y}}</div> + <div style="margin-top: 5px;">Z锛歿{drawerLocNoData.z}}</div> + <div style="margin-top: 5px;">搴撲綅鍙凤細{{drawerLocNoData.locNo}}</div> + <div style="margin-top: 5px;">搴撲綅鐘舵�侊細{{drawerLocNoData.locSts}}</div> + </div> + </div> + </el-drawer> + + <el-drawer + title="灏忚溅淇℃伅" + :visible.sync="drawerShuttle" + :with-header="true" + :modal="false" + > + <div v-if="drawerShuttleData!=null"> + <div style="margin: 10px;"> + <div style="margin-top: 5px;">灏忚溅锛歿{drawerShuttleData.shuttleNo}}</div> + <div style="margin-top: 5px;">宸ヤ綔鍙凤細{{drawerShuttleData.wrkNo}}</div> + <div style="margin-top: 5px;">鐘舵�侊細{{drawerShuttleData}}</div> + </div> + </div> + </el-drawer> + + <el-drawer + title="绔欑偣淇℃伅" + :visible.sync="drawerSta" + :with-header="true" + :modal="false" + > + <div v-if="drawerStaData!=null"> + <div style="margin: 10px;"> + <div style="margin-top: 5px;">绔欑偣锛歿{drawerStaData.siteId}}</div> + <div style="margin-top: 5px;">宸ヤ綔鍙凤細{{drawerStaData.workNo}}</div> + <div style="margin-top: 5px;">宸ヤ綔鐘舵�侊細{{drawerStaData.wrkSts}}</div> + <div style="margin-top: 5px;">宸ヤ綔绫诲瀷锛歿{drawerStaData.ioType}}</div> + <div style="margin-top: 5px;">婧愮珯锛歿{drawerStaData.sourceStaNo}}</div> + <div style="margin-top: 5px;">鐩爣绔欙細{{drawerStaData.staNo}}</div> + <div style="margin-top: 5px;">婧愬簱浣嶏細{{drawerStaData.sourceLocNo}}</div> + <div style="margin-top: 5px;">鐩爣搴撲綅锛歿{drawerStaData.locNo}}</div> + <div style="margin-top: 5px;">鑷姩锛歿{drawerStaData.autoing}}</div> + <div style="margin-top: 5px;">鏈夌墿锛歿{drawerStaData.loading}}</div> + <div style="margin-top: 5px;">鑳藉叆锛歿{drawerStaData.canining}}</div> + <div style="margin-top: 5px;">鑳藉嚭锛歿{drawerStaData.canouting}}</div> + <div style="margin-top: 5px;">鑳藉嚭锛歿{drawerStaData.canouting}}</div> + </div> + </div> + </el-drawer> + + <el-drawer + title="鎻愬崌鏈轰俊鎭�" + :visible.sync="drawerLift" + :with-header="true" + :modal="false" + > + <div v-if="drawerLiftData!=null"> + <div style="margin: 10px;"> + <div style="margin-top: 5px;">鎻愬崌鏈猴細{{liftList[drawerLiftData-1].liftNo}}</div> + <div style="margin-top: 5px;">宸ヤ綔鍙凤細{{liftList[drawerLiftData-1].taskNo}}</div> + <div style="margin-top: 5px;">鐘舵�侊細{{liftList[drawerLiftData-1]}}</div> + </div> + </div> + </el-drawer> + +</div> +<script> + let width = 25; + let height = 25; + let pixiApp; + let pixiStageList = []; + let pixiShuttleMap = new Map(); + let pixiShuttleMoveAdvancePathMap = new Map(); + let pixiShuttleMoveAdvancePathList = []; + let pixiShuttleLockPathMap = new Map(); + let pixiStaMap = new Map(); + let objectsContainer; + let objectsContainer2; + let objectsContainer3; + let graphics0; + let graphics3; + let graphics4; + let graphics5; + let graphics9; + let graphics67; + let graphicsLock; + let ws; + + var app = new Vue({ + el: '#app', + data: { + map: [], + currentLev: 1, + floorList: [], //褰撳墠椤圭洰妤煎眰 + currentLevShuttleList: [],//褰撳墠妤煎眰鍥涘悜绌挎杞﹂泦鍚� + shuttleColorList: [],//鍥涘悜绌挎杞﹂鑹查泦鍚� + drawer: false, + drawerLocNo: false, + drawerLocNoData: null, + drawerLocDetls: [], + reloadMap: true, + mapFps: 0, + drawerShuttle: false, + drawerShuttleData: null, + currentLevStaList: [],//褰撳墠妤煎眰绔欑偣list + reloadSta: true, + drawerSta: false, + drawerStaData: null, + drawerLift: false, + drawerLiftData: null, + liftList: [], + }, + mounted() { + this.init() + this.createMap() + }, + watch: { + map: { + deep: true, + handler(val) { + + } + }, + drawerLocNo: { + deep: true, + handler(val) { + if (!val) { + var sprite = pixiStageList[this.drawerLocNoData.x][this.drawerLocNoData.y]; + updateColor(sprite, 0xFFFFFF);//鎭㈠棰滆壊 + } + } + } + }, + methods: { + init(){ + let that = this + ws = new WebSocket("ws://" + window.location.host + baseUrl + "/console/websocket"); + ws.onopen = this.webSocketOnOpen + ws.onerror = this.webSocketOnError + ws.onmessage = this.webSocketOnMessage + ws.onclose = this.webSocketClose + + + this.initLev()//鍒濆鍖栨ゼ灞備俊鎭� + setTimeout(() => { + that.getMap(this.currentLev) + }, 1000); + + // this.consoleInterval = setInterval(() => { + // this.getMap(this.currentLev) //鑾峰彇瀹炴椂鍦板浘鏁版嵁 + // this.getShuttleStateInfo() //鑾峰彇鍥涘悜绌挎杞︿俊鎭� + // this.getLiftStateInfo() //鑾峰彇鎻愬崌鏈轰俊鎭� + // this.getSiteInfo() //鑾峰彇杈撻�佺珯鐐规暟鎹� + // // this.getCodeData()//鑾峰彇鏉$爜 + // }, 1000) + + }, + initLev(){ + let that = this + $.ajax({ + url: baseUrl + "/console/map/lev/list", + headers: { + 'token': localStorage.getItem('token') + }, + data: {}, + method: 'get', + success: function(res) { + if (res.code === 200) { + that.floorList = res.data; + } else if (res.code === 403) { + parent.location.href = baseUrl + "/login"; + } else { + that.$message({ + message: res.msg, + type: 'error' + }); + } + } + }); + }, + getShuttleStateInfo() { + this.sendWs(JSON.stringify({ + "url": "/shuttle/table/shuttle/state", + "data": {} + })) + }, + setShuttleStateInfo(res) { + // 鍥涘悜绌挎杞︿俊鎭〃鑾峰彇 + let that = this + if (res.code == 200) { + let currentLevShuttle = []//褰撳墠妤煎眰灏忚溅闆嗗悎 + res.data.forEach((item,idx) => { + if (item != null && item.point != undefined && item.point != null) { + if (item.point.z == that.currentLev) { + currentLevShuttle.push(item); + } + } + }) + that.shuttleList = res.data + if (that.shuttleColorList.length == 0) { + let colorList = []//闅忔満灏忚溅棰滆壊 + res.data.forEach((item,idx) => { + colorList[item.shuttleNo] = that.colorRGB() + }) + that.shuttleColorList = colorList + } + + const result = this.findShuttleDiffList(this.currentLevShuttleList, currentLevShuttle); + if (!result) { + //灏忚溅瀛樺湪鍙樺姩锛岄噸鏂版覆鏌撳叏閮ㄥ皬杞� + pixiShuttleMap.forEach((shuttle,index) => { + pixiApp.stage.removeChild(shuttle) + pixiShuttleMap.delete(index) + }) + + currentLevShuttle.forEach((item,index) => { + pixiApp.loader.load((loader, resources) => { + // 绾圭悊鍒涘缓灏忚溅 + const shuttle = new PIXI.Sprite(resources.shuttle.texture); + shuttle.width = width + shuttle.height = height + shuttle.x = (item.wcsPoint.y - 0) * width;//鏇存柊鍧愭爣x + shuttle.y = (item.wcsPoint.x - 1) * height;//鏇存柊鍧愭爣y + shuttle.updateMoveStatus = true;//鍔ㄧ敾鎵ц瀹屾垚 + shuttle.interactive = true; // 蹇呴』瑕佽缃墠鑳芥帴鏀朵簨浠� + shuttle.buttonMode = true; // 璁╁厜鏍囧湪hover鏃跺彉涓烘墜鍨嬫寚閽� + shuttle.on('pointerdown', (e) => { + this.drawerShuttle = true; + this.drawerShuttleData = item; + }) + pixiApp.stage.addChild(shuttle); + pixiShuttleMap.set(item.shuttleNo, shuttle); + }) + + if (item.moveAdvancePath != null && item.moveAdvancePath.length > 0) {//瀛樺湪棰勮璺緞锛岃繘琛屾覆鏌� + this.addMoveAdvancePath(item.moveAdvancePath, item.shuttleNo);//娣诲姞棰勮璺緞 + } + + }) + }else { + //灏忚溅涓嶅瓨鍦ㄥ彉鍔紝娓叉煋灏忚溅浣嶇疆 + currentLevShuttle.forEach((item,index) => { + this.updateShuttleXY(item) + }) + + const resultPath = this.findShuttlePathDiffList(JSON.parse(JSON.stringify(this.currentLevShuttleList)), JSON.parse(JSON.stringify(currentLevShuttle))); + if (!resultPath) { + //棰勮璺緞瀛樺湪鍙樺姩锛屾覆鏌撹矾寰� + currentLevShuttle.forEach((item,index) => { + //鍒犻櫎棰勮璺緞 + this.removeMoveAdvancePath(item.shuttleNo); + if (item.moveAdvancePath != null && item.moveAdvancePath.length > 0) {//瀛樺湪棰勮璺緞锛岃繘琛屾覆鏌� + this.addMoveAdvancePath(item.moveAdvancePath, item.shuttleNo);//娣诲姞棰勮璺緞 + } + }) + } + } + that.currentLevShuttleList = currentLevShuttle; + } + }, + //鑾峰彇鍦板浘鏁版嵁 + getMap(lev) { + this.sendWs(JSON.stringify({ + "url": "/console/map/auth", + "data": lev + })) + }, + setMap(res) { + //鑾峰彇鍦板浘鏁版嵁 + let data = res.data + let tmp = [] + for (let i = 1; i < data.length - 1; i++) { + tmp.push(data[i]) + } + this.createMapData(tmp) + }, + changeFloor(lev) { + this.currentLev = lev + this.currentLevShuttleList = [] + this.reloadMap = true + this.reloadSta = true + this.getMap(lev) + + //娓呯┖鍗犵敤璺緞 + objectsContainer3.removeChildren(); + pixiShuttleLockPathMap = new Map(); + + //娓呯┖棰勮璺緞 + objectsContainer2.removeChildren(); + pixiShuttleMoveAdvancePathMap = new Map(); + pixiShuttleMoveAdvancePathList = [] + }, + createMap(){ + //Create a Pixi Application + pixiApp = new PIXI.Application({ + // width: 1500, + // height: 800, + backgroundColor: 0xF5F7F9FF, + resizeTo: window + }); + //Add the canvas that Pixi automatically created for you to the HTML document + $("#pixiView").append(pixiApp.view) + + //鍔犺浇灏忚溅璧勬簮 + pixiApp.loader.add('shuttle', '../static/images/sxcar.png'); + + // 浠嶨raphics瀵硅薄鍒涘缓涓�涓汗鐞� + graphicsF = pixiApp.renderer.generateTexture(getContainer(1000)); + graphics0 = pixiApp.renderer.generateTexture(getContainer(0)); + graphics3 = pixiApp.renderer.generateTexture(getContainer(3)); + graphics4 = pixiApp.renderer.generateTexture(getContainer(4)); + graphics5 = pixiApp.renderer.generateTexture(getContainer(5)); + graphics9 = pixiApp.renderer.generateTexture(getContainer(9)); + graphics67 = pixiApp.renderer.generateTexture(getContainer(67)); + graphicsLock = pixiApp.renderer.generateTexture(getContainer(-999)); + + // 鍒涘缓涓�涓鍣ㄦ潵绠$悊澶ф壒閲忕殑鏄剧ず瀵硅薄 + objectsContainer = new PIXI.Container(); + pixiApp.stage.addChild(objectsContainer); + + // 鍒涘缓涓�涓鍣ㄦ潵绠$悊澶ф壒閲忕殑鏄剧ず瀵硅薄 + objectsContainer2 = new PIXI.Container(); + pixiApp.stage.addChild(objectsContainer2); + + // 鍒涘缓涓�涓鍣ㄦ潵绠$悊澶ф壒閲忕殑鏄剧ず瀵硅薄 + objectsContainer3 = new PIXI.Container(); + pixiApp.stage.addChild(objectsContainer3); + + //*******************鎷栧姩鐢诲竷******************* + let stageOriginalPos; + let mouseDownPoint; + let touchBlank = false; + pixiApp.renderer.plugins.interaction.on( + 'pointerdown', + (event) => { + const globalPos = event.data.global; + // 璁板綍涓媠tage鍘熸潵鐨勪綅缃� + stageOriginalPos = [pixiApp.stage.position._x, pixiApp.stage.position._y]; + // 璁板綍涓媘ouse down鐨勪綅缃� + mouseDownPoint = [globalPos.x, globalPos.y]; + if (!event.target) { + // 鐐瑰埌浜嗙敾甯冪殑绌虹櫧浣嶇疆 + touchBlank = true; + } + } + ); + + pixiApp.renderer.plugins.interaction.on( + 'pointermove', + (event) => { + const globalPos = event.data.global; + + if (touchBlank) { + // 鎷栨嫿鐢诲竷 + const dx = globalPos.x - mouseDownPoint[0]; + const dy = globalPos.y - mouseDownPoint[1]; + pixiApp.stage.position.set( + stageOriginalPos[0] + dx, + stageOriginalPos[1] + dy + ); + } + } + ); + + pixiApp.renderer.plugins.interaction.on( + 'pointerup', + (event) => { + touchBlank = false; + } + ); + //*******************鎷栧姩鐢诲竷******************* + + //*******************缂╂斁鐢诲竷******************* + pixiApp.view.addEventListener('wheel', (event) => { + event.stopPropagation(); + event.preventDefault(); + // 鍥犱负鐢诲竷鏄厖婊¤绐楃殑锛屾墍浠lientX绛変簬mouse point鍦╮enderer涓婄殑x鍧愭爣 + const globalPos = [event.clientX, event.clientY]; + const delta = event.deltaY; + const oldZoom = pixiApp.stage.scale.x; + let newZoom = oldZoom * 0.999 ** delta; + + // const oldStageMatrix = app.stage.localTransform.clone(); + // const oldStagePos = oldStageMatrix.applyInverse(pointerGlobalPos); + const oldStagePos = globalPos; + const dx = oldStagePos[0] * oldZoom - oldStagePos[0] * newZoom; + const dy = oldStagePos[1] * oldZoom - oldStagePos[1] * newZoom; + + pixiApp.stage.setTransform( + pixiApp.stage.position.x + dx, + pixiApp.stage.position.y + dy, + newZoom, + newZoom, + 0, + 0, + 0, + 0, + 0 + ); + + }); + //*******************缂╂斁鐢诲竷******************* + + //*******************FPS******************* + var g_Time=0; + pixiApp.ticker.add((delta) => { + var timeNow = (new Date()).getTime(); + var timeDiff = timeNow - g_Time; + g_Time = timeNow; + var fps = 1000 / timeDiff; + this.mapFps = parseInt(fps) + }); + //*******************FPS******************* + + }, + createMapData(map) { + if (this.reloadMap) { + this.reloadMap = false + pixiStageList = [map.length]//鍒濆鍖栧垪琛� + pixiStaMap = new Map();//閲嶇疆 + + objectsContainer.removeChildren() + map.forEach((item,index) => { + pixiStageList[index] = [item.length] + for (let idx = 0; idx < item.length; idx++) { + let val = item[idx] + if (val.value < 0 && (val.value != -999)) { + continue; + } + + let sprite = getSprite(val.value, idx * width, index * height, val, (e) => { + if (val.value == 4) { + //绔欑偣 + this.openDrawerSta(val) + } else if (val.value == 67) { + //鎻愬崌鏈� + this.openDrawerLift(val) + } else { + //搴撲綅 + this.rightEvent(index, idx, e); + updateColor(sprite, 0x9900ff); + } + }); + + if (val.value == 4) { + // 鍒涘缓鏂囨湰瀵硅薄 + const style = new PIXI.TextStyle({ + fontFamily: 'Arial', + fontSize: 10, + fill: '#000000', + }); + const text = new PIXI.Text(val.data, style); + text.anchor.set(0.5); // 璁剧疆鏂囨湰閿氱偣涓轰腑蹇冪偣 + text.position.set(sprite.width / 2, sprite.height / 2); // 灏嗘枃鏈綅缃缃负Graphics瀵硅薄鐨勪腑蹇冪偣 + // 灏嗘枃鏈璞℃坊鍔犲埌Graphics瀵硅薄涓� + sprite.addChild(text); + sprite.textObj = text; + pixiStaMap.set(parseInt(val.data), sprite);//绔欑偣鏁版嵁娣诲姞鍒癿ap涓� + }else if (val.value == 67) { + // 鍒涘缓鎻愬崌鏈烘枃鏈璞� + const style = new PIXI.TextStyle({ + fontFamily: 'Arial', + fontSize: 10, + fill: '#000000', + }); + const text = new PIXI.Text(val.data, style); + text.anchor.set(0.5); // 璁剧疆鏂囨湰閿氱偣涓轰腑蹇冪偣 + text.position.set(sprite.width / 2, sprite.height / 2); // 灏嗘枃鏈綅缃缃负Graphics瀵硅薄鐨勪腑蹇冪偣 + // 灏嗘枃鏈璞℃坊鍔犲埌Graphics瀵硅薄涓� + sprite.addChild(text); + sprite.textObj = text; + pixiStaMap.set(parseInt(val.data), sprite);//绔欑偣鏁版嵁娣诲姞鍒癿ap涓� + } + + if (val.value == -999) { + pixiShuttleLockPathMap.set(val.locNo, sprite); + objectsContainer3.addChild(sprite); + }else { + objectsContainer.addChild(sprite); + } + pixiStageList[index][idx] = sprite + } + }); + + //瑙嗚灞呬腑 + let containerWidth = (pixiApp.view.width - objectsContainer.width) / 2; + let containerHeight = (pixiApp.view.height - objectsContainer.height) / 2; + pixiApp.stage.position.set(containerWidth, containerHeight); + }else { + let diff = this.findDiffList(this.map, map); + diff.forEach((item, index) => { + //鑾峰彇old鍏冪礌 + let oldSprite = pixiStageList[item.x][item.y] + if (item.originData == -999) { + //绉婚櫎old璺緞鍏冪礌 + objectsContainer3.removeChild(oldSprite); + }else { + //绉婚櫎old鍏冪礌 + objectsContainer.removeChild(oldSprite); + } + + let sprite = getSprite(item.data, item.y * width, item.x * height, item, (e) => { + this.rightEvent(item.x, item.y, e); + updateColor(sprite, 0x9900ff); + }); + + if (item.data == -999) { + //娣诲姞璺緞鍏冪礌 + objectsContainer3.addChild(sprite); + }else { + //娣诲姞鍏冪礌 + objectsContainer.addChild(sprite); + } + + //淇濆瓨鏂板厓绱� + pixiStageList[item.x][item.y] = sprite + }); + } + + this.map = map; + }, + rightEvent(x, y, e) { + this.drawerLocNo = true + this.drawerLocNoData = {x:x, y: y, z: this.currentLev, locNo: this.map[x][y].locNo, locSts: this.map[x][y].locSts}; + }, + findDiffList(arr1, arr2) { + let diff = [] + arr1.forEach((item,index) => { + item.forEach((val,idx) => { + if(val.value != arr2[index][idx].value){ + diff.push({ + x: index, + y: idx, + data: arr2[index][idx].value, + originData: val.value, + locSts: val.locSts + }) + } + }) + }) + + return diff; + }, + findShuttleDiffList(list1, list2) { + //妫�娴嬮泦鍚�1閲岄潰鐨勫皬杞︽槸鍚﹀湪闆嗗悎2涓湁鍙樺姩 + if (list1.length == 0) { + return false;//闆嗗悎涓虹┖ + } + if (list1.length != list2.length) { + return false;//涓や釜闆嗗悎闀垮害涓嶄竴鑷� + } + + let flag = false; + list1.forEach((item,index) => { + for (var i = 0; i < list2.length; i++) { + if (item.shuttleNo == list2[i].shuttleNo) { + flag = true; + break; + } + } + }); + + return flag; + }, + findShuttlePathDiffList(list1, list2) { + //妫�娴嬮泦鍚�1閲岄潰鐨勫皬杞﹂璁¤矾寰勬槸鍚﹀湪闆嗗悎2涓湁鍙樺姩 + if (list1.length == 0) { + return false;//闆嗗悎涓虹┖ + } + if (list1.length != list2.length) { + return false;//涓や釜闆嗗悎闀垮害涓嶄竴鑷� + } + + for (var index = 0; index < list1.length; index++) { + let item = list1[index]; + for (var i = 0; i < list2.length; i++) { + if (item.shuttleNo != list2[i].shuttleNo) { + continue;//鎵句笉鍒板皬杞﹀彿 + } + + if (item.moveAdvancePath == null) { + item.moveAdvancePath = []; + } + + if (list2[i].moveAdvancePath == null) { + list2[i].moveAdvancePath = []; + } + + if (!(item.moveAdvancePath.length == list2[i].moveAdvancePath.length)) { + return false;//灏忚溅棰勮璺緞闀垮害涓嶄竴鑷� + } + } + } + return true; + }, + checkStaInListDiff(sta, list) { + //妫�娴嬬珯鐐规槸鍚﹀湪闆嗗悎涓湁鍙樺姩 + if (list.length == 0) { + return false;//闆嗗悎涓虹┖ + } + + let tmp = null; + for (var i = 0; i < list.length; i++) { + if (sta.siteId == list[i].siteId) { + tmp = list[i];//鎵惧埌鐩稿悓绔欑偣 + break + } + } + + if (tmp == null) { + return false;//娌℃湁鎵惧埌鐩稿悓绔欑偣 + } + + if (sta.siteStatus != tmp.siteStatus) { + return false;//绔欑偣鐘舵�佷笉鐩稿悓 + } + + if (sta.workNo != tmp.workNo) { + return false;//绔欑偣宸ヤ綔鍙蜂笉鐩稿悓 + } + + return true;//鏃犲彉鍖� + }, + webSocketOnOpen(e) { + console.log("open"); + }, + webSocketOnError(e) { + console.log(e); + }, + webSocketOnMessage(e) { + const result = JSON.parse(e.data); + if (result.url == "/shuttle/table/shuttle/state") { + this.setShuttleStateInfo(JSON.parse(result.data)) + }else if (result.url == "/lift/table/lift/state") { + this.setLiftStateInfo(JSON.parse(result.data)) + }else if (result.url == "/console/latest/data/site") { + this.setSiteInfo(JSON.parse(result.data)) + }else if (result.url == "/console/map/auth") { + this.setMap(JSON.parse(result.data)) + }else if (result.url == "/console/barcode/output/site") { + this.setCodeData(JSON.parse(result.data)) + } + }, + webSocketClose(e) { + console.log("close"); + }, + sendWs(message) { + if (ws.readyState == WebSocket.OPEN) { + ws.send(message) + } + }, + colorRGB(){ + //闅忔満棰滆壊 + const r = Math.floor(Math.random()*256); + const g = Math.floor(Math.random()*256); + const b = Math.floor(Math.random()*256); + return `rgb(${r},${g},${b})`; + }, + updateShuttleXY(item) { + const shuttle = pixiShuttleMap.get(item.shuttleNo); + if (shuttle.updateMoveStatus) {//鍔ㄧ敾鎵ц瀹屾垚鎵嶅彲缁х画鎵ц鍔ㄧ敾 + shuttle.updateMoveStatus = false;//鍔ㄧ敾鎵ц涓� + // 璁$畻涓ょ偣涔嬮棿鐨勮窛绂�1 + const distance = Math.sqrt(Math.pow((item.wcsPoint.x * width) - shuttle.x, 2) + Math.pow((item.wcsPoint.y * height) - shuttle.y, 2)); + gsap.killTweensOf(shuttle); // 鏉�姝绘墍鏈夐拡瀵�".class"鐨勫姩鐢� + gsap.to(shuttle, { + x: (item.wcsPoint.y - 0) * width, // 鐩爣浣嶇疆 + y: (item.wcsPoint.x - 1) * height, // 鐩爣浣嶇疆 + duration: 0.2, // 鍔ㄧ敾鎸佺画鏃堕棿锛堢锛� + ease: "power1.inOut", // 缂撳姩绫诲瀷 + onComplete: () => { + shuttle.updateMoveStatus = true;//鍔ㄧ敾鎵ц瀹屾垚 + } + }); + } + }, + getSiteInfo() { + //鑾峰彇杈撻�佺珯鐐规暟鎹� + this.sendWs(JSON.stringify({ + "url": "/console/latest/data/site", + "data": {} + })) + }, + setSiteInfo(res) { + // var test = "{\"msg\":\"鎿嶄綔鎴愬姛\",\"code\":200,\"data\":[{\"siteId\":\"300\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"301\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"302\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"303\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"304\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"305\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"306\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"307\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"308\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"309\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"310\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"311\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"312\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"313\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"314\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"315\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"316\",\"siteStatus\":\"site-auto-run\",\"workNo\":0},{\"siteId\":\"317\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"318\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"319\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"320\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"321\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"322\",\"siteStatus\":\"site-auto-run\",\"workNo\":0},{\"siteId\":\"323\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"324\",\"siteStatus\":\"site-auto-run\",\"workNo\":0},{\"siteId\":\"325\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"326\",\"siteStatus\":\"site-auto-id\",\"workNo\":5451},{\"siteId\":\"327\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"200\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"328\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"201\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"329\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"202\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"330\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"203\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"331\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"204\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"332\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"205\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"333\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"334\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"335\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"336\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"337\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"338\",\"siteStatus\":\"site-auto-run\",\"workNo\":0},{\"siteId\":\"339\",\"siteStatus\":\"site-auto-run-id\",\"workNo\":5447},{\"siteId\":\"340\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"341\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"342\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"343\",\"siteStatus\":\"site-auto-run\",\"workNo\":0},{\"siteId\":\"344\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"345\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"346\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"100\",\"siteStatus\":\"site-auto-run-id\",\"workNo\":8851},{\"siteId\":\"101\",\"siteStatus\":\"site-auto-run-id\",\"workNo\":8855},{\"siteId\":\"102\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"103\",\"siteStatus\":\"site-auto\",\"workNo\":0},{\"siteId\":\"104\",\"siteStatus\":\"site-auto-run\",\"workNo\":0},{\"siteId\":\"105\",\"siteStatus\":\"site-auto\",\"workNo\":0}]}"; + // res = JSON.parse(test) + //鑾峰彇杈撻�佺珯鐐规暟鎹� + if (res.code === 200){ + var sites = res.data; + if (this.reloadSta && pixiStaMap.size > 0) { + //閲嶆柊娓叉煋鎵�鏈夎緭閫佺珯鐐� + this.currentLevStaList = sites; + this.reloadSta = false; + sites.forEach((item, index) => { + let sta = pixiStaMap.get(parseInt(item.siteId)); + if (sta != undefined) { + if (item.workNo > 0) { + sta.textObj.text = item.siteId + "(" + item.workNo + ")"; + } + + //鍒涘缓閬僵灞� + if (item.siteStatus == "site-auto") { + //鑷姩鐘舵�侊紝绉婚櫎閬僵灞� + if (sta.statusObj != null) { + objectsContainer.removeChild(sta.statusObj) + sta.statusObj = null; + } + }else if (item.siteStatus == "site-auto-run" || item.siteStatus == "site-auto-run-id") { + //鑷姩鏈夌墿 + let graphics = getGraphics(0xfa51f6, width, height, sta.x, sta.y); + graphics.addChild(sta.textObj);//缁ф壙鏂囧瓧淇℃伅 + sta.statusObj = graphics; + objectsContainer.addChild(graphics); + }else if (item.siteStatus == "site-unauto") { + //闈炶嚜鍔� + let graphics = getGraphics(0xb8b8b8, width, height, sta.x, sta.y); + graphics.addChild(sta.textObj);//缁ф壙鏂囧瓧淇℃伅 + sta.statusObj = graphics; + objectsContainer.addChild(graphics); + } + } + }); + } else { + //妫�娴嬩笉鐩稿悓绔欑偣杩涜灞�閮ㄦ洿鏂� + this.currentLevStaList.forEach((item, index) => { + let result = this.checkStaInListDiff(item, sites); + if (!result) { + //闇�瑕佹洿鏂� + let sta = pixiStaMap.get(parseInt(item.siteId)); + if (item.workNo > 0) { + sta.textObj.text = item.siteId + "(" + item.workNo + ")"; + }else { + sta.textObj.text = item.siteId; + } + + //鍒涘缓閬僵灞� + if (item.siteStatus == "site-auto") { + //鑷姩鐘舵�侊紝绉婚櫎閬僵灞� + if (sta.statusObj != null) { + objectsContainer.removeChild(sta.statusObj) + sta.statusObj = null; + } + }else if (item.siteStatus == "site-auto-run") { + //鑷姩鏈夌墿 + let graphics = getGraphics(0xfa51f6, width, height, sta.x, sta.y); + graphics.addChild(sta.textObj);//缁ф壙鏂囧瓧淇℃伅 + sta.statusObj = graphics; + objectsContainer.addChild(graphics); + }else if (item.siteStatus == "site-unauto") { + //闈炶嚜鍔� + let graphics = getGraphics(0xb8b8b8, width, height, sta.x, sta.y); + graphics.addChild(sta.textObj);//缁ф壙鏂囧瓧淇℃伅 + sta.statusObj = graphics; + objectsContainer.addChild(graphics); + } + } + }); + } + } else if (res.code === 403){ + parent.location.href = baseUrl+"/login"; + } else { + console.log(res.msg); + } + }, + openDrawerSta(data) { + let that = this + this.drawerSta = true; + $.ajax({ + url: baseUrl + "/console/site/detail", + headers: { + 'token': localStorage.getItem('token') + }, + data: { + siteId: data.data + }, + method: 'post', + success: function(res) { + //瑙f瀽鏁版嵁 + let siteInfo = res.data; + if (res.code == 200) { + that.drawerStaData = siteInfo; + } + } + }) + }, + openDrawerLift(data) { + this.drawerLift = true; + this.drawerLiftData = parseInt(data.data) + }, + getLiftStateInfo() { + // 鎻愬崌鏈轰俊鎭〃鑾峰彇 + this.sendWs(JSON.stringify({ + "url": "/lift/table/lift/state", + "data": {} + })) + }, + setLiftStateInfo(res) { + // 鎻愬崌鏈轰俊鎭〃鑾峰彇 + if (res.code == 200) { + this.liftList = res.data + } + }, + addMoveAdvancePath(moveAdvancePath, shuttleNo) {//娣诲姞棰勮璺緞 + let that = this; + moveAdvancePath.forEach((path, idx) => { + let locNo = this.map[path.x, path.y]; + if (!pixiShuttleMoveAdvancePathMap.has(locNo)) { + let graphics = getGraphics(0x9966ff, width, height, path.y * width, (path.x - 1) * height); + let shuttleNos = [shuttleNo]; + // 鍒涘缓鏂囨湰瀵硅薄 + const style = new PIXI.TextStyle({ + fontFamily: 'Arial', + fontSize: 10, + fill: '#000000', + }); + const text = new PIXI.Text(JSON.stringify(shuttleNos), style); + text.anchor.set(0.5); // 璁剧疆鏂囨湰閿氱偣涓轰腑蹇冪偣 + text.position.set(graphics.width / 2, graphics.height / 2); // 灏嗘枃鏈綅缃缃负Graphics瀵硅薄鐨勪腑蹇冪偣 + // 灏嗘枃鏈璞℃坊鍔犲埌Graphics瀵硅薄涓� + graphics.addChild(text); + graphics.textObj = text; + objectsContainer2.addChild(graphics) + pixiShuttleMoveAdvancePathMap.set(locNo, { + path: path, + sprite: graphics, + textObj: text, + shuttleNos: shuttleNos + }) + + if (pixiShuttleMoveAdvancePathList[shuttleNo] == null) { + let locNos = new Set() + locNos.add(locNo); + pixiShuttleMoveAdvancePathList[shuttleNo] = locNos; + }else { + pixiShuttleMoveAdvancePathList[shuttleNo].add(locNo); + } + }else { + let pathMap = pixiShuttleMoveAdvancePathMap.get(locNo) + let shuttleNos = pathMap.shuttleNos; + shuttleNos.push(shuttleNo); + pathMap.textObj.text = JSON.stringify(shuttleNos); + pixiShuttleMoveAdvancePathMap.set(locNo, pathMap); + if (pixiShuttleMoveAdvancePathList[shuttleNo] == null) { + let locNos = new Set() + locNos.add(locNo); + pixiShuttleMoveAdvancePathList[shuttleNo] = locNos; + }else { + pixiShuttleMoveAdvancePathList[shuttleNo].add(locNo); + } + } + }); + }, + removeMoveAdvancePath(shuttleNo) {//鍒犻櫎棰勮璺緞 + let locNos = pixiShuttleMoveAdvancePathList[shuttleNo]; + if (locNos != null) { + locNos.forEach((locNo,index) => { + let pathMap = pixiShuttleMoveAdvancePathMap.get(locNo); + if (pathMap != null) { + let shuttleNos = pathMap.shuttleNos; + let shuttleNosNew = []; + shuttleNos.forEach((shuttle, idx) => { + if (shuttle != shuttleNo) { + shuttleNosNew.push(shuttle); + } + }); + + if (shuttleNosNew.length === 0) { + //棰勮璺緞娌℃湁灏忚溅锛岀洿鎺ュ垹闄よ矾寰� + objectsContainer2.removeChild(pathMap.sprite); + pixiShuttleMoveAdvancePathMap.delete(locNo) + }else { + //棰勮璺緞瀛樺湪鍏朵粬灏忚溅锛屾洿鏂版枃瀛椾俊鎭� + pathMap.textObj.text = JSON.stringify(shuttleNosNew); + pathMap.shuttleNos = shuttleNosNew; + pixiShuttleMoveAdvancePathMap.set(locNo, pathMap); + } + } + }) + } + }, + } + }) + + function getContainer(value) { + let graphics = new PIXI.Graphics(); + if (value === 0) { + graphics.beginFill(0x55aaff); + } else if (value === 3) {//姣嶈建閬� + graphics.beginFill(0x00ff7f); + graphics.visible = true; + } else if (value === 4) {//绔欑偣 + graphics.beginFill(0xffff00); + graphics.visible = true; + } else if (value === 5) {//鍏呯數妗� + graphics.beginFill(0xffaa7f); + graphics.visible = true; + } else if (value === 9) {//杞ㄨ抗 + graphics.beginFill(0xff0000); + }else if (value === 67) {//鎻愬崌鏈� + graphics.beginFill(0xaaffff); + }else if (value === -999) {//璺緞閿佸畾 + graphics.beginFill(0xf83333); + }else if (value === 1000) {//婊″簱浣� + graphics.beginFill(0xf83333); + } + graphics.lineStyle(1, 0xffffff, 1); + graphics.drawRect(0, 0, width, height); + graphics.endFill(); + + return graphics; + } + + function getGraphics(color, width, height, x, y) { + let graphics = new PIXI.Graphics(); + graphics.beginFill(color); + graphics.lineStyle(1, 0xffffff, 1); + graphics.drawRect(0, 0, width, height); + graphics.position.set(x, y); + graphics.endFill(); + return graphics; + } + + function getSprite(value, x, y, item, pointerDownEvent) { + let sprite; + if (value == 0) { + if(item.locSts == 'O') { + sprite = new PIXI.Sprite(graphics0); + }else if(item.locSts == 'F') { + sprite = new PIXI.Sprite(graphicsF); + }else { + sprite = new PIXI.Sprite(graphics0); + } + } else if (value == 3) { + sprite = new PIXI.Sprite(graphics3); + } else if (value == 4) { + sprite = new PIXI.Sprite(graphics4); + } else if (value == 5) { + sprite = new PIXI.Sprite(graphics5); + } else if (value == 9) { + sprite = new PIXI.Sprite(graphics9); + } else if (value == 67) { + sprite = new PIXI.Sprite(graphics67); + } else if (value == -999) { + sprite = new PIXI.Sprite(graphicsLock); + } else { + sprite = new PIXI.Sprite(graphics0); + } + sprite.position.set(x, y); + sprite.interactive = true; // 蹇呴』瑕佽缃墠鑳芥帴鏀朵簨浠� + sprite.buttonMode = true; // 璁╁厜鏍囧湪hover鏃跺彉涓烘墜鍨嬫寚閽� + + sprite.on('pointerdown', (e) => { + pointerDownEvent(e) + }) + + return sprite; + } + + /** + * 鏇存柊棰滆壊 + */ + function updateColor(sprite, color) { + // graphics.clear() + // graphics.beginFill(color); + // graphics.drawRect(0, 0, width, height); + sprite.tint = color; + } + +</script> +</body> +</html> \ No newline at end of file -- Gitblit v1.9.1