From 119b55b59e4d6af0e8881fae671eaa3a1c9fd6ac Mon Sep 17 00:00:00 2001
From: 田源 <lastanimals@163.com>
Date: 星期三, 10 一月 2024 10:26: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 |  156 +++++++++++++++++++++++++++++++--------------------
 1 files changed, 95 insertions(+), 61 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 6b4bca3..67fe60b 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
@@ -87,6 +87,7 @@
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.CopyOnWriteArraySet;
+import java.util.concurrent.ForkJoinPool;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.stream.Collectors;
 
@@ -201,6 +202,11 @@
 	 * 瀹㈡埛鐜板満excel涓鸿�佺増鏈紝瀵煎嚭鐨勬�绘暟闄愬埗涓�65535
 	 */
 	public static final int EXPORT_LIMIT = 65535;
+
+	/**
+	 * 鑷畾涔夊苟鍙慒orkJoinPool
+	 */
+	private static final ForkJoinPool customForkJoinPool = new ForkJoinPool(Runtime.getRuntime().availableProcessors()-1);
 
 	/**
 	 * 鎵归噺鐢宠锛氶�夊彇閫変腑鍒嗙被涓嬬殑鎵�鏈夋ā鏉垮叧閿睘鎬э紝鐩镐技灞炴�э紝蹇呭~灞炴�э紝鍐欏叆execl涓�
@@ -2506,10 +2512,10 @@
 						if (!CollectionUtils.isEmpty(newCboList)) {
 							//澶勭悊鍏抽敭灞炴�ф煡鍑哄鏉$殑璇濓紝鏍规嵁闆嗘垚璋冪敤鐨勫綋鍓嶅垎绫讳唬鍙峰彇褰撳墠鍒嗙被鐨勭爜鍊笺��
 							Map<String/**缂栫爜**/, BaseModel/**閲嶅缂栫爜鏁版嵁**/> classOidTOBaseModelMap = new HashMap<>();
-								newCboList.stream().forEach(baseModel->{
-									String codeclsfid=baseModel.getData().get(CODE_CLASSIFY_OID_FIELD.toUpperCase(Locale.ROOT));
-									classOidTOBaseModelMap.put(codeclsfid,baseModel);
-								});
+							newCboList.stream().forEach(baseModel->{
+								String codeclsfid=baseModel.getData().get(CODE_CLASSIFY_OID_FIELD.toLowerCase(Locale.ROOT));
+								classOidTOBaseModelMap.put(codeclsfid,baseModel);
+							});
 							String codeclsfid= classifyFullInfo.getCurrentClassifyVO().getOid();
 							if(classOidTOBaseModelMap.containsKey(codeclsfid)){
 								BaseModel newCbo= classOidTOBaseModelMap.get(codeclsfid);
@@ -2546,7 +2552,7 @@
 						}
 					}
 				});
-				//鍏抽敭鐔熸倝鏇存敼
+				//鍏抽敭灞炴�ф洿鏀�
 				if (!CollectionUtils.isEmpty(editBoList)) {
 					engineService.updateBatchByBaseModel(classifyFullInfo.getTopClassifyVO().getBtmTypeId(),editBoList);//淇濆瓨鏁版嵁
 				}
@@ -2740,7 +2746,7 @@
 		//cboOidMap.put("id", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(codeDataMap.keySet().toArray(new String[0])) + ")");
 		String tableName ="";
 		try {
-			R<BtmTypeVO> r = btmTypeClient.getAllAttributeByBtmId(templateVO.getBtmTypeId());
+			R<BtmTypeVO> r = btmTypeClient.getAllAttributeByBtmId(classifyFullInfo.getTopClassifyVO().getBtmTypeId());
 			if(!r.isSuccess()) {
 				throw new Throwable(r.getMsg());
 			}
@@ -2782,6 +2788,7 @@
 		}
 
 		List<Map<String,String>> dataMapList=commonsMapper.queryByOnlySqlForMap(sb.toString());
+		DefaultAttrAssimtUtil.mapToLowerCase(dataMapList,true);
 		List<ClientBusinessObject> cboList=	ChangeMapTOClientBusinessObjects(dataMapList);
 		Map<String, ClientBusinessObject> codeSystemObjectMap = cboList.stream().filter(systeDataObject -> systeDataObject != null && StringUtils.isNotBlank(systeDataObject.getId())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getId(), t -> t));
 		Map<String, String> errorMap = new HashMap<>();
