From 566c542d3f1eb0ad9e918bd1fa9586ab1ed7ec86 Mon Sep 17 00:00:00 2001
From: xiejun <xj@2023>
Date: 星期五, 17 十一月 2023 01:28:50 +0800
Subject: [PATCH] 自定义流水相关开发

---
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java |  204 ++++++++++++++++++++++++++++++--------------------
 1 files changed, 122 insertions(+), 82 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 b59621a..57d9c79 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;
@@ -65,6 +66,7 @@
 import java.io.File;
 import java.io.IOException;
 import java.text.MessageFormat;
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CopyOnWriteArrayList;
@@ -97,6 +99,10 @@
 
 	@Value("${batchadd.redis.time:6000000}")
 	public int BATCHADD_REDIS_TIME;
+
+	@Value("${batchadd.import_data_limit:5001}")
+	private Integer IMPORT_DATA_LIMIT;
+
 	/**
 	 * 涓婚搴撳垎绫荤殑鏈嶅姟
 	 */
@@ -179,7 +185,7 @@
 	 * @return excel鐨勬枃浠跺湴鍧�
 	 */
 	@Override
-	public  String downloadTopImportExcel(String codeClassifyOid){
+	public String downloadTopImportExcel(String codeClassifyOid){
 		List<CodeClassifyTemplateVO> templateVOList=new ArrayList<>();
 		VciBaseUtil.alertNotNull("瀵煎嚭妯℃澘","瀵煎嚭鐨勯厤缃�",codeClassifyOid,"涓婚搴撳垎绫荤殑涓婚敭");
 		CodeClassifyVO codeClassifyVO = classifyService.getObjectByOid(codeClassifyOid);
@@ -389,17 +395,17 @@
 					&& (isHistory || VciBaseUtil.getBoolean(s.getFormDisplayFlag()))
 			).collect(Collectors.toList());
 
-				if (CollectionUtils.isEmpty(templateAttrVOS)) {
-					throw new VciBaseException("妯℃澘娌℃湁閰嶇疆浠讳綍銆愯〃鍗曟樉绀恒�戜负銆愭槸銆戠殑灞炴��");
-				}
+			if (CollectionUtils.isEmpty(templateAttrVOS)) {
+				throw new VciBaseException("妯℃澘娌℃湁閰嶇疆浠讳綍銆愯〃鍗曟樉绀恒�戜负銆愭槸銆戠殑灞炴��");
+			}
 
 			List<CodeClassifyTemplateAttrVO> idAttrVOList = codeClassifyTemplateVO.getAttributes().stream().filter(s -> s.getId().equalsIgnoreCase(CODE_FIELD)).collect(Collectors.toList());
 			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);
@@ -407,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())
@@ -495,7 +501,6 @@
 		return text;
 	}
 
