From 3a38adf05aad83ca5b34d3037bd6380596b792e0 Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期三, 28 八月 2024 17:21:13 +0800
Subject: [PATCH] 1、通信中間件增加下控制器日志文件功能; 2、功能66解析中心IP和端口bug修改。

---
 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