From 3579af2945dd38d841a23cd340acd474bb63773a Mon Sep 17 00:00:00 2001 From: lihang <lihang@vci-tech.com> Date: 星期四, 04 五月 2023 18:02:01 +0800 Subject: [PATCH] 业务类型与DDL服务相关的添加 --- Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/repeater/DomainRepeater.java | 219 ++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 171 insertions(+), 48 deletions(-) diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/repeater/DomainRepeater.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/repeater/DomainRepeater.java index 740d7bd..24e772c 100644 --- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/repeater/DomainRepeater.java +++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/repeater/DomainRepeater.java @@ -2,28 +2,30 @@ 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.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.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 com.alibaba.nacos.api.naming.pojo.ServiceInfo; +import com.vci.ubcs.omd.dto.BtmAndLinkTypeDdlDTO; +import com.vci.ubcs.omd.vo.BtmTypeVO; +import com.vci.ubcs.omd.vo.LinkTypeVO; 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.stereotype.Component; -import org.springframework.stereotype.Repository; +import org.springframework.web.client.HttpClientErrorException; import org.springframework.web.client.RestTemplate; import javax.annotation.PostConstruct; +import java.util.*; +import java.util.stream.Collectors; /** * Description: 棰嗗煙杞彂鍣� @@ -31,7 +33,7 @@ * @author LiHang * @date 2023/4/25 */ -@Repository +@Component public class DomainRepeater { /** @@ -42,62 +44,183 @@ /** * 鏂板鎴栦慨鏀圭殑杞彂璺緞鍚嶇О */ - public static final String API_SUBMIT_BTM_TYPE = API_PREFIX + StringPool.SLASH +"submitBtmType"; + public static final String API_SUBMIT = API_PREFIX + StringPool.SLASH + "submit"; /** * 琛ㄥ悕鑾峰彇琛ㄤ俊鎭� */ - public static final String API_GET_TABLE_INFO = API_PREFIX + StringPool.SLASH +"getTableColumnByTableName"; + 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"; + public static final String API_GET_ALL_TABLE_INFO = API_PREFIX + StringPool.SLASH + "getAllTableInfo"; + /** + * 鑾峰彇鏁版嵁搴撳拰涓氬姟绫诲瀷涓殑涓嶅悓鐨勫湴鏂� + */ + public static final String API_CHECK_DIFFERENT_REFLEX = API_PREFIX + StringPool.SLASH + "checkDifferentAndReflex"; - @NacosInjected - private NamingService nacosNamingService; + /** + * 鐢ㄤ簬鏋勫缓闈欐�佹湇鍔$被 + */ + public static DomainRepeater domainRepeater; + /** + * Nacos鏈嶅姟鍒楄〃 + */ + private static NamingService namingService; - @Component - public static class SINGLE{ - @Autowired - private NacosServiceManager nacosServiceManager; + @Autowired + private NacosServiceManager manager; - @Autowired - private NacosDiscoveryProperties nacosDiscoveryProperties; + @Autowired + private NacosDiscoveryProperties properties; - private static NamingService nacosNamingService; - - @PostConstruct - public NamingService build(){ - nacosNamingService = nacosServiceManager.getNamingService(nacosDiscoveryProperties.getNacosProperties()); - return nacosNamingService; - } + @PostConstruct + private void init() { + domainRepeater = this; + namingService = manager.getNamingService(properties.getNacosProperties()); } - 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); + /** + * 涓�鑷存�ф鏌� + * @param ddlDTO 涓氬姟绫诲瀷銆侀摼鎺ョ被鍨嬩紶杈撳璞� + * @param serviceName 鏈嶅姟鍚� + * @return 鎵ц缁撴灉锛屾湁淇敼鐨勫氨浼氳繑鍥炪�� + * @throws NacosException nacos鏌ヨ鏈嶅姟鍑洪敊鏃舵姏鍑哄紓甯� + */ + public static R checkDifferent(BtmAndLinkTypeDdlDTO ddlDTO,String serviceName) throws NacosException { 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; + String url = getUrl(serviceName, API_CHECK_DIFFERENT_REFLEX); + ResponseEntity<R> responseEntity = executePost(url, JSONObject.toJSONString(ddlDTO), null); + if (responseEntity.getStatusCode().equals(HttpStatus.OK)) { + R body = Objects.requireNonNull(responseEntity.getBody()); + return body; + } + return R.fail(String.valueOf(responseEntity.getStatusCode().value())); + }catch (HttpClientErrorException e) { + if (HttpStatus.NOT_FOUND.equals(e.getStatusCode())) { + R fail = R.fail("璋冪敤鏈嶅姟澶辫触"); + fail.setCode(HttpStatus.NOT_FOUND.value()); + return fail; + } } catch (Exception e) { throw new RuntimeException(e); } + return R.fail("鏈煡閿欒"); } - 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; + /** + * 鏍规嵁api鎺ュ彛鎷兼帴url鍦板潃 + * @param serviceName 鏈嶅姟鍚� + * @param api 鎺ュ彛鍦板潃 + * @return url鍦板潃 + * @throws NacosException nacos鏌ヨ鏈嶅姟鍑洪敊鏃舵姏鍑哄紓甯� + */ + + public static String getUrl(String serviceName,String api) throws NacosException { + Instance service = namingService.selectOneHealthyInstance(AppConstant.APPLICATION_GATEWAY_NAME); + return "http://" + service.getIp() + StringPool.COLON + service.getPort() + StringPool.SLASH + serviceName + StringPool.SLASH + api; + } + + + /** + * 鏂板鎴栦慨鏀逛笟鍔$被鍨� + * @param vo 涓氬姟绫诲瀷浼犺緭瀵硅薄 + * @param serviceName 鏈嶅姟鍚� + * @return 鎵ц缁撴灉锛屾湁淇敼鐨勫氨浼氳繑鍥炪�� + */ + public static R submitBtmType(String serviceName, BtmTypeVO vo) { + try { + String url = getUrl(serviceName, API_SUBMIT); + BtmAndLinkTypeDdlDTO ddlDTO = new BtmAndLinkTypeDdlDTO(); + ddlDTO.setBtmTypeList(new ArrayList<>(Collections.singletonList(vo))); + ResponseEntity<R> responseEntity = executePost(url, JSONObject.toJSONString(ddlDTO), null); + if (responseEntity.getStatusCode().equals(HttpStatus.OK)) { + return responseEntity.getBody(); + } + return R.fail(String.valueOf(responseEntity.getStatusCode().value())); + } catch (HttpClientErrorException e) { + if (HttpStatus.NOT_FOUND.equals(e.getStatusCode())) { + R fail = R.fail("璋冪敤鏈嶅姟澶辫触"); + fail.setCode(HttpStatus.NOT_FOUND.value()); + return fail; + } + } catch (Exception e) { + throw new RuntimeException(e); + } + return R.fail("鏈煡閿欒"); + } + + /** + * 鏂板鎴栦慨鏀归摼鎺ョ被鍨� + * @param vo 涓氬姟绫诲瀷浼犺緭瀵硅薄 + * @param serviceName 鏈嶅姟鍚� + * @return 鎵ц缁撴灉锛屾湁淇敼鐨勫氨浼氳繑鍥炪�� + */ + public static R submitLinkType(String serviceName, LinkTypeVO vo) { + try { + String url = getUrl(serviceName, API_SUBMIT); + BtmAndLinkTypeDdlDTO ddlDTO = new BtmAndLinkTypeDdlDTO(); + ddlDTO.setLinkTypeList(new ArrayList<>(Collections.singletonList(vo))); + ResponseEntity<R> responseEntity = executePost(url, JSONObject.toJSONString(ddlDTO), null); + if (responseEntity.getStatusCode().equals(HttpStatus.OK)) { + return responseEntity.getBody(); + } + return R.fail(String.valueOf(responseEntity.getStatusCode().value())); + } catch (HttpClientErrorException e) { + if (HttpStatus.NOT_FOUND.equals(e.getStatusCode())) { + R fail = R.fail("璋冪敤鏈嶅姟澶辫触"); + fail.setCode(HttpStatus.NOT_FOUND.value()); + return fail; + } + } catch (Exception e) { + throw new RuntimeException(e); + } + return R.fail("鏈煡閿欒"); + } + + /** + * 鎵цhttpPost鎺ュ彛 + * + * @param url 鍦板潃 + * @param body 璇锋眰浣� + * @param extraHeaders 璇锋眰澶村弬鏁� + * @return 鎵ц缁撴灉 + */ + private static ResponseEntity<R> executePost(String url, String body, Map<String, String> extraHeaders) { + 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); + } + + /** + * 鑾峰彇鎵�鏈夊凡娉ㄥ唽鐨勬湇鍔� + * @return 涓嶅寘鍚粯璁ゆ湇鍔$殑鍏朵粬鏈嶅姟 + * @throws NacosException + */ + public static List<String> getDomain() throws NacosException { + List<ServiceInfo> services = namingService.getSubscribeServices(); + Set<String> serviceNames = new HashSet<>(); + serviceNames.add(AppConstant.APPLICATION_GATEWAY_NAME); + serviceNames.add(AppConstant.APPLICATION_ADMIN_NAME); + serviceNames.add(AppConstant.APPLICATION_AUTH_NAME); + serviceNames.add(AppConstant.APPLICATION_DESK_NAME); + serviceNames.add(AppConstant.APPLICATION_DEVELOP_NAME); + serviceNames.add(AppConstant.APPLICATION_FLOW_NAME); + serviceNames.add(AppConstant.APPLICATION_FLOWDESIGN_NAME); + serviceNames.add(AppConstant.APPLICATION_LOG_NAME); + serviceNames.add(AppConstant.APPLICATION_REPORT_NAME); + serviceNames.add(AppConstant.APPLICATION_SWAGGER_NAME); + serviceNames.add(AppConstant.APPLICATION_SYSTEM_NAME); + serviceNames.add(AppConstant.APPLICATION_TURBINE_NAME); + serviceNames.add(AppConstant.APPLICATION_USER_NAME); + serviceNames.add(AppConstant.APPLICATION_WEBSOCKET_NAME); + serviceNames.add(AppConstant.APPLICATION_ZIPKIN_NAME); + serviceNames.add(AppConstant.APPLICATION_NAME_OMD); + return services.stream().map(ServiceInfo::getName).filter(s -> !serviceNames.contains(s)).collect(Collectors.toList()); } } -- Gitblit v1.9.3