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<R> 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<R> executePost(String url, String body,Map<String,String> 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<String> request = new HttpEntity<>(body,httpHeaders);
|
return restTemplate.postForEntity(url, request, R.class);
|
}
|
}
|