From 336eb77c1a07ca3e3ead4482b51f848fa16ab3b7 Mon Sep 17 00:00:00 2001
From: xiejun <xj@2023>
Date: 星期日, 12 十一月 2023 20:15:38 +0800
Subject: [PATCH] 自定义流水相关开发

---
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/repeater/DomainRepeater.java |  156 +++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 130 insertions(+), 26 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 24e772c..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
@@ -2,24 +2,30 @@
 
 import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
 import com.alibaba.cloud.nacos.NacosServiceManager;
+import com.alibaba.fastjson.JSON;
 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.alibaba.nacos.api.naming.pojo.ServiceInfo;
+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.HttpEntity;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
+import org.springframework.http.*;
 import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.client.HttpClientErrorException;
 import org.springframework.web.client.RestTemplate;
 
@@ -61,6 +67,16 @@
 	public static final String API_CHECK_DIFFERENT_REFLEX = API_PREFIX + StringPool.SLASH + "checkDifferentAndReflex";
 
 	/**
+	 * 妫�鏌ユ暟鎹〃鏄惁鏈夋暟鎹紝娌℃湁鎸夐渶姹傚垹闄�
+	 */
+	public static final String API_CHECK_TABLE_HAS_DATA_THEN_DELETE = API_PREFIX + StringPool.SLASH + "checkTableHasDataThenDelete";
+
+	/**
+	 * 鏁版嵁琛ㄦ坊鍔犲瓧娈�
+	 */
+	public static final String API_TABLE_ADD_COLUMN = API_PREFIX + StringPool.SLASH + "addColumnForTable";
+
+	/**
 	 * 鐢ㄤ簬鏋勫缓闈欐�佹湇鍔$被
 	 */
 	public static DomainRepeater domainRepeater;
@@ -68,12 +84,81 @@
 	 * Nacos鏈嶅姟鍒楄〃
 	 */
 	private static NamingService namingService;
-
 	@Autowired
 	private NacosServiceManager manager;
 
 	@Autowired
 	private NacosDiscoveryProperties properties;
+
+
+	/**
+	 * 鎷垮彇鏈嶅姟涓殑鎵�鏈夎〃淇℃伅
+	 * @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()));
+	}
+
+	/**
+	 * 妫�鏌ユ暟鎹〃鏄惁瀛樺湪鏁版嵁锛屽鏋滀笉瀛樺湪鍒欏垹闄�
+	 * @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);
+					});
+				}
+			}
+		}
+		return R.data(result);
+	}
+
+	/**
+	 * 涓鸿〃娣诲姞瀛楁
+	 * @param addColumnDTO 娣诲姞鐨勫璞�
+	 * @param serviceName 鏈嶅姟鍚�
+	 * @return 鎵ц缁撴灉
+	 * @throws NacosException 鎵句笉鍒版湇鍔℃椂鎶涘嚭寮傚父
+	 */
+	public static R addColumnForTable(TableAddColumnDTO addColumnDTO, String serviceName) throws NacosException {
+		try {
+			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("鏈煡閿欒");
+	}
 
 	@PostConstruct
 	private void init() {
@@ -198,29 +283,48 @@
 	}
 
 	/**
+	 * 鎵ц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<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());
+	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