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