From 4faf659ac4d1287d41d1a9afab3c302356100185 Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期四, 29 八月 2024 10:11:04 +0800
Subject: [PATCH] 在pipIrr-web-remote模块中实现RTU上下行数据日志下载功能RtuLogCtrl.java, 为此在pipIrr-global模块中增加了ByteArrayHttpMessageConverter.java和ByteArrayHttpMessageConverterConfig.java pipIrr-global模块的application-global.yml文件中增加了通信中间件相关URL
---
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/ByteArrayHttpMessageConverter.java | 41 ++++++++++
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/ByteArrayHttpMessageConverterConfig.java | 4
pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/rtuLog/ByteArrayHttpMessageConverterConfig.java | 2
pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml | 4 +
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtu/RtuLogCtrl.java | 136 ++++++++++++++++++++++++++++++++++
pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/rtuLog/RtuLogSupport.java | 1
6 files changed, 184 insertions(+), 4 deletions(-)
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/ByteArrayHttpMessageConverter.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/ByteArrayHttpMessageConverter.java
new file mode 100644
index 0000000..7e7e980
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/ByteArrayHttpMessageConverter.java
@@ -0,0 +1,41 @@
+package com.dy.pipIrrGlobal.config;
+
+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 org.springframework.util.StreamUtils;
+
+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 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/ByteArrayConverterConfig.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/ByteArrayHttpMessageConverterConfig.java
similarity index 82%
copy from pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/rtuLog/ByteArrayConverterConfig.java
copy to pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/ByteArrayHttpMessageConverterConfig.java
index 4adcc2d..a5c0672 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/rtuLog/ByteArrayConverterConfig.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/ByteArrayHttpMessageConverterConfig.java
@@ -1,4 +1,4 @@
-package com.dy.pipIrrMwTestWeb.rtuLog;
+package com.dy.pipIrrGlobal.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -10,7 +10,7 @@
* @Description
*/
@Configuration
-public class ByteArrayConverterConfig {
+public class ByteArrayHttpMessageConverterConfig {
@Bean
public HttpMessageConverter<byte[]> logFileByteArrayHttpMessageConverter() {
return new ByteArrayHttpMessageConverter();
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml b/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
index 83b82ab..a1a3576 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
@@ -149,8 +149,12 @@
#鍛戒护鍙戦�佸湴鍧�(涓紑鏄満鏋則ag锛屽叾涔熸槸鏁版嵁婧愬悗缂�鍚嶇О)
ym:
comSendUrl: "http://127.0.0.1:8070/rtuMw/com/send"
+ rtuLogFileUrl: "http://127.0.0.1:8070/rtuMw/com/rtuLogFile"
+ rtuLogTextUrl: "http://127.0.0.1:8070/rtuMw/com/rtuLogText"
pj:
comSendUrl: "http://127.0.0.1:8071/rtuMw/com/send"
+ rtuLogFileUrl: "http://127.0.0.1:8071/rtuMw/com/rtuLogFile"
+ rtuLogTextUrl: "http://127.0.0.1:8071/rtuMw/com/rtuLogText"
#鐩戞祴鎺у埗妯″潡鍥炶皟鍦板潃
rtuCallbackUrl_rm: "http://127.0.0.1:8081/remote/comRes/receive"
#寰俊灏忕▼搴忓洖璋冨湴鍧�
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/ByteArrayHttpMessageConverterConfig.java
similarity index 89%
rename from pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/rtuLog/ByteArrayConverterConfig.java
rename to pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/rtuLog/ByteArrayHttpMessageConverterConfig.java
index 4adcc2d..05fc64c 100644
--- 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/ByteArrayHttpMessageConverterConfig.java
@@ -10,7 +10,7 @@
* @Description
*/
@Configuration
-public class ByteArrayConverterConfig {
+public class ByteArrayHttpMessageConverterConfig {
@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/RtuLogSupport.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/rtuLog/RtuLogSupport.java
index 162347c..2266d33 100644
--- 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
@@ -3,7 +3,6 @@
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;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtu/RtuLogCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtu/RtuLogCtrl.java
new file mode 100644
index 0000000..025eb89
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtu/RtuLogCtrl.java
@@ -0,0 +1,136 @@
+package com.dy.pipIrrRemote.rtu;
+
+import com.dy.common.aop.SsoAop;
+import com.dy.common.multiDataSource.DataSourceContext;
+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.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.client.RestTemplate;
+import org.springframework.web.util.UriComponentsBuilder;
+
+import java.net.URLEncoder;
+import java.util.List;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/8/29 9:22
+ * @Description
+ */
+
+@Slf4j
+@RestController
+@RequestMapping(path="rtuLog")
+public class RtuLogCtrl {
+
+ private static final String pro_mw = "mw";
+ private static final String key_mw_file = "rtuLogFileUrl";
+ private static final String key_mw_text = "rtuLogTextUrl";
+
+ private Environment env ;
+ private RestTemplate restTemplate;
+
+ @Autowired
+ public RtuLogCtrl(Environment env, RestTemplate restTemplate) {
+ this.env = env;
+ this.restTemplate = restTemplate;
+ }
+
+ /**
+ * 鍙戦�佸懡浠わ紝璇锋眰涓嬭浇rtu涓婁笅琛屾暟鎹棩蹇楁枃浠�
+ * @param rtuAddr rtu鍦板潃
+ * @return
+ */
+ @GetMapping(path = "file")
+ @SsoAop()
+ public BaseResponse<List<String>> rtuLogFile(String rtuAddr, HttpServletRequest req, HttpServletResponse rep){
+ String mwUrlRtuLogFile = env.getProperty(pro_mw + "." + DataSourceContext.get() + "." + key_mw_file);
+ 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 ;
+ }
+
+ /**
+ * 鍙戦�佸懡浠わ紝璇锋眰rtu涓婁笅琛屾暟鎹棩蹇楁枃浠跺唴瀹�
+ * @param rtuAddr rtu鍦板潃
+ * @return
+ */
+ @GetMapping(path="text")
+ @SsoAop()
+ public BaseResponse<List<String>> rtuLogText(String rtuAddr){
+ String mwUrlRtuLogText = env.getProperty(pro_mw + "." + DataSourceContext.get() + "." + key_mw_text);
+ return this.requestMw4Text(rtuAddr, mwUrlRtuLogText) ;
+ }
+
+
+ /**
+ * 鍙戦�佸懡浠わ紝璇锋眰涓嬭浇rtu涓婁笅琛屾暟鎹棩蹇楁枃浠�
+ * @param rtuAddr rtu鍦板潃
+ * @param mwUrl mw鏈嶅姟鍣ㄥ湴鍧�
+ * @return
+ */
+ private byte[] requestMw4File(String rtuAddr, String mwUrl) throws Exception{
+ String url = UriComponentsBuilder.fromUriString(mwUrl)
+ .build()
+ .toUriString();
+ UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url)
+ .queryParam("rtuAddr", rtuAddr);
+ return restTemplate.getForObject(builder.toUriString(), byte[].class);
+ }
+
+ /**
+ * 鍙戦�佸懡浠わ紝璇锋眰rtu涓婁笅琛屾暟鎹棩蹇楁枃浠跺唴瀹�
+ * @param rtuAddr rtu鍦板潃
+ * @param mwUrl mw鏈嶅姟鍣ㄥ湴鍧�
+ * @return
+ */
+ private BaseResponse<List<String>> requestMw4Text(String rtuAddr, String mwUrl){
+ String url = UriComponentsBuilder.fromUriString(mwUrl)
+ .build()
+ .toUriString();
+
+ UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url)
+ .queryParam("rtuAddr", rtuAddr);
+
+ ResponseEntity<BaseResponse> response = restTemplate.exchange(builder.toUriString(),
+ HttpMethod.GET,
+ new HttpEntity<>(new HttpHeaders()),
+ BaseResponse.class);
+
+ return (response==null?null:response.getBody());
+ }
+
+}
--
Gitblit v1.8.0