From 02b3d584d201ca7cb8a024fd151fe6eddbf43def Mon Sep 17 00:00:00 2001
From: 田源 <lastanimals@163.com>
Date: 星期五, 01 三月 2024 16:31:10 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java |  110 +++++++++++++------------------------------------------
 1 files changed, 26 insertions(+), 84 deletions(-)

diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
index b967ab5..6f42765 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
@@ -165,6 +165,9 @@
 	@Autowired
 	private ICodeKeyAttrRepeatService keyRuleService;
 
+	/**
+	 * 杩戜箟璇嶈鍒欐煡璇㈡湇鍔�
+	 */
 	@Autowired ICodeSynonymService codeSynonymService;
 
 	/**
@@ -3095,18 +3098,27 @@
 		//娉ㄦ剰鐨勬槸keyRuleVO鍙兘涓虹┖锛岃〃绀轰笉浣跨敤瑙勫垯鎺у埗
 		//鑾峰彇鎵�鏈夌殑鍏抽敭灞炴��
 		Map<String, CodeClassifyTemplateAttrVO> ketAttrMap = templateVO.getAttributes().stream().filter(s -> VciBaseUtil.getBoolean(s.getKeyAttrFlag())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+		// TODO:2024-02-01 鍏堣幏鍙栭厤缃簡杩戜箟璇嶆煡璇㈣鍒欑殑灞炴�э紝涓嶅悓浜庡叧閿睘鎬э紝璁剧疆浜嗚繎涔夎瘝鏌ヨ瑙勫垯鐨勫睘鎬у彲鑳芥槸澶氭潯涓嶅悓鐨勮繎涔夎瘝鏌ヨ瑙勫垯
+		Map<String, CodeClassifyTemplateAttrVO> sysonymAttrMaps = templateVO.getAttributes().stream().filter(item -> Func.isNotBlank(item.getSysonymRuleOids())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+		// 鑾峰彇鏄惁鏈夐厤缃繎涔夎瘝鏌ヨ瑙勫垯灞炴��
+		Map<String, List<CodeSynonym>> codeSynonymMaps = new HashMap<>();
+		if(!sysonymAttrMaps.isEmpty()){
+			// 鏌ヨ杩戜箟璇嶈鍒欙紝瀛樺偍鏂瑰紡key锛氬睘鎬d锛寁alue杩戜箟璇嶆煡璇㈣鍒欏垪琛�
+			codeSynonymMaps = codeSynonymService.getCodeSynonymByOids(sysonymAttrMaps);
+		}
 		Map<String, String> conditionMap = new HashMap<>();
 		boolean trimAll = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnoreallspaceflag());
 		//鍏ㄩ儴鍘荤┖鐨勪紭鍏堢骇澶т簬鍘荤┖
 		boolean trim = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorespaceflag());
 		boolean ignoreCase = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorecaseflag());
 		boolean ignoreWidth = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorewidthflag());
+		Map<String, List<CodeSynonym>> finalCodeSynonymMaps = codeSynonymMaps;
 		ketAttrMap.forEach((attrId, attrVO) -> {
 			String value = getValueFromOrderDTO(orderDTO, attrId);
 			if (value == null) {
 				value = "";
 			}
-			engineService.wrapperKeyAttrConditionMap(value, keyRuleVO, attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap);
+			engineService.wrapperKeyAttrConditionMap(value, keyRuleVO, finalCodeSynonymMaps.get(attrId), attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap);
 		});
 
 		//娌℃湁闄愬埗鍒嗙被锛屼絾鏄竴涓ā鏉垮彧鍙兘鍦ㄤ竴涓笟鍔$被鍨嬮噷闈紝鎵�浠ョ洿鎺ユ煡璇㈣繖涓笟鍔$被鍨嬪嵆鍙�
@@ -4398,7 +4410,7 @@
 
 		// TODO:2024-02-01 鍏堣幏鍙栭厤缃簡杩戜箟璇嶆煡璇㈣鍒欑殑灞炴�э紝涓嶅悓浜庡叧閿睘鎬э紝璁剧疆浜嗚繎涔夎瘝鏌ヨ瑙勫垯鐨勫睘鎬у彲鑳芥槸澶氭潯涓嶅悓鐨勮繎涔夎瘝鏌ヨ瑙勫垯
 		Map<String, CodeClassifyTemplateAttrVO> sysonymAttrMaps = templateVO.getAttributes().stream().filter(item -> Func.isNotBlank(item.getSysonymRuleOids())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
-		// 鏈夐厤缃繎涔夎瘝鏌ヨ瑙勫垯灞炴��
+		// 鑾峰彇鏄惁鏈夐厤缃繎涔夎瘝鏌ヨ瑙勫垯灞炴��
 		Map<String, List<CodeSynonym>> codeSynonymMaps = new HashMap<>();
 		if(!sysonymAttrMaps.isEmpty()){
 			// 鏌ヨ杩戜箟璇嶈鍒欙紝瀛樺偍鏂瑰紡key锛氬睘鎬d锛寁alue杩戜箟璇嶆煡璇㈣鍒欏垪琛�
@@ -4417,8 +4429,8 @@
 			new String[]{trim?"鏄�":"鍚�",ignoreCase?"鏄�":"鍚�",ignoreWidth?"鏄�":"鍚�",trimAll?"鏄�":"鍚�"}));
 		//resultVO.setSelfRepeatRowIndexList(getSelfRepeatRowIndex(keyAttrMap,cboList,keyRuleVO));
 
-		// 鍏堝湪琛ㄦ牸涓煡璇㈠叧閿睘鎬ч噸澶嶇殑鍒�
-		getSelfRepeatRowIndex(keyAttrMap,cboList,keyRuleVO,resultVO);
+		// 鍏堝湪琛ㄦ牸涓煡璇㈠叧閿睘鎬у拰杩戜箟璇嶈浆鎹㈠悗閲嶅鐨勫垪
+		getSelfRepeatRowIndex(keyAttrMap,cboList,keyRuleVO,codeSynonymMaps,resultVO);
 		// 鍐嶅湪琛ㄦ牸涓煡璇㈣繎涔夎瘝鏌ヨ瑙勫垯鐨勫垪
 		//getSelfRepeatSysnomRowIndex(sysonymAttrMaps,cboList,codeSynonymMaps,resultVO);
 
@@ -4435,6 +4447,7 @@
 		//  ,鎵�浠ユ殏鏃跺皢parallelStream鏀规垚浜唖tream锛屾敼鎴愪簡stream涔嬪悗鍙戠幇宸ㄦ參
 		// customForkJoinPool鎺у埗骞跺彂搴�
 		List<ClientBusinessObject> finalCboList = cboList;
+		Map<String, List<CodeSynonym>> finalCodeSynonymMaps = codeSynonymMaps;
 		List<ClientBusinessObject> repeatDataMap = (List<ClientBusinessObject>) customForkJoinPool.submit(()->{
 			finalCboList.parallelStream().filter(cbo -> {
 				//姣忚閮藉緱鏌ヨ.濡傛灉鍏朵腑鍑虹幇浜嗛敊璇紝鎴戜滑灏辩洿鎺ユ姏鍑哄紓甯革紝鍏朵綑鐨勬樉绀�
@@ -4447,9 +4460,7 @@
 					}
 					value= value.replace(REQUIRED_CHAR,SPECIAL_CHAR);
 					// 鍏抽敭灞炴�ф煡璇㈡潯浠秏ap鑾峰彇
-					engineService.wrapperKeyAttrConditionMap(value, keyRuleVO, attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap);
-					// 杩戜箟璇嶆煡璇㈣鍒欐潯浠秏ap鑾峰彇
-					//engineService.wrapperSynonymAttrConditionMap(value);
+					engineService.wrapperKeyAttrConditionMap(value, keyRuleVO, finalCodeSynonymMaps.get(attrId), attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap);
 				});
 
 				if (!CollectionUtils.isEmpty(keyAttrMap)) {
@@ -4603,14 +4614,14 @@
 	}
 
 	/**
-	 * 鑾峰彇瀵煎叆鐨勫唴瀹逛腑鍏抽敭灞炴�ч噸澶嶇殑琛屽彿
+	 * 鑾峰彇瀵煎叆鐨勫唴瀹逛腑鍏抽敭灞炴�ц繎涔夎瘝杞崲鍚庨噸澶嶇殑琛屽彿
 	 * @param ketAttrMap 鍏抽敭灞炴�х殑鏄犲皠
 	 * @param dataList 瀵煎叆鐨勬暟鎹�
 	 * @param keyRuleVO 鍏抽敭灞炴�ф帶鍒惰鍒�
 	 * @return 閲嶅鐨勮鍙�
 	 */
 	private void getSelfRepeatRowIndex(Map<String/**灞炴�х殑缂栧彿**/, CodeClassifyTemplateAttrVO> ketAttrMap,
-									   List<ClientBusinessObject> dataList,CodeKeyAttrRepeatVO keyRuleVO,CodeImportResultVO resultVO){
+									   List<ClientBusinessObject> dataList,CodeKeyAttrRepeatVO keyRuleVO,/*杩戜箟璇嶆煡璇㈣鍒�*/Map<String,List<CodeSynonym>> codeSynonymMaps, CodeImportResultVO resultVO){
 		Set<String> selfRepeatRowIndexList = new CopyOnWriteArraySet<>();
 		Map<String,List<String>> keyAttrOkOidTORepeatOidMap=new HashMap<>();
 		boolean trimAll =keyRuleVO ==null?false: VciBaseUtil.getBoolean(keyRuleVO.getIgnoreallspaceflag());
@@ -4626,10 +4637,10 @@
 			String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
 			String oid=cbo.getOid();
 			StringBuilder sb = new StringBuilder();
-			// 鍏抽敭灞炴�ч噸澶嶆牎楠屽�煎鐞�
-			for (int i = 0; i < attrVOList.size(); i++) {
-				CodeClassifyTemplateAttrVO attrVO = attrVOList.get(i);
-				String attrId = attrVO.getId().toLowerCase(Locale.ROOT);
+
+			// TODO锛� 2024-02-25鏀归�犲疄鐜拌繎涔夎瘝鏌ヨ瑙勫垯鍔熻兘锛涘叧閿睘鎬ч噸澶嶆牎楠屽�煎鐞�
+			attrVOList.stream().forEach(item->{
+				String attrId = item.getId().toLowerCase(Locale.ROOT);
 				String value = cbo.getAttributeValue( attrId);
 				if (value == null) {
 					value = "";
@@ -4646,61 +4657,9 @@
 				if(ignoreWidth){
 					value = VciBaseUtil.toDBC(value);
 				}
+				value = mdmEngineService.getValueToSynony(codeSynonymMaps.get(attrId),value);
 				sb.append(value).append("${ks}");
-			}
-			String keyString = sb.toString();
-			if(rowIndexKeyStringMap.containsValue(keyString) && StringUtils.isNotBlank(keyString)){
-				selfRepeatRowIndexList.add(rowIndex);
-				String okOid=okOidKeyStringMap.getOrDefault(keyString,"");
-				if(StringUtils.isNotBlank(okOid)){
-					List<String>newOidList=new ArrayList<>();
-					newOidList.add(oid);
-					if(keyAttrOkOidTORepeatOidMap.containsKey(okOid)){
-						List<String> oldOidList = keyAttrOkOidTORepeatOidMap.get(okOid);
-						newOidList.addAll(oldOidList);
-
-					}
-					keyAttrOkOidTORepeatOidMap.put(okOid,newOidList);
-				}
-			}else {
-				okOidKeyStringMap.put(sb.toString(),oid);
-				rowIndexKeyStringMap.put(rowIndex, sb.toString());
-			}
-		});
-		//鍥犱负鍙槸鍏抽敭灞炴�ч噸澶嶏紝鎵�浠ユ垜浠笉鑳介噸澶嶇殑澶氭潯閫変竴鏉℃潵鎶ラ敊
-		resultVO.setKeyAttrRepeatRowIndexList(selfRepeatRowIndexList);
-		resultVO.setKeyAttrOkOidTORepeatOidMap(keyAttrOkOidTORepeatOidMap);
-	}
-
-	/**
-	 * 鑾峰彇杩戜箟璇嶆煡璇㈠瓨鍦ㄧ浉鍚岀殑琛屽彿
-	 * @param sysonymAttr
-	 * @param dataList
-	 * @param CodeSynonymMaps
-	 * @param resultVO
-	 */
-	private void getSelfRepeatSysnomRowIndex(Map<String/**灞炴�х殑缂栧彿**/, CodeClassifyTemplateAttrVO> sysonymAttr,
-											 List<ClientBusinessObject> dataList, Map<String, List<CodeSynonym>> CodeSynonymMaps,CodeImportResultVO resultVO) {
-		Set<String> selfRepeatRowIndexList = new CopyOnWriteArraySet<>();
-		Map<String,List<String>> keyAttrOkOidTORepeatOidMap=new HashMap<>();
-		//蹇呴』灏嗗睘鎬ф寜鐓ч『搴忔帓搴忓ソ
-		List<CodeClassifyTemplateAttrVO> attrVOList = sysonymAttr.values().stream().sorted(((o1, o2) -> o1.getOrderNum().compareTo(o2.getOrderNum()))).collect(Collectors.toList());
-		Map<String/**琛屽彿**/,String/**鍏抽敭灞炴�х殑缁勫悎鍐呭**/> rowIndexKeyStringMap = new HashMap<>();
-		Map<String/**鍏抽敭灞炴�х殑缁勫悎鍐呭**/,String/**绗竴涓叧閿睘鎬х殑鏁版嵁oid**/> okOidKeyStringMap = new HashMap<>();
-		dataList.parallelStream().forEach(cbo-> {
-			String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
-			String oid = cbo.getOid();
-			StringBuilder sb = new StringBuilder();
-			for (int i = 0; i < attrVOList.size(); i++) {
-				CodeClassifyTemplateAttrVO attrVO = attrVOList.get(i);
-				String attrId = attrVO.getId().toLowerCase(Locale.ROOT);
-				String value = cbo.getAttributeValue(attrId);
-				List<CodeSynonym> codeSynonyms = CodeSynonymMaps.get(attrId);
-				// 瀵硅繎涔夎瘝鏌ヨ鍊艰繘琛岃浆鎹�
-				value = synonymConversion(codeSynonyms,value);
-				// 濡傛灉codeSynonyms鏄涓氨闇�瑕佽�冭檻缁勫悎闂
-				sb.append(value).append("${sys}");
-			}
+			});
 			String keyString = sb.toString();
 			if(rowIndexKeyStringMap.containsValue(keyString) && StringUtils.isNotBlank(keyString)){
 				selfRepeatRowIndexList.add(rowIndex);
@@ -4722,23 +4681,6 @@
 		//鍥犱负鍙槸鍏抽敭灞炴�ч噸澶嶏紝鎵�浠ユ垜浠笉鑳介噸澶嶇殑澶氭潯閫変竴鏉℃潵鎶ラ敊
 		resultVO.setKeyAttrRepeatRowIndexList(selfRepeatRowIndexList);
 		resultVO.setKeyAttrOkOidTORepeatOidMap(keyAttrOkOidTORepeatOidMap);
-	}
-
-	/**
-	 * 杩戜箟璇嶄笌婧愬�肩浉浜掕浆鎹�
-	 * @param codeSynonyms
-	 * @param value
-	 * @return
-	 */
-	private String synonymConversion(List<CodeSynonym> codeSynonyms,String value){
-		// 鍙湁涓�鏉¤繎涔夎瘝鏌ヨ瑙勫垯鏃�
-		if(codeSynonyms.isEmpty() || codeSynonyms.size() == 1){
-			return value.replace(codeSynonyms.get(0).getSourceValue(),codeSynonyms.get(0).getSynonymValue());
-		}
-		// 杩戜箟璇嶈鍒欏彲鑳藉嚭鐜扮殑鎯呭喌鏄竴涓簮鍊煎搴斿涓繎涔夎瘝锛岃�屽弽鏌ユ椂鍚屾牱浼氬嚭鐜颁竴涓繎涔夎瘝瀵瑰簲澶氫釜婧愬��
-//		codeSynonyms.stream().map()
-
-		return value;
 	}
 
 	/**

--
Gitblit v1.9.3