-
 	/**
 	 * 鎵归噺鐢宠缂栫爜鏁版嵁
 	 *
@@ -538,7 +543,6 @@
 //		return null;
 		return codeImProtRusultVO;
 	}
-
 
 	/***
 	 * 浠庨《灞傛壒閲忕敵璇峰鍏ユ柟娉�
@@ -645,7 +649,6 @@
 
 			});
 
-
 			//閮借浆鎹㈠畬浜嗐�傞渶瑕佹壒閲忔鏌�
 			//濡傛灉鍑洪敊浜嗭紝鎴戜滑渚濈劧鎵ц鏈夋晥鐨勬暟鎹紝鏃犳晥鐨勬暟鎹啓鍥炲埌excel涓�
 			//2.鍒ゆ柇蹇呰緭椤广�傘�傞渶瑕佸叏閮ㄧ殑灞炴�э紝濡傛灉鏄繀杈擄紝浣嗘槸琛ㄥ崟閲岄潰涓嶆樉绀虹殑锛屽彧鑳芥槸鍒嗙被娉ㄥ叆鎴栬�呯粍鍚堣鍒�
@@ -719,10 +722,8 @@
 			createRedisDatas(uuid + "-ok",codeImprotDataVOS, newErrorMap,true);
 
 		});
+
 		//寰�鐗╁搧鑺傜偣涓婂姞妯℃澘
-
-
-
 		List<String> needRowIndexList=new ArrayList<>();
 		CodeImProtRusultVO codeImProtRusultVO = new CodeImProtRusultVO();
 		if(errorMap.size()>0) {
@@ -792,10 +793,15 @@
 		String uuid=VciBaseUtil.getPk();
 		boolean isCreateUUid=false;
 		boolean isExport=false;
+		//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+"鏉$殑鏁版嵁");
 			}
 			//鍘嗗彶瀵煎叆鐨勬椂鍊欎笉澶勭悊缂栫爜
 			//----閫昏緫鍐呭----
@@ -809,7 +815,6 @@
 			//     5.3 浼佷笟缂栫爜鐨勯暱搴︼紝鍜岀紪鐮佽鍒欑殑闀垮害瑕佸搴斾笂
 			//     5.4 鑾峰彇娴佹按鐮佹鐨勫�硷紝鍘婚櫎濉厖鐨勫瓧绗︼紝鐪嬫祦姘村彿鏄灏戯紝鐒跺悗灏嗘祦姘村彿鍜岀幇鍦ㄧ殑鏈�澶ф祦姘村彿鍒ゆ柇锛屽皬浜庡氨鐩存帴褰曞叆锛屽ぇ浜庡垯淇敼鏈�澶ф祦姘村彿
 			//     5.5 瀛樺偍浼佷笟缂栫爜鍒癮llcode涓�
-
 			//鏌ヨ鍒嗙被鍜屾ā鏉�
 			CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyOid);
 
@@ -820,7 +825,7 @@
 			//鎵剧涓�琛岋紝涓轰簡鎵炬爣棰�
 			CodeClassifyTemplateVO templateVO = new CodeClassifyTemplateVO();
 			/**  if (!templateService.checkChildHasSameTemplate(classifyFullInfo.getCurrentClassifyVO().getOid())) {
-			 throw new VciBaseException("褰撳墠鐨勫垎绫讳互鍙婁笅绾у垎绫荤殑妯℃澘涓嶇浉鍚�");
+			 	throw new VciBaseException("褰撳墠鐨勫垎绫讳互鍙婁笅绾у垎绫荤殑妯℃澘涓嶇浉鍚�");
 			 }***/
 			//閮借浆鎹㈠畬浜嗐�傞渶瑕佹壒閲忔鏌�
 			//鎵炬墍鏈夌殑鍒嗙被璺緞,闇�瑕佹牎楠岃矾寰勬槸鍚︽纭紝鏄惁閮藉湪褰撳墠鐨勫垎绫荤殑涓嬬骇
@@ -937,14 +942,15 @@
 			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);
 			ruleRowIndexMap.keySet().parallelStream().forEach(ruleOid -> {
 				List<String> rowIndexList = ruleRowIndexMap.get(ruleOid);
 				List<ClientBusinessObject> thisCbos = cboList.stream().filter(cbo -> rowIndexList.contains(cbo.getAttributeValue(IMPORT_ROW_INDEX)) && !errorMap.containsKey(cbo.getAttributeValue(IMPORT_ROW_INDEX))).collect(Collectors.toList());
-//鎴戜滑闇�瑕佸厛鏌ヨ涓�涓嬶紝鍐呭鏄惁宸茬粡瀛樺湪
+				//鎴戜滑闇�瑕佸厛鏌ヨ涓�涓嬶紝鍐呭鏄惁宸茬粡瀛樺湪
 				if(!CollectionUtils.isEmpty(thisCbos)){
 					List<String> existIds = new ArrayList<>();
 					VciBaseUtil.switchCollectionForOracleIn(thisCbos).stream().forEach(cbos -> {
@@ -1032,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);
@@ -1043,12 +1049,13 @@
 
 					if (!CollectionUtils.isEmpty(thisCbos)) {
 						try {
+							// TODO 澶氱嚎绋嬫祦闂
 							productCodeService.productCodeAndSaveData(classifyFullInfo, finalTemplateVO, ruleVOMap.get(ruleOid), null, dataCBOList);
 						} catch (Throwable e) {
 							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());
 							});
 
 						}
@@ -1061,6 +1068,8 @@
 				engineService.batchSaveSelectChar(templateVO, dataCBOIdList);
 			}
 		}
+		//long end = System.currentTimeMillis();
+		//log.info("=============for鎵ц鏃堕棿================="+String.valueOf((end-start)/1000));
 		String excelFileName="";
 		if(isExport&&!CollectionUtils.isEmpty(shetNameMap)) {
 			excelFileName = LocalFileUtil.getDefaultTempFolder() + File.separator + "閿欒淇℃伅.xls";
@@ -1086,6 +1095,7 @@
 
 		return codeImProtRusultVO;
 	}
