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()); 
 | 
    } 
 | 
} 
 |