From 9b4433fddf5b401edb0aace8a404ac733b122702 Mon Sep 17 00:00:00 2001 From: 田源 <tianyuan@vci-tech.com> Date: 星期四, 03 四月 2025 14:35:02 +0800 Subject: [PATCH] 添加非密字段显示 --- 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