From 980a7eab362b5a8c00f13427c73053382ca4ba44 Mon Sep 17 00:00:00 2001
From: xiejun <xj@2023>
Date: 星期三, 06 十二月 2023 09:31:31 +0800
Subject: [PATCH] 集团码导入功能开发

---
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java |  270 +++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 237 insertions(+), 33 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 e5dcdbd..6f0f849 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
@@ -31,6 +31,7 @@
 import com.vci.ubcs.omd.feign.IBtmTypeClient;
 import com.vci.ubcs.omd.feign.IWebSecretClient;
 import com.vci.ubcs.omd.vo.BtmTypeVO;
+import com.vci.ubcs.omd.vo.RevisionRuleVO;
 import com.vci.ubcs.starter.bo.WriteExcelData;
 import com.vci.ubcs.starter.exception.VciBaseException;
 import com.vci.ubcs.starter.poi.bo.ReadExcelOption;
@@ -59,6 +60,7 @@
 import org.apache.poi.ss.usermodel.Font;
 import org.apache.poi.ss.usermodel.RichTextString;
 import org.apache.poi.ss.usermodel.Workbook;
+import org.aspectj.apache.bcel.classfile.Code;
 import org.springblade.core.redis.cache.BladeRedis;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
@@ -821,7 +823,7 @@
 			//2.鍒ゆ柇蹇呰緭椤广�傘�傞渶瑕佸叏閮ㄧ殑灞炴�э紝濡傛灉鏄繀杈擄紝浣嗘槸琛ㄥ崟閲岄潰涓嶆樉绀虹殑锛屽彧鑳芥槸鍒嗙被娉ㄥ叆鎴栬�呯粍鍚堣鍒�
 			batchCheckRequiredAttrOnOrder(templateVO,allCboList,errorMap);
 			//3.鍒ゆ柇鍏抽敭灞炴��
-			CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, allCboList,errorMap);
+			CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, allCboList,false,errorMap);
 			Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList();
 			Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList();
 			if(!CollectionUtils.isEmpty(selfRepeatRowIndexList)){
@@ -1094,7 +1096,7 @@
 				batchSwitchComponentAttrOnOrder(attrVOS, cboList);
 
 				//3.鍒ゆ柇鍏抽敭灞炴��
-				CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList,errorMap);
+				CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList,false,errorMap);
 				Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList();
 				Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList();
 				if (!CollectionUtils.isEmpty(selfRepeatRowIndexList)) {
@@ -1615,7 +1617,7 @@
 			//2.鍒ゆ柇蹇呰緭椤广�傘�傞渶瑕佸叏閮ㄧ殑灞炴�э紝濡傛灉鏄繀杈擄紝浣嗘槸琛ㄥ崟閲岄潰涓嶆樉绀虹殑锛屽彧鑳芥槸鍒嗙被娉ㄥ叆鎴栬�呯粍鍚堣鍒�
 			batchCheckRequiredAttrOnOrder(templateVO,cboList,errorMap);
 			//3.鍒ゆ柇鍏抽敭灞炴��
-			CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList,errorMap);
+			CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO,cboList,false,errorMap);
 			Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList();
 			Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList();
 			if(!CollectionUtils.isEmpty(selfRepeatRowIndexList)){
@@ -2102,7 +2104,7 @@
 			//鏈�鍚庡紕缁勫悎瑙勫垯
 			batchSwitchComponentAttrOnOrder(attrVOS,cboList);
 			//3.鍒ゆ柇鍏抽敭灞炴��
-			CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, codeClassifyTemplateVO, cboList,errorMap);
+			CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, codeClassifyTemplateVO, cboList,false,errorMap);
 			Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList();
 			Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList();
 			if(!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)){
@@ -2308,7 +2310,7 @@
 		//鏈�鍚庡紕缁勫悎瑙勫垯
 		batchSwitchComponentAttrOnOrder(attrVOS,cboList);
 		//3.鍒ゆ柇鍏抽敭灞炴��
-		CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList,errorKeyMap);
+		CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList,false,errorKeyMap);
 		Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList();
 		Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList();
 
