From 1e567af8bbdda31ce3342cd41bb40157168b3da9 Mon Sep 17 00:00:00 2001
From: wuzeyu <1223318623@qq.com>
Date: 星期三, 28 八月 2024 17:27:13 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/rtuLog/ByteArrayHttpMessageConverter.java | 40 ++++++++
pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/rtuLog/ByteArrayConverterConfig.java | 18 +++
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_66_Up.java | 2
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/com/CommandCtrl.java | 102 ++++++++++++++++++++
pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/p206V1_0_0/ComSupportP206V1_0_0.java | 2
pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/rtuLog/RtuLogCtrl.java | 60 ++++++++++++
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/resource/ResourceUnit.java | 2
pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/rtuLog/RtuLogSupport.java | 68 +++++++++++++
8 files changed, 292 insertions(+), 2 deletions(-)
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_66_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_66_Up.java
index 2a5f5ae..26fd0f7 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_66_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_66_Up.java
@@ -69,7 +69,7 @@
cdData.ip = ip1 + "." + ip2 + "." + ip3 + "." + ip4 ;
- String port = "" +ByteUtilUnsigned.bytes2Short_LE(bs, index++) ;
+ String port = "" +ByteUtilUnsigned.bytes2Short_BE(bs, index++) ;
cdData.port = Integer.parseInt(port) ;
}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/resource/ResourceUnit.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/resource/ResourceUnit.java
index 9f440af..69699fe 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/resource/ResourceUnit.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/resource/ResourceUnit.java
@@ -123,7 +123,7 @@
/**
* 寰楀埌涓�涓棩蹇楁枃浠�
- * @param fileName 鏂囦欢鍚嶇О
+ * @param fileName 鏂囦欢鍚嶇О([rtuAddr].log)
*/
@SuppressWarnings("unused")
public File getLogFile(String fileName){
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/com/CommandCtrl.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/com/CommandCtrl.java
index b8914a4..0dcd9cc 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/com/CommandCtrl.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/com/CommandCtrl.java
@@ -1,5 +1,6 @@
package com.dy.rtuMw.web.com;
+import com.dy.rtuMw.resource.ResourceUnit;
import com.dy.rtuMw.server.ServerProperties;
import com.dy.rtuMw.server.forTcp.TcpSessionCache;
import com.dy.rtuMw.server.local.CommandInnerDeaLer;
@@ -10,9 +11,16 @@
import com.dy.common.mw.protocol.CommandType;
import com.dy.common.webUtil.BaseResponse;
import com.dy.common.webUtil.BaseResponseUtils;
+import jakarta.servlet.ServletOutputStream;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
+
+import java.io.*;
+import java.util.ArrayList;
+import java.util.List;
/**
@@ -32,6 +40,100 @@
return BaseResponseUtils.buildSuccess("ok");
}
+ /**
+ * 涓嬭浇鎺у埗鍣紙RTU锛変笂涓嬭鏁版嵁鐨刲og鏃ュ織鏂囦欢
+ * @param rtuAddr
+ * @param req
+ * @param rep
+ */
+ @GetMapping("/rtuLogFile")
+ public void rtuLogFile(String rtuAddr, HttpServletRequest req, HttpServletResponse rep){
+ File logFile = ResourceUnit.getInstance().getLogFile(rtuAddr + ".log") ;
+ if(logFile != null && logFile.exists()){
+ //鍦⊿pring Boot涓紝application/octet-stream;charset=UTF-8閫氬父琛ㄧず鍝嶅簲鐨勫唴瀹规槸瀛楄妭娴侊紝
+ //骞朵笖瀛楃闆嗘槸UTF-8銆傚浜庤繖绉嶇被鍨嬬殑鍝嶅簲锛孲pring Boot榛樿浣跨敤ByteArrayHttpMessageConverter鏉ュ鐞嗭紝
+ //鍥犱负瀹冨彲浠ュ鐞嗘墍鏈塧pplication/octet-stream绫诲瀷鐨勫搷搴斻��
+ //鐒惰�岋紝ByteArrayHttpMessageConverter骞朵笉鐩存帴澶勭悊瀛楃闆嗭紙charset锛夈��
+ //瀛楃闆嗛�氬父鐢ㄤ簬鏂囨湰鍐呭锛岃�宎pplication/octet-stream閫氬父鐢ㄤ簬浜岃繘鍒跺唴瀹癸紝鍥犳鍦ㄨ繖绉嶆儏鍐典笅鎸囧畾瀛楃闆嗗彲鑳芥槸涓嶅悎閫傜殑銆�
+ //涓嶈繃锛屽鏋滀綘纭疄闇�瑕佸鐞嗗甫鏈夌壒瀹氬瓧绗﹂泦鐨刟pplication/octet-stream鍝嶅簲锛屼綘鍙兘闇�瑕佽嚜瀹氫箟HttpMessageConverter銆�
+ rep.addHeader("content-type", "application/octet-stream;charset=UTF-8");
+ rep.addHeader("Content-Disposition", "attachment;fileName=" + (rtuAddr + ".log")) ;
+ ServletOutputStream out = null;
+ FileInputStream in = null ;
+ try {
+ out = rep.getOutputStream() ;
+ } catch (Exception ee) {
+ out = null ;
+ }finally{
+ if(out != null){
+ byte[] bs = new byte[1024] ;
+ int len = -1 ;
+ try {
+ in = new FileInputStream(logFile);
+ len = in.read(bs) ;
+ while(len != -1){
+ out.write(bs, 0, len);
+ len = in.read(bs) ;
+ }
+ } catch (Exception eee) {
+ } finally {
+ if(out != null){
+ try{
+ out.flush();
+ out.close();
+ }catch(Exception e){
+ }finally{
+ if(in != null){
+ try{
+ in.close();
+ }catch(Exception e){
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ /**
+ * 涓嬭浇鎺у埗鍣紙RTU锛変笂涓嬭鏁版嵁鐨刲og鏃ュ織鏂囦欢
+ * @param rtuAddr
+ */
+ @GetMapping("/rtuLogText")
+ public BaseResponse<List<String>> rtuLogText(String rtuAddr){
+ List<String> list = new ArrayList() ;
+ File logFile = ResourceUnit.getInstance().getLogFile(rtuAddr + ".log") ;
+ if(logFile != null && logFile.exists()){
+ BufferedReader reader = null ;
+ try {
+ reader = new BufferedReader(new FileReader(logFile)) ;
+ String line ;
+ while((line = reader.readLine()) != null){
+ list.add(line) ;
+ }
+ return BaseResponseUtils.buildSuccess(list);
+ } catch (Exception e) {
+ list.add("璇诲彇鎺у埗鍣紙" + rtuAddr + "锛夌殑鏃ュ織鏂囦欢寮傚父锛�" + (e.getMessage() == null?"":("锛�" + e.getMessage()))) ;
+ return BaseResponseUtils.buildSuccess(list);
+ }finally{
+ if(reader != null){
+ try{
+ reader.close();
+ }catch(Exception e){
+ }
+ }
+ }
+ }else{
+ list.add("鏈緱鍒版帶鍒跺櫒锛�" + rtuAddr + "锛夌殑鏃ュ織鏂囦欢") ;
+ return BaseResponseUtils.buildSuccess(list);
+ }
+ }
+ /**
+ * 鎺ユ敹web绯荤粺鍙戞潵鐨勫懡浠�
+ * @param com
+ * @return
+ */
@PostMapping(path = "send", consumes = MediaType.APPLICATION_JSON_VALUE)
public BaseResponse<Command> send(@RequestBody Command com) {
log.info("鏀跺埌web绯荤粺鍙戞潵鐨勫懡浠わ細\n" + com.toString()) ;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/p206V1_0_0/ComSupportP206V1_0_0.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/p206V1_0_0/ComSupportP206V1_0_0.java
index ae511a8..8063cb5 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/p206V1_0_0/ComSupportP206V1_0_0.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/p206V1_0_0/ComSupportP206V1_0_0.java
@@ -20,6 +20,8 @@
public class ComSupportP206V1_0_0 {
protected static String mwUrlTest = "http://127.0.0.1:8070/rtuMw/com/test" ;
protected static String mwUrlSendCom = "http://127.0.0.1:8070/rtuMw/com/send" ;
+ protected static String mwUrlRtuLogFile = "http://127.0.0.1:8070/rtuMw/com/rtuLogFile" ;
+ protected static String mwUrlRtuLogText = "http://127.0.0.1:8070/rtuMw/com/rtuLogText" ;
protected static String rtuAddr = "532328059995" ;
// protected static String mwUrlTest = "http://8.140.179.55:8071/rtuMw/com/test" ;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/rtuLog/ByteArrayConverterConfig.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/rtuLog/ByteArrayConverterConfig.java
new file mode 100644
index 0000000..4adcc2d
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/rtuLog/ByteArrayConverterConfig.java
@@ -0,0 +1,18 @@
+package com.dy.pipIrrMwTestWeb.rtuLog;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.converter.HttpMessageConverter;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/8/28 16:02
+ * @Description
+ */
+@Configuration
+public class ByteArrayConverterConfig {
+ @Bean
+ public HttpMessageConverter<byte[]> logFileByteArrayHttpMessageConverter() {
+ return new ByteArrayHttpMessageConverter();
+ }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/rtuLog/ByteArrayHttpMessageConverter.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/rtuLog/ByteArrayHttpMessageConverter.java
new file mode 100644
index 0000000..5e6256e
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/rtuLog/ByteArrayHttpMessageConverter.java
@@ -0,0 +1,40 @@
+package com.dy.pipIrrMwTestWeb.rtuLog;
+
+import org.springframework.http.HttpInputMessage;
+import org.springframework.http.HttpOutputMessage;
+import org.springframework.http.MediaType;
+import org.springframework.http.converter.AbstractHttpMessageConverter;
+import org.springframework.http.converter.HttpMessageNotReadableException;
+import org.springframework.http.converter.HttpMessageNotWritableException;
+
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/8/28 15:58
+ * @Description
+ */
+public class ByteArrayHttpMessageConverter extends AbstractHttpMessageConverter<byte[]> {
+
+ public ByteArrayHttpMessageConverter() {
+ super(MediaType.APPLICATION_OCTET_STREAM, new MediaType("application", "octet-stream", StandardCharsets.UTF_8));
+ }
+
+ @Override
+ protected boolean supports(Class<?> clazz) {
+ return byte[].class == clazz;
+ }
+
+ @Override
+ protected byte[] readInternal(Class<? extends byte[]> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
+ // Read the byte array from the input message
+ return org.springframework.util.StreamUtils.copyToByteArray(inputMessage.getBody());
+ }
+
+ @Override
+ protected void writeInternal(byte[] bytes, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
+ // Write the byte array to the output message
+ outputMessage.getBody().write(bytes);
+ }
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/rtuLog/RtuLogCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/rtuLog/RtuLogCtrl.java
new file mode 100644
index 0000000..e85fdaf
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/rtuLog/RtuLogCtrl.java
@@ -0,0 +1,60 @@
+package com.dy.pipIrrMwTestWeb.rtuLog;
+
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import jakarta.servlet.ServletOutputStream;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.net.URLEncoder;
+import java.util.List;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/8/28 14:55
+ * @Description
+ */
+@Slf4j
+@RestController
+@RequestMapping(path="rtuLog")
+public class RtuLogCtrl extends RtuLogSupport {
+
+ @GetMapping(path = "logFile")
+ public BaseResponse<List<String>> rtuLogFile(String rtuAddr, HttpServletRequest req, HttpServletResponse rep){
+ ServletOutputStream out = null ;
+ try{
+ byte[] bs = this.requestMw4File(rtuAddr, mwUrlRtuLogFile) ;
+ if(bs != null && bs.length > 0){
+ String fileReName = rtuAddr + ".log" ;
+ //URLEncoder.encode鍙互闃叉涓枃涔辩爜
+ fileReName = URLEncoder.encode(fileReName, "UTF-8").replaceAll("\\+", "%20");
+ rep.addHeader("content-type", "application/octet-stream;charset=UTF-8");
+ rep.addHeader("Content-Disposition", "attachment;fileName=" + fileReName);
+ out = rep.getOutputStream() ;
+ out.write(bs, 0, (bs==null?0:bs.length));
+ out.flush();
+ }else{
+ return BaseResponseUtils.buildError("鑾峰彇鏂囦欢澶辫触") ;
+ }
+ }catch (Exception e){
+ }finally {
+ if(out != null){
+ try{
+ out.close();
+ }catch(Exception e){
+ }
+ }
+ }
+ return null ;
+ }
+
+ @GetMapping(path="logText")
+ public BaseResponse<List<String>> rtuLogText(String rtuAddr){
+ BaseResponse<List<String>> response = this.requestMw4Text(rtuAddr, mwUrlRtuLogText) ;
+ return response ;
+ }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/rtuLog/RtuLogSupport.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/rtuLog/RtuLogSupport.java
new file mode 100644
index 0000000..162347c
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/rtuLog/RtuLogSupport.java
@@ -0,0 +1,68 @@
+package com.dy.pipIrrMwTestWeb.rtuLog;
+
+import com.dy.common.webUtil.BaseResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.*;
+import org.springframework.http.HttpRequest;
+import org.springframework.web.client.RestTemplate;
+import org.springframework.web.util.UriComponentsBuilder;
+
+import java.util.List;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/8/28 14:58
+ * @Description
+ */
+public class RtuLogSupport {
+ protected static String mwUrlRtuLogFile = "http://127.0.0.1:8070/rtuMw/com/rtuLogFile" ;
+ protected static String mwUrlRtuLogText = "http://127.0.0.1:8070/rtuMw/com/rtuLogText" ;
+
+
+ @Autowired
+ private RestTemplate restTemplate;
+
+
+ /**
+ * 鍙戦�佸懡浠�
+ * @return
+ */
+ protected byte[] requestMw4File(String rtuAddr, String mwUrl) throws Exception{
+ String url = UriComponentsBuilder.fromUriString(mwUrl)
+ .build()
+ .toUriString();
+ UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url)
+ //.queryParam("paramTest", "test")
+ .queryParam("rtuAddr", rtuAddr);
+ String fullUrl = builder.toUriString();
+ byte[] bs = restTemplate.getForObject(fullUrl, byte[].class);
+ return bs ;
+ }
+
+ /**
+ * 鍙戦�佸懡浠�
+ * @return
+ */
+ protected BaseResponse<List<String>> requestMw4Text(String rtuAddr, String mwUrl){
+ String url = UriComponentsBuilder.fromUriString(mwUrl)
+ .build()
+ .toUriString();
+
+ UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url)
+ //.queryParam("paramTest", "test")
+ .queryParam("rtuAddr", rtuAddr);
+
+ String fullUrl = builder.toUriString();
+
+ HttpHeaders headers = new HttpHeaders();
+ HttpEntity<?> httpEntity = new HttpEntity<>(headers);
+ ResponseEntity<BaseResponse> response = null;
+ try {
+ // 閫氳繃Get鏂瑰紡璋冪敤鎺ュ彛
+ response = restTemplate.exchange(fullUrl, HttpMethod.GET, httpEntity, BaseResponse.class);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return response.getBody();
+ }
+}
--
Gitblit v1.8.0