From 1542490e1a040bb02b68fba8f0310750939d1844 Mon Sep 17 00:00:00 2001
From: 田源 <lastanimals@163.com>
Date: 星期四, 16 十一月 2023 17:35:42 +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 |   61 ++++++++++++++++++++----------
 1 files changed, 40 insertions(+), 21 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 543b0a5..4935984 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
@@ -3,6 +3,7 @@
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.nacos.common.utils.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.google.protobuf.ServiceException;
 import com.vci.ubcs.code.applyjtcodeservice.feign.IMdmInterJtClient;
 import com.vci.ubcs.code.bo.AttributeValue;
 import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
@@ -96,8 +97,12 @@
 	@Value("${batchadd.exportattr.type:鍩烘湰淇℃伅}")
 	public String BATCHADD_EXCEPORT_ATTR_TYPE;
 
-	@Value("${batchadd.redis.time:6000000}")
+
 	public int BATCHADD_REDIS_TIME;
+
+	@Value("${batchadd.import_data_limit:5001}")
+	private Integer IMPORT_DATA_LIMIT;
+
 	/**
 	 * 涓婚搴撳垎绫荤殑鏈嶅姟
 	 */
@@ -398,9 +403,9 @@
 			LinkedList<WriteExcelData> excelDataList = new LinkedList<>();
 			Workbook workbook = new HSSFWorkbook();
 			if(isHistory){
-				excelDataList.add(new WriteExcelData(0,0,"鍒嗙被璺緞"));
-				excelDataList.add(new WriteExcelData(0,1,"鐮佹瀹藉害"));
-				excelDataList.add(new WriteExcelData(0,2,!CollectionUtils.isEmpty(idAttrVOList)?idAttrVOList.get(0).getName():"浼佷笟缂栫爜"));
+				excelDataList.add(new WriteExcelData(0,0,"鍒嗙被璺緞",""));
+				excelDataList.add(new WriteExcelData(0,1,"鐮佹瀹藉害",""));
+				excelDataList.add(new WriteExcelData(0,2,!CollectionUtils.isEmpty(idAttrVOList)?idAttrVOList.get(0).getName():"浼佷笟缂栫爜",idAttrVOList.get(0).getId()));
 			}
 			for (int i = 0; i < templateAttrVOS.size(); i++) {
 				CodeClassifyTemplateAttrVO attrVO = templateAttrVOS.get(i);
@@ -408,7 +413,7 @@
 				Object text = attrVO.getName();
 				text = exportKeyAndRequired(workbook,attrVO,text);
 				int colIndex = (isHistory?3:0) + i;
-				WriteExcelData excelData = new WriteExcelData(0, colIndex, text);
+				WriteExcelData excelData = new WriteExcelData(0, colIndex, text,attrVO.getId());
 				if(StringUtils.isNotBlank(attrVO.getCodeDateFormat())
 					|| VciFieldTypeEnum.VTDateTime.name().equalsIgnoreCase(attrVO.getAttributeDataType())
 					|| VciFieldTypeEnum.VTDate.name().equalsIgnoreCase(attrVO.getAttributeDataType())
@@ -788,11 +793,15 @@
 		String uuid=VciBaseUtil.getPk();
 		boolean isCreateUUid=false;
 		boolean isExport=false;
-		long start = System.currentTimeMillis();
+		//long start = System.currentTimeMillis();
 		for(int i=0;i<sheetDataSetList.size()-1;i++) {
 			if (CollectionUtils.isEmpty(sheetDataSetList) || CollectionUtils.isEmpty(sheetDataSetList.get(i).getRowData())
 				|| sheetDataSetList.get(i).getRowData().size() < 1) {
 				continue;
+			}
+			// 鍗曟瀵煎叆鏁伴噺闄愬埗
+			if(sheetDataSetList.get(i).getRowData().size() > IMPORT_DATA_LIMIT){
+				throw new ServiceException("涓轰簡淇濊瘉绯荤粺鐨勭ǔ瀹氭�э紝璇蜂竴娆′笉瑕佸鍏ヨ秴杩�"+IMPORT_DATA_LIMIT+"鏉$殑鏁版嵁");
 			}
 			//鍘嗗彶瀵煎叆鐨勬椂鍊欎笉澶勭悊缂栫爜
 			//----閫昏緫鍐呭----
@@ -816,7 +825,7 @@
 			//鎵剧涓�琛岋紝涓轰簡鎵炬爣棰�
 			CodeClassifyTemplateVO templateVO = new CodeClassifyTemplateVO();
 			/**  if (!templateService.checkChildHasSameTemplate(classifyFullInfo.getCurrentClassifyVO().getOid())) {
-			 throw new VciBaseException("褰撳墠鐨勫垎绫讳互鍙婁笅绾у垎绫荤殑妯℃澘涓嶇浉鍚�");
+			 	throw new VciBaseException("褰撳墠鐨勫垎绫讳互鍙婁笅绾у垎绫荤殑妯℃澘涓嶇浉鍚�");
 			 }***/
 			//閮借浆鎹㈠畬浜嗐�傞渶瑕佹壒閲忔鏌�
 			//鎵炬墍鏈夌殑鍒嗙被璺緞,闇�瑕佹牎楠岃矾寰勬槸鍚︽纭紝鏄惁閮藉湪褰撳墠鐨勫垎绫荤殑涓嬬骇
@@ -847,7 +856,7 @@
 			String idFieldName = attrVOS.stream().filter(s -> VciQueryWrapperForDO.ID_FIELD.equalsIgnoreCase(s.getId())).findFirst().orElseGet(() -> new CodeClassifyTemplateAttrVO()).getName();
 			getFieldIndexMap(titleRowData, attrNameIdMap, fieldIndexMap);
 			//鍏堜笉鐢ㄧ灞炴�ф槸鍚﹂兘瀛樺湪锛屽厛杞崲涓�涓嬫暟鎹�
-			List<ClientBusinessObject> cboList = new ArrayList<>();
+			List<ClientBusinessObject> cboList = new CopyOnWriteArrayList<>();
 			String fullPath = getFullPath(classifyFullInfo);
 			//鎴戜滑闇�瑕佽幏鍙栧埌鎵�鏈夌殑涓嬬骇鍒嗙被鐨刼id鐨勮矾寰勶紝鍥犱负鍚庨潰闇�瑕�
 			Map<String/**涓婚敭**/, String/**璺緞**/> childOidPathMap = getChildClassifyPathMap(classifyFullInfo, fullPath);
@@ -933,7 +942,8 @@
 			if (CollectionUtils.isEmpty(ruleOidMap.values())) {
 				throw new VciBaseException("瀵煎叆鐨勬暟鎹墍閫夋嫨鐨勫垎绫婚兘娌℃湁璁剧疆缂栫爜瑙勫垯");
 			}
-			Map<String, CodeRuleVO> ruleVOMap = ruleService.listCodeRuleByIds(ruleOidMap.values(), true).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
+			// TODO: 璇ョ敤oid鏌ヨ瑙勫垯鐨勶紝鍒敤id
+			Map<String, CodeRuleVO> ruleVOMap = ruleService.listCodeRuleByOids(ruleOidMap.values()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
 			//鏍¢獙缂栫爜瑙勫垯鍜岀爜娈垫槸鍚︽纭�
 			Map<String, List<String>> ruleRowIndexMap = new ConcurrentHashMap<>();
 			checkSecLengthInHistory(cboList, classifyVOMap, ruleVOMap, ruleOidMap, errorMap, ruleRowIndexMap);
@@ -1028,7 +1038,7 @@
 					//VciBaseUtil.setCurrentUserSessionInfo(sessionInfo);
 					List<String> rowIndexList = ruleRowIndexMap.get(ruleOid);
 					List<ClientBusinessObject> thisCbos = finalNeedSaveCboList.stream().filter(cbo -> rowIndexList.contains(cbo.getAttributeValue(IMPORT_ROW_INDEX)) && !errorMap.containsKey(cbo.getAttributeValue(IMPORT_ROW_INDEX))).collect(Collectors.toList());
-					List<BaseModel> dataCBOList=new ArrayList<>();
+					List<BaseModel> dataCBOList=new CopyOnWriteArrayList<>();
 					thisCbos.stream().forEach(clientBusinessObject -> {
 						BaseModel baseModel=new BaseModel();
 						BeanUtil.convert(clientBusinessObject,baseModel);
@@ -1045,7 +1055,7 @@
 							log.error("鎵归噺浜х敓缂栫爜鐨勬椂鍊欏嚭閿欎簡", e);
 							thisCbos.stream().forEach(cbo -> {
 								String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
-								errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";绯荤粺閿欒锛屽瓨鍌ㄦ暟鎹殑鏃跺�欏嚭閿欎簡");
+								errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";绯荤粺閿欒锛屽瓨鍌ㄦ暟鎹殑鏃跺�欏嚭閿欎簡:"+e.getMessage());
 							});
 
 						}
@@ -1058,7 +1068,7 @@
 				engineService.batchSaveSelectChar(templateVO, dataCBOIdList);
 			}
 		}
-		long end = System.currentTimeMillis();
+		//long end = System.currentTimeMillis();
 		//log.info("=============for鎵ц鏃堕棿================="+String.valueOf((end-start)/1000));
 		String excelFileName="";
 		if(isExport&&!CollectionUtils.isEmpty(shetNameMap)) {
@@ -1139,7 +1149,6 @@
 	 * @param currentTemplateVO
 	 * @param templateColumnVOMap
 	 */
-
 	private void createTemplate(CodeClassifyTemplateVO currentTemplateVO,Map<String,List<ColumnVO>>templateColumnVOMap){
 
 		List<CodeClassifyTemplateAttrVO> templateAttrVOS = currentTemplateVO.getAttributes().stream().filter(s ->
@@ -1529,7 +1538,6 @@
 				total += commonsMapper.queryCountBySql(countSql);
 			}
 		}else{
-
 			total = commonsMapper.queryCountBySql(countSql);
 		}
 		List<String> selectFieldList = new ArrayList<>();
@@ -1750,7 +1758,8 @@
 				Map<String/**鍒嗙被涓婚敭**/, String/**瑙勫垯涓婚敭**/> ruleOidMap = new ConcurrentHashMap<String, String>();
 				List<String> unExistRuleClassifyOidList = new CopyOnWriteArrayList<>();
 				checkRuleOidInHistory(classifyVOMap, ruleOidMap, unExistRuleClassifyOidList);
-				ruleVOMap = ruleService.listCodeRuleByIds(ruleOidMap.values(), true).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
+				// TODO	鏀圭敤oid鏌ヨ鐨勶紝杩欏効涓嶈鐢╥d
+				ruleVOMap = ruleService.listCodeRuleByOids(ruleOidMap.values()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
 
 				checkSecLengthInHistory(cboList, classifyVOMap, ruleVOMap, ruleOidMap, errorMap, ruleRowIndexMap);
 			}
@@ -1956,7 +1965,6 @@
 
 		//閮借浆鎹㈠畬浜嗐�傞渶瑕佹壒閲忔鏌�
 		//濡傛灉鍑洪敊浜嗭紝鎴戜滑渚濈劧鎵ц鏈夋晥鐨勬暟鎹紝鏃犳晥鐨勬暟鎹啓鍥炲埌excel涓�
-
 
 		Map<String,String> errorKeyMap=new HashMap<>();
 		//1.鍒嗙被娉ㄥ叆
@@ -2946,7 +2954,7 @@
 						for (int j = 0; j < ruleVO.getSecVOList().size(); j++) {
 							CodeBasicSecVO secVO = ruleVO.getSecVOList().get(j);
 							String length= secValues[j];
-							if(StringUtils.isNotBlank(secVO.getCodeSecLength())&&VciBaseUtil.getInt(length)>VciBaseUtil.getInt(secVO.getCodeSecLength())){
+							if(StringUtils.isNotBlank(secVO.getCodeSecLength())&&VciBaseUtil.getInt(length)>(VciBaseUtil.getInt(secVO.getCodeSecLength())+((secVO.getPrefixCode()+secVO.getSuffixCode()).length()))){
 								errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鐮佹瀹藉害涓庣郴缁熶腑鐨勭紪鐮佽鍒欎笉鍚�" );
 								fined = true;
 								break;
@@ -3139,6 +3147,7 @@
 		});
 
 	}
+
 	/**
 	 * excel杞崲涓篶bo鐨勫璞�
 	 * @param classifyFullInfo 鍒嗙被鐨勫叏閮ㄤ俊鎭�
@@ -3156,7 +3165,7 @@
 			ClientBusinessObject cbo=new ClientBusinessObject();
 			DefaultAttrAssimtUtil.addDefaultAttrAssimt(cbo, classifyFullInfo.getTopClassifyVO().getBtmTypeId());
 			rowData.getData().forEach((index,value)->{
-				String field = fieldIndexMap.get(index);
+					String field = fieldIndexMap.get(index);
 				if (StringUtils.isBlank(field)) {
 					throw new VciBaseException("绗�" + (index + 1) + "鍒楃殑鏍囬鍦ㄧ郴缁熶腑涓嶅瓨鍦�");
 				}
@@ -3513,6 +3522,7 @@
 			});
 		}
 	}
+
 	/***
 	 * 鏍¢獙鍒嗙被瀵瑰簲鐨勬ā鏉夸俊鎭�
 	 * @param titleRowData
@@ -3596,6 +3606,7 @@
 		}
 		return codeClassifyTemplateVOList ;
 	}
+
 	/**
 	 * 浠庡睘鎬т笂鑾峰彇鍙傜収鐨勫唴瀹�
 	 * @param attrVO 灞炴�х殑淇℃伅
@@ -3718,6 +3729,7 @@
 			}
 		}
 	}
+
 	/**
 	 * 澶勭悊鍒嗙被娉ㄥ叆
 	 * @param attrVOS 妯℃澘灞炴��
@@ -3807,7 +3819,9 @@
 		//2.鍒ゆ柇鍏抽敭灞炴�у湪绯荤粺閲屾槸鍚﹂噸澶�
 		//鍥犱负鏁版嵁閲忓緢澶э紝鎵�浠ュ緱鎯冲姙娉曞苟琛�
 		//SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
-		Map<String,List<BaseModel>> indexTODataMap=new HashMap<>();
+		Map<String,List<BaseModel>> indexTODataMap=new ConcurrentHashMap<>();
+		// 鏌ヨ涓嶉渶瑕佸弬涓庡叧閿睘鎬ф牎楠岀殑闄よ嚜宸变互澶栫殑鎵�鏈夊垎绫籵id
+		String isParticipateCheckOids = classifyService.selectLeafByParentClassifyOid(classifyFullInfo.getTopClassifyVO().getOid(), classifyFullInfo.getCurrentClassifyVO().getOid());
 		List<ClientBusinessObject> repeatDataMap = cboList.parallelStream().filter(cbo -> {
 			//姣忚閮藉緱鏌ヨ.濡傛灉鍏朵腑鍑虹幇浜嗛敊璇紝鎴戜滑灏辩洿鎺ユ姏鍑哄紓甯革紝鍏朵綑鐨勬樉绀�
 			//VciBaseUtil.setCurrentUserSessionInfo(sessionInfo);
@@ -3821,6 +3835,10 @@
 				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);
+				}
 				CodeTemplateAttrSqlBO sqlBO = engineService.getSqlByTemplateVO(classifyFullInfo.getTopClassifyVO().getBtmTypeId(), templateVO, conditionMap, null);
 				boolean isKeyCheck= commonsMapper.queryCountBySql(sqlBO.getSqlCount()) > 0;
 				if(isKeyCheck){
@@ -3864,7 +3882,7 @@
 			if(StringUtils.isBlank(classifyPath)){
 				classifyPath = "#current#";
 			}
-			if ( !pathMap.containsKey(classifyPath)) {
+			if (!pathMap.containsKey(classifyPath)) {
 				String row_index = cbo.getAttributeValue(IMPORT_ROW_INDEX);
 				errorMap.put(row_index,errorMap.getOrDefault(row_index,"") + ";鍒嗙被璺緞涓嶅瓨鍦�");
 			} else {
@@ -4004,7 +4022,7 @@
 					List<String>newOidList=new ArrayList<>();
 					newOidList.add(oid);
 					if(keyAttrOkOidTORepeatOidMap.containsKey(okOid)){
-						List<String> oldOidList=	keyAttrOkOidTORepeatOidMap.get(okOid);
+						List<String> oldOidList = keyAttrOkOidTORepeatOidMap.get(okOid);
 						newOidList.addAll(oldOidList);
 
 					}
@@ -4044,6 +4062,7 @@
 			}
 		}
 	}
+
 	private List<ClientBusinessObject> ChangeMapTOClientBusinessObjects(List<Map<String,String>> oldDataMap){
 		List<ClientBusinessObject> clientBusinessObjectList=new ArrayList<>();
 		oldDataMap.stream().forEach(dataMap->{

--
Gitblit v1.9.3