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