lihang
2023-04-25 3fade6d3b27f5666672bb3af610020367f790bda
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package com.vci.ubcs.omd.repeater;
 
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
import com.alibaba.cloud.nacos.NacosServiceManager;
import com.alibaba.fastjson.JSON;
import com.alibaba.nacos.api.annotation.NacosInjected;
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.OmdBtmTypeVO;
import org.apache.http.Header;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
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.stereotype.Component;
import org.springframework.stereotype.Repository;
import org.springframework.web.client.RestTemplate;
 
import javax.annotation.PostConstruct;
 
/**
 * Description: 领域转发器
 *
 * @author LiHang
 * @date 2023/4/25
 */
@Repository
public class 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";
 
    @NacosInjected
    private NamingService nacosNamingService;
 
    @Component
    public static class SINGLE{
        @Autowired
        private NacosServiceManager nacosServiceManager;
 
        @Autowired
        private NacosDiscoveryProperties nacosDiscoveryProperties;
 
        private static NamingService nacosNamingService;
 
        @PostConstruct
        public NamingService build(){
              nacosNamingService = nacosServiceManager.getNamingService(nacosDiscoveryProperties.getNacosProperties());
              return nacosNamingService;
        }
    }
 
    private RestTemplate restTemplate = new RestTemplate();
 
    public Object submitBtmType (String serviceName, OmdBtmTypeVO omdBtmTypeVO) throws NacosException {
 
        if (nacosNamingService == null){
            nacosNamingService = SINGLE.nacosNamingService;
        }
        Instance service = nacosNamingService.selectOneHealthyInstance(AppConstant.APPLICATION_GATEWAY_NAME);
        try {
            String url = "http://" + service.getIp() +StringPool.COLON+ service.getPort() + StringPool.SLASH + serviceName + StringPool.SLASH + API_SUBMIT_BTM_TYPE;
            HttpPost httpPost = buildPost(url);
            httpPost.setEntity(new StringEntity(JSON.toJSONString(omdBtmTypeVO),"utf-8"));
            CloseableHttpClient httpClient = HttpClientBuilder.create().build();
            CloseableHttpResponse response = httpClient.execute(httpPost);
            return response;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
 
    private HttpPost buildPost(String url){
        HttpPost httpPost = new HttpPost(url);
        httpPost.setHeader("Content-Type","application/json;charset=UTF-8");
        httpPost.setHeader("Blade-Auth", AuthUtil.getHeader());
        return httpPost;
    }
}