| | |
| | | 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; |
| | |
| | | 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; |
| | | |
| | | |
| | | /** |
| | |
| | | return BaseResponseUtils.buildSuccess("ok"); |
| | | } |
| | | |
| | | /** |
| | | * 下载控制器(RTU)上下行数据的log日志文件 |
| | | * @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()){ |
| | | //在Spring Boot中,application/octet-stream;charset=UTF-8通常表示响应的内容是字节流, |
| | | //并且字符集是UTF-8。对于这种类型的响应,Spring Boot默认使用ByteArrayHttpMessageConverter来处理, |
| | | //因为它可以处理所有application/octet-stream类型的响应。 |
| | | //然而,ByteArrayHttpMessageConverter并不直接处理字符集(charset)。 |
| | | //字符集通常用于文本内容,而application/octet-stream通常用于二进制内容,因此在这种情况下指定字符集可能是不合适的。 |
| | | //不过,如果你确实需要处理带有特定字符集的application/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)上下行数据的log日志文件 |
| | | * @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()) ; |