jcdm-framework/src/main/java/com/jcdm/framework/config/SecurityConfig.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
jcdm-framework/src/main/java/com/jcdm/framework/websocket/PostController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
jcdm-framework/src/main/java/com/jcdm/framework/websocket/WebSocketServer.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
jcdm-main/pom.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
jcdm-main/src/main/java/com/jcdm/main/sc/stationConf/controller/ScStationConfController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
jcdm-main/src/main/java/com/jcdm/main/util/IpInfoUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
jcdm-main/src/main/java/com/jcdm/main/webservice/Item.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
jcdm-main/src/main/java/com/jcdm/main/webservice/ItemList.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
jcdm-main/src/main/java/com/jcdm/main/webservice/test.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
jcdm-ui/src/views/main/kb/stationTerminal/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
jcdm-framework/src/main/java/com/jcdm/framework/config/SecurityConfig.java
@@ -111,7 +111,7 @@ // è¿æ»¤è¯·æ± .authorizeRequests() // 对äºç»å½login 注åregister éªè¯ç captchaImage å 许å¿åè®¿é® .antMatchers("/login", "/register", "/captchaImage","/websocket/**").permitAll() .antMatchers("/login", "/register", "/captchaImage","/websocket/**","/postWebsocket/**").permitAll() // éæèµæºï¼å¯å¿åè®¿é® .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll() .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll() jcdm-framework/src/main/java/com/jcdm/framework/websocket/PostController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,31 @@ package com.jcdm.framework.websocket; import com.jcdm.common.core.domain.AjaxResult; import com.jcdm.common.core.page.TableDataInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import javax.websocket.Session; import javax.websocket.server.PathParam; import java.util.List; import java.util.Map; @RestController("/socketController") public class PostController { @GetMapping("/postWebsocket") public AjaxResult list(@PathParam("locationCode") String locationCode) { Map<String, Session> map = WebSocketUsers.getUsers(); //1ãçå¬kepserverå°å æ¯å¦ï¼OP.OP1010.START ãOP.OP1020.START ãOP.OP1030.START //2ãå½å ¶ä¸ä¸ä¸ªç¹ä½åçååæ¶ï¼å¤æ该ç¹ä½æ¯åªä¸ä¸ªå·¥ä½ // WebSocketUsers.sendMessageToUserByText(map.get(locationCode), "1"); return AjaxResult.success(); } } jcdm-framework/src/main/java/com/jcdm/framework/websocket/WebSocketServer.java
@@ -6,6 +6,7 @@ import javax.websocket.OnMessage; import javax.websocket.OnOpen; import javax.websocket.Session; import javax.websocket.server.PathParam; import javax.websocket.server.ServerEndpoint; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -17,7 +18,7 @@ * @author ruoyi */ @Component @ServerEndpoint("/websocket/message") @ServerEndpoint("/websocket/message/{userId}") public class WebSocketServer { /** @@ -32,11 +33,14 @@ private static Semaphore socketSemaphore = new Semaphore(socketMaxOnlineCount); /**æ¥æ¶userId*/ private String userId=""; /** * è¿æ¥å»ºç«æåè°ç¨çæ¹æ³ */ @OnOpen public void onOpen(Session session) throws Exception public void onOpen(Session session, @PathParam("userId") String userId) throws Exception { boolean semaphoreFlag = false; // å°è¯è·åä¿¡å·é @@ -51,7 +55,8 @@ else { // æ·»å ç¨æ· WebSocketUsers.put(session.getId(), session); // WebSocketUsers.put(session.getId(), session); WebSocketUsers.put(userId, session); LOGGER.info("\n 建ç«è¿æ¥ - {}", session); LOGGER.info("\n å½åäººæ° - {}", WebSocketUsers.getUsers().size()); WebSocketUsers.sendMessageToUserByText(session, "è¿æ¥æå"); @@ -98,6 +103,6 @@ public void onMessage(String message, Session session) { String msg = message.replace("ä½ ", "æ").replace("å", ""); WebSocketUsers.sendMessageToUserByText(session, msg); // WebSocketUsers.sendMessageToUserByText(session, msg); } } jcdm-main/pom.xml
@@ -42,6 +42,22 @@ <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactId> <version>3.1</version> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.4</version> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version> </dependency> </dependencies> </project> jcdm-main/src/main/java/com/jcdm/main/sc/stationConf/controller/ScStationConfController.java
@@ -1,7 +1,10 @@ package com.jcdm.main.sc.stationConf.controller; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.jcdm.main.util.IpInfoUtils; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; @@ -106,9 +109,10 @@ * è·åå·¥ä½ç»ç«¯é 置详ç»ä¿¡æ¯ */ @GetMapping(value = "/getIpv4") public AjaxResult getIpv4() public AjaxResult getIpv4(HttpServletRequest request) { return success(scStationConfService.getIpv4()); return success(IpInfoUtils.getIpAddr(request)); } } jcdm-main/src/main/java/com/jcdm/main/util/IpInfoUtils.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,63 @@ package com.jcdm.main.util; import javax.servlet.http.HttpServletRequest; import java.net.InetAddress; import java.net.UnknownHostException; /** * ipå·¥å ·ç±» * * @author fengshuonan * @Date 2018/9/27 ä¸å10:47 */ public class IpInfoUtils { /** * è·å客æ·ç«¯IPå°å */ public static String getIpAddr(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); if (ip.equals("127.0.0.1")) { //æ ¹æ®ç½å¡åæ¬æºé ç½®çIP InetAddress inet = null; try { inet = InetAddress.getLocalHost(); } catch (UnknownHostException e) { e.printStackTrace(); } ip = inet.getHostAddress(); } } // 对äºéè¿å¤ä¸ªä»£ççæ åµï¼ç¬¬ä¸ä¸ªIP为客æ·ç«¯çå®IP,å¤ä¸ªIPæç §','åå² if (ip != null && ip.length() > 15) { if (ip.indexOf(",") > 0) { ip = ip.substring(0, ip.indexOf(",")); } } if ("0:0:0:0:0:0:0:1".equals(ip)) { ip = "127.0.0.1"; } return ip; } /** * è·å客æ·ç«¯ä¸»æºå称 */ public static String getHostName() { try { return InetAddress.getLocalHost().getHostName(); } catch (UnknownHostException e) { } return "æªç¥"; } } jcdm-main/src/main/java/com/jcdm/main/webservice/Item.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,25 @@ package com.jcdm.main.webservice; import lombok.Data; @Data public class Item { private String MAKTX; private String FEVOR; private String WERKS; private String LGORT; private String ZHTH; private String GSTRP; private String AUFNR; private String PSMNG; private String DISPO; private String ZSCTZD; private String PLNBEZ; private String ZSTAT; private String DAUAT; private String ZWS; private String KDAUF; private String ZUSER; private String ZDATE; private String FERTH; } jcdm-main/src/main/java/com/jcdm/main/webservice/ItemList.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,22 @@ package com.jcdm.main.webservice; import java.util.List; public class ItemList { private List<Item> item; // æ·»å æé å½æ°ågetter/setteræ¹æ³ // æé å½æ° public ItemList() { } // GetteråSetteræ¹æ³ public List<Item> getItem() { return item; } public void setItem(List<Item> item) { this.item = item; } } jcdm-main/src/main/java/com/jcdm/main/webservice/test.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,93 @@ package com.jcdm.main.webservice; import java.io.InputStream; import java.util.List; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import cn.hutool.json.XML; import com.google.gson.Gson; import com.google.gson.JsonObject; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.UsernamePasswordCredentials; import org.apache.commons.httpclient.auth.AuthScope; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.methods.RequestEntity; import org.apache.commons.httpclient.methods.StringRequestEntity; import org.apache.commons.io.IOUtils; public class test { public static void main(String[] args) throws Exception { String serviceUrl = "http://podqapp.cfmoto.com.cn:50200/XISOAPAdapter/MessageServlet?senderParty=&senderService=BC_MES&receiverParty=&receiverService=&interface=SI_ZPP_CF_MES_005_SYN_OUT&interfaceNamespace=http://cfmoto.com/xi/MES"; String content = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:urn=\"urn:sap-com:document:sap:rfc:functions\">\n" + " <soapenv:Header/>\n" + " <soapenv:Body>\n" + " <urn:ZPP_CF_MES_005>\n" + " <!--Optional:-->\n" + " <IV_WERKS>1000</IV_WERKS>\n" + " <!--Optional:-->\n" + " <IV_ZSCTZD>A0055577</IV_ZSCTZD>\n" + " </urn:ZPP_CF_MES_005>\n" + " </soapenv:Body>\n" + "</soapenv:Envelope>"; // HttpClientåéSOAPè¯·æ± int timeout = 10000; HttpClient client = new HttpClient(); //å¦æéè¦ç¨æ·åå¯ç éªè¯ï¼ä¸éè¦éªè¯ç»å½åä¸éè¦ä»¥ä¸4è¡ String username = "POMESUSER"; String password = "12345tgb"; UsernamePasswordCredentials creds = new UsernamePasswordCredentials(username, password); client.getState().setCredentials(AuthScope.ANY, creds); PostMethod postMethod = new PostMethod(serviceUrl); // 设置è¿æ¥è¶ æ¶ client.getHttpConnectionManager().getParams().setConnectionTimeout(timeout); // 设置读åæ¶é´è¶ æ¶ client.getHttpConnectionManager().getParams().setSoTimeout(timeout); // ç¶åæSoap请æ±æ°æ®æ·»å å°PostMethodä¸ RequestEntity requestEntity = new StringRequestEntity(content, "text/xml", "UTF-8"); // 设置请æ±å¤´é¨ï¼å¦åå¯è½ä¼æ¥ âno SOAPAction headerâ çé误 postMethod.setRequestHeader("SOAPAction", ""); // 设置请æ±ä½ postMethod.setRequestEntity(requestEntity); int status = client.executeMethod(postMethod); if (status == 200) {// æå InputStream is = postMethod.getResponseBodyAsStream(); // è·å请æ±ç»æå符串 String result = IOUtils.toString(is); String jsonStr = xmlToJSON2(result); Gson gson = new Gson(); // å°jsonå符串转æ¢æ对象 ItemList itemList = gson.fromJson(jsonStr, ItemList.class); System.out.println("è¿åç»æ:" + result); } else { System.out.println("é误代ç ï¼" + status + ":" + postMethod.getResponseBodyAsString()); } } /** * æ¹å¼--è´° * 使ç¨hutoolå·¥å ·å ä¸çå·¥å ·è½¬å * @param xmlStr * @return */ public static String xmlToJSON2(String xmlStr){ JSONObject jsonObject1 = cn.hutool.json.XML.toJSONObject(xmlStr, true); Gson gson = new Gson(); JsonObject jsonObject2 = gson.fromJson(jsonObject1.toString(), JsonObject.class); JsonObject etData = jsonObject2 .getAsJsonObject("SOAP:Envelope") .getAsJsonObject("SOAP:Body") .getAsJsonObject("n0:ZPP_CF_MES_005.Response") .getAsJsonObject("ET_DATA"); return etData.toString(); } } jcdm-ui/src/views/main/kb/stationTerminal/index.vue
@@ -96,6 +96,18 @@ </el-table> </el-col> <el-col :span="16"> <!-- <el-input v-model="url" type="text" style="width: 20%" /> --> <!-- <el-button @click="join" type="primary">è¿æ¥</el-button>--> <!-- <el-button @click="exit" type="danger">æå¼</el-button>--> <!-- <br />--> <!-- <el-input type="textarea" v-model="message" :rows="9" />--> <!-- <el-button type="info" @click="send">åéæ¶æ¯</el-button>--> <!-- <br />--> <!-- <br />--> <!-- <el-input type="textarea" v-model="text_content" :rows="9" /> è¿åå 容--> <!-- <br />--> <!-- <br />--> <el-image style="height: 520px;width: 100%" :src="imgSrc"></el-image> </el-col> </el-tab-pane> @@ -156,6 +168,12 @@ pageSize: 10, sfcCode: null, }, // æ¥è¯¢åæ° StationConfQueryParams: { pageNum: 1, pageSize: 10, ipAddress: null, }, cakeLamp: { plcState: 1, //plc scannerState: 1, //æ«ç æª @@ -165,11 +183,29 @@ release: 0 //å 许æ¾è¡ }, content: '', activeName: 'first' activeName: 'first', url: "ws://192.168.10.196:8081/websocket/message/", message: "", text_content: "", ws: null, } }, beforeDestroy() { this.exit(); }, created() { this.getStationConfList(); this.connectWebsocket(); this.initStation(); // this.getStationConfList(); // setTimeout(() => { // this.connectWebsocket(); // }, 3000); }, mounted() { }, methods: { changeMenu(tab, event) { @@ -204,23 +240,85 @@ this.$message('ä¿åèæ为'+this.workpieceInformation.beat+'ç§'); }, /** æ¥è¯¢å·¥ä½ç»ç«¯é ç½®å表 */ getStationConfList() { let queryParams = { ipAddress: null, } getIpv4().then(response => { queryParams.ipAddress = response.msg async getStationConfList() { await getIpv4().then(response => { this.StationConfQueryParams.ipAddress = response.msg console.log('æ¥è¯¢å°æ¬å·¥ä½IP为'+this.StationConfQueryParams.ipAddress) }); listStationConf(queryParams).then(response => { listStationConf(this.StationConfQueryParams).then(response => { let rows = response.rows[0] if(response.rows.length===0){ this.$message('æ¹ipæ²æé 置工åºå·¥ä½ï¼è«é試ï¼'); this.$message('该工ä½æ²¡æé ç½®IPï¼è¯·è系管çåé ç½®IP'); return } this.headContent.processesName = rows.processesName this.headContent.processesCode = rows.processesCode console.log('设置工ä½ç¼ç '+this.headContent.processesCode) }); }, connectWebsocket() { console.log('websocketè¿æ¥å·¥ä½ä¸º'+this.headContent.processesCode) const wsuri = this.url + this.headContent.processesCode; this.ws = new WebSocket(wsuri); const self = this; this.ws.onopen = function (event) { // self.text_content = self.text_content + "å·²ç»æå¼è¿æ¥!" + "\n"; this.$message('websocketè¿æ¥æåï¼'); }; this.ws.onmessage = function (event) { self.text_content = event.data + "\n"; console.log(event.data) if(event.data === "1"){ self.cakeLamp.InPlace = "1" } }; }, exit() { if (this.ws) { this.ws.close(); this.ws = null; } }, send() { if (this.ws) { this.ws.send(this.message); } else { alert("æªè¿æ¥å°æå¡å¨"); } }, async initStation(){ await getIpv4().then(response => { this.StationConfQueryParams.ipAddress = response.msg console.log('æ¥è¯¢å°æ¬å·¥ä½IP为'+this.StationConfQueryParams.ipAddress) }); await listStationConf(this.StationConfQueryParams).then(response => { let rows = response.rows[0] if(response.rows.length===0){ this.$message('该工ä½æ²¡æé ç½®IPï¼è¯·è系管çåé ç½®IP'); return } this.headContent.processesName = rows.processesName this.headContent.processesCode = rows.processesCode console.log('设置工ä½ç¼ç '+this.headContent.processesCode) }); console.log('websocketè¿æ¥å·¥ä½ä¸º'+this.headContent.processesCode) const wsuri = this.url + this.headContent.processesCode; this.ws = new WebSocket(wsuri); const self = this; this.ws.onopen = function (event) { // self.text_content = self.text_content + "å·²ç»æå¼è¿æ¥!" + "\n"; this.$message('websocketè¿æ¥æåï¼'); }; this.ws.onmessage = function (event) { self.text_content = event.data + "\n"; console.log(event.data) if(event.data === "1"){ self.cakeLamp.InPlace = "1" } }; } } } @@ -259,63 +357,4 @@ font-size: 15px; } </style> <!--<template>--> <!-- <div>--> <!-- <el-input v-model="url" type="text" style="width: 20%" /> --> <!-- <el-button @click="join" type="primary">è¿æ¥</el-button>--> <!-- <el-button @click="exit" type="danger">æå¼</el-button>--> <!-- <br />--> <!-- <el-input type="textarea" v-model="message" :rows="9" />--> <!-- <el-button type="info" @click="send">åéæ¶æ¯</el-button>--> <!-- <br />--> <!-- <br />--> <!-- <el-input type="textarea" v-model="text_content" :rows="9" /> è¿åå 容--> <!-- <br />--> <!-- <br />--> <!-- </div>--> <!--</template>--> <!--<script>--> <!--export default {--> <!-- data() {--> <!-- return {--> <!-- url: "ws://127.0.0.1:8081/websocket/message",--> <!-- message: "",--> <!-- text_content: "",--> <!-- ws: null,--> <!-- };--> <!-- },--> <!-- methods: {--> <!-- join() {--> <!-- const wsuri = this.url;--> <!-- this.ws = new WebSocket(wsuri);--> <!-- const self = this;--> <!-- this.ws.onopen = function (event) {--> <!-- self.text_content = self.text_content + "å·²ç»æå¼è¿æ¥!" + "\n";--> <!-- };--> <!-- this.ws.onmessage = function (event) {--> <!-- console.log("å端åè¿æ¥çæ¶æ¯"+event.data)--> <!-- self.text_content = event.data + "\n";--> <!-- };--> <!-- this.ws.onclose = function (event) {--> <!-- self.text_content = self.text_content + "å·²ç»å ³éè¿æ¥!" + "\n";--> <!-- };--> <!-- },--> <!-- exit() {--> <!-- if (this.ws) {--> <!-- this.ws.close();--> <!-- this.ws = null;--> <!-- }--> <!-- },--> <!-- send() {--> <!-- if (this.ws) {--> <!-- this.ws.send(this.message);--> <!-- } else {--> <!-- alert("æªè¿æ¥å°æå¡å¨");--> <!-- }--> <!-- },--> <!-- },--> <!--};--> <!--</script>-->