From 3c3758573580e5da96ff501f111b038cb1fd8bc2 Mon Sep 17 00:00:00 2001
From: xiejun <xj@2023>
Date: 星期四, 24 八月 2023 18:49:01 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/repeater/DomainRepeater.java | 315 +++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 271 insertions(+), 44 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..86486e8 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
@@ -3,27 +3,35 @@
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.vci.ubcs.common.constant.LauncherConstant;
+import com.vci.ubcs.omd.dto.BtmAndLinkTypeDdlDTO;
+import com.vci.ubcs.omd.dto.TableAddColumnDTO;
+import com.vci.ubcs.omd.dto.TableCheckDTO;
+import com.vci.ubcs.omd.dto.TableCheckResultDTO;
+import com.vci.ubcs.omd.vo.BtmTypeVO;
+import com.vci.ubcs.omd.vo.DomainVO;
+import com.vci.ubcs.omd.vo.LinkTypeVO;
+import com.vci.ubcs.starter.web.enumpck.NewAppConstantEnum;
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.BeanUtil;
import org.springblade.core.tool.utils.StringPool;
+import org.springblade.core.tool.utils.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.*;
import org.springframework.stereotype.Component;
-import org.springframework.stereotype.Repository;
+import org.springframework.util.CollectionUtils;
+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 +39,7 @@
* @author LiHang
* @date 2023/4/25
*/
-@Repository
+@Component
public class DomainRepeater {
/**
@@ -42,62 +50,281 @@
/**
* 鏂板鎴栦慨鏀圭殑杞彂璺緞鍚嶇О
*/
- 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 final String API_CHECK_TABLE_HAS_DATA_THEN_DELETE = API_PREFIX + StringPool.SLASH + "checkTableHasDataThenDelete";
- @Component
- public static class SINGLE{
- @Autowired
- private NacosServiceManager nacosServiceManager;
+ /**
+ * 鏁版嵁琛ㄦ坊鍔犲瓧娈�
+ */
+ public static final String API_TABLE_ADD_COLUMN = API_PREFIX + StringPool.SLASH + "addColumnForTable";
- @Autowired
- private NacosDiscoveryProperties nacosDiscoveryProperties;
+ /**
+ * 鐢ㄤ簬鏋勫缓闈欐�佹湇鍔$被
+ */
+ public static DomainRepeater domainRepeater;
+ /**
+ * Nacos鏈嶅姟鍒楄〃
+ */
+ private static NamingService namingService;
+ @Autowired
+ private NacosServiceManager manager;
- private static NamingService nacosNamingService;
+ @Autowired
+ private NacosDiscoveryProperties properties;
- @PostConstruct
- public NamingService build(){
- nacosNamingService = nacosServiceManager.getNamingService(nacosDiscoveryProperties.getNacosProperties());
- return nacosNamingService;
+
+ /**
+ * 鎷垮彇鏈嶅姟涓殑鎵�鏈夎〃淇℃伅
+ * @param serviceName 鏈嶅姟鍚嶇О
+ * @return 杩斿洖缁撴灉
+ * @throws NacosException 鎵句笉鍒版湇鍔℃椂鎶涘嚭寮傚父
+ */
+ public static R getFromTable(String serviceName) throws NacosException{
+ ResponseEntity<R> responseEntity = executeGet(getUrl(serviceName, API_GET_ALL_TABLE_INFO), new HashMap<>());
+ if (responseEntity.getStatusCode().equals(HttpStatus.OK)) {
+ R body = Objects.requireNonNull(responseEntity.getBody());
+ return body;
}
+ return R.fail(String.valueOf(responseEntity.getStatusCode().value()));
}
- private RestTemplate restTemplate = new RestTemplate();
-
- public Object submitBtmType (String serviceName, OmdBtmTypeVO omdBtmTypeVO) throws NacosException {
-
- if (nacosNamingService == null){
- nacosNamingService = SINGLE.nacosNamingService;
+ /**
+ * 妫�鏌ユ暟鎹〃鏄惁瀛樺湪鏁版嵁锛屽鏋滀笉瀛樺湪鍒欏垹闄�
+ * @param checkList 闇�瑕佹鏌ョ殑琛ㄩ泦鍚�
+ * @return 妫�鏌ョ粨鏋�
+ * @throws NacosException 鎵句笉鍒版湇鍔$殑鏃跺�欎細鎶涘嚭寮傚父
+ */
+ public static R checkTableHasDataByTableNameThenDrop(List<TableCheckDTO> checkList) throws NacosException {
+ Map<String, List<TableCheckDTO>> serviceMap = checkList.stream().collect(Collectors.groupingBy(TableCheckDTO::getDomain));
+ List<TableCheckResultDTO> result = new ArrayList<>();
+ for (String key : serviceMap.keySet()) {
+ String url = getUrl(key, API_CHECK_TABLE_HAS_DATA_THEN_DELETE);
+ ResponseEntity<R> responseEntity = executePost(url, JSONObject.toJSONString(serviceMap.get(key)), new HashMap<>(16));
+ if (responseEntity.getStatusCode().equals(HttpStatus.OK)) {
+ R r = responseEntity.getBody();
+ if (r.getData() instanceof List){
+ List dataList = (List) r.getData();
+ dataList.forEach(data -> {
+ TableCheckResultDTO dto = BeanUtil.copy(JSON.parseObject(JSON.toJSONString(data)), TableCheckResultDTO.class);
+ result.add(dto);
+ });
+ }
+ }
}
- Instance service = nacosNamingService.selectOneHealthyInstance(AppConstant.APPLICATION_GATEWAY_NAME);
+ return R.data(result);
+ }
+
+ /**
+ * 涓鸿〃娣诲姞瀛楁
+ * @param addColumnDTO 娣诲姞鐨勫璞�
+ * @param serviceName 鏈嶅姟鍚�
+ * @return 鎵ц缁撴灉
+ * @throws NacosException 鎵句笉鍒版湇鍔℃椂鎶涘嚭寮傚父
+ */
+ public static R addColumnForTable(TableAddColumnDTO addColumnDTO, 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_TABLE_ADD_COLUMN);
+ ResponseEntity<R> responseEntity = executePost(url, JSONObject.toJSONString(addColumnDTO), 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;
+ @PostConstruct
+ private void init() {
+ domainRepeater = this;
+ namingService = manager.getNamingService(properties.getNacosProperties());
+ }
+
+ /**
+ * 涓�鑷存�ф鏌�
+ * @param ddlDTO 涓氬姟绫诲瀷銆侀摼鎺ョ被鍨嬩紶杈撳璞�
+ * @param serviceName 鏈嶅姟鍚�
+ * @return 鎵ц缁撴灉锛屾湁淇敼鐨勫氨浼氳繑鍥炪��
+ * @throws NacosException nacos鏌ヨ鏈嶅姟鍑洪敊鏃舵姏鍑哄紓甯�
+ */
+ public static R checkDifferent(BtmAndLinkTypeDdlDTO ddlDTO,String serviceName) throws NacosException {
+ try {
+ 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("鏈煡閿欒");
+ }
+
+ /**
+ * 鏍规嵁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);
+ }
+
+ /**
+ * 鎵цhttpGet鎺ュ彛
+ *
+ * @param url 鍦板潃
+ * @param extraHeaders 璇锋眰澶村弬鏁�
+ * @return 鎵ц缁撴灉
+ */
+ private static ResponseEntity<R> executeGet(String url,Map<String, String> extraHeaders) {
+ RestTemplate restTemplate = new RestTemplate();
+ HttpHeaders httpHeaders = new HttpHeaders();
+ httpHeaders.add("Blade-Auth", AuthUtil.getHeader());
+ HttpEntity<String> request = new HttpEntity<>(httpHeaders);
+ if (!CollectionUtils.isEmpty(extraHeaders)){
+ StringBuilder sb = new StringBuilder().append("?");
+ extraHeaders.forEach( (k,v) -> {
+ sb.append(k).append(StringPool.EQUALS).append(v).append(StringPool.AMPERSAND);
+ });
+ String str = sb.toString();
+ if (str.endsWith(StringPool.AMPERSAND)){
+ str = str.substring(0,str.length()-1);
+ }
+ url = url + str;
+ }
+ return restTemplate.exchange(url, HttpMethod.GET,request,R.class,"");
+ }
+
+ /**
+ * 鑾峰彇鎵�鏈夊凡娉ㄥ唽鐨勬湇鍔�
+ * @return 涓嶅寘鍚粯璁ゆ湇鍔$殑鍏朵粬鏈嶅姟
+ * @throws NacosException
+ */
+ public static List<DomainVO> getDomain() throws NacosException {
+ RestTemplate restTemplate = new RestTemplate();
+ String url = "http://" +LauncherConstant.NACOS_DEV_ADDR + "/nacos/v1/ns/service/list?pageNo=1&pageSize=50";
+ String forObject = restTemplate.getForObject(url, String.class);
+ JSONObject jsonObject = JSON.parseObject(forObject);
+ List<String> doms = (List<String>) jsonObject.get("doms");
+ NewAppConstantEnum[] apps = NewAppConstantEnum.values();
+ return Arrays.stream(apps).filter(app -> doms.stream().anyMatch(s -> StringUtil.equals(app.getName(), s))).map(app -> {
+ DomainVO domain = new DomainVO();
+ domain.setValue(app.getName());
+ domain.setLabel(app.getText());
+ return domain;
+ }).collect(Collectors.toList());
}
}
--
Gitblit v1.9.3