package com.dy.pipIrrGlobal.rtuMw; import com.dy.common.multiDataSource.DataSourceContext; import com.dy.common.mw.protocol.Command; import com.dy.common.mw.protocol.CommandType; import com.dy.common.webUtil.BaseResponse; import com.dy.common.webUtil.BaseResponseUtils; 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.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; /** * @Author: liurunyu * @Date: 2024/10/23 11:45 * @Description */ public abstract class Web2RtuMw { /** * pro_mw:属性 * tag从控制器中获取 * key_mw:url的key */ private static final String pro_mw = "mw"; private static final String pro_url = "url"; protected static final String ContextComSend = "/rtuMw/com/send"; protected static final String ContextRtuLogFile = "/rtuMw/com/rtuLogFile"; protected static final String ContextRtuLogText = "/rtuMw/com/rtuLogText"; protected static final String ContextUgTaskSend = "/rtuMw/com/upgradeRtu"; protected static final String ContextUgForceOver = "/rtuMw/com/ugForceOver"; /** * 得到向通信中间件发送数据的URL * @param env * @return */ protected String get2MwUrl(Environment env) { return env.getProperty(pro_mw + "." + DataSourceContext.get() + "." + pro_url); } /** * 得到向通信中间件发送强制停止升级的命令URL * @param env * @return */ protected String get2MwRequestUrl(Environment env, String context) { return get2MwUrl(env) + context; } /** * 向通信中间件发送rtu远程升级任务 * @param restTemplate SpringBoot的RestTemplate * @param toMwUrl 到通信中间件的web请求Url * @param body 请求数据 * @return */ protected BaseResponse sendPostRequest2Mw(RestTemplate restTemplate, String toMwUrl, Object body) { String url = UriComponentsBuilder.fromUriString(toMwUrl) .build() .toUriString(); HttpHeaders headers = new HttpHeaders(); HttpEntity httpEntity = new HttpEntity<>(body, headers); ResponseEntity response = null; try { // 通过Post方式调用接口 response = restTemplate.exchange(url, HttpMethod.POST, httpEntity, BaseResponse.class); } catch (Exception e) { e.printStackTrace(); return BaseResponseUtils.buildError("后端系统出错,中间件调用异常"); } if(response == null){ return BaseResponseUtils.buildError("后端系统出错,中间件调用异常"); }else{ return response.getBody(); } } /** * 向通信中间件发送rtu远程升级任务 * @param restTemplate SpringBoot的RestTemplate * @param toMwUrl 到通信中间件的web请求Url * @return */ protected BaseResponse sendGetRequest2Mw(RestTemplate restTemplate, String toMwUrl) { String url = UriComponentsBuilder.fromUriString(toMwUrl) .build() .toUriString(); //UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url) // .queryParam("test", test); UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url) ; ResponseEntity response = null; try { // 通过Get方式调用接口 response = restTemplate.exchange(builder.toUriString(), HttpMethod.GET, new HttpEntity<>(new HttpHeaders()), BaseResponse.class); } catch (Exception e) { e.printStackTrace(); return BaseResponseUtils.buildError("后端系统出错,中间件调用异常"); } if(response == null){ return BaseResponseUtils.buildError("后端系统出错,中间件调用异常"); }else{ return response.getBody(); } } /** * 创建外部命令(发给控制器) * @param code 命令code * @return */ protected Command createOuterCommand(String comId, String code) { Command com = new Command(); com.id = comId; com.code = code ; com.type = CommandType.outerCommand; return com ; } /** * 创建内部 * @param code 命令code * @return */ protected Command createInnerCommand(String code) { Command com = new Command(); com.id = Command.defaultId; com.code = code ; com.type = CommandType.innerCommand; return com ; } }