From d2fd7cfc1a426baabe4fac47f88b4db03432e22b Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期二, 31 十月 2023 12:32:32 +0800 Subject: [PATCH] #websocket --- src/main/java/com/zy/common/config/WebSocketConfig.java | 24 src/main/webapp/views/shuttle2.html | 207 ++++--- src/main/java/com/zy/common/model/WebSocketMessage.java | 12 src/main/java/com/zy/asrs/controller/ShuttleController.java | 7 src/main/java/com/zy/asrs/ws/ConsoleWebSocket.java | 168 ++++++ src/main/java/com/zy/asrs/ws/ShuttleWebSocket.java | 152 ++++++ src/main/webapp/views/console.html | 199 ++++--- pom.xml | 4 src/main/webapp/views/console3.html | 688 +++++++++++++++++++++++++++ 9 files changed, 1,278 insertions(+), 183 deletions(-) diff --git a/pom.xml b/pom.xml index 40d90dd..fafefd5 100644 --- a/pom.xml +++ b/pom.xml @@ -103,6 +103,10 @@ <artifactId>okhttp</artifactId> <version>3.10.0</version> </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-websocket</artifactId> + </dependency> <!-- led sdk --> <dependency> diff --git a/src/main/java/com/zy/asrs/controller/ShuttleController.java b/src/main/java/com/zy/asrs/controller/ShuttleController.java index 7ed35f3..d2f0e51 100644 --- a/src/main/java/com/zy/asrs/controller/ShuttleController.java +++ b/src/main/java/com/zy/asrs/controller/ShuttleController.java @@ -7,6 +7,7 @@ import com.core.common.BaseRes; import com.core.common.Cools; import com.core.common.R; +import com.core.common.SpringUtils; import com.core.exception.CoolException; import com.zy.asrs.domain.param.ShuttleOperatorParam; import com.zy.asrs.domain.vo.*; @@ -100,6 +101,12 @@ } } + Integer chargeLine = basShuttleService.selectById(slave.getId()).getChargeLine(); + String lowerPower = "N"; + if (chargeLine != null && shuttleProtocol.getPowerPercent() != null) { + lowerPower = shuttleProtocol.getPowerPercent() <= chargeLine ? "Y" : "N"; + } + shuttleData.put("lowerPower", lowerPower);//鏄惁浣庣數閲� baseObj.putAll(shuttleData); } return R.ok().add(list); diff --git a/src/main/java/com/zy/asrs/ws/ConsoleWebSocket.java b/src/main/java/com/zy/asrs/ws/ConsoleWebSocket.java new file mode 100644 index 0000000..75c45e1 --- /dev/null +++ b/src/main/java/com/zy/asrs/ws/ConsoleWebSocket.java @@ -0,0 +1,168 @@ +package com.zy.asrs.ws; + +import com.alibaba.fastjson.JSON; +import com.core.common.R; +import com.core.common.SpringUtils; +import com.zy.asrs.controller.ConsoleController; +import com.zy.asrs.controller.LiftController; +import com.zy.asrs.controller.ShuttleController; +import com.zy.common.model.WebSocketMessage; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; + +import javax.websocket.*; +import javax.websocket.server.ServerEndpoint; +import java.io.IOException; +import java.util.concurrent.CopyOnWriteArraySet; + +@Component +@Slf4j +@Service +@ServerEndpoint("/console/websocket") +@Data +public class ConsoleWebSocket { + + //瀹㈡埛绔湪绾夸汉鏁� + private static int onlineClient = 0; + + //瀹㈡埛绔睜 + private static CopyOnWriteArraySet<ConsoleWebSocket> webSocketServers = new CopyOnWriteArraySet<>(); + + private Session session; + + //鏄惁閴存潈锛岄粯璁ゆ湭閴存潈 + private boolean auth = false; + + //鏄惁涓虹鐞嗗憳 + private boolean isAdmin = false; + + //绠¢亾ID + private String sessionId; + + @OnOpen + public void onOpen(Session session) { + this.session = session; + this.sessionId = session.getId(); + + //灏唚ebsocket瀵硅薄杩涜淇濆瓨 + webSocketServers.add(this); + //娣诲姞鍦ㄧ嚎浜烘暟 + addOnlineClient(); + log.info("鏈夋柊绐楀彛寮�濮嬬洃鍚�:" + session.getId() + ",褰撳墠鍦ㄧ嚎浜烘暟涓�:" + getOnlineClient()); + } + + /** + * 杩炴帴鍏抽棴璋冪敤鐨勬柟娉� + */ + @OnClose + public void onClose() { + webSocketServers.remove(this); //浠巗et涓垹闄� + subOnlineClient(); //鍦ㄧ嚎鏁板噺1 + log.info("鍏抽棴鐨勮繛鎺ワ細" + sessionId); + log.info("鏈変竴杩炴帴鍏抽棴锛佸綋鍓嶅湪绾夸汉鏁颁负" + getOnlineClient()); + } + + /** + * 鏀跺埌瀹㈡埛绔秷鎭悗璋冪敤鐨勬柟娉� + * @ Param message 瀹㈡埛绔彂閫佽繃鏉ョ殑娑堟伅 + */ + @OnMessage + public void onMessage(String message, Session session) throws IOException { + ShuttleController shuttleController = SpringUtils.getBean(ShuttleController.class); + LiftController liftController = SpringUtils.getBean(LiftController.class); + ConsoleController consoleController = SpringUtils.getBean(ConsoleController.class); + WebSocketMessage socketMessage = JSON.parseObject(message, WebSocketMessage.class); + if (socketMessage.getUrl().equals("/shuttle/table/shuttle/state")) { + R result = shuttleController.shuttleStateTable(); + socketMessage.setData(JSON.toJSONString(result)); + this.sendMessage(JSON.toJSONString(socketMessage)); + } else if (socketMessage.getUrl().equals("/lift/table/lift/state")) { + R result = liftController.liftStateTable(); + socketMessage.setData(JSON.toJSONString(result)); + this.sendMessage(JSON.toJSONString(socketMessage)); + } else if (socketMessage.getUrl().equals("/console/latest/data/site")) { + R result = consoleController.siteLatestData(); + socketMessage.setData(JSON.toJSONString(result)); + this.sendMessage(JSON.toJSONString(socketMessage)); + } else if (socketMessage.getUrl().equals("/console/map/auth")) { + R result = consoleController.getMapFromRedis(Integer.parseInt(socketMessage.getData())); + socketMessage.setData(JSON.toJSONString(result)); + this.sendMessage(JSON.toJSONString(socketMessage)); + } else if (socketMessage.getUrl().equals("/console/barcode/output/site")) { + R result = consoleController.crnOutput(); + socketMessage.setData(JSON.toJSONString(result)); + this.sendMessage(JSON.toJSONString(socketMessage)); + } +// log.info("鏀跺埌鏉ヨ嚜杩炴帴锛�" + sessionId + "鐨勪俊鎭�:" + message); + } + + /** + * @ Param session + * @ Param error + */ + @OnError + public void onError(Session session, Throwable error) { + log.error("鍙戠敓閿欒"); + error.printStackTrace(); + } + + /** + * 瀹炵幇鏈嶅姟鍣ㄤ富鍔ㄦ帹閫� + */ + public void sendMessage(String message) throws IOException { + this.session.getBasicRemote().sendText(message); + } + + /** + * 鏈嶅姟鍣ㄤ富鍔ㄦ帹閫佺粰鎸囧畾鐢ㄦ埛 + */ + public void sendMessage(String message, String account) throws IOException { + for (ConsoleWebSocket item : webSocketServers) { + item.sendMessage(message); + } + } + + public void sendMessage(String message, int userId) throws IOException { + for (ConsoleWebSocket item : webSocketServers) { + item.sendMessage(message); + } + } + + /** + * 鏈嶅姟鍣ㄤ富鍔ㄦ帹閫佺粰鎸囧畾鐢ㄦ埛 + */ + public static boolean sendMessageGlobal(String message, String account) throws IOException { + boolean tag = false; + for (ConsoleWebSocket item : webSocketServers) { + tag = true; + item.sendMessage(message); + } + return tag; + } + + public static boolean sendMessageGlobal(String message, int userId) throws IOException { + boolean tag = false; + for (ConsoleWebSocket item : webSocketServers) { + tag = true; + item.sendMessage(message); + } + return tag; + } + + public static synchronized int getOnlineClient() { + return onlineClient; + } + + public static synchronized void addOnlineClient() { + ConsoleWebSocket.onlineClient++; + } + + public static synchronized void subOnlineClient() { + if (ConsoleWebSocket.onlineClient > 0) { + ConsoleWebSocket.onlineClient--; + } + } + +} diff --git a/src/main/java/com/zy/asrs/ws/ShuttleWebSocket.java b/src/main/java/com/zy/asrs/ws/ShuttleWebSocket.java new file mode 100644 index 0000000..e8ba1d1 --- /dev/null +++ b/src/main/java/com/zy/asrs/ws/ShuttleWebSocket.java @@ -0,0 +1,152 @@ +package com.zy.asrs.ws; + +import com.alibaba.fastjson.JSON; +import com.core.common.R; +import com.core.common.SpringUtils; +import com.zy.asrs.controller.ShuttleController; +import com.zy.common.model.WebSocketMessage; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; + +import javax.websocket.*; +import javax.websocket.server.ServerEndpoint; +import java.io.IOException; +import java.util.concurrent.CopyOnWriteArraySet; + +@Component +@Slf4j +@Service +@ServerEndpoint("/shuttle/websocket") +@Data +public class ShuttleWebSocket { + + //瀹㈡埛绔湪绾夸汉鏁� + private static int onlineClient = 0; + + //瀹㈡埛绔睜 + private static CopyOnWriteArraySet<ShuttleWebSocket> webSocketServers = new CopyOnWriteArraySet<>(); + + private Session session; + + //鏄惁閴存潈锛岄粯璁ゆ湭閴存潈 + private boolean auth = false; + + //鏄惁涓虹鐞嗗憳 + private boolean isAdmin = false; + + //绠¢亾ID + private String sessionId; + + @OnOpen + public void onOpen(Session session) { + this.session = session; + this.sessionId = session.getId(); + + //灏唚ebsocket瀵硅薄杩涜淇濆瓨 + webSocketServers.add(this); + //娣诲姞鍦ㄧ嚎浜烘暟 + addOnlineClient(); + log.info("鏈夋柊绐楀彛寮�濮嬬洃鍚�:" + session.getId() + ",褰撳墠鍦ㄧ嚎浜烘暟涓�:" + getOnlineClient()); + } + + /** + * 杩炴帴鍏抽棴璋冪敤鐨勬柟娉� + */ + @OnClose + public void onClose() { + webSocketServers.remove(this); //浠巗et涓垹闄� + subOnlineClient(); //鍦ㄧ嚎鏁板噺1 + log.info("鍏抽棴鐨勮繛鎺ワ細" + sessionId); + log.info("鏈変竴杩炴帴鍏抽棴锛佸綋鍓嶅湪绾夸汉鏁颁负" + getOnlineClient()); + } + + /** + * 鏀跺埌瀹㈡埛绔秷鎭悗璋冪敤鐨勬柟娉� + * @ Param message 瀹㈡埛绔彂閫佽繃鏉ョ殑娑堟伅 + */ + @OnMessage + public void onMessage(String message, Session session) throws IOException { + ShuttleController shuttleController = SpringUtils.getBean(ShuttleController.class); + WebSocketMessage socketMessage = JSON.parseObject(message, WebSocketMessage.class); + if (socketMessage.getUrl().equals("/shuttle/table/shuttle/state")) { + R result = shuttleController.shuttleStateTable(); + socketMessage.setData(JSON.toJSONString(result)); + this.sendMessage(JSON.toJSONString(socketMessage)); + } else if (socketMessage.getUrl().equals("/shuttle/output/shuttle")) { + R result = shuttleController.steOutput(); + socketMessage.setData(JSON.toJSONString(result)); + this.sendMessage(JSON.toJSONString(socketMessage)); + } +// log.info("鏀跺埌鏉ヨ嚜杩炴帴锛�" + sessionId + "鐨勪俊鎭�:" + message); + } + + /** + * @ Param session + * @ Param error + */ + @OnError + public void onError(Session session, Throwable error) { + log.error("鍙戠敓閿欒"); + error.printStackTrace(); + } + + /** + * 瀹炵幇鏈嶅姟鍣ㄤ富鍔ㄦ帹閫� + */ + public void sendMessage(String message) throws IOException { + this.session.getBasicRemote().sendText(message); + } + + /** + * 鏈嶅姟鍣ㄤ富鍔ㄦ帹閫佺粰鎸囧畾鐢ㄦ埛 + */ + public void sendMessage(String message, String account) throws IOException { + for (ShuttleWebSocket item : webSocketServers) { + item.sendMessage(message); + } + } + + public void sendMessage(String message, int userId) throws IOException { + for (ShuttleWebSocket item : webSocketServers) { + item.sendMessage(message); + } + } + + /** + * 鏈嶅姟鍣ㄤ富鍔ㄦ帹閫佺粰鎸囧畾鐢ㄦ埛 + */ + public static boolean sendMessageGlobal(String message, String account) throws IOException { + boolean tag = false; + for (ShuttleWebSocket item : webSocketServers) { + tag = true; + item.sendMessage(message); + } + return tag; + } + + public static boolean sendMessageGlobal(String message, int userId) throws IOException { + boolean tag = false; + for (ShuttleWebSocket item : webSocketServers) { + tag = true; + item.sendMessage(message); + } + return tag; + } + + public static synchronized int getOnlineClient() { + return onlineClient; + } + + public static synchronized void addOnlineClient() { + ShuttleWebSocket.onlineClient++; + } + + public static synchronized void subOnlineClient() { + if (ShuttleWebSocket.onlineClient > 0) { + ShuttleWebSocket.onlineClient--; + } + } + +} diff --git a/src/main/java/com/zy/common/config/WebSocketConfig.java b/src/main/java/com/zy/common/config/WebSocketConfig.java new file mode 100644 index 0000000..32c1bd6 --- /dev/null +++ b/src/main/java/com/zy/common/config/WebSocketConfig.java @@ -0,0 +1,24 @@ +package com.zy.common.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; +import org.springframework.web.socket.config.annotation.StompEndpointRegistry; +import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer; +import org.springframework.web.socket.server.standard.ServerEndpointExporter; + +@Configuration +@EnableWebSocketMessageBroker +public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { + + @Bean + public ServerEndpointExporter serverEndpointExporter() { + return new ServerEndpointExporter(); + } + + @Override + public void registerStompEndpoints(StompEndpointRegistry registry) { + registry.addEndpoint("/api/socket"); + } +} + diff --git a/src/main/java/com/zy/common/model/WebSocketMessage.java b/src/main/java/com/zy/common/model/WebSocketMessage.java new file mode 100644 index 0000000..647c72b --- /dev/null +++ b/src/main/java/com/zy/common/model/WebSocketMessage.java @@ -0,0 +1,12 @@ +package com.zy.common.model; + +import lombok.Data; + +@Data +public class WebSocketMessage { + + private String url; + + private String data; + +} diff --git a/src/main/webapp/views/console.html b/src/main/webapp/views/console.html index a77e633..f23fd86 100644 --- a/src/main/webapp/views/console.html +++ b/src/main/webapp/views/console.html @@ -342,6 +342,7 @@ consoleInterval: null,//瀹氭椂鍣ㄥ瓨鍌ㄥ彉閲� codeList1: [],//鏉$爜List codeList2: [],//鏉$爜List + ws: null, }, created() { this.init() @@ -351,6 +352,12 @@ }, methods: { init() { + this.ws = new WebSocket("ws://" + window.location.host + baseUrl + "/console/websocket"); + this.ws.onopen = this.webSocketOnOpen + this.ws.onerror = this.webSocketOnError + this.ws.onmessage = this.webSocketOnMessage + this.ws.onclose = this.webSocketClose + this.getMap(this.currentLev) this.getSystemRunningStatus() //鑾峰彇绯荤粺杩愯鐘舵�� @@ -364,22 +371,20 @@ }, //鑾峰彇鍦板浘鏁版嵁 getMap(lev) { - $.ajax({ - type: "get", - url: baseUrl + "/console/map/" + lev + "/auth", - headers: { - 'token': localStorage.getItem('token') - }, - success: (res) => { - let data = res.data - let tmp = [] - for (let i = 1; i < data.length - 1; i++) { - tmp.push(data[i]) - } - // console.log(tmp) - this.map = tmp - } - }) + 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]) + } + // console.log(tmp) + this.map = tmp }, openSite(id) { this.siteWindow = true; //鎵撳紑绔欑偣淇℃伅寮圭獥 @@ -409,29 +414,26 @@ }, getSiteInfo() { //鑾峰彇杈撻�佺珯鐐规暟鎹� - $.ajax({ - url: baseUrl+ "/console/latest/data/site", - headers: {'token': localStorage.getItem('token')}, - method: 'POST', - success: function (res) { - if (res.code === 200){ - var sites = res.data; - for (var i = 0; i < sites.length; i++){ - var siteEl = $("#site-"+sites[i].siteId); - siteEl.attr("class", "site " + sites[i].siteStatus); - if (sites[i].workNo != null && sites[i].workNo>0) { - siteEl.html(sites[i].siteId + "[" + sites[i].workNo + "]"); - } else { - siteEl.html(sites[i].siteId); - } - } - } else if (res.code === 403){ - parent.location.href = baseUrl+"/login"; - } else { - console.log(res.msg); + this.sendWs("{\"url\":\"/console/latest/data/site\",\"data\":{}}") + }, + setSiteInfo(res) { + //鑾峰彇杈撻�佺珯鐐规暟鎹� + if (res.code === 200){ + var sites = res.data; + for (var i = 0; i < sites.length; i++){ + var siteEl = $("#site-"+sites[i].siteId); + siteEl.attr("class", "site " + sites[i].siteStatus); + if (sites[i].workNo != null && sites[i].workNo>0) { + siteEl.html(sites[i].siteId + "[" + sites[i].workNo + "]"); + } else { + siteEl.html(sites[i].siteId); } } - }); + } else if (res.code === 403){ + parent.location.href = baseUrl+"/login"; + } else { + console.log(res.msg); + } }, changFloor(lev) { this.currentLev = lev @@ -439,53 +441,41 @@ this.getMap(lev) }, getShuttleStateInfo() { + this.sendWs("{\"url\":\"/shuttle/table/shuttle/state\",\"data\":{}}") + }, + setShuttleStateInfo(res) { // 鍥涘悜绌挎杞︿俊鎭〃鑾峰彇 let that = this - $.ajax({ - url: baseUrl + "/shuttle/table/shuttle/state", - headers: { - 'token': localStorage.getItem('token') - }, - method: 'POST', - success: function(res) { - 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.currentLevShuttleList = currentLevShuttle - that.shuttleList = res.data - - if (that.shuttleColorList.length == 0) { - let colorList = []//闅忔満灏忚溅棰滆壊 - res.data.forEach((item,idx) => { - colorList[item.shuttleNo] = that.colorRGB() - }) - that.shuttleColorList = colorList + 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.currentLevShuttleList = currentLevShuttle + that.shuttleList = res.data + + if (that.shuttleColorList.length == 0) { + let colorList = []//闅忔満灏忚溅棰滆壊 + res.data.forEach((item,idx) => { + colorList[item.shuttleNo] = that.colorRGB() + }) + that.shuttleColorList = colorList } - }); + } }, getLiftStateInfo() { // 鎻愬崌鏈轰俊鎭〃鑾峰彇 - let that = this - $.ajax({ - url: baseUrl + "/lift/table/lift/state", - headers: { - 'token': localStorage.getItem('token') - }, - method: 'POST', - success: function(res) { - if (res.code == 200) { - that.liftList = res.data - } - } - }); + this.sendWs("{\"url\":\"/lift/table/lift/state\",\"data\":{}}") + }, + setLiftStateInfo(res) { + // 鎻愬崌鏈轰俊鎭〃鑾峰彇 + if (res.code == 200) { + this.liftList = res.data + } }, systemSwitch() { // 绯荤粺寮�鍏� @@ -664,22 +654,49 @@ }) }, getCodeData(){ - let that = this - $.ajax({ - url:baseUrl +'/console/barcode/output/site', - method:'GET', - success:function (res) { - if(res.code === 200){ - let data = JSON.parse(res.data) - if (data.length <= 5) { - that.codeList1 = data; - } else { - that.codeList1 = data.slice(0, 5); - that.codeList2 = data.splice(5, 10); - } - } + this.sendWs(JSON.stringify({ + "url": "/console/barcode/output/site", + "data": {} + })) + }, + setCodeData(res) { + if(res.code === 200){ + let data = JSON.parse(res.data) + if (data.length <= 5) { + this.codeList1 = data; + } else { + this.codeList1 = data.slice(0, 5); + this.codeList2 = data.splice(5, 10); } - }) + } + }, + 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 (this.ws.readyState == WebSocket.OPEN) { + this.ws.send(message) + } } } }) diff --git a/src/main/webapp/views/console3.html b/src/main/webapp/views/console3.html new file mode 100644 index 0000000..a77e633 --- /dev/null +++ b/src/main/webapp/views/console3.html @@ -0,0 +1,688 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="UTF-8"> + <title>WCS鎺у埗涓績</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> + </head> + <body> + <div id="app"> + <div style="display: flex;justify-content: center;align-items: center;width: 100%;margin-top: 150px;"> + <div id="mapDataId" style="zoom: 0.7;position: relative;"> + <div class="pointContainer" v-for="(row,index) in map" :key="index"> + <div v-for="(col,idx) in row" :key="idx"> + <div v-if="col.value == 0"> + <!-- 瀛愯建閬� 璺緞涓虹┛姊溅棰勮璺緞鍒欐樉绀虹┛姊溅棰滆壊鍜岀┛姊溅鍙� --> + <div :style="{background: checkAdvancePath(index,idx).length == 0 ? '':shuttleColorList[checkAdvancePath(index,idx)[0]]}" class="item" v-if="col.data.length > 0">{{col.data}}</div> + <div :style="{background: checkAdvancePath(index,idx).length == 0 ? '':shuttleColorList[checkAdvancePath(index,idx)[0]]}" class="item" v-else>{{checkAdvancePath(index,idx).length == 0 ? idx:checkAdvancePath(index,idx)}}</div> + </div> + <div v-else-if="col.value == 3"> + <!-- 姣嶈建閬� 璺緞涓虹┛姊溅棰勮璺緞鍒欐樉绀虹┛姊溅棰滆壊鍜岀┛姊溅鍙� --> + <div :style="{background: checkAdvancePath(index,idx).length == 0 ? '#5af':shuttleColorList[checkAdvancePath(index,idx)[0]]}" class="item">{{checkAdvancePath(index,idx).length == 0 ? '⇅⇄':checkAdvancePath(index,idx)}}</div> + </div> + <div v-else-if="col.value == 4"> + <!-- 绔欑偣 --> + <div class="site" :id="'site-' + col.data" @click="openSite(col.data)">{{col.data}}</div> + </div> + <div v-else-if="col.value == 5"> + <!-- 鍏呯數妗� --> + <div class="item" style="font-size: 24px">⚡</div> + </div> + <div v-else-if="col.value == -999"> + <!-- 璺緞鍗犵敤鍖哄煙 --> + <div class="item" style="background:#f83333;color: #fff;">{{idx}}</div> + </div> + <div v-else-if="col.value < 0"> + <!-- 绂佹鏄剧ず鍖哄煙 --> + <div class="item" style="visibility: hidden">{{idx}}</div> + </div> + <div v-else> + <div class="item" v-if="col.data.length > 0">{{col.data}}</div> + <div class="item" v-else>{{idx}}-{{col.value}}</div> + </div> + </div> + + <div> + <!-- 鏄剧ず琛屽彿 --> + <div class="item" style="background: none;color: #000;">#{{index+1}}</div> + </div> + </div> + + <!--杈撳嚭灏忚溅--> + <div v-for="(car,idx) in currentLevShuttleList" + :style="{ + left: getCarPosition(car.wcsPoint.x,car.wcsPoint.y)[1] + ,top: getCarPosition(car.wcsPoint.x,car.wcsPoint.y)[0] + ,color: shuttleColorList[car.shuttleNo] + }" + class="sxcar" :id="'sxcar-' + car.shuttleNo"> + {{car.shuttleNo}} + </div> + + </div> + + <!--杈撳嚭妤煎眰--> + <div style="height: 100%;"> + <div class="floorBtnBox" v-for="(lev,idx) in floorList"> + <el-button :style="{background:currentLev === lev ? '#7DCDFF':''}" @click="changFloor(lev)">{{lev}}F</el-button> + </div> + <div> + <el-button @click="testMove()">娴嬭瘯绉诲姩杞�</el-button> + <el-button @click="resetMap()">閲嶇疆鍦板浘</el-button> + </div> + </div> + </div> + + <div class="footer"> + <!-- 鎬诲紑鍏� --> + <div class="line-status"> + <div class="body-head">鎬诲紑鍏�</div> + <div class="switch" @click="systemSwitch"> + <label id="system-toggle" class="toggle-switch" style="margin-left: 20px;"> + <input id="system-toggle-checked" disabled type="checkbox"> + <div class="button"> + <div class="light"></div> + <div class="dots"></div> + <div class="characters"></div> + <div class="shine"></div> + <div class="shadow"></div> + </div> + </label> + + <div class="switch_r"> + <p>绯荤粺鐘舵��</p> + <p id="system-run-desc">绯荤粺杩愯涓�</p> + </div> + </div> + </div> + <!-- 鍥涘悜绌挎杞︾姸鎬� --> + <div class="line-status"> + <div class="body-head">绌挎杞︾姸鎬�</div> + <div class="shuttle-status-box"> + <div v-for="(item,idx) in shuttleList" class="state"> + <span :style="{color: shuttleColorList[item.shuttleNo]}">鍥涘悜绌挎杞� {{item.shuttleNo}}</span> + <span v-if="item.protocolStatus == 1" + class="state-ss shuttle-idle">{{item.protocolStatus$}}</span> + <span v-else-if="item.protocolStatus == 2" + class="state-ss shuttle-working">{{item.protocolStatus$}}</span> + <span v-else-if="item.protocolStatus == 3" + class="state-ss shuttle-waiting">{{item.protocolStatus$}}</span> + <span v-else-if="item.protocolStatus == 4" + class="state-ss shuttle-charging">{{item.protocolStatus$}}</span> + <span v-else-if="item.protocolStatus == 5" + class="state-ss shuttle-charging-waiting">{{item.protocolStatus$}}</span> + <span v-else-if="item.protocolStatus == 6" + class="state-ss shuttle-fixing">{{item.protocolStatus$}}</span> + <span v-else-if="item.protocolStatus == 7" + class="state-ss shuttle-offline">{{item.protocolStatus$}}</span> + <span v-else class="state-ss shuttle-offline">{{item.protocolStatus$}}</span> + </div> + </div> + <div class="allStatus"><span>鎵�鏈夌姸鎬�</span></div> + <div class="allStatus item-group"> + <span class="shuttle-idle">绌洪棽</span> + <span class="shuttle-working">浣滀笟涓�</span> + <span class="shuttle-waiting">绛夊緟纭</span> + <span class="shuttle-charging">鍏呯數涓�</span> + <span class="shuttle-charging-waiting">鍏呯數浠诲姟绛夊緟纭</span> + <span class="shuttle-fixing">鏁呴殰淇涓�</span> + <span class="shuttle-offline">绂荤嚎</span> + </div> + </div> + <!-- 鎻愬崌鏈虹姸鎬� --> + <div class="line-status"> + <div class="body-head">鎻愬崌鏈虹姸鎬�</div> + <div class="lift-status-box"> + <div v-for="(item,idx) in liftList" class="state states"> + <span>鎻愬崌鏈� {{item.liftNo}}</span> + <span v-if="item.protocolStatus == 1" + class="state-ss lift-idle">{{item.protocolStatus$}}</span> + <span v-else-if="item.protocolStatus == 2" + class="state-ss lift-working">{{item.protocolStatus$}}</span> + <span v-else-if="item.protocolStatus == 3" + class="state-ss lift-waiting">{{item.protocolStatus$}}</span> + <span v-else-if="item.protocolStatus == 4" + class="state-ss lift-offline">{{item.protocolStatus$}}</span> + <span v-else class="state-ss lift-offline">{{item.protocolStatus$}}</span> + </div> + </div> + <div class="allStatus"><span>鎵�鏈夌姸鎬�</span></div> + <div class="allStatus item-group"> + <span class="lift-idle">绌洪棽</span> + <span class="lift-working">浣滀笟涓�</span> + <span class="lift-waiting">绛夊緟纭</span> + <span class="lift-offline">绂荤嚎</span> + </div> + </div> + <!-- 杈撻�佺嚎鐘舵�� --> + <div class="line-status"> + <div class="body-head">杈撻�佺嚎鐘舵��</div> + <div class="state states"> + <span>杩愯緭绾挎�绘暟</span> + <span class="line-ss">9</span> + </div> + <div class="allStatus"><span>鎵�鏈夌姸鎬�</span></div> + <div class="allStatus item-group"> + <span class="site-auto-run-id">鑷姩+鏈夌墿+ID</span> + <span class="site-auto-run">鑷姩+鏈夌墿</span> + <span class="site-auto-id">鑷姩+ID</span> + <span class="site-auto">鑷姩</span> + <span class="site-unauto">闈炶嚜鍔�/鎵嬪姩</span> + </div> + </div> + <!-- 鏉$爜琛ㄦ牸 --> + <div class="bar-code"> + <div class="body-head" id="code">鏉$爜鎵弿鍣�</div> + <div class="tablebox"> + <div class="table-head"> + <li><span>鏉$爜鍚嶇О</span><span class="right">鎵爜鏃堕棿</span></li> + </div> + <div id="barcode1" class="table-body"> + <li v-for="(item,index) in codeList1" :key="index"><span>{{item.barcode}}</span><span class="right">{{item.time}}</span></li> + </div> + </div> + <div class="tablebox"> + <div class="table-head"> + <li><span>鏉$爜鍚嶇О</span><span class="right">鎵爜鏃堕棿</span></li> + </div> + <div id="barcode2" class="table-body"> + <li v-for="(item,index) in codeList2" :key="index"><span>{{item.barcode}}</span><span class="right">{{item.time}}</span></li> + </div> + </div> + </div> + </div> + + <!-- 杈撻�佽澶囧脊绐� --> + <div id="siteWindow" :style="{display:siteWindow?'block':'none'}" class="animate__animated animate__fadeIn"> + <!-- 琛ㄥご --> + <div id="siteWindow-head"> + <div class="detailed"></div> + <button @click="siteWindow = false"></button> + </div> + <!-- 琛ㄥ唴瀹� --> + <div class="siteWindow-body"> + <form> + <!-- 璁惧鍙� --> + <div class="form-item"> + <div class="form-item-label"> + <span>璁惧鍙凤細</span> + </div> + <div class="form-item-input"> + <input type="text" name="siteId" value=""> + </div> + </div> + <!-- 宸ヤ綔鍙� --> + <div class="form-item"> + <div class="form-item-label"> + <span>宸ヤ綔鍙凤細</span> + </div> + <div class="form-item-input"> + <input type="text" name="workNo" value=""> + </div> + </div> + <!-- 宸ヤ綔鐘舵�� --> + <div class="form-item"> + <div class="form-item-label"> + <span>宸ヤ綔鐘舵�侊細</span> + </div> + <div class="form-item-input"> + <input type="text" name="wrkSts" value=""> + </div> + </div> + <div class="form-item"> + <!-- 鑷姩 --> + <div class="form-item-checkbox"> + <div class="form-item-label-checkbox"> + <span>鑷姩</span> + </div> + <div class="form-item-input-checkbox"> + <input type="checkbox" name="autoing"> + </div> + </div> + <!-- 鏈夌墿 --> + <div class="form-item-checkbox"> + <div class="form-item-label-checkbox"> + <span>鏈夌墿</span> + </div> + <div class="form-item-input-checkbox"> + <input type="checkbox" name="loading"> + </div> + </div> + <!-- 鑳藉叆 --> + <div class="form-item-checkbox"> + <div class="form-item-label-checkbox"> + <span>鑳藉叆</span> + </div> + <div class="form-item-input-checkbox"> + <input type="checkbox" name="canining"> + </div> + </div> + <!-- 鑳藉嚭 --> + <div class="form-item-checkbox"> + <div class="form-item-label-checkbox"> + <span>鑳藉嚭</span> + </div> + <div class="form-item-input-checkbox"> + <input type="checkbox" name="canouting"> + </div> + </div> + </div> + <!-- 鍑哄叆绫诲瀷 --> + <div class="form-item"> + <div class="form-item-label"> + <span>鍑哄叆绫诲瀷锛�</span> + </div> + <div class="form-item-input"> + <input type="text" name="ioType" value=""> + </div> + </div> + <!-- 婧愮珯 --> + <div class="form-item"> + <div class="form-item-label"> + <span>婧愮珯锛�</span> + </div> + <div class="form-item-input"> + <input type="text" name="sourceStaNo" value=""> + </div> + </div> + <!-- 鐩爣绔� --> + <div class="form-item"> + <div class="form-item-label"> + <span>鐩爣绔欙細</span> + </div> + <div class="form-item-input"> + <input type="text" name="staNo" value=""> + </div> + </div> + <!-- 婧愬簱浣� --> + <div class="form-item"> + <div class="form-item-label"> + <span>婧愬簱浣嶏細</span> + </div> + <div class="form-item-input"> + <input type="text" name="sourceLocNo" value=""> + </div> + </div> + <!-- 鐩爣搴撲綅 --> + <div class="form-item"> + <div class="form-item-label"> + <span>鐩爣搴撲綅锛�</span> + </div> + <div class="form-item-input"> + <input type="text" name="locNo" value=""> + </div> + </div> + </form> + </div> + </div> + + </div> + <script> + var app = new Vue({ + el: '#app', + data: { + map: [],//鍦板浘鏁版嵁 + currentLev: 1,//鍦板浘褰撳墠妤煎眰 + siteWindow: false, //绔欑偣寮圭獥鏄剧ず榛樿涓嶆樉绀� + floorList: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], //褰撳墠椤圭洰妤煎眰 + shuttleList: [], //鍥涘悜绌挎杞﹂泦鍚� + currentLevShuttleList: [],//褰撳墠妤煎眰鍥涘悜绌挎杞﹂泦鍚� + shuttleColorList: [],//鍥涘悜绌挎杞﹂鑹查泦鍚� + liftList: [], //鎻愬崌鏈洪泦鍚� + systemStatus: true,//绯荤粺杩愯鐘舵�� + consoleInterval: null,//瀹氭椂鍣ㄥ瓨鍌ㄥ彉閲� + codeList1: [],//鏉$爜List + codeList2: [],//鏉$爜List + }, + created() { + this.init() + }, + watch: { + + }, + methods: { + init() { + this.getMap(this.currentLev) + this.getSystemRunningStatus() //鑾峰彇绯荤粺杩愯鐘舵�� + + this.consoleInterval = setInterval(() => { + this.getShuttleStateInfo() //鑾峰彇鍥涘悜绌挎杞︿俊鎭� + this.getLiftStateInfo() //鑾峰彇鎻愬崌鏈轰俊鎭� + this.getSiteInfo() //鑾峰彇杈撻�佺珯鐐规暟鎹� + this.getMap(this.currentLev) //鑾峰彇瀹炴椂鍦板浘鏁版嵁 + this.getCodeData()//鑾峰彇鏉$爜 + }, 1000) + }, + //鑾峰彇鍦板浘鏁版嵁 + getMap(lev) { + $.ajax({ + type: "get", + url: baseUrl + "/console/map/" + lev + "/auth", + headers: { + 'token': localStorage.getItem('token') + }, + success: (res) => { + let data = res.data + let tmp = [] + for (let i = 1; i < data.length - 1; i++) { + tmp.push(data[i]) + } + // console.log(tmp) + this.map = tmp + } + }) + }, + openSite(id) { + this.siteWindow = true; //鎵撳紑绔欑偣淇℃伅寮圭獥 + $(".detailed").empty(); + $('.detailed').append(id + '绔欑偣璇︾粏淇℃伅'); + $.ajax({ + url: baseUrl + "/console/site/detail", + headers: { + 'token': localStorage.getItem('token') + }, + data: { + siteId: id + }, + method: 'post', + success: function(res) { + for (var val in res.data) { + var find = $("#siteWindow").find(":input[name='" + val + "']"); + if (find[0].type === 'text') { + find.val(res.data[val]); + } else if (find[0].type === 'checkbox') { + find.attr("checked", res.data[val] === 'Y'); + } + } + } + + }) + }, + getSiteInfo() { + //鑾峰彇杈撻�佺珯鐐规暟鎹� + $.ajax({ + url: baseUrl+ "/console/latest/data/site", + headers: {'token': localStorage.getItem('token')}, + method: 'POST', + success: function (res) { + if (res.code === 200){ + var sites = res.data; + for (var i = 0; i < sites.length; i++){ + var siteEl = $("#site-"+sites[i].siteId); + siteEl.attr("class", "site " + sites[i].siteStatus); + if (sites[i].workNo != null && sites[i].workNo>0) { + siteEl.html(sites[i].siteId + "[" + sites[i].workNo + "]"); + } else { + siteEl.html(sites[i].siteId); + } + } + } else if (res.code === 403){ + parent.location.href = baseUrl+"/login"; + } else { + console.log(res.msg); + } + } + }); + }, + changFloor(lev) { + this.currentLev = lev + this.currentLevShuttleList = [] + this.getMap(lev) + }, + getShuttleStateInfo() { + // 鍥涘悜绌挎杞︿俊鎭〃鑾峰彇 + let that = this + $.ajax({ + url: baseUrl + "/shuttle/table/shuttle/state", + headers: { + 'token': localStorage.getItem('token') + }, + method: 'POST', + success: function(res) { + 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.currentLevShuttleList = currentLevShuttle + that.shuttleList = res.data + + if (that.shuttleColorList.length == 0) { + let colorList = []//闅忔満灏忚溅棰滆壊 + res.data.forEach((item,idx) => { + colorList[item.shuttleNo] = that.colorRGB() + }) + that.shuttleColorList = colorList + } + } + } + }); + }, + getLiftStateInfo() { + // 鎻愬崌鏈轰俊鎭〃鑾峰彇 + let that = this + $.ajax({ + url: baseUrl + "/lift/table/lift/state", + headers: { + 'token': localStorage.getItem('token') + }, + method: 'POST', + success: function(res) { + if (res.code == 200) { + that.liftList = res.data + } + } + }); + }, + systemSwitch() { + // 绯荤粺寮�鍏� + let that = this + if (this.systemStatus) { + this.$prompt('璇疯緭鍏ュ彛浠わ紝骞跺仠姝CS绯荤粺', '鎻愮ず', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + }).then(({ + value + }) => { + that.doSwitch(0, value) + }).catch(() => { + + }); + } else { + this.doSwitch(1) + } + }, + doSwitch(operatorType, password) { + let that = this + $.ajax({ + url: baseUrl + "/console/system/switch", + headers: { + 'token': localStorage.getItem('token') + }, + data: { + operatorType: operatorType, + password: password + }, + method: 'POST', + success: function(res) { + if (res.code === 200) { + if (res.data.status) { + $('#system-toggle-checked').attr("checked", true); + $('#system-run-desc').html("绯荤粺杩愯涓�..."); + that.systemStatus = true; + parent.systemRunning = true; + } else { + $('#system-toggle-checked').attr("checked", false); + $('#system-run-desc').html("绯荤粺宸插仠姝�!"); + that.systemStatus = false; + parent.systemRunning = false; + } + } else if (res.code === 403) { + parent.location.href = baseUrl + "/login"; + } else { + that.$message({ + message: res.msg, + type: 'error' + }); + } + } + }); + }, + getSystemRunningStatus() { + // 鑾峰彇wcs绯荤粺杩愯鐘舵�� + let that = this + $.ajax({ + url: baseUrl + "/console/system/running/status", + headers: { + 'token': localStorage.getItem('token') + }, + method: 'POST', + success: function(res) { + if (res.code === 200) { + if (res.data.status) { + $('#system-toggle-checked').attr("checked", true); + $('#system-run-desc').html("绯荤粺杩愯涓�..."); + that.systemStatus = true; + parent.systemRunning = true; + } else { + $('#system-toggle-checked').attr("checked", false); + $('#system-run-desc').html("绯荤粺宸插仠姝�!"); + that.systemStatus = false; + parent.systemRunning = false; + } + } else if (res.code === 403) { + parent.location.href = baseUrl + "/login"; + } else { + that.$message({ + message: res.msg, + type: 'error' + }); + } + } + }); + }, + getCarPosition(x,y) { + //璁$畻鍥涘悜绌挎杞﹀浘鏍囦綅缃� + let top = (x * 35 - 35) + "px" //闇�瑕佸噺鍘诲皬杞﹁嚜宸辨墍鍗犻珮搴� + let left = (y * 35) + "px" //闇�瑕佸噺鍘诲皬杞﹁嚜宸辨墍鍗犲搴� + return [top,left]; + }, + testMove() { + let that = this + clearInterval(this.consoleInterval)//娓呯悊瀹氭椂鍣� + + let shuttleList = this.currentLevShuttleList + $.ajax({ + url: baseUrl + "/static/testMoveData.json", + headers: { + 'token': localStorage.getItem('token') + }, + method: 'GET', + success: function(res) { + shuttleList[0].moveAdvancePath = res + that.currentLevShuttleList = shuttleList + + let index = 0 + let tmp = null + tmp = setInterval(() => { + if (index < res.length) { + that.currentLevShuttleList[0].wcsPoint.y = res[index].y + that.currentLevShuttleList[0].wcsPoint.x = res[index].x + index++ + }else { + clearInterval(tmp) + that.init() + } + },1000) + } + }); + }, + 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})`; + }, + checkAdvancePath(x,y) { + //妫�娴嬭矾寰勬槸鍚︿负绌挎杞﹂璁¤矾寰勶紝濡倄鍜寉璺緞鏄┛姊溅棰勮璺緞锛屽垯杩斿洖灏忚溅鍙� + this.currentLevShuttleList.forEach((item,idx) => { + if (item.moveAdvancePath != null) { + item.moveAdvancePath.forEach((path,index) => { + if (path.x === x && path.y === y) { + return item.shuttleNo; + } + }) + } + }) + let data = [] + let shuttleList = this.currentLevShuttleList; + for (var i = 0; i < shuttleList.length; i++) { + let shuttle = shuttleList[i] + let moveAdvancePath = shuttle.moveAdvancePath + if (moveAdvancePath != null) { + for (var j = 0; j < moveAdvancePath.length; j++) { + let path = moveAdvancePath[j] + if (path.x-1 === x && path.y === y) {//璺緞绗﹀悎 + data.push(shuttle.shuttleNo) + continue; + } + } + } + } + return data;//杩斿洖灏忚溅鍙烽泦鍚� + }, + resetMap() { + //閲嶇疆鍦板浘 + let that = this + $.ajax({ + url:baseUrl+"/console/map/resetMap/auth", + headers:{ + 'token': localStorage.getItem('token') + }, + data:{}, + method:'get', + success:function (res) { + that.$message({ + message: '閲嶇疆瀹屾垚', + type: 'success' + }); + } + }) + }, + getCodeData(){ + let that = this + $.ajax({ + url:baseUrl +'/console/barcode/output/site', + method:'GET', + success:function (res) { + if(res.code === 200){ + let data = JSON.parse(res.data) + if (data.length <= 5) { + that.codeList1 = data; + } else { + that.codeList1 = data.slice(0, 5); + that.codeList2 = data.splice(5, 10); + } + } + } + }) + } + } + }) + </script> + </body> +</html> diff --git a/src/main/webapp/views/shuttle2.html b/src/main/webapp/views/shuttle2.html index 7ca9591..c1cdc91 100644 --- a/src/main/webapp/views/shuttle2.html +++ b/src/main/webapp/views/shuttle2.html @@ -48,6 +48,7 @@ <th>鏁呴殰鐘舵��</th> <th>鏁呴殰鐮�</th> <th>绠″埗鐘舵��</th> + <th>浣庣數閲�</th> </tr> </thead> <tbody> @@ -229,18 +230,46 @@ var shuttleMsgTableFullRows = 0; // 鍒濆鍖� var shuttleOutputDom = document.getElementById("shuttle-output"); + + var ws = new WebSocket("ws://" + window.location.host + baseUrl + "/shuttle/websocket"); + + //褰揥ebSocket鍒涘缓鎴愬姛鏃讹紝瑙﹀彂onopen浜嬩欢 + ws.onopen = function(){ + console.log("open"); + } + + //褰撳鎴风鏀跺埌鏈嶅姟绔彂鏉ョ殑娑堟伅鏃讹紝瑙﹀彂onmessage浜嬩欢 + ws.onmessage = function(e){ + const result = JSON.parse(e.data); + if (result.url == "/shuttle/table/shuttle/state") { + setShuttleStateInfo(JSON.parse(result.data)) + setShuttleMsgInfo(JSON.parse(result.data)) + }else if (result.url == "/shuttle/output/shuttle") { + setShuttleOutput(JSON.parse(result.data)) + } + // console.log(e.data,result); + } + + //褰撳鎴风鏀跺埌鏈嶅姟绔彂閫佺殑鍏抽棴杩炴帴璇锋眰鏃讹紝瑙﹀彂onclose浜嬩欢 + ws.onclose = function(e){ + console.log("close"); + } + + //濡傛灉鍑虹幇杩炴帴銆佸鐞嗐�佹帴鏀躲�佸彂閫佹暟鎹け璐ョ殑鏃跺�欒Е鍙憃nerror浜嬩欢 + ws.onerror = function(e) { + console.log(error); + } + $(document).ready(function() { initShuttleStateTable(); getShuttleStateInfo(); initShuttleMsgTable(); - getShuttleMsgInfo(); operatorBlockShow(); setShuttleRadio(); }); setInterval(function () { - getShuttleStateInfo() - getShuttleMsgInfo(); + getShuttleStateInfo(); },1000) setInterval(function () { getShuttleOutput(); @@ -318,107 +347,96 @@ // 鍥涘悜绌挎杞︿俊鎭〃鑾峰彇 ---- 琛ㄤ竴 function getShuttleStateInfo() { + sendWs("{\"url\":\"/shuttle/table/shuttle/state\",\"data\":{}}") + } + + // 鍥涘悜绌挎杞︿俊鎭〃璁剧疆 ---- 琛ㄤ竴 + function setShuttleStateInfo(res) { let tableEl = $('#shuttle-state-table'); - $.ajax({ - url: baseUrl+ "/shuttle/table/shuttle/state", - headers: {'token': localStorage.getItem('token')}, - method: 'POST', - success: function (res) { - if (res.code === 200){ - let table = res.data; - if (table.length > shuttleStateTableBlankRows && table.length !== shuttleStateTableFullRows) { - initShuttleStateTable(table.length-shuttleStateTableBlankRows); - shuttleStateTableFullRows = table.length; - } - for (let i=1;i<=table.length;i++){ - // $("#mode-"+table[i-1].shuttleNo).html(table[i-1].statusVal===0?'鑱旀満':'鑴辨満'); - let tr = tableEl.find("tr").eq(i); - setVal(tr.children("td").eq(0), table[i-1].shuttleNo); - setVal(tr.children("td").eq(1), table[i-1].protocolStatus$); - setVal(tr.children("td").eq(2), table[i-1].free$); - setVal(tr.children("td").eq(3), table[i-1].workingMode$); - setVal(tr.children("td").eq(4), table[i-1].point$); - setVal(tr.children("td").eq(5), table[i-1].point$$); - setVal(tr.children("td").eq(6), table[i-1].powerPercent$); - setVal(tr.children("td").eq(7), table[i-1].speed); - setVal(tr.children("td").eq(8), table[i-1].loadState$); - setVal(tr.children("td").eq(9), table[i-1].liftPosition$); - setVal(tr.children("td").eq(10), table[i-1].runDir$); - setVal(tr.children("td").eq(11), table[i-1].runDir2$); - setVal(tr.children("td").eq(12), table[i-1].chargState$); - setVal(tr.children("td").eq(13), table[i-1].errState$); - setVal(tr.children("td").eq(14), table[i-1].errCode$); - setVal(tr.children("td").eq(15), table[i-1].suspendState$); - } - } else if (res.code === 403){ - window.location.href = baseUrl+"/login"; - } else { - console.log(res.msg); - } + if (res.code === 200){ + let table = res.data; + if (table.length > shuttleStateTableBlankRows && table.length !== shuttleStateTableFullRows) { + initShuttleStateTable(table.length-shuttleStateTableBlankRows); + shuttleStateTableFullRows = table.length; } - }); + for (let i=1;i<=table.length;i++){ + // $("#mode-"+table[i-1].shuttleNo).html(table[i-1].statusVal===0?'鑱旀満':'鑴辨満'); + let tr = tableEl.find("tr").eq(i); + setVal(tr.children("td").eq(0), table[i-1].shuttleNo); + setVal(tr.children("td").eq(1), table[i-1].protocolStatus$); + setVal(tr.children("td").eq(2), table[i-1].free$); + setVal(tr.children("td").eq(3), table[i-1].workingMode$); + setVal(tr.children("td").eq(4), table[i-1].point$); + setVal(tr.children("td").eq(5), table[i-1].point$$); + setVal(tr.children("td").eq(6), table[i-1].powerPercent$); + setVal(tr.children("td").eq(7), table[i-1].speed); + setVal(tr.children("td").eq(8), table[i-1].loadState$); + setVal(tr.children("td").eq(9), table[i-1].liftPosition$); + setVal(tr.children("td").eq(10), table[i-1].runDir$); + setVal(tr.children("td").eq(11), table[i-1].runDir2$); + setVal(tr.children("td").eq(12), table[i-1].chargState$); + setVal(tr.children("td").eq(13), table[i-1].errState$); + setVal(tr.children("td").eq(14), table[i-1].errCode$); + setVal(tr.children("td").eq(15), table[i-1].suspendState$); + setVal(tr.children("td").eq(16), table[i-1].lowerPower); + } + } else if (res.code === 403){ + window.location.href = baseUrl+"/login"; + } else { + console.log(res.msg); + } } // 鍥涘悜绌挎杞︽暟鎹〃鑾峰彇 ---- 琛ㄤ簩 - function getShuttleMsgInfo() { + function setShuttleMsgInfo(res) { let tableEl = $('#shuttle-msg-table'); - $.ajax({ - url: baseUrl+ "/shuttle/table/shuttle/state", - headers: {'token': localStorage.getItem('token')}, - method: 'POST', - success: function (res) { - if (res.code === 200){ - var table = res.data; - if (table.length > shuttleMsgTableBlankRows && table.length !== shuttleMsgTableFullRows) { - initShuttleMsgTable(table.length-shuttleMsgTableBlankRows); - shuttleMsgTableFullRows = table.length; - } - for (var i=1;i<=table.length;i++){ - var tr = tableEl.find("tr").eq(i); - setVal(tr.children("td").eq(0), table[i-1].shuttleNo); - setVal(tr.children("td").eq(1), table[i-1].taskNo); - setVal(tr.children("td").eq(2), table[i-1].sourceLocNo); - setVal(tr.children("td").eq(3), table[i-1].locNo); - setVal(tr.children("td").eq(4), table[i-1].maxCellVoltage$); - setVal(tr.children("td").eq(5), table[i-1].minCellVoltage$); - setVal(tr.children("td").eq(6), table[i-1].voltage$); - setVal(tr.children("td").eq(7), table[i-1].chargeCycleTimes); - setVal(tr.children("td").eq(8), table[i-1].surplusQuantity); - setVal(tr.children("td").eq(9), table[i-1].countQuantity); - setVal(tr.children("td").eq(10), table[i-1].statusSum ? table[i - 1].statusSum.mileage : ''); - setVal(tr.children("td").eq(11), table[i-1].pakMk$); - setVal(tr.children("td").eq(12), table[i-1].currentLocNo); - setVal(tr.children("td").eq(13), table[i-1].token); - if (table[i-1].shuttleNo == parseInt($('input[name="shuttleSelect"]:checked').val())) { - $("#runSpeedText").text(table[i-1].runSpeed) - $("#chargeLineText").text(table[i-1].chargeLine + "%") - } - } - } else if (res.code === 403){ - window.location.href = baseUrl+"/login"; - } else { - console.log(res.msg); + if (res.code === 200){ + var table = res.data; + if (table.length > shuttleMsgTableBlankRows && table.length !== shuttleMsgTableFullRows) { + initShuttleMsgTable(table.length-shuttleMsgTableBlankRows); + shuttleMsgTableFullRows = table.length; + } + for (var i=1;i<=table.length;i++){ + var tr = tableEl.find("tr").eq(i); + setVal(tr.children("td").eq(0), table[i-1].shuttleNo); + setVal(tr.children("td").eq(1), table[i-1].taskNo); + setVal(tr.children("td").eq(2), table[i-1].sourceLocNo); + setVal(tr.children("td").eq(3), table[i-1].locNo); + setVal(tr.children("td").eq(4), table[i-1].maxCellVoltage$); + setVal(tr.children("td").eq(5), table[i-1].minCellVoltage$); + setVal(tr.children("td").eq(6), table[i-1].voltage$); + setVal(tr.children("td").eq(7), table[i-1].chargeCycleTimes); + setVal(tr.children("td").eq(8), table[i-1].surplusQuantity); + setVal(tr.children("td").eq(9), table[i-1].countQuantity); + setVal(tr.children("td").eq(10), table[i-1].statusSum ? table[i - 1].statusSum.mileage : ''); + setVal(tr.children("td").eq(11), table[i-1].pakMk$); + setVal(tr.children("td").eq(12), table[i-1].currentLocNo); + setVal(tr.children("td").eq(13), table[i-1].token); + if (table[i-1].shuttleNo == parseInt($('input[name="shuttleSelect"]:checked').val())) { + $("#runSpeedText").text(table[i-1].runSpeed) + $("#chargeLineText").text(table[i-1].chargeLine + "%") } } - }); + } else if (res.code === 403){ + window.location.href = baseUrl+"/login"; + } else { + console.log(res.msg); + } } // 绌挎杞︽棩蹇楄緭鍑� ----------------------------------------------------------------------- function getShuttleOutput() { - $.ajax({ - url: baseUrl + "/shuttle/output/shuttle", - headers: {'token': localStorage.getItem('token')}, - method: 'POST', - success: function (res) { - if (res.code === 200) { - shuttleOutput(res.data); - } else if (res.code === 403) { - window.location.href = baseUrl + "/login"; - } else { - console.log(res.msg); - } - } - }) + sendWs("{\"url\":\"/shuttle/output/shuttle\",\"data\":{}}") + } + + function setShuttleOutput(res) { + if (res.code === 200) { + shuttleOutput(res.data); + } else if (res.code === 403) { + window.location.href = baseUrl + "/login"; + } else { + console.log(res.msg); + } } // 浠诲姟鎸囦护涓嬪彂 @@ -622,5 +640,10 @@ layer.close(layerDetl); }) + function sendWs(message) { + if (ws.readyState == WebSocket.OPEN) { + ws.send(message) + } + } </script> -- Gitblit v1.9.1