+
 	/*private void converBaseModels(List<ClientBusinessObject> clientBusinessObjects,List<BaseModel>dataCBOList){
 		clientBusinessObjects.stream().forEach(clientBusinessObject -> {
 			BaseModel baseModel=new BaseModel();
@@ -1099,6 +1109,7 @@
 		});
 
 	}*/
+
 	/***
 	 * 浠巈xecl閲屾瀯寤哄璞�
 	 * @param rowDataList
@@ -1138,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 ->
@@ -1749,7 +1759,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);
 			}
@@ -1938,7 +1949,8 @@
 			&& com.alibaba.cloud.commons.lang.StringUtils.isBlank(s.getComponentRule()) && com.alibaba.cloud.commons.lang.StringUtils.isBlank(s.getClassifyInvokeAttr())//缁勫悎瑙勫垯鍜屽垎绫绘敞鍏ョ‘瀹炴病缁欑敤鎴峰鍑哄幓
 		).collect(Collectors.toList());
 		if(!CollectionUtils.isEmpty(unExistAttrVOs)){
-			throw new VciBaseException("銆�" + unExistAttrVOs.stream().map(CodeClassifyTemplateAttrVO::getName) + "銆戣繖浜涘睘鎬у湪excel涓病鏈夋壘鍒�");
+			String message=unExistAttrVOs.stream().map(CodeClassifyTemplateAttrVO::getName).collect(Collectors.joining(SERIAL_UNIT_SPACE));
+			throw new VciBaseException("銆�" + message + "銆戣繖浜涘睘鎬у湪excel涓病鏈夋壘鍒�");
 		}
 		List<ClientBusinessObject> cboList = new ArrayList<>();
 		String fullPath = getFullPath(classifyFullInfo);
@@ -1954,16 +1966,29 @@
 
 		//閮借浆鎹㈠畬浜嗐�傞渶瑕佹壒閲忔鏌�
 		//濡傛灉鍑洪敊浜嗭紝鎴戜滑渚濈劧鎵ц鏈夋晥鐨勬暟鎹紝鏃犳晥鐨勬暟鎹啓鍥炲埌excel涓�
+
+
+		Map<String,String> errorKeyMap=new HashMap<>();
+		//1.鍒嗙被娉ㄥ叆
+		batchSwitchClassifyAttrOnOrder(attrVOS,cboList,classifyFullInfo,false);
+		//boolean
+		reSwitchBooleanAttrOnOrder(attrVOS,cboList);
+		// cboList.stream().forEach(cbo->{
+		//2.鏍¢獙瑙勫垯
+		batchCheckVerifyOnOrder(attrVOS, cboList,errorMap);
+		//3.鏍¢獙鏋氫妇鏄惁姝g‘
+		batchSwitchEnumAttrOnOrder(attrVOS,cboList,errorMap);
+		//4.鏃堕棿鏍煎紡鐨勯獙璇�
+		//4.鏃堕棿鐨勶紝蹇呴』缁熶竴涓簓yyy-MM-dd HH:mm:ss
+		batchSwitchDateAttrOnOrder(attrVOS,cboList,errorMap);
+		//5.澶勭悊鍙傜収鐨勬儏鍐�
+		batchSwitchReferAttrOnOrder(attrVOS,cboList,errorMap);
+		//6璁剧疆榛樿鍊�
+		batchSwitchAttrDefault(attrVOS, cboList);
 		//2.鍒ゆ柇蹇呰緭椤广�傘�傞渶瑕佸叏閮ㄧ殑灞炴�э紝濡傛灉鏄繀杈擄紝浣嗘槸琛ㄥ崟閲岄潰涓嶆樉绀虹殑锛屽彧鑳芥槸鍒嗙被娉ㄥ叆鎴栬�呯粍鍚堣鍒�
 		batchCheckRequiredAttrOnOrder(templateVO,cboList,errorMap);
-
-
-		/**
-		 * 鍏抽敭鐔熸倝閿欒鎻愮ず
-		 */
-		Map<String,String> errorKeyMap=new HashMap<>();
-
-
+		//鏈�鍚庡紕缁勫悎瑙勫垯
+		batchSwitchComponentAttrOnOrder(attrVOS,cboList);
 		//3.鍒ゆ柇鍏抽敭灞炴��
 		CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList);
 		Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList();
