package com.vci.ubcs.omd.repeater; import com.alibaba.cloud.nacos.NacosDiscoveryProperties; import com.alibaba.cloud.nacos.NacosServiceManager; import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.api.exception.NacosException; import com.alibaba.nacos.api.naming.NamingService; import com.alibaba.nacos.api.naming.pojo.Instance; import com.vci.ubcs.omd.vo.BtmTypeVO; import org.springblade.core.launch.constant.AppConstant; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.StringPool; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.client.RestTemplate; import javax.annotation.PostConstruct; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Optional; /** * Description: 领域转发器 * * @author LiHang * @date 2023/4/25 */ public class DomainRepeater { private DomainRepeater() { } /** * 控制器路径 */ public static final String API_PREFIX = "ddl"; /** * 新增或修改的转发路径名称 */ public static final String API_SUBMIT_BTM_TYPE = API_PREFIX + StringPool.SLASH +"submitBtmType"; /** * 表名获取表信息 */ public static final String API_GET_TABLE_INFO = API_PREFIX + StringPool.SLASH +"getTableColumnByTableName"; /** * 获取全部表信息 */ public static final String API_GET_ALL_TABLE_INFO = API_PREFIX + StringPool.SLASH +"getAllTableInfo"; /** * Nacos服务列表 */ private static NamingService namingService = SINGLE.build(); private static class SINGLE { @Autowired private NacosServiceManager manager; private static NacosServiceManager nacosServiceManager; @Autowired private NacosDiscoveryProperties properties; private static NacosDiscoveryProperties nacosDiscoveryProperties; @PostConstruct private void init(){ nacosServiceManager = manager; nacosDiscoveryProperties = properties; } private static NamingService build(){ return nacosServiceManager.getNamingService(nacosDiscoveryProperties.getNacosProperties()); } } public static R submitBtmType (String serviceName, BtmTypeVO btmTypeVO) throws NacosException { Instance service = namingService.selectOneHealthyInstance(AppConstant.APPLICATION_GATEWAY_NAME); try { String url = "http://" + service.getIp() +StringPool.COLON+ service.getPort() + StringPool.SLASH + serviceName + StringPool.SLASH + API_SUBMIT_BTM_TYPE; ResponseEntity responseEntity = executePost(url, JSONObject.toJSONString(btmTypeVO), null); if (responseEntity.getStatusCode().equals(HttpStatus.OK)){ return responseEntity.getBody(); } return R.fail(String.valueOf(responseEntity.getStatusCode().value())); } catch (Exception e) { throw new RuntimeException(e); } } private static ResponseEntity executePost(String url, String body,Map extraHeaders) throws IOException { RestTemplate restTemplate = new RestTemplate(); HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.add("Content-Type","application/json;charset=UTF-8"); httpHeaders.add("Blade-Auth", AuthUtil.getHeader()); Optional.ofNullable(extraHeaders).orElseGet(HashMap::new).forEach(httpHeaders::add); HttpEntity request = new HttpEntity<>(body,httpHeaders); return restTemplate.postForEntity(url, request, R.class); } }