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 | 190 +++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 156 insertions(+), 34 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 2ee2237..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 @@ -6,7 +6,10 @@ import com.alibaba.nacos.api.exception.NacosException; import com.alibaba.nacos.api.naming.NamingService; import com.alibaba.nacos.api.naming.pojo.Instance; +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; @@ -16,13 +19,13 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Component; +import org.springframework.web.client.HttpClientErrorException; 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; +import java.util.*; +import java.util.stream.Collectors; /** * Description: 棰嗗煙杞彂鍣� @@ -30,9 +33,8 @@ * @author LiHang * @date 2023/4/25 */ +@Component public class DomainRepeater { - private DomainRepeater() { - } /** * 鎺у埗鍣ㄨ矾寰� @@ -42,63 +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"; + /** + * 鐢ㄤ簬鏋勫缓闈欐�佹湇鍔$被 + */ + public static DomainRepeater domainRepeater; /** * Nacos鏈嶅姟鍒楄〃 */ - private static NamingService namingService = SINGLE.build(); + private static NamingService namingService; - private static class SINGLE { - @Autowired - private NacosServiceManager manager; - private static NacosServiceManager nacosServiceManager; + @Autowired + private NacosServiceManager manager; - @Autowired - private NacosDiscoveryProperties properties; - private static NacosDiscoveryProperties nacosDiscoveryProperties; + @Autowired + private NacosDiscoveryProperties properties; - @PostConstruct - private void init(){ - nacosServiceManager = manager; - nacosDiscoveryProperties = properties; - } - private static NamingService build(){ - return nacosServiceManager.getNamingService(nacosDiscoveryProperties.getNacosProperties()); - } + @PostConstruct + private void init() { + domainRepeater = this; + namingService = manager.getNamingService(properties.getNacosProperties()); } - public static R submitBtmType (String serviceName, BtmTypeVO btmTypeVO) throws NacosException { - Instance service = namingService.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; - ResponseEntity<R> responseEntity = executePost(url, JSONObject.toJSONString(btmTypeVO), null); - if (responseEntity.getStatusCode().equals(HttpStatus.OK)){ - return responseEntity.getBody(); + 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 static ResponseEntity<R> executePost(String url, String body,Map<String,String> extraHeaders) throws IOException { + /** + * 鏍规嵁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("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); + 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