@@ -4241,7 +4243,7 @@
 	 * @param cboList 鎵归噺鐨勬暟鎹�
 	 */
 	private CodeImportResultVO batchCheckKeyAttrOnOrder(CodeClassifyFullInfoBO classifyFullInfo, CodeClassifyTemplateVO templateVO,
-														List<ClientBusinessObject> cboList,Map<String,String> errorMap) {
+														List<ClientBusinessObject> cboList,boolean isEdit,Map<String,String> errorMap) {
 		//涓嶮dmEngineServiceImpl閲岀殑checkKeyAttrOnOrder鐩镐技
 		//鍏堣幏鍙栧叧閿睘鎬х殑瑙勫垯锛屼篃鍒╃敤缁ф壙鐨勬柟寮�
 		CodeKeyAttrRepeatVO keyRuleVO = keyRuleService.getRuleByClassifyFullInfo(classifyFullInfo);
@@ -4288,6 +4290,12 @@
 				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()){
@@ -4296,7 +4304,7 @@
 					List<BaseModel> newCboList = new ArrayList<>();
 					newDataList.stream().forEach(stringStringMap -> {
 						BaseModel baseModel=new BaseModel();
-						DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(stringStringMap,baseModel);
+						DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(stringStringMap,baseModel,true);
 						baseModel.setData(stringStringMap);
 						newCboList.add(baseModel);
 					});
@@ -4522,7 +4530,7 @@
 		List<ClientBusinessObject> clientBusinessObjectList=new ArrayList<>();
 		oldDataMap.stream().forEach(dataMap->{
 			ClientBusinessObject clientBusinessObject=new ClientBusinessObject();
-			DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(dataMap,clientBusinessObject);
+			DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(dataMap,clientBusinessObject,true);
 			for (String key:dataMap.keySet()){
 				Object value= dataMap.getOrDefault(key,"");
 				clientBusinessObject.setAttributeValue(key.toLowerCase(Locale.ROOT),value==null?"":value.toString());
@@ -4974,7 +4982,7 @@
 	 * @return
 	 */
 	@Override
-	public String exportGroupCodeExcel(String codeClassifyOid) throws ServiceException {
+	public String exportGroupCodeExcel(String codeClassifyOid) throws VciBaseException {
 		VciBaseUtil.alertNotNull(codeClassifyOid,"涓婚搴撳垎绫荤殑涓婚敭");
 		CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyOid);
 		CodeClassifyVO codeClassifyVO= classifyFullInfo.getCurrentClassifyVO();
@@ -4985,8 +4993,8 @@
 
 		ExecGroupCodePortDataDTO execGroupCodePortDataDTO=new ExecGroupCodePortDataDTO();
 		createExportGroupCodeMapConfig(templateVO,execGroupCodePortDataDTO);//缁勭粐鏁版嵁
-		if(!CollectionUtils.isEmpty(execGroupCodePortDataDTO.getCodeAttrMapGroupAttrDTOS())){
-			throw new ServiceException("闆嗗洟灞炴�ф槧灏勬湭閰嶇疆");
+		if(CollectionUtils.isEmpty(execGroupCodePortDataDTO.getCodeAttrMapGroupAttrDTOS())){
+			throw new VciBaseException("闆嗗洟灞炴�ф槧灏勬湭閰嶇疆");
 		}
 		fieldList=execGroupCodePortDataDTO.getFieldList();
 		List<Map<String,String>>dataList=new ArrayList<>();
@@ -5006,9 +5014,7 @@
 		List<WriteExcelData> excelDataList = new ArrayList<>();
 		Workbook workbook = new HSSFWorkbook();
 		List<CodeAndGroupCodeAttrMappingDTO>  codeAndGroupCodeAttrMappingDTOList=	execGroupCodePortDataDTO.getCodeAttrMapGroupAttrDTOS();
-
 		Map<String, CodeAndGroupCodeAttrMappingDTO> jAttrVOMap = codeAndGroupCodeAttrMappingDTOList.stream().filter(s-> finalFieldList.contains(s.getTargetAttrKey().toLowerCase(Locale.ROOT))).collect(Collectors.toMap(s -> s.getTargetAttrKey().toLowerCase(Locale.ROOT), t -> t));
-
 		WriteExcelData codeExcelData = new WriteExcelData(0, 0, "浼佷笟缂栫爜");
 		WriteExcelData groupExcelData = new WriteExcelData(0, 1, "闆嗗洟鐮�");
 		excelDataList.add(codeExcelData);
@@ -5086,7 +5092,9 @@
 	 * @param file
 	 * @return
 	 */
-	public String improtGroupCode(String codeClassifyOid, File file) throws ServiceException {
+	@Transactional(rollbackFor = VciBaseException.class)
+	@Override
+	public String importGroupCode(String codeClassifyOid, File file) throws Throwable {
 		VciBaseUtil.alertNotNull(codeClassifyOid,"鍒嗙被鐨勪富閿�");
 		ReadExcelOption reo = new ReadExcelOption();
 		reo.setReadAllSheet(true);
@@ -5096,14 +5104,14 @@
 			throw new ServiceException("涓轰簡淇濊瘉绯荤粺鐨勭ǔ瀹氭�э紝璇蜂竴娆′笉瑕佸鍏ヨ秴杩�1涓囨潯鐨勬暟鎹�");
 		}
 		CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyOid);
-		CodeClassifyTemplateVO templateVO = new CodeClassifyTemplateVO();
-		//闄ゅ幓榛樿鐨勫睘鎬�.杩樻湁鍙湁琛ㄥ崟鏄剧ず鐨勫瓧娈垫墠瀵煎叆
+		//鑾峰彇鏈�鏂扮殑妯℃澘
+		CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(codeClassifyOid);		//闄ゅ幓榛樿鐨勫睘鎬�.杩樻湁鍙湁琛ㄥ崟鏄剧ず鐨勫瓧娈垫墠瀵煎叆
 		List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s ->!DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) && VciBaseUtil.getBoolean(s.getFormDisplayFlag())
 		).collect(Collectors.toList());
 		ExecGroupCodePortDataDTO execGroupCodePortDataDTO=new ExecGroupCodePortDataDTO();
 		createExportGroupCodeMapConfig(templateVO,execGroupCodePortDataDTO);//缁勭粐鏁版嵁
 		List<CodeAndGroupCodeAttrMappingDTO> codeAttrMapGroupAttrDTOS=execGroupCodePortDataDTO.getCodeAttrMapGroupAttrDTOS();
-		if(!CollectionUtils.isEmpty(codeAttrMapGroupAttrDTOS)){
+		if(CollectionUtils.isEmpty(codeAttrMapGroupAttrDTOS)){
 			throw new ServiceException("闆嗗洟灞炴�ф槧灏勬湭閰嶇疆");
 		}
 		Map<String, CodeAndGroupCodeAttrMappingDTO> codeSystemObjectMap = codeAttrMapGroupAttrDTOS.stream().filter(codeAttrMappingDTO -> codeAttrMappingDTO != null && StringUtils.isNotBlank(codeAttrMappingDTO.getSourceAttrName())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getSourceAttrName(), t -> t));
@@ -5112,28 +5120,219 @@
 		Map<Integer/**鍒楀彿**/,String/**瀛楁鐨勫悕绉�**/> fieldIndexMap = new HashMap<>();
 		getGroupCodeFieldIndexMap(titleRowData,codeAttrMapGroupAttrDTOS,fieldIndexMap);
 		//闇�瑕佸垽鏂槸鍚︽墍鏈夌殑灞炴�ч兘鍦ㄦā鏉夸笂浜�
-		List<CodeClassifyTemplateAttrVO> unExistAttrVOs = attrVOS.stream().filter(s -> !fieldIndexMap.containsValue(s.getId().toLowerCase(Locale.ROOT))
+	/**	List<CodeClassifyTemplateAttrVO> unExistAttrVOs = attrVOS.stream().filter(s -> !fieldIndexMap.containsValue(s.getId().toLowerCase(Locale.ROOT))
 			&& 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)){
 			String message=unExistAttrVOs.stream().map(CodeClassifyTemplateAttrVO::getName).collect(Collectors.joining(SERIAL_UNIT_SPACE));
 			throw new VciBaseException("銆�" + message + "銆戣繖浜涘睘鎬у湪excel涓病鏈夋壘鍒�");
-		}
+		}**/
 		List<ClientBusinessObject> cboList = new ArrayList<>();
 		List<SheetRowData> rowDataList = dataSet.getRowData();
 
 		getExportGroupCodeDatas(fieldIndexMap,rowDataList,cboList);//鏋勫缓鏁版嵁瀵硅薄
+
 		List<String> codeList= cboList.stream().map(ClientBusinessObject::getId).collect(Collectors.toList());
 		List<Map<String,String>>dataList=new ArrayList<>();
-		getDatas(classifyFullInfo,templateVO,execGroupCodePortDataDTO.getFieldList(),dataList,codeList);
-		//鏌ヨ绯荤粺涓瓨鍦�
-		if(!CollectionUtils.isEmpty(dataList)){
+		Map<String,String> errorMap=new HashMap<>();
+		batchSwitchCheckExist(errorMap,cboList,classifyFullInfo,templateVO,execGroupCodePortDataDTO,fieldIndexMap);
+		//鍒ゆ柇蹇呰緭椤�
+		batchCheckRequiredAttrOnOrder(templateVO, cboList, errorMap);
+	//	//浼樺厛鏍¢獙缂栫爜鏄惁瀛樺湪
+	//	batchCheckIdExistOnOrder(templateVO, cboList, errorMap);
+		//boolean
+		reSwitchBooleanAttrOnOrder(attrVOS, cboList);
 
+		// 鏋氫妇鐨勫唴瀹归渶瑕佹牴鎹悕绉拌浆鎹负鏋氫妇鐨勫��
+		batchSwitchEnumAttrOnOrder(attrVOS, cboList, errorMap);
 
+		batchSwitchReferAttrOnOrder(attrVOS, cboList, errorMap);
+		//6.澶勭悊鍒嗙被娉ㄥ叆
+		batchSwitchClassifyAttrOnOrder(attrVOS, cboList, classifyFullInfo,false);
+
+		//璁剧疆榛樿鍊�
+		batchSwitchAttrDefault(attrVOS, cboList);
+
+		//7.澶勭悊缁勫悎瑙勫垯
+		batchSwitchComponentAttrOnOrder(attrVOS, cboList);
+		//4.鏍¢獙瑙勫垯
+		batchCheckVerifyOnOrder(attrVOS, cboList, errorMap);
+		//6.鏃堕棿鐨勶紝蹇呴』缁熶竴涓簓yyy-MM-dd HH:mm:ss
+		batchSwitchDateAttrOnOrder(attrVOS, cboList, errorMap);
+		//3.鍒ゆ柇鍏抽敭灞炴��
+		CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList,true,errorMap);
+		Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList();
+		Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList();
+		if (!CollectionUtils.isEmpty(selfRepeatRowIndexList)) {
+			selfRepeatRowIndexList.stream().forEach(rowIndex -> {
+				errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";鍦ㄥ綋鍓峞xcel鏂囦欢涓叧閿睘鎬ч噸澶�");
+			});
 		}
-		return "";
-	}
+		if (!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)) {
+			keyAttrRepeatRowIndexList.stream().forEach(rowIndex -> {
+				errorMap.put(rowIndex, "鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅;" + errorMap.getOrDefault(rowIndex, ""));
+			});
+		}
+		Map<String,List<WriteExcelData>> shetNameMap=new HashMap<>();
+		createWriteExcelData(rowDataList, errorMap, new ArrayList<>(), titleRowData, shetNameMap, templateVO);
+		String excelFileName="";
+		if(errorMap.size()==0) {
+			try {
+				String btmTypeId = classifyFullInfo.getTopClassifyVO().getBtmTypeId();
+				List<BaseModel>oldCbos= execGroupCodePortDataDTO.getOldList();
+				List<BaseModel>newCbos=new ArrayList<>();
+				// 淇敼鐗堟鍙�
+				engineService.updateBatchByBaseModel(btmTypeId,oldCbos);
+				List<CodeAllCode> codeAllCodeList=new ArrayList<>();
 
+				cboList.stream().forEach(clientBusinessObject -> {
+					BaseModel newBaseModel=new BaseModel();
+					DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(clientBusinessObject.getData(),newBaseModel,true);
+					newCbos.add(newBaseModel);
+				});
+				// 鎻掑叆鏂扮殑鏁版嵁
+				engineService.insertBatchByType(btmTypeId, newCbos);
+				codeAllCodeService.saveOrUpdateBatch(execGroupCodePortDataDTO.getCodeAllCodeList());
+				engineService.batchSaveSelectChar(templateVO, newCbos);
+				// 璁板綍鏁版嵁鏇存敼鏃ュ織
+				saveLogUtil.operateLog("鏁版嵁鏇存敼", false, StringUtil.format("{}\n淇敼涓�:\n{}", JSON.toJSONString(oldCbos), JSON.toJSONString(newCbos)));
+			} catch (Exception vciError) {
+				// 璁板綍鏁版嵁鏇存敼鎶ラ敊鏃剁殑鏃ュ織
+				saveLogUtil.operateLog("鏁版嵁鏇存敼", true, vciError.toString());
+				throw new VciBaseException("鏁版嵁鏇存敼淇濆瓨鍑洪敊浜�", new String[0], vciError);
+			}
+		}else{
+			excelFileName = LocalFileUtil.getDefaultTempFolder() + File.separator + "閿欒淇℃伅.xls";
+			WriteExcelOption eo = new WriteExcelOption();
+			shetNameMap.forEach((shetName, errorDataList) -> {
+				eo.addSheetDataList(shetName, errorDataList);
+			});
+			try {
+				new File(excelFileName).createNewFile();
+			} catch (IOException e) {
+				throw new VciBaseException(LangBaseUtil.getErrorMsg(e));
+			}
+			ExcelUtil.writeDataToFile(excelFileName, eo);
+		}
+		return excelFileName;
+	}
+	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<>();
+		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));
+			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);
+				String oldOid=oldBaseModel.getOid();
+
+				clientBusinessObject.setCopyFromVersion(oldOid);
+				clientBusinessObject.setAttributeValueWithNoCheck("copyfromversion",oldOid);
+				String oid=VciBaseUtil.getPk();
+				clientBusinessObject.setOid(oid);
+				clientBusinessObject.setAttributeValueWithNoCheck("oid",oid);
+				clientBusinessObject.setBtmname(oldBaseModel.getBtmname());
+				clientBusinessObject.setAttributeValueWithNoCheck("btmname",oldBaseModel.getBtmname());
+				clientBusinessObject.setLastR("1");
+				clientBusinessObject.setAttributeValueWithNoCheck("lastr","1");
+				clientBusinessObject.setFirstR("1");
+				clientBusinessObject.setAttributeValueWithNoCheck("firstr","1");
+				clientBusinessObject.setFirstV("1");
+				clientBusinessObject.setAttributeValueWithNoCheck("firstv","1");
+				clientBusinessObject.setLastV("1");
+				clientBusinessObject.setAttributeValueWithNoCheck("lastv","1");
+				clientBusinessObject.setRevisionSeq(1);
+				clientBusinessObject.setAttributeValueWithNoCheck("revisionseq","1");
+				clientBusinessObject.setVersionSeq(1);
+				clientBusinessObject.setAttributeValueWithNoCheck("versionseq","1");
+				clientBusinessObject.setRevisionRule(oldBaseModel.getRevisionRule());
+				clientBusinessObject.setAttributeValueWithNoCheck("revisionrule",oldBaseModel.getRevisionRule());
+				clientBusinessObject.setVersionRule(oldBaseModel.getRevisionRule());
+				clientBusinessObject.setAttributeValueWithNoCheck("versionrule",oldBaseModel.getVersionRule());
+				clientBusinessObject.setVersionValue(oldBaseModel.getVersionValue());
+				clientBusinessObject.setAttributeValueWithNoCheck("versionvalue",oldBaseModel.getVersionValue());
+				clientBusinessObject.setLctid(oldBaseModel.getLctid());
+				clientBusinessObject.setAttributeValueWithNoCheck("lctid",oldBaseModel.getLctid());
+				clientBusinessObject.setId(oldBaseModel.getId());
+				clientBusinessObject.setAttributeValueWithNoCheck("id",oldBaseModel.getId());
+				clientBusinessObject.setName(oldBaseModel.getName());
+				clientBusinessObject.setAttributeValueWithNoCheck("name",oldBaseModel.getName());
+				clientBusinessObject.setLcStatus(CodeDefaultLC.RELEASED.getValue());
+				clientBusinessObject.setAttributeValueWithNoCheck("lcstatus",CodeDefaultLC.RELEASED.getValue());
+				clientBusinessObject.setDescription("瀵煎叆闆嗗洟鐮�");
+				clientBusinessObject.setAttributeValueWithNoCheck("description","瀵煎叆闆嗗洟鐮�");
+				clientBusinessObject.setOwner("1");
+				clientBusinessObject.setAttributeValueWithNoCheck("owner","1");
+				clientBusinessObject.setTenantId(AuthUtil.getTenantId());
+				clientBusinessObject.setAttributeValueWithNoCheck("tenant_id",AuthUtil.getTenantId());
+				clientBusinessObject.setCreator(oldBaseModel.getCreator());
+				clientBusinessObject.setAttributeValueWithNoCheck("creator",oldBaseModel.getCreator());
+				SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+				clientBusinessObject.setCreateTime(oldBaseModel.getCreateTime());
+				clientBusinessObject.setAttributeValueWithNoCheck("createtime", formatter.format(oldBaseModel.getCreateTime()));
+				clientBusinessObject.setLastModifier(AuthUtil.getUserAccount());
+				clientBusinessObject.setAttributeValueWithNoCheck("lastmodifier",AuthUtil.getUserAccount());
+				clientBusinessObject.setCreateTime(new Date());
+				clientBusinessObject.setAttributeValueWithNoCheck("lastmodifytime", formatter.format(new Date()));
+				clientBusinessObject.setRevisionValue(String.valueOf(Integer.parseInt(oldBaseModel.getRevisionValue())+1));
+				clientBusinessObject.setRevisionOid(oldBaseModel.getRevisionOid());
+				clientBusinessObject.setAttributeValueWithNoCheck("revisionoid",oldBaseModel.getRevisionOid());
+				clientBusinessObject.setAttributeValueWithNoCheck("revisionvalue",String.valueOf(Integer.parseInt(oldBaseModel.getRevisionValue())+1));
+
+				clientBusinessObject.setNameOid(oldBaseModel.getNameOid());
+				clientBusinessObject.setAttributeValueWithNoCheck("nameoid",oldBaseModel.getNameOid());
+
+				clientBusinessObject.setAttributeValueWithNoCheck(CODE_CLASSIFY_OID_FIELD,oldBaseModel.getData().getOrDefault(CODE_CLASSIFY_OID_FIELD,""));
+				clientBusinessObject.setAttributeValueWithNoCheck(CODE_FULL_PATH_FILED,oldBaseModel.getData().getOrDefault(CODE_FULL_PATH_FILED,""));
+				clientBusinessObject.setAttributeValueWithNoCheck(CODE_TEMPLATE_OID_FIELD,oldBaseModel.getData().getOrDefault(CODE_TEMPLATE_OID_FIELD,""));
+				clientBusinessObject.setTs(new Date());
+				clientBusinessObject.setAttributeValueWithNoCheck("ts",formatter.format(new Date()));
+				oldBaseModel.setLastV("0");
+				oldBaseModel.getData().put("lastv","0");
+				oldBaseModelList.add(oldBaseModel);
+				List<CodeAllCode> oldCodeAllCodeList= codeAllCodeService.selectByWrapper(Wrappers.<CodeAllCode>query().lambda().eq(CodeAllCode::getId,code));
+				CodeAllCode codeAllCode=new CodeAllCode();
+				if(!CollectionUtils.isEmpty(oldCodeAllCodeList)){
+					codeAllCode=oldCodeAllCodeList.get(0);
+					codeAllCode.setId(code);
+					codeAllCode.setLcStatus(CodeDefaultLC.RELEASED.getValue());
+					codeAllCode.setCreateCodeOid(clientBusinessObject.getOid());
+					codeAllCode.setCreateCodeBtm(clientBusinessObject.getBtmname());
+					codeAllCode.setLastModifyTime(new Date());
+					codeAllCode.setLastModifier(AuthUtil.getUserAccount());
+					codeAllCodeList.add(codeAllCode);
+					if(!oldBaseModel.getLcStatus().equals(CodeDefaultLC.RELEASED.getValue())||!codeAllCode.getLcStatus().equals(CodeDefaultLC.RELEASED.getValue())){
+						errorMap.put(rowIndex,"绗�"+rowIndex+"琛岋紝鍦ㄧ郴缁熶腑鏁版嵁涓嶆槸鍙戝竷鐘舵��");
+					}
+				}else{
+					errorMap.put(rowIndex,"绗�"+rowIndex+"琛岋紝鍦ㄧ郴缁熶腑鏈煡璇㈠埌鐩稿簲鐨勭爜鍊兼暟鎹�");
+				}
+				//闄ゅ幓榛樿鐨勫睘鎬�.杩樻湁鍙湁琛ㄥ崟鏄剧ず鐨勫瓧娈垫墠瀵煎叆
+				List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s ->!fieldIndexMap.containsValue(s.getId()) && VciBaseUtil.getBoolean(s.getFormDisplayFlag())
+				).collect(Collectors.toList());
+				attrVOS.stream().forEach(codeClassifyTemplateAttrVO -> {//灏嗕笉闇�瑕佹洿鏀圭殑榛樿瀛楁鎴栬�呬笉鏇存敼鐨勫睘鎬у鍒跺埌鏂扮殑鐗堟湰涓�
+					String arrtibuteKey=codeClassifyTemplateAttrVO.getId();
+					Map<String,String>attrDataMap=oldBaseModel.getData();
+					if(attrDataMap.containsKey(arrtibuteKey)){
+						String arrtibuteValue=attrDataMap.get(arrtibuteKey);
+						clientBusinessObject.setAttributeValueWithNoCheck(arrtibuteKey,arrtibuteValue);
+					}
+				});
+			}else{
+				errorMap.put(rowIndex,"绗�"+rowIndex+"琛岋紝鍦ㄧ郴缁熶腑鏈煡璇㈠埌鐩稿簲鐨勬渶鏂扮増鏁版嵁");
+			}
+		});
+		execGroupCodePortDataDTO.setOldList(oldBaseModelList);
+		execGroupCodePortDataDTO.setCodeAllCodeList(codeAllCodeList);
+	}
 	/**
 	 *
 	 * @param fieldIndexMap
@@ -5142,8 +5341,10 @@
 	 */
 	private void getExportGroupCodeDatas(Map<Integer,String> fieldIndexMap,List<SheetRowData> rowDataList,List<ClientBusinessObject>cboList){
 		rowDataList.stream().forEach(sheetRowData -> {
+			String rowIndex= sheetRowData.getRowIndex();
+			ClientBusinessObject cbo=new ClientBusinessObject();
+			cbo.setAttributeValue(IMPORT_ROW_INDEX,rowIndex);
 			sheetRowData.getData().forEach((index,value)->{
-				ClientBusinessObject cbo=new ClientBusinessObject();
 				String field = fieldIndexMap.get(index);
 				if (StringUtils.isBlank(field)) {
 					throw new VciBaseException("绗�" + (index + 1) + "鍒楃殑鏍囬鍦ㄧ郴缁熶腑涓嶅瓨鍦�");
@@ -5156,8 +5357,8 @@
 				} catch (VciBaseException e) {
 					log.error("璁剧疆灞炴�х殑鍊奸敊璇�", e);
 				}
-				cboList.add(cbo);
 			});
+			cboList.add(cbo);
 		});
 	}
 	/***
@@ -5205,16 +5406,19 @@
 		Map<String, CodeAndGroupCodeAttrMappingDTO> codeSystemObjectMap = codeAttrMapGroupAttrDTOS.stream().filter(codeAttrMappingDTO -> codeAttrMappingDTO != null && StringUtils.isNotBlank(codeAttrMappingDTO.getSourceAttrName())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getSourceAttrName(), t -> t));
 		for (int i = 0; i < titleRowData.size(); i++) {
 			String title = titleRowData.get(i);
-			CodeAndGroupCodeAttrMappingDTO codeAndGroupCodeAttrMappingDTO =codeSystemObjectMap.get(title.replace(KEY_ATTR_CHAR,"").replace(REQUIRED_CHAR,""));
-			String id=codeAndGroupCodeAttrMappingDTO.getTargetAttrKey();
-			if(com.alibaba.cloud.commons.lang.StringUtils.isBlank(id) && "闆嗗洟鐮�".equalsIgnoreCase(title)){
+			String id = "";
+			if ("闆嗗洟鐮�".equalsIgnoreCase(title)) {
 				id = CODE_GROUP_FIELD;
 			}
-			if(com.alibaba.cloud.commons.lang.StringUtils.isBlank(id) && "浼佷笟缂栫爜".equalsIgnoreCase(title)){
+			if ("浼佷笟缂栫爜".equalsIgnoreCase(title)) {
 				id = CODE_FIELD;
 			}
-			if(com.alibaba.cloud.commons.lang.StringUtils.isNotBlank(id)){
-				fieldIndexMap.put(i,id);
+			if(codeSystemObjectMap.containsKey(title)) {
+				CodeAndGroupCodeAttrMappingDTO codeAndGroupCodeAttrMappingDTO = codeSystemObjectMap.get(title.replace(KEY_ATTR_CHAR, "").replace(REQUIRED_CHAR, ""));
+				id = codeAndGroupCodeAttrMappingDTO.getTargetAttrKey();
+			}
+			if (com.alibaba.cloud.commons.lang.StringUtils.isNotBlank(id)) {
+				fieldIndexMap.put(i, id);
 			}
 		}
 
@@ -5227,7 +5431,7 @@
 	 * @param selectFieldList
 	 * @param dataList
 	 */
-	private void getDatas(CodeClassifyFullInfoBO classifyFullInfo,CodeClassifyTemplateVO templateVO,LinkedList<String> selectFieldList,List<Map<String,String>>dataList,List<String> codeList ){
+	private void getDatas(CodeClassifyFullInfoBO classifyFullInfo,CodeClassifyTemplateVO templateVO,LinkedList<String> selectFieldList,List<Map<String,String>>dataList,List<String> codeList){
 		//鍏堟煡璇㈡暟鎹�
 		String btmTypeId = classifyFullInfo.getTopClassifyVO().getBtmTypeId();
 		String codeClassifyOid=classifyFullInfo.getCurrentClassifyVO().getOid();

--
Gitblit v1.9.3