| package com.dy.pipIrrRemote.rtu; | 
|   | 
| import com.dy.common.aop.SsoAop; | 
| import com.dy.common.webUtil.BaseResponse; | 
| import com.dy.common.webUtil.BaseResponseUtils; | 
| import com.dy.pipIrrGlobal.rtuMw.Web2RtuMw; | 
| 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 extends Web2RtuMw { | 
|   | 
|     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 rqUrl = this.get2MwRequestUrl(this.env, ContextRtuLogFile) ; | 
|         ServletOutputStream out = null ; | 
|         try{ | 
|             byte[] bs = this.requestMw4File(rtuAddr, rqUrl) ; | 
|             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 rqUrl = this.get2MwRequestUrl(this.env, ContextRtuLogText) ; | 
|         //String mwUrlRtuLogText = env.getProperty(pro_mw + "." + DataSourceContext.get() + "." + key_mw_text); | 
|         BaseResponse<List<String>> text = this.requestMw4Text(rtuAddr, rqUrl); | 
|         if (text != null){ | 
|             if (text.getContent().get(0).contains("控制器")){ | 
|                 return BaseResponseUtils.buildErrorMsg(""+text.getContent().get(0)+"") ; | 
|             } | 
|             return text ; | 
|         }else { | 
|             return BaseResponseUtils.buildErrorMsg("获取日志文件为null") ; | 
|         } | 
|     } | 
|   | 
|   | 
|     /** | 
|      * 发送命令,请求下载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()); | 
|     } | 
| } |