@@ -2000,20 +2025,6 @@
 				errorKeyMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅" );
 			});
 		}
-		//鍒嗙被娉ㄥ叆
-		batchSwitchClassifyAttrOnOrder(attrVOS,cboList,classifyFullInfo,false);
-		//boolean
-		reSwitchBooleanAttrOnOrder(attrVOS,cboList);
-		// cboList.stream().forEach(cbo->{
-		//4.鏍¢獙瑙勫垯
-		batchCheckVerifyOnOrder(attrVOS, cboList,errorMap);
-		//5.鏍¢獙鏋氫妇鏄惁姝g‘
-		batchSwitchEnumAttrOnOrder(attrVOS,cboList,errorMap);
-		//6.鏃堕棿鏍煎紡鐨勯獙璇�
-		//6.鏃堕棿鐨勶紝蹇呴』缁熶竴涓簓yyy-MM-dd HH:mm:ss
-		batchSwitchDateAttrOnOrder(attrVOS,cboList,errorMap);
-		//7.澶勭悊鍙傜収鐨勬儏鍐�
-		batchSwitchReferAttrOnOrder(attrVOS,cboList,errorMap);
 		//鏍¢獙灞炴�ф槸鍚︽纭敊璇俊鎭�
 		if(errorMap.size()>0){
 			String[] newMsg = {""};
@@ -2114,10 +2125,7 @@
 		}
 
 		//  });