@@ -2837,7 +2844,17 @@
 				cbo.setDescription(StringUtils.isBlank(orderDTO.getDescription())?"":orderDTO.getDescription());
 				cbo.setName(orderDTO.getName());
 				try {
-					cbo.setAttributeValueWithNoCheck("description", orderDTO.getDescription());
+					//涓昏澶勭悊澶у皬鍐欓棶棰橈紝灏哾ata閲岄潰鐨勬暟鎹殑key閮借浆涓哄皬鍐�
+					HashMap<String,String> lowerData = new HashMap<>();
+					Iterator<Map.Entry<String, String>> iterator = cbo.getData().entrySet().iterator();
+					while (iterator.hasNext()){
+						Map.Entry<String, String> next = iterator.next();
+						lowerData.put(next.getKey().toLowerCase(Locale.ROOT),next.getValue());
+					}
+					cbo.getData().clear();
+					cbo.getData().putAll(lowerData);
+					cbo.setAttributeValueWithNoCheck("description", (StringUtil.isNotBlank(orderDTO.getData()
+						.get("description")) ? orderDTO.getData().get("description") : orderDTO.getDescription() ));
 				//	cbo.setAttributeValue("name", orderDTO.getName());
 					//  if(finalIsProcess){//鍦ㄦ祦绋嬩腑涓嶅厑璁告洿鏀�
 					//     errorMap.put(code,errorMap.getOrDefault(code, errorMap.getOrDefault(code,"")+";鏁版嵁"+code+"鍦ㄦ祦绋嬩腑锛屼笉鍏佽鏇存敼!"));
@@ -2900,7 +2917,7 @@
 
 					List<CodeAllCode>newCodeAllCodeList= codeAllCodeService.selectByWrapper(Wrappers.<CodeAllCode>query().lambda().eq(CodeAllCode::getCreateCodeOid, cbo.getOid()));
 					if (!CollectionUtils.isEmpty(newCodeAllCodeList)) {
-						CodeAllCode codeCbo = codeAllCodeList.get(0);
+						CodeAllCode codeCbo = newCodeAllCodeList.get(0);
 						log.info("codeCbos code:" + codeCbo.getId());
 						codeCbo.setLcStatus(status);
 						codeAllCodeList.add(codeCbo);
@@ -2938,7 +2955,7 @@
 				engineService.updateBatchByBaseModel(classifyFullInfo.getTopClassifyVO().getBtmTypeId(),updateList);
 				codeAllCodeService.saveOrUpdateBatch(codeAllCodeList);
 				if(deleteList.size()>0) {
-					commonsMapper.deleteByTaleAndOid(tableName, VciBaseUtil.array2String(deleteList.toArray(new String[]{})));
+					commonsMapper.deleteByTaleAndOid(tableName, VciBaseUtil.toInSql(deleteList.toArray(new String[]{})));
 				}
 				//鏄惁璋冪敤闆嗗洟鎺ュ彛鐢宠鎺ュ彛
 				if(isCodeOrGroupCode){
@@ -3613,6 +3630,11 @@
 		rowDataList.stream().forEach(rowData -> {
 			ClientBusinessObject cbo=new ClientBusinessObject();
 			DefaultAttrAssimtUtil.addDefaultAttrAssimt(cbo, classifyFullInfo.getTopClassifyVO().getBtmTypeId());
+			R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(classifyFullInfo.getTopClassifyVO().getBtmTypeId()));
+			if(!listR.isSuccess() || listR.getData().size() == 0){
+				throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒");
+			}
+			cbo.setRevisionRule("".equals(listR.getData().get(0).getVersionRule())?"1":listR.getData().get(0).getVersionRule());
 			rowData.getData().forEach((index,value)->{
 					String field = fieldIndexMap.get(index);
 				if (StringUtils.isBlank(field)) {
@@ -3959,7 +3981,8 @@
 						String sql = "select " + valueField + "," + showText.toLowerCase(Locale.ROOT) +" from " + table + "  where " + showText + " in (%s)";
 						valueCollections.stream().forEach(values->{
 							List<Map<String,String>> dataMapList = commonsMapper.queryByOnlySqlForMap(String.format(sql, VciBaseUtil.toInSql(values.toArray(new String[0]))));
-							List<ClientBusinessObject> cbos=	ChangeMapTOClientBusinessObjects(dataMapList);
+							DefaultAttrAssimtUtil.mapToLowerCase(dataMapList,true);
+							List<ClientBusinessObject> cbos=ChangeMapTOClientBusinessObjects(dataMapList);
 							if(!CollectionUtils.isEmpty(cbos)){
 								valueOidTextMap.putAll(cbos.stream().collect(Collectors.toMap(s->s.getAttributeValue(valueField),t->t.getAttributeValue(showText))));
 							}
@@ -4328,7 +4351,7 @@
 						} else {
 							Map<String, String> classifyDataMap = VciBaseUtil.objectToMapString(classifyVO);
 							String value = classifyDataMap.getOrDefault(attrVO.getClassifyInvokeAttr(), "");
-							log.error("================================褰撳墠鍒嗙被娉ㄥ叆鐨剉alue鍊间负锛�==========================",value);
+//							log.error("================================褰撳墠鍒嗙被娉ㄥ叆鐨剉alue鍊间负锛�==========================",value);
 							cbo.setAttributeValue(attrId, value);
 						}
 					} catch (Throwable e) {
@@ -4376,53 +4399,60 @@
 		// 鏌ヨ涓嶉渶瑕佸弬涓庡叧閿睘鎬ф牎楠岀殑闄よ嚜宸变互澶栫殑鎵�鏈夊垎绫籵id
 		final String isParticipateCheckOids = classifyService.selectLeafByParentClassifyOid(classifyFullInfo.getTopClassifyVO().getOid(), classifyFullInfo.getCurrentClassifyVO().getOid());
 		final BladeUser user = AuthUtil.getUser();
-		List<ClientBusinessObject> repeatDataMap = cboList.parallelStream().filter(cbo -> {
-			//姣忚閮藉緱鏌ヨ.濡傛灉鍏朵腑鍑虹幇浜嗛敊璇紝鎴戜滑灏辩洿鎺ユ姏鍑哄紓甯革紝鍏朵綑鐨勬樉绀�
-			//VciBaseUtil.setCurrentUserSessionInfo(sessionInfo);
-			Map<String, String> conditionMap = new HashMap<>();
-			ketAttrMap.forEach((attrId, attrVO) -> {
-				String value =cbo.getAttributeValue(attrId.toLowerCase(Locale.ROOT));
-				if (value == null) {
-					value = "";
-				}
-				value= value.replace(REQUIRED_CHAR,SPECIAL_CHAR);
-				engineService.wrapperKeyAttrConditionMap(value, keyRuleVO, attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap);
-			});
-			if (!CollectionUtils.isEmpty(ketAttrMap)) {
-				// 娣诲姞涓嶅弬涓庡叧閿睘鎬ф牎楠岀殑鍒嗙被oid鍒ゆ柇
-				if(Func.isNotBlank(isParticipateCheckOids)){
-					conditionMap.put("t.codeclsfid",QueryOptionConstant.NOTIN+isParticipateCheckOids);
-				}
-				if(isEdit){//濡傛灉鏄洿鏀瑰垯闇�鎺掗櫎绯荤粺鏈韩
-					conditionMap.put("t.id",QueryOptionConstant.NOTEQUAL+cbo.getId());
-				}
-				conditionMap.put("t.lastr", "1");
-				conditionMap.put("t.lastv", "1");
-
-				CodeTemplateAttrSqlBO sqlBO = engineService.getSqlByTemplateVO(classifyFullInfo.getTopClassifyVO().getBtmTypeId(), templateVO, conditionMap, null);
-				List<String> repeatData = commonsMapper.selectList(sqlBO.getSqlId());
-				if(!repeatData.isEmpty()){
-					final List<Map<String,String>> newDataList = commonsMapper.queryByOnlySqlForMap(sqlBO.getSqlUnPage());
-					//List<ClientBusinessObject> newCboList=ChangeMapTOClientBusinessObjects(newDataList);
-					List<BaseModel> newCboList = new ArrayList<>();
-					newDataList.stream().forEach(stringStringMap -> {
-						BaseModel baseModel=new BaseModel();
-						DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(stringStringMap,baseModel,false);
-						baseModel.setData(stringStringMap);
-						newCboList.add(baseModel);
-					});
-					// 娣诲姞閿欒鍊�
-					String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
-					errorMap.put(rowIndex, "閲嶅鐨勮褰曠紪鍙蜂负:"+repeatData.stream().collect(Collectors.joining(",")));
-					if(!CollectionUtils.isEmpty(newCboList)) {
-						indexTODataMap.put(cbo.getAttributeValue(IMPORT_ROW_INDEX), newCboList);
+		// TODO:Thread limit exceeded replacing blocked 寮傚父鏄繖閮ㄥ垎浠g爜鎶涘嚭鐨�
+		//  ,鎵�浠ユ殏鏃跺皢parallelStream鏀规垚浜唖tream锛屾敼鎴愪簡stream涔嬪悗鍙戠幇宸ㄦ參
+		// customForkJoinPool鎺у埗骞跺彂搴�
+		List<ClientBusinessObject> finalCboList = cboList;
+		List<ClientBusinessObject> repeatDataMap = (List<ClientBusinessObject>) customForkJoinPool.submit(()->{
+			finalCboList.parallelStream().filter(cbo -> {
+				//姣忚閮藉緱鏌ヨ.濡傛灉鍏朵腑鍑虹幇浜嗛敊璇紝鎴戜滑灏辩洿鎺ユ姏鍑哄紓甯革紝鍏朵綑鐨勬樉绀�
+				//VciBaseUtil.setCurrentUserSessionInfo(sessionInfo);
+				Map<String, String> conditionMap = new HashMap<>();
+				ketAttrMap.forEach((attrId, attrVO) -> {
+					String value =cbo.getAttributeValue(attrId.toLowerCase(Locale.ROOT));
+					if (value == null) {
+						value = "";
 					}
+					value= value.replace(REQUIRED_CHAR,SPECIAL_CHAR);
+					engineService.wrapperKeyAttrConditionMap(value, keyRuleVO, attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap);
+				});
+				if (!CollectionUtils.isEmpty(ketAttrMap)) {
+					// 娣诲姞涓嶅弬涓庡叧閿睘鎬ф牎楠岀殑鍒嗙被oid鍒ゆ柇
+					if(Func.isNotBlank(isParticipateCheckOids)){
+						conditionMap.put("t.codeclsfid",QueryOptionConstant.NOTIN+isParticipateCheckOids);
+					}
+					if(isEdit){//濡傛灉鏄洿鏀瑰垯闇�鎺掗櫎绯荤粺鏈韩
+						conditionMap.put("t.id",QueryOptionConstant.NOTEQUAL+cbo.getId());
+					}
+					conditionMap.put("t.lastr", "1");
+					conditionMap.put("t.lastv", "1");
+
+					CodeTemplateAttrSqlBO sqlBO = engineService.getSqlByTemplateVO(classifyFullInfo.getTopClassifyVO().getBtmTypeId(), templateVO, conditionMap, null);
+					List<String> repeatData = commonsMapper.selectList(sqlBO.getSqlId());
+					if(!repeatData.isEmpty()){
+						final List<Map<String,String>> newDataList = commonsMapper.queryByOnlySqlForMap(sqlBO.getSqlUnPage());
+						DefaultAttrAssimtUtil.mapToLowerCase(newDataList,true);
+						//List<ClientBusinessObject> newCboList=ChangeMapTOClientBusinessObjects(newDataList);
+						List<BaseModel> newCboList = new ArrayList<>();
+						newDataList.stream().forEach(stringStringMap -> {
+							BaseModel baseModel=new BaseModel();
+							DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(stringStringMap,baseModel,false,user);
+							baseModel.setData(stringStringMap);
+							newCboList.add(baseModel);
+						});
+						// 娣诲姞閿欒鍊�
+						String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
+						errorMap.put(rowIndex, "閲嶅鐨勮褰曠紪鍙蜂负:"+repeatData.stream().collect(Collectors.joining(",")));
+						if(!CollectionUtils.isEmpty(newCboList)) {
+							indexTODataMap.put(cbo.getAttributeValue(IMPORT_ROW_INDEX), newCboList);
+						}
+					}
+					return !repeatData.isEmpty();
+				}else{
+					return false;
 				}
-				return !repeatData.isEmpty();
-			}else{
-				return false;
-			}
-		}).collect(Collectors.toList());
+			}).collect(Collectors.toList());
+		}).join();
 		if(!CollectionUtils.isEmpty(repeatDataMap)){
 			resultVO.setKeyAttrRepeatRowIndexList(repeatDataMap.stream().map(s->s.getAttributeValue(IMPORT_ROW_INDEX)).collect(Collectors.toSet()));
 		}
@@ -4631,9 +4661,11 @@
 	}
 	private List<ClientBusinessObject> ChangeMapTOClientBusinessObjects(List<Map<String,String>> oldDataMap){
 		List<ClientBusinessObject> clientBusinessObjectList=new ArrayList<>();
+		DefaultAttrAssimtUtil.mapToLowerCase(oldDataMap,true);
+		final BladeUser user = AuthUtil.getUser();
 		oldDataMap.stream().forEach(dataMap->{
 			ClientBusinessObject clientBusinessObject=new ClientBusinessObject();
-			DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(dataMap,clientBusinessObject,true);
+			DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(dataMap,clientBusinessObject,false,user);
 			for (String key:dataMap.keySet()){
 				Object value= dataMap.getOrDefault(key,"");
 				clientBusinessObject.setAttributeValue(key.toLowerCase(Locale.ROOT),value==null?"":value.toString());
@@ -4924,6 +4956,7 @@
 					pageHelper.addDefaultDesc("id");
 					CodeTemplateAttrSqlBO sqlBO = engineService.getSqlByTemplateVO(btmtypeid, templateVO, conditionMap, pageHelper);
 					List<Map<String,String>> dataMapList=commonsMapper.queryByOnlySqlForMap(sqlBO.getSqlUnPage());
+					DefaultAttrAssimtUtil.mapToLowerCase(dataMapList,true);
 					List<ClientBusinessObject> resembleCboList=	ChangeMapTOClientBusinessObjects(dataMapList);
 					if(!CollectionUtils.isEmpty(resembleCboList)) {
 						List<Map<String, String>> finalDataMap = dataMap;
@@ -5289,10 +5322,10 @@
 				// 淇敼鐗堟鍙�
 				engineService.updateBatchByBaseModel(btmTypeId,oldCbos);
 				List<CodeAllCode> codeAllCodeList=new ArrayList<>();
-
+				final BladeUser user = AuthUtil.getUser();
 				cboList.stream().forEach(clientBusinessObject -> {
 					BaseModel newBaseModel=new BaseModel();
-					DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(clientBusinessObject.getData(),newBaseModel,true);
+					DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(clientBusinessObject.getData(),newBaseModel,false,user);
 					newCbos.add(newBaseModel);
 				});
 				// 鎻掑叆鏂扮殑鏁版嵁
@@ -5324,19 +5357,20 @@
 	public void batchSwitchCheckExist(Map<String,String> errorMap,List<ClientBusinessObject> cboList,CodeClassifyFullInfoBO classifyFullInfo,CodeClassifyTemplateVO templateVO,ExecGroupCodePortDataDTO execGroupCodePortDataDTO,Map<Integer/**鍒楀彿**/,String/**瀛楁鐨勫悕绉�**/> fieldIndexMap){
 		List<BaseModel> oldBaseModelList=new ArrayList<>();
 		List<CodeAllCode> codeAllCodeList=new ArrayList<>();
+		final BladeUser user = AuthUtil.getUser();
 		cboList.stream().forEach(clientBusinessObject -> {
 			String code=clientBusinessObject.getId();
 			String rowIndex=clientBusinessObject.getAttributeValue(IMPORT_ROW_INDEX);
 			List<Map<String,String>>dataList=new ArrayList<>();
 			List<String> fieldList= execGroupCodePortDataDTO.getFieldList();
 			getDatas(classifyFullInfo,templateVO,execGroupCodePortDataDTO.getFieldList(),dataList,Arrays.asList(code));
+			DefaultAttrAssimtUtil.mapToLowerCase(dataList,true);
 			if(!CollectionUtils.isEmpty(dataList)){
 				Map<String,String> newDataMap=new HashMap<>();//灏嗘柊瀵硅薄灞炴�ф殏鏃跺瓨鍌ㄥ湪Map<>
 				newDataMap.putAll(clientBusinessObject.getData());
 				Map<String,String> dataMap=dataList.get(0);
 				BaseModel oldBaseModel=new BaseModel();
-
-				DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(dataMap,oldBaseModel,false);
+				DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(dataMap,oldBaseModel,false,user);
 				String oldOid=oldBaseModel.getOid();
 
 				clientBusinessObject.setCopyFromVersion(oldOid);

--
Gitblit v1.9.3