-		//璁剧疆榛樿鍊�
-		batchSwitchAttrDefault(attrVOS, cboList);
-		//鏈�鍚庡紕缁勫悎瑙勫垯
-		batchSwitchComponentAttrOnOrder(attrVOS,cboList);
+
 		//瑕佹妸浠ヤ笂鐨勯敊璇殑閮芥姏鍑哄悗锛屽啀缁х画澶勭悊鏃堕棿鍜岀粍鍚堣鍒�
 		List<ClientBusinessObject> needSaveCboList = cboList.stream().filter(cbo -> {
 			String rowIndex =cbo.getAttributeValue(IMPORT_ROW_INDEX);
@@ -2133,7 +2141,7 @@
 			needSaveCboList.stream().forEach(clientBusinessObject -> {
 				BaseModel baseModel=new BaseModel();
 				BeanUtil.convert(clientBusinessObject,baseModel);
-			//(VciBaseUtil.objectToMapString(clientBusinessObject));
+				//(VciBaseUtil.objectToMapString(clientBusinessObject));
 				dataCBOList.add(baseModel);
 				allNeedSaveCboList.add(baseModel.getOid());
 			});
@@ -2327,13 +2335,19 @@
 		sb.append(" select * from ");
 		sb.append(tableName);
 		sb.append(" where 1=1 ");
+		sb.append(" and lastr=1 and lastv=1" );
 		if(isCodeOrGroupCode) {
-			sb.append(" and groupcode in (");
+			sb.append(" and ( groupcode in (");
+			sb.append(VciBaseUtil.toInSql(codeDataMap.keySet().toArray(new String[0])));
+			sb.append(")");
+			sb.append(" or id in (");
+			sb.append(VciBaseUtil.toInSql(codeDataMap.keySet().toArray(new String[0])));
+			sb.append("))");
 		}else{
 			sb.append(" and id in (");
+			sb.append(VciBaseUtil.toInSql(codeDataMap.keySet().toArray(new String[0])));
+			sb.append(")");
 		}
-		sb.append(VciBaseUtil.toInSql(codeDataMap.keySet().toArray(new String[0])));
-		sb.append(")");
 
 		List<Map<String,String>> dataMapList=commonsMapper.queryByOnlySqlForMap(sb.toString());
 		List<ClientBusinessObject> cboList=	ChangeMapTOClientBusinessObjects(dataMapList);
@@ -2361,6 +2375,7 @@
 			String dataStatus=cbo.getLcStatus();
 			RowDatas rowData=codeDataMap.get(code);
 			String status=rowData.getStatus();
+			String lastModifier= rowData.getEditor();
 			String operation=rowData.getOperation();
 			if (cbo.getTs().compareTo(orderDTO.getTs())==0?false:true) {
 				// throw new VciBaseException("鏁版嵁涓嶆槸鏈�鏂扮殑锛屽彲鑳戒粬浜哄凡缁忎慨鏀癸紝璇峰埛鏂板悗鍐嶈瘯");
@@ -2370,20 +2385,20 @@
                 throw new VciBaseException("鏁版嵁涓嶆槸{0}鐨勭姸鎬侊紝涓嶅厑璁镐慨鏀�", new String[]{CodeDefaultLC.EDITING.getText()});
             }*/
 			if(operation.equals("update")) {
-				//1. 鍒ゆ柇蹇呰緭椤�
-				checkRequiredAttrOnOrder(templateVO, orderDTO, errorMap);
-				//2.鍏堟敞鍏ワ紝鍐嶇粍鍚堬紝鏈�鍚庢牎楠�
+				//1.鍏堟敞鍏ワ紝鍐嶇粍鍚堬紝鏈�鍚庢牎楠�
 				switchClassifyLevelOnOrder(templateVO, classifyFullInfo, orderDTO, errorMap);
-				//3.澶勭悊缁勫悎瑙勫垯銆傜粍鍚堣鍒欎笉鑳戒娇鐢ㄧ紪鐮佺殑灞炴�э紝鍥犱负缂栫爜鐨勭敓鎴愬彲鑳芥槸闇�瑕佸睘鎬х殑
+				//2.澶勭悊缁勫悎瑙勫垯銆傜粍鍚堣鍒欎笉鑳戒娇鐢ㄧ紪鐮佺殑灞炴�э紝鍥犱负缂栫爜鐨勭敓鎴愬彲鑳芥槸闇�瑕佸睘鎬х殑
 				switchComponentAttrOnOrder(templateVO, orderDTO);
-				//4.鏍¢獙瑙勫垯
+				//3.鏍¢獙瑙勫垯
 				checkVerifyOnOrder(templateVO, orderDTO, errorMap);
-				//5.鍒ゆ柇鍏抽敭灞炴��
-				checkKeyAttrOnOrder(classifyFullInfo, templateVO, orderDTO, errorMap);
-				//6.鏍¢獙鏋氫妇鐨勫唴瀹规槸鍚︽纭�
+				//4.鏍¢獙鏋氫妇鐨勫唴瀹规槸鍚︽纭�
 				checkEnumOnOrder(templateVO, orderDTO, errorMap);
-				//7.澶勭悊鏃堕棿鏍煎紡锛屽湪鏁版嵁搴撻噷闈笉璁烘槸瀛楃涓茶繕鏄棩鏈熸牸寮忥紝閮戒娇鐢ㄧ浉鍚岀殑鏍煎紡瀛樺偍
+				//5.澶勭悊鏃堕棿鏍煎紡锛屽湪鏁版嵁搴撻噷闈笉璁烘槸瀛楃涓茶繕鏄棩鏈熸牸寮忥紝閮戒娇鐢ㄧ浉鍚岀殑鏍煎紡瀛樺偍
 				switchDateAttrOnOrder(templateVO, orderDTO);
+				//6. 鍒ゆ柇蹇呰緭椤�
+				checkRequiredAttrOnOrder(templateVO, orderDTO, errorMap);
+				//7.鍒ゆ柇鍏抽敭灞炴��
+				checkKeyAttrOnOrder(classifyFullInfo, templateVO, orderDTO, errorMap);
 				//榛樿鐨勫唴瀹逛笉鑳藉彉锛屾墍浠ュ彧闇�瑕佹嫹璐濊嚜瀹氫箟鐨勭浉鍏冲睘鎬у嵆鍙�
 				copyValueToCBO(classifyFullInfo, cbo, orderDTO, templateVO, true, errorMap);
 				//浼佷笟鐮佸拰闆嗗洟鐮佺殑涓嶄慨鏀�
@@ -2391,12 +2406,20 @@
 				cbo.setName(orderDTO.getName());
 				try {
 					cbo.setAttributeValueWithNoCheck("description", orderDTO.getDescription());
-					cbo.setAttributeValue("name", orderDTO.getName());
+				//	cbo.setAttributeValue("name", orderDTO.getName());
 					//  if(finalIsProcess){//鍦ㄦ祦绋嬩腑涓嶅厑璁告洿鏀�
 					//     errorMap.put(code,errorMap.getOrDefault(code, errorMap.getOrDefault(code,"")+";鏁版嵁"+code+"鍦ㄦ祦绋嬩腑锛屼笉鍏佽鏇存敼!"));
 					//  }else{
+					Date date=new Date();
 					cbo.setLcStatus(status);
 					cbo.setAttributeValue("lcstatus",status);
+					cbo.setLastModifyTime(date);
+					cbo.setLastModifier(lastModifier);
+					cbo.setLastModifyTime(date);
+					cbo.setAttributeValue("lastmodifier",lastModifier);
+					cbo.setAttributeValue("lastmodifytime",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(date));
+					cbo.setTs(date);
+					cbo.setAttributeValue("ts",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(date));
 					//  }
 				} catch (VciBaseException e) {
 					e.printStackTrace();
@@ -2423,7 +2446,7 @@
 					List<CodeAllCode>newCodeAllCodeList= codeAllCodeService.selectByWrapper(Wrappers.<CodeAllCode>query().lambda().eq(CodeAllCode::getCreateCodeOid, cbo.getOid()));
 					log.info("codeCbos size:" + newCodeAllCodeList.size());
 					if (!CollectionUtils.isEmpty(newCodeAllCodeList)) {
-						CodeAllCode codeCbo = codeAllCodeList.get(0);
+						CodeAllCode codeCbo = newCodeAllCodeList.get(0);
 						log.info("codeCbos code:" + codeCbo.getId());
 						codeCbo.setLcStatus(CodeDefaultLC.TASK_BACK.getValue());
 						codeAllCodeList.add(codeCbo);
@@ -2488,6 +2511,9 @@
 				//鏄惁璋冪敤闆嗗洟鎺ュ彛鐢宠鎺ュ彛
 				if(isCodeOrGroupCode){
 					List<String> IdList=resultDataObjectDetailDOs.stream().filter(xMLResultDataObjectDetailDO-> com.alibaba.cloud.commons.lang.StringUtils.isNotBlank(xMLResultDataObjectDetailDO.getId())).map(XMLResultDataObjectDetailDO::getId).distinct().collect(Collectors.toList());
+
+
+
 					if(!CollectionUtils.isEmpty(IdList)) {
 						this.sendApplyGroupcode(IdList, classifyFullInfo.getTopClassifyVO().getBtmTypeId(),sysIntegrationPushTypeEnum.ACCPET_EDITCODE.getValue());
 					}
@@ -2615,7 +2641,21 @@
 		//娌℃湁闄愬埗鍒嗙被锛屼絾鏄竴涓ā鏉垮彧鍙兘鍦ㄤ竴涓笟鍔$被鍨嬮噷闈紝鎵�浠ョ洿鎺ユ煡璇㈣繖涓笟鍔$被鍨嬪嵆鍙�
 
 		if (!CollectionUtils.isEmpty(conditionMap)) {
-			final String[] sql = {"select count(*) from " + VciBaseUtil.getTableName(classifyFullInfo.getTopClassifyVO().getBtmTypeId()) + " t where 1 = 1 "};
+			String tableName="";
+			R<BtmTypeVO> r = btmTypeClient.getAllAttributeByBtmId(templateVO.getBtmTypeId());
+			if(r.isSuccess()) {
+				BtmTypeVO btmTypeVO = r.getData();
+				if (btmTypeVO != null) {
+					tableName = btmTypeVO.getTableName();
+
+				}
+			}
+			if (StringUtils.isBlank(tableName)) {
+				String errormsg="鏍规嵁涓氬姟绫诲瀷涓烘煡璇㈠埌鐩稿叧涓氬姟琛�";
+				errorMap.put(orderDTO.getId(),errorMap.getOrDefault(orderDTO.getId(),"")+errormsg);
+				return;
+			}
+			final String[] sql = {"select count(*) from " + tableName + " t where 1 = 1 "};
 			conditionMap.forEach((key, value) -> {
 				if(StringUtils.isBlank(value)||value.equals(QueryOptionConstant.ISNULL)){
 					sql[0] += " and " + key + " is null ";
@@ -2725,10 +2765,10 @@
 //					if (lifeCycleVO != null) {
 //						cbo.setLcStatus(lifeCycleVO.getStartStatus());
 //					} else {
-						cbo.setLcStatus(CodeDefaultLC.EDITING.getValue());
+					cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue());
 //					}
 				} else {
-					cbo.setLcStatus(CodeDefaultLC.EDITING.getValue());
+					cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue());
 				}
 
 			}
@@ -2835,6 +2875,9 @@
 			ClientBusinessObject sysDataObject= codeSystemObjectMap.get(code);
 			if(isCodeOrGroupCode){
 				code=sysDataObject.getAttributeValue("GROUPCODE");
+				if(StringUtils.isBlank(code)){
+					code=sysDataObject.getId();
+				}
 			}
 			CodeOrderDTO orderDTO = new CodeOrderDTO();
 			if(codeDataMap.containsKey(code)){
@@ -2843,11 +2886,7 @@
 				orderDTO.setCodeClassifyOid(codeClassifyVO.getOid());//鍒嗙被涓婚敭
 				orderDTO.setOid(sysDataObject.getOid());//鏁版嵁oid
 				orderDTO.setLcStatus(rowDatas.getStatus());//鐘舵��
-				if(isCodeOrGroupCode){
-					orderDTO.setId(sysDataObject.getId());
-				}else{
-					orderDTO.setId(code);
-				}
+				orderDTO.setId(code);
 				orderDTO.setTs(sysDataObject.getTs());
 				orderDTO.setBtmname(codeClassifyVO.getBtmname());//涓氬姟绫诲瀷
 				orderDTO.setDescription("闆嗘垚璋冪敤:鏇存柊");//鏁版嵁鎻忚堪
@@ -2917,7 +2956,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;
@@ -3095,7 +3134,7 @@
 						Integer userSecret = VciBaseUtil.getCurrentUserSecret();
 						cbo.setAttributeValue(SECRET_FIELD,String.valueOf((userSecret==null || userSecret ==0)? UserSecretEnum.NONE.getValue():userSecret));
 					}
-					cbo.setLcStatus(CodeDefaultLC.EDITING.getValue());
+					cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue());
 				}else{
 					//姝ゆ椂杩樻病鏈夎浆鎹㈣矾寰�
 					//cbo.setAttributeValue(CODE_FULL_PATH_FILED, childOidPathMap.getOrDefault(rowData.getData().getOrDefault(CODE_CLASSIFY_OID_FIELD,""),fullPath));
@@ -3125,7 +3164,7 @@
 							String fullPath,boolean newCode){
 		rowDataList.stream().forEach(rowData -> {
 			ClientBusinessObject cbo=new ClientBusinessObject();
-			 DefaultAttrAssimtUtil.addDefaultAttrAssimt(cbo, classifyFullInfo.getTopClassifyVO().getBtmTypeId());
+			DefaultAttrAssimtUtil.addDefaultAttrAssimt(cbo, classifyFullInfo.getTopClassifyVO().getBtmTypeId());
 			rowData.getData().forEach((index,value)->{
 				String field = fieldIndexMap.get(index);
 				if (StringUtils.isBlank(field)) {
@@ -3152,7 +3191,7 @@
 						Integer userSecret = VciBaseUtil.getCurrentUserSecret();
 						cbo.setAttributeValue(SECRET_FIELD,String.valueOf((userSecret==null || userSecret ==0)? UserSecretEnum.NONE.getValue():userSecret));
 					}
-					cbo.setLcStatus(CodeDefaultLC.EDITING.getValue());
+					cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue());
 				}else{
 					//姝ゆ椂杩樻病鏈夎浆鎹㈣矾寰�
 					//cbo.setAttributeValue(CODE_FULL_PATH_FILED, childOidPathMap.getOrDefault(rowData.getData().getOrDefault(CODE_CLASSIFY_OID_FIELD,""),fullPath));
@@ -3676,7 +3715,7 @@
 	 */
 	private void batchCheckRequiredAttrOnOrder(CodeClassifyTemplateVO templateVO,List<ClientBusinessObject> cboList,Map<String,String> errorMap){
 		Map<String, CodeClassifyTemplateAttrVO> requiredAttrMap = templateVO.getAttributes().stream().filter(s ->
-			VciBaseUtil.getBoolean(s.getRequireFlag()) && StringUtils.isBlank(s.getComponentRule()) && StringUtils.isBlank(s.getClassifyInvokeLevel())//涓嶈兘鏄粍鍚堢殑鍜屽垎绫绘敞鍏ョ殑
+			VciBaseUtil.getBoolean(s.getRequireFlag()) && StringUtils.isBlank(s.getComponentRule()) && (StringUtils.isBlank(s.getClassifyInvokeLevel())||s.getClassifyInvokeLevel().equals("none"))//涓嶈兘鏄粍鍚堢殑鍜屽垎绫绘敞鍏ョ殑
 		).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
 		//涓嶮dmEngineServiceImpl閲岄潰鐨刢heckRequiredAttrOnOrder 閫昏緫搴旇鐩镐技
 		if(!CollectionUtils.isEmpty(requiredAttrMap)) {
@@ -3718,7 +3757,8 @@
 							}
 						}
 						CodeClassifyFullInfoBO newClassifyFullInfo= classifyFullInfoMap.get(cbo.getAttributeValue(CODE_CLASSIFY_OID_FIELD));
-						List<CodeClassifyVO> classifyVOS = newClassifyFullInfo.getParentClassifyVOs().stream().sorted(((o1, o2) -> o2.getDataLevel().compareTo(o1.getDataLevel()))).collect(Collectors.toList());
+						List<CodeClassifyVO> classifyVOS = newClassifyFullInfo.getParentClassifyVOs().stream().sorted(((o1, o2) -> -o2.getDataLevel().compareTo(o1.getDataLevel()))).collect(Collectors.toList());
+
 						int level = VciBaseUtil.getInt(attrVO.getClassifyInvokeLevel());
 						if (classifyVOS.size()>=level && level > 0 ) {
 							classifyVO = classifyVOS.get(level-1);
@@ -3777,7 +3817,7 @@
 		//2.鍒ゆ柇鍏抽敭灞炴�у湪绯荤粺閲屾槸鍚﹂噸澶�
 		//鍥犱负鏁版嵁閲忓緢澶э紝鎵�浠ュ緱鎯冲姙娉曞苟琛�
 		//SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
-		Map<String,List<BaseModel>> indexTODataMap=new HashMap<>();
+		Map<String,List<BaseModel>> indexTODataMap=new ConcurrentHashMap<>();
 		List<ClientBusinessObject> repeatDataMap = cboList.parallelStream().filter(cbo -> {
 			//姣忚閮藉緱鏌ヨ.濡傛灉鍏朵腑鍑虹幇浜嗛敊璇紝鎴戜滑灏辩洿鎺ユ姏鍑哄紓甯革紝鍏朵綑鐨勬樉绀�
 			//VciBaseUtil.setCurrentUserSessionInfo(sessionInfo);
@@ -3929,7 +3969,7 @@
 	 * @return 閲嶅鐨勮鍙�
 	 */
 	private void getSelfRepeatRowIndex(Map<String/**灞炴�х殑缂栧彿**/, CodeClassifyTemplateAttrVO> ketAttrMap,
-											  List<ClientBusinessObject> dataList,CodeKeyAttrRepeatVO keyRuleVO,CodeImportResultVO resultVO){
+									   List<ClientBusinessObject> dataList,CodeKeyAttrRepeatVO keyRuleVO,CodeImportResultVO resultVO){
 		Set<String> selfRepeatRowIndexList = new CopyOnWriteArraySet<>();
 		Map<String,List<String>> keyAttrOkOidTORepeatOidMap=new HashMap<>();
 		boolean trimAll =keyRuleVO ==null?false: VciBaseUtil.getBoolean(keyRuleVO.getIgnoreallspaceflag());
@@ -4021,7 +4061,7 @@
 			DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(dataMap,clientBusinessObject);
 			for (String key:dataMap.keySet()){
 				Object value= dataMap.getOrDefault(key,"");
-				clientBusinessObject.setAttributeValue(key,value==null?"":value.toString());
+				clientBusinessObject.setAttributeValue(key.toLowerCase(Locale.ROOT),value==null?"":value.toString());
 			}
 			clientBusinessObjectList.add(clientBusinessObject);
 		});
@@ -4454,7 +4494,7 @@
 	 * @param idList
 	 * @param btmName
 	 */
-	private void sendApplyGroupcode(List<String> idList,String btmName,String operationType){
+	public void sendApplyGroupcode(List<String> idList,String btmName,String operationType){
 		String oids=VciBaseUtil.array2String(idList.toArray(new String[]{}));
 		if(operationType.equals(sysIntegrationPushTypeEnum.ACCPET_APPCODE.getValue())) {
 			mdmInterJtClient.applyGroupCode(oids,btmName);

--
Gitblit v1.9.3