From 25ef4e85586c27433c865b69c67ccf5a380b93a7 Mon Sep 17 00:00:00 2001
From: ludc
Date: 星期二, 05 十二月 2023 13:52:07 +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 |  493 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 481 insertions(+), 12 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 dfc6153..0090df0 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.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.nacos.common.utils.StringUtils;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.google.protobuf.ServiceException;
 import com.vci.ubcs.code.applyjtcodeservice.entity.DockingPreAttrMapping;
@@ -50,6 +51,7 @@
 import com.vci.ubcs.starter.web.util.*;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import oracle.sql.TIMESTAMP;
 import org.apache.commons.collections4.map.HashedMap;
 import org.apache.poi.hssf.usermodel.HSSFRichTextString;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
@@ -58,6 +60,7 @@
 import org.apache.poi.ss.usermodel.RichTextString;
 import org.apache.poi.ss.usermodel.Workbook;
 import org.springblade.core.redis.cache.BladeRedis;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.StringUtil;
@@ -68,10 +71,18 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import javax.annotation.Resource;
+import java.beans.BeanInfo;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
 import java.io.File;
 import java.io.IOException;
+import java.lang.reflect.Method;
+import java.math.BigDecimal;
 import java.text.MessageFormat;
 import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CopyOnWriteArrayList;
@@ -188,9 +199,9 @@
 	private SaveLogUtil saveLogUtil;
 
 	/**
-	 * 瀵煎嚭鐨勫崄涓囨潯
+	 * 瀹㈡埛鐜板満excel涓鸿�佺増鏈紝瀵煎嚭鐨勬�绘暟闄愬埗涓�65535
 	 */
-	public static final int EXPORT_LIMIT = 100000;
+	public static final int EXPORT_LIMIT = 65535;
 
 	/**
 	 * 鎵归噺鐢宠锛氶�夊彇閫変腑鍒嗙被涓嬬殑鎵�鏈夋ā鏉垮叧閿睘鎬э紝鐩镐技灞炴�э紝蹇呭~灞炴�э紝鍐欏叆execl涓�
@@ -371,7 +382,7 @@
 		CodeClassifyVO codeClassifyVO = classifyService.getObjectByOid(codeClassifyOid);
 
 		//鑾峰彇鐮佹瀹藉害
-		//String secWidth = getCodeSegmentWidth(codeClassifyVO.getOid());
+		String secWidth = getCodeSegmentWidth(codeClassifyVO.getOid());
 
 		if(isHistory){
 			templateVOList= templateService.childTemplates(codeClassifyOid);
@@ -480,6 +491,123 @@
 			tempEDList.add(new WriteExcelData(j+1,2,templateVO.getName()));
 		}
 		String excelName = LocalFileUtil.getDefaultTempFolder() + File.separator + codeClassifyVO.getName() + (isHistory?"_鍘嗗彶鏁版嵁瀵煎叆妯℃澘.xls": "_瀵煎叆妯℃澘.xls");
+		eo.addSheetDataList(templateVOList.size()+"妯℃澘淇℃伅銆愯鍕垮垹闄ゆ垨绉诲姩銆�",tempEDList);
+		ExcelUtil.writeDataToFile(excelName,eo);
+		return excelName;
+	}
+
+	/**
+	 * 鐢熸垚鎵归噺淇敼瀵煎叆鐨勬枃浠�
+	 *
+	 * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+	 * @return excel鐨勬枃浠跺湴鍧�
+	 */
+	@Override
+	public String downloadImportExcelBatchEdit(String codeClassifyOid) {
+		List<CodeClassifyTemplateVO> templateVOList=new ArrayList<>();
+		VciBaseUtil.alertNotNull("瀵煎嚭妯℃澘","瀵煎嚭鐨勯厤缃�",codeClassifyOid,"涓婚搴撳垎绫荤殑涓婚敭");
+
+		CodeClassifyVO codeClassifyVO = classifyService.getObjectByOid(codeClassifyOid);
+
+		templateVOList= templateService.childTemplates(codeClassifyOid);
+
+		WriteExcelOption eo = new WriteExcelOption();
+		eo.setAppend(true);
+		//澧炲姞妯℃澘鐨勪俊鎭鍏�
+		LinkedList<WriteExcelData> tempEDList = new LinkedList<>();
+		tempEDList.add(new WriteExcelData(0,0,"缂栧彿"));
+		for(int j=0;j<templateVOList.size();j++){
+			CodeClassifyTemplateVO  templateVO=templateVOList.get(j);
+			CodeClassifyTemplateVO codeClassifyTemplateVO = new CodeClassifyTemplateVO();
+			BeanUtils.copyProperties(templateVO,codeClassifyTemplateVO);
+			//缁勫悎鏍煎紡鐨勪笉瀵煎叆锛�
+			// 鏋氫妇鐨勬彁渚涘簭鍒楃殑閫夋嫨
+			//鏃堕棿鍏ㄩ儴缁熶竴涓簓yyy-MM-dd HH:mm:ss
+			//鍙傜収鐨勮嚜琛岃緭鍏ュ悕绉�
+			//鍒嗙被娉ㄥ叆鐨勪笉鐢紝閮芥槸瀵煎叆鍚庤嚜鍔ㄥ鐞嗙殑
+			//缂栫爜锛岀姸鎬佺瓑瀛楁涓嶅鍏�
+			List<CodeClassifyTemplateAttrVO> codeClassifyTemplateAttrVOList=codeClassifyTemplateVO.getAttributes();
+			if(!CollectionUtils.isEmpty(codeClassifyTemplateAttrVOList)) {
+				if (CollectionUtils.isEmpty(codeClassifyTemplateAttrVOList)) {
+					throw new VciBaseException("妯℃澘娌℃湁閰嶇疆灞炴��");
+				}
+			}
+			List<CodeClassifyTemplateAttrVO> templateAttrVOS = codeClassifyTemplateAttrVOList.stream().filter(s ->
+				!DEFAULT_ATTR_LIST.contains(s.getId())
+					&& StringUtils.isBlank(s.getComponentRule())
+					&& StringUtils.isBlank(s.getClassifyInvokeAttr())
+					&& (VciBaseUtil.getBoolean(s.getFormDisplayFlag()))
+			).collect(Collectors.toList());
+
+			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,"缂栫爜(id)",""));
+//				excelDataList.add(new WriteExcelData(0,1,"鐮佹瀹藉害",""));
+//			excelDataList.add(new WriteExcelData(0,1,!CollectionUtils.isEmpty(idAttrVOList)?idAttrVOList.get(0).getName():"浼佷笟缂栫爜",idAttrVOList.get(0).getId()));
+//			}
+			for (int i = 0; i < templateAttrVOS.size(); i++) {
+				CodeClassifyTemplateAttrVO attrVO = templateAttrVOS.get(i);
+
+				Object text = attrVO.getName();
+				text = exportKeyAndRequired(workbook,attrVO,text);
+				int colIndex = 1 + i;
+				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())
+					||VciFieldTypeEnum.VTTime.name().equalsIgnoreCase(attrVO.getAttributeDataType())){
+					excelData.setDateFormat(VciDateUtil.DateTimeFormat);
+				}
+				if(text instanceof RichTextString){
+					excelData.setFontColor(String.valueOf(HSSFColor.HSSFColorPredefined.RED.getIndex()));
+				}
+				excelDataList.add(excelData);
+				if(StringUtils.isNotBlank(attrVO.getEnumString()) || StringUtils.isNotBlank(attrVO.getEnumId())){
+					//娣诲姞鏁版嵁鏈夋晥鎬�
+					List<String> enumValueList = new ArrayList<>();
+					enumValueList.add("");
+					List<KeyValue> valueList = engineService.listComboboxItems(attrVO);
+					if(!CollectionUtils.isEmpty(valueList)){
+						valueList.stream().forEach(kv->{
+							enumValueList.add(kv.getValue());
+						});
+					}
+					//榛樿鍔�1涓囨潯
+					WriteExcelData ed = new WriteExcelData(1,colIndex,"");
+					ed.setRowTo(100);
+					ed.setColTo(colIndex);
+					ed.setValidation(true);
+					ed.setValidationDataList(enumValueList);
+					ed.setValidationErrorMsg("璇峰湪搴忓垪涓�夋嫨姝g‘鐨勫��");
+					excelDataList.add(ed);
+				}
+				if(VciFieldTypeEnum.VTBoolean.name().equalsIgnoreCase(attrVO.getAttributeDataType())){
+					List<String> booleanList = new ArrayList<>();
+
+					booleanList.add("鏄�");
+					booleanList.add("鍚�");
+					//榛樿鍔�1涓囨潯
+					WriteExcelData ed = new WriteExcelData(1,colIndex,"");
+					ed.setRowTo(100);
+					ed.setColTo(colIndex);
+					ed.setValidation(true);
+					ed.setValidationDataList(booleanList);
+					ed.setValidationErrorMsg("璇峰湪搴忓垪涓�夋嫨姝g‘鐨勫��");
+					excelDataList.add(ed);
+				}
+			}
+			eo.addSheetDataList(j+templateVO.getName(),excelDataList);
+			tempEDList.add(new WriteExcelData(j+1,0,templateVO.getOid()));
+			tempEDList.add(new WriteExcelData(j+1,1,templateVO.getId()));
+			tempEDList.add(new WriteExcelData(j+1,2,templateVO.getName()));
+		}
+		String excelName = LocalFileUtil.getDefaultTempFolder() + File.separator + codeClassifyVO.getName() + ("_灞炴�ф壒閲忎慨鏀规ā鏉�.xls");
 		eo.addSheetDataList(templateVOList.size()+"妯℃澘淇℃伅銆愯鍕垮垹闄ゆ垨绉诲姩銆�",tempEDList);
 		ExcelUtil.writeDataToFile(excelName,eo);
 		return excelName;
@@ -1148,6 +1276,140 @@
 		}
 	}
 
+	/**
+	 * 瀵煎叆鎵归噺缂栬緫鏁版嵁
+	 *
+	 * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+	 * @param classifyAttr 鍒嗙被璺緞浣跨敤鐨勫睘鎬�
+	 * @param file            excel鏂囦欢鐨勪俊鎭�
+	 * @return 鏈夐敊璇俊鎭殑excel
+	 */
+	@Override
+	public CodeImProtRusultVO batchImportEdit(String codeClassifyOid, String classifyAttr,File file) throws  Throwable{
+		VciBaseUtil.alertNotNull(codeClassifyOid,"鍒嗙被鐨勪富閿�");
+		ReadExcelOption reo = new ReadExcelOption();
+		reo.setReadAllSheet(true);
+		List<SheetDataSet> sheetDataSetList = ExcelUtil.readDataObjectFromExcel(file,null,reo);
+		if (sheetDataSetList.get(0).getRowData().size() > LIMIT + 1) {
+			throw new ServiceException("涓轰簡淇濊瘉绯荤粺鐨勭ǔ瀹氭�э紝璇蜂竴娆′笉瑕佸鍏ヨ秴杩�1涓囨潯鐨勬暟鎹�");
+		}
+		if (sheetDataSetList.get(0).getRowData().size() == 0) {
+			throw new ServiceException("鏈鍙栧埌excle鐩稿叧鏁版嵁锛岃纭锛侊紒锛�");
+		}
+		boolean isExport=false;
+		Map<String,List<WriteExcelData>> shetNameMap=new HashMap<>();
+		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+"鏉$殑鏁版嵁");
+			}
+			//鏌ヨ鍒嗙被鍜屾ā鏉�
+			CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyOid);
+
+			//鍏堟壘鍒版瘡涓�琛岀殑鏍囬锛岀劧鍚庢牴鎹爣棰樻潵鑾峰彇瀵瑰簲鐨勫睘鎬�
+			SheetDataSet dataSet = sheetDataSetList.get(i);
+			List<SheetRowData> rowDataList = dataSet.getRowData();
+
+			//鎵剧涓�琛岋紝涓轰簡鎵炬爣棰�
+			CodeClassifyTemplateVO templateVO ;
+			//閮借浆鎹㈠畬浜嗐�傞渶瑕佹壒閲忔鏌�
+			//鎵炬墍鏈夌殑鍒嗙被璺緞,闇�瑕佹牎楠岃矾寰勬槸鍚︽纭紝鏄惁閮藉湪褰撳墠鐨勫垎绫荤殑涓嬬骇
+			List<CodeClassifyVO> childClassifyVOs = classifyService.listChildrenClassify(codeClassifyOid, true, classifyAttr, true);
+			Map<String/**璺緞**/, CodeClassifyVO> pathMap = Optional.ofNullable(childClassifyVOs).orElseGet(() -> new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getPath().startsWith("#") ? s.getPath().substring(1) : s.getPath(), t -> t));
+			List<String> titleRowData = dataSet.getColName();
+			Map<String, String> errorMap = new ConcurrentHashMap<>();
+			pathMap.put("#current#",classifyFullInfo.getCurrentClassifyVO());
+
+			try {
+				titleRowData.add("鍒嗙被璺緞");
+				List<CodeClassifyTemplateVO> templateVOList= checkSamesTemplate(titleRowData,sheetDataSetList,i,pathMap,errorMap);
+				titleRowData.remove(titleRowData.size()-1);
+				templateVO= templateVOList.get(0);
+			}catch (Throwable e){
+				throw  new VciBaseException(e.getMessage());
+			}
+
+			CodeClassifyTemplateVO finalTemplateVO = templateVO;
+
+			List<SheetRowData> needowDataList = rowDataList.stream().filter(cbo -> {
+				String rowIndex = cbo.getRowIndex();
+				return !errorMap.containsKey(rowIndex);
+			}).collect(Collectors.toList());
+			//杩欓噷涓嶉櫎鍘婚粯璁ょ殑灞炴��
+			List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes();
+			Map<Integer/**鍒楀彿**/, String/**瀛楁鐨勫悕绉�**/> fieldIndexMap = new HashMap<>();
+
+			Map<String/**涓枃鍚嶇О**/, String/**鑻辨枃鍚嶇О**/> attrNameIdMap = attrVOS.stream().collect(Collectors.toMap(s -> s.getName(), t -> t.getId()));
+			fieldIndexMap.put(0,"id");
+			getFieldIndexMap(titleRowData, attrNameIdMap, fieldIndexMap);
+			//鍏堜笉鐢ㄧ灞炴�ф槸鍚﹂兘瀛樺湪锛屽厛杞崲涓�涓嬫暟鎹�
+			CodeOrderDTO orderDTO = new CodeOrderDTO();
+			for (SheetRowData sheetRowData : needowDataList) {
+				//鏌ヨ鏁版嵁
+				Map<String, String> conditionMap = new HashMap<>();
+				conditionMap.put("t.id", sheetRowData.getData().get(0));
+				conditionMap.put("t.lastv", "1");
+				CodeTemplateAttrSqlBO sqlBO = mdmEngineService.getSqlByTemplateVO(classifyFullInfo.getTopClassifyVO().getBtmTypeId(), templateVO, conditionMap, new PageHelper(-1));
+				//鎴戜滑浣跨敤鍜屼笟鍔$被鍨嬬殑鏉ユ煡璇�
+				List<Map> cbosB = commonsMapper.selectBySql(sqlBO.getSqlUnPage());
+				if(cbosB.size() == 0){
+					throw  new ServiceException("缂栫爜锛�"+ sheetRowData.getData().get(0) + ",鏈兘鏌ヨ鍒扮浉鍏虫暟鎹��");
+				}
+				excelToCboEdit(fieldIndexMap, sheetRowData, orderDTO, cbosB.get(0));
+				orderDTO.setCopyFromVersion(orderDTO.getOid());
+				orderDTO.setOid(null);
+				try {
+					mdmEngineService.upSaveCode(orderDTO);
+					List<Map> newCbos = commonsMapper.selectBySql(sqlBO.getSqlUnPage());
+					//瀵圭爜鍊艰〃杩涜澶勭悊鏇挎崲鍒涘缓鏁版嵁鐨刼id
+					QueryWrapper<CodeAllCode> wrapper = new QueryWrapper<>();
+					wrapper.eq("CREATECODEOID",orderDTO.getCopyFromVersion());
+					List<CodeAllCode> codeAllCodes = codeAllCodeService.selectByWrapper(wrapper);
+					codeAllCodes.get(0).setCreateCodeOid(newCbos.get(0).get("OID").toString());
+					codeAllCodes.get(0).setLastModifyTime(new Date());
+					codeAllCodes.get(0).setTs(new Date());
+					codeAllCodes.get(0).setLastModifier(AuthUtil.getUser().getUserName());
+					codeAllCodeService.updateBatchById(codeAllCodes);
+				} catch (Throwable e) {
+					log.error("鎵归噺浜х敓缂栫爜鐨勬椂鍊欏嚭閿欎簡", e);
+					errorMap.put(sheetRowData.getRowIndex(), ";绯荤粺閿欒锛屽瓨鍌ㄦ暟鎹殑鏃跺�欏嚭閿欎簡:"+e.getMessage());
+				}
+			}
+			if (errorMap.size() > 0) {
+				isExport = true;
+			}
+			createWriteExcelData(rowDataList, errorMap, new ArrayList<>(), titleRowData, shetNameMap, finalTemplateVO);
+
+		}
+		String excelFileName="";
+		if(isExport&&!CollectionUtils.isEmpty(shetNameMap)) {
+			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);
+		}
+		CodeImProtRusultVO codeImProtRusultVO=new CodeImProtRusultVO();
+		if(StringUtils.isNotBlank(excelFileName)) {
+			codeImProtRusultVO.setFilePath(excelFileName);
+			codeImProtRusultVO.setFileOid("");
+			saveLogUtil.operateLog("鏁版嵁鎵归噺鏇存敼",true, StringUtil.format("閿欒淇℃伅锛歿}",JSON.toJSONString(shetNameMap)) );
+		}else{
+			saveLogUtil.operateLog("鏁版嵁鎵归噺鏇存敼",false, StringUtil.format("瀵煎叆鎴愬姛鎬绘暟涓猴細{}",
+				sheetDataSetList.size()-1));
+		}
+		return codeImProtRusultVO;
+	}
 	/*private void converBaseModels(List<ClientBusinessObject> clientBusinessObjects,List<BaseModel>dataCBOList){
 		clientBusinessObjects.stream().forEach(clientBusinessObject -> {
 			BaseModel baseModel=new BaseModel();
@@ -1576,10 +1838,10 @@
 			tableName = VciBaseUtil.getTableName(btmTypeId);
 		}
 
-		String countSql = "select count(*) from " + tableName +" where 1=1" +
+		String countSql = "select count(*) from (select * FROM " + tableName +" where 1=1" +
 			" and lastr = '1'" +
 			" and lastv='1'" +
-			" and codeclsfpath like '%" + exportAttrDTO.getCodeClassifyOid() + "%'";
+			" and codeclsfpath like '%" + exportAttrDTO.getCodeClassifyOid() + "%' {}";
 
 		//鍏堟煡璇㈡�绘暟
 		int total = 0;
@@ -1593,8 +1855,7 @@
 				thisPage.setSort(exportAttrDTO.getSort());
 				thisPage.setOrder(exportAttrDTO.getOrder());
 				thisPage.addDefaultDesc("createTime");
-
-				total += commonsMapper.queryCountBySql(countSql);
+				total += commonsMapper.queryCountBySql(StringUtil.format(countSql," limit " + exportAttrDTO.getLimit() +" offset "+ i +")subquery;"));
 			}
 		}else{
 			total = commonsMapper.queryCountBySql(countSql);
@@ -1632,10 +1893,10 @@
 			}
 			Map<String, String> finalConditionMap = conditionMap;
 			//骞惰鏌ヨ鐪嬬湅
-			SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
+			//SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
 			indexList.stream().forEach(index->{
 				//绾跨▼鐨勬柟寮忥紝鎵�浠ラ渶瑕佽缃綋鍓嶇敤鎴�
-				VciBaseUtil.setCurrentUserSessionInfo(sessionInfo);
+				//VciBaseUtil.setCurrentUserSessionInfo(sessionInfo);
 				PageHelper thisPage = new PageHelper(EXPORT_LIMIT);
 				thisPage.setPage(index+1);
 				thisPage.setSort(exportAttrDTO.getSort());
@@ -3290,6 +3551,106 @@
 	}
 
 	/**
+	 * excel杞崲涓篶bo鐨勫璞�
+	 * @param fieldIndexMap 瀛楁鐨勪綅缃�
+	 * @param rowDataList excel閲岀殑琛屾暟鎹�
+	 * @param orderDTO 鏁寸悊鐨勬暟鎹�
+	 * @param map 鏁版嵁鐨勫垪琛�
+	 */
+	private void excelToCboEdit(Map<Integer,String> fieldIndexMap,SheetRowData rowDataList,
+							CodeOrderDTO orderDTO,
+							Map map){
+		rowDataList.getData().forEach((index,value)->{
+				String field = fieldIndexMap.get(index);
+				if (StringUtils.isBlank(field)) {
+					throw new VciBaseException("绗�" + (index + 1) + "鍒楃殑鏍囬鍦ㄧ郴缁熶腑涓嶅瓨鍦�");
+				}
+				map.put(field,value);
+			});
+
+		try {
+//			for (Map map : cbos) {
+//			Object obj = CodeOrderDTO.class.newInstance();
+			BeanInfo beanInfo = Introspector.getBeanInfo(orderDTO.getClass());
+			PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
+			for (PropertyDescriptor property : propertyDescriptors) {
+				Method setter = property.getWriteMethod();
+				if (setter != null) {
+					//oracle鐨勬椂闂翠负TIMESTAMP鐨勶紝闇�瑕佽繘琛岃浆鎹㈡垚data锛屽惁鍒欏皢鎶ラ敊
+					if (map.get(property.getName().toUpperCase()) instanceof TIMESTAMP) {
+						LocalDateTime localDateTime = ((TIMESTAMP) map.get(property.getName().toUpperCase())).toLocalDateTime();
+						ZoneId zoneId = ZoneId.systemDefault();
+						ZonedDateTime zdt = localDateTime.atZone(zoneId);
+						Date date = Date.from(zdt.toInstant());
+						setter.invoke(orderDTO, date);
+						map.remove(property.getName().toUpperCase());
+					} //oracle鐨勬暟瀛椾负BigDecimal鐨勶紝闇�瑕佽繘琛岃浆鎹㈡垚Integer锛屽惁鍒欏皢鎶ラ敊
+					else if (map.get(property.getName().toUpperCase()) instanceof BigDecimal
+						&& ("Integer").equals(setter.getParameterTypes()[0].getSimpleName())) {
+						setter.invoke(orderDTO, ((BigDecimal) map.get(property.getName().toUpperCase())).intValue());
+						map.remove(property.getName().toUpperCase());
+					} else if (map.containsKey(property.getName().toUpperCase())) {
+						if(setter.getParameterTypes()[0].getSimpleName().equals("String")){
+							setter.invoke(orderDTO, map.get(property.getName().toUpperCase()) == null ? null:String.valueOf(map.get(property.getName().toUpperCase())));
+						}else{
+							setter.invoke(orderDTO, map.get(property.getName().toUpperCase()));
+						}
+						map.remove(property.getName().toUpperCase());
+					}
+				}
+			}
+			for (Object key : map.keySet()) {
+				map.put(key, map.get(key) == null ? null : String.valueOf(map.get(key)));
+			}
+		} catch (Exception e) {
+			throw new VciBaseException("鏌ヨ澶辫触锛�" + e.getMessage());
+		}
+
+
+
+//		Iterator<Map.Entry<String, String>> iterator = cbos.entrySet().iterator();
+//
+//		Map.Entry<String, String> entry;
+//		while (iterator.hasNext()) {
+//			entry = iterator.next();
+////			if (WebUtil.isDefaultField(entry.getKey())) {
+//				Object obj = BaseModel.class.newInstance();
+//				BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
+//				PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
+//				for (PropertyDescriptor property : propertyDescriptors) {
+//					Method setter = property.getWriteMethod();
+//					if (setter != null) {
+//						//oracle鐨勬椂闂翠负TIMESTAMP鐨勶紝闇�瑕佽繘琛岃浆鎹㈡垚data锛屽惁鍒欏皢鎶ラ敊
+//						if (map.get(property.getName().toUpperCase()) instanceof TIMESTAMP) {
+//							LocalDateTime localDateTime = ((TIMESTAMP) map.get(property.getName().toUpperCase())).toLocalDateTime();
+//							ZoneId zoneId = ZoneId.systemDefault();
+//							ZonedDateTime zdt = localDateTime.atZone(zoneId);
+//							Date date = Date.from(zdt.toInstant());
+//							setter.invoke(obj, date);
+//							map.remove(property.getName().toUpperCase());
+//						} //oracle鐨勬暟瀛椾负BigDecimal鐨勶紝闇�瑕佽繘琛岃浆鎹㈡垚Integer锛屽惁鍒欏皢鎶ラ敊
+//						else if (map.get(property.getName().toUpperCase()) instanceof BigDecimal
+//							&& ("Integer").equals(setter.getParameterTypes()[0].getSimpleName())) {
+//							setter.invoke(obj, ((BigDecimal) map.get(property.getName().toUpperCase())).intValue());
+//							map.remove(property.getName().toUpperCase());
+//						} else if (map.containsKey(property.getName().toUpperCase())) {
+//							if(setter.getParameterTypes()[0].getSimpleName().equals("String")){
+//								setter.invoke(obj, map.get(property.getName().toUpperCase()) == null ? null:String.valueOf(map.get(property.getName().toUpperCase())));
+//							}else{
+//								setter.invoke(obj, map.get(property.getName().toUpperCase()));
+//							}
+//							map.remove(property.getName().toUpperCase());
+//						}
+//					}
+//				}
+//				WebUtil.setValueToField(entry.getKey(), orderDTO, entry.getValue());
+//				iterator.remove();
+////			}
+//		}
+		orderDTO.setData(map);
+	}
+
+	/**
 	 * 妫�鏌ユ牎楠岃鍒欐病鏈夐�氳繃鐨勫唴瀹�
 	 * @param attrVOS 闇�瑕佹牎楠岀殑灞炴��
 	 * @param dataList 鏁版嵁鐨勫垪琛�
@@ -4629,7 +4990,7 @@
 		}
 		fieldList=execGroupCodePortDataDTO.getFieldList();
 		List<Map<String,String>>dataList=new ArrayList<>();
-		getDatas(classifyFullInfo,templateVO,fieldList,dataList);
+		getDatas(classifyFullInfo,templateVO,fieldList,dataList,null);
 		execGroupCodePortDataDTO.setDataList(dataList);//鏀炬暟鎹�
 		execGroupCodePortDataDTO.setSheetName(codeClassifyVO.getName()+"闆嗗洟鐮佸鍏ユā鏉�");
 		String tempFolder = LocalFileUtil.getDefaultTempFolder();
@@ -4720,6 +5081,86 @@
 	}
 
 	/***
+	 * 瀵煎叆闆嗗洟鐮�
+	 * @param codeClassifyOid
+	 * @param file
+	 * @return
+	 */
+	public String improtGroupCode(String codeClassifyOid, File file) throws ServiceException {
+		VciBaseUtil.alertNotNull(codeClassifyOid,"鍒嗙被鐨勪富閿�");
+		ReadExcelOption reo = new ReadExcelOption();
+		reo.setReadAllSheet(true);
+		List<SheetDataSet> sheetDataSetList = ExcelUtil.readDataObjectFromExcel(file,null,reo);
+
+		if (sheetDataSetList.size() > LIMIT + 1) {
+			throw new ServiceException("涓轰簡淇濊瘉绯荤粺鐨勭ǔ瀹氭�э紝璇蜂竴娆′笉瑕佸鍏ヨ秴杩�1涓囨潯鐨勬暟鎹�");
+		}
+		CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyOid);
+		CodeClassifyTemplateVO templateVO = new CodeClassifyTemplateVO();
+		//闄ゅ幓榛樿鐨勫睘鎬�.杩樻湁鍙湁琛ㄥ崟鏄剧ず鐨勫瓧娈垫墠瀵煎叆
+		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)){
+			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));
+		SheetDataSet dataSet= sheetDataSetList.get(0);
+		List<String> titleRowData = dataSet.getColName();
+		Map<Integer/**鍒楀彿**/,String/**瀛楁鐨勫悕绉�**/> fieldIndexMap = new HashMap<>();
+		getGroupCodeFieldIndexMap(titleRowData,codeAttrMapGroupAttrDTOS,fieldIndexMap);
+		//闇�瑕佸垽鏂槸鍚︽墍鏈夌殑灞炴�ч兘鍦ㄦā鏉夸笂浜�
+		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)){
+
+
+		}
+		return "";
+	}
+
+	/**
+	 *
+	 * @param fieldIndexMap
+	 * @param rowDataList
+	 * @param cboList
+	 */
+	private void getExportGroupCodeDatas(Map<Integer,String> fieldIndexMap,List<SheetRowData> rowDataList,List<ClientBusinessObject>cboList){
+		rowDataList.stream().forEach(sheetRowData -> {
+			sheetRowData.getData().forEach((index,value)->{
+				ClientBusinessObject cbo=new ClientBusinessObject();
+				String field = fieldIndexMap.get(index);
+				if (StringUtils.isBlank(field)) {
+					throw new VciBaseException("绗�" + (index + 1) + "鍒楃殑鏍囬鍦ㄧ郴缁熶腑涓嶅瓨鍦�");
+				}
+				try {
+					cbo.setAttributeValueWithNoCheck(field, value);
+					if (WebUtil.isDefaultField(field)) {
+						WebUtil.setValueToField(field, cbo, value);
+					}
+				} catch (VciBaseException e) {
+					log.error("璁剧疆灞炴�х殑鍊奸敊璇�", e);
+				}
+				cboList.add(cbo);
+			});
+		});
+	}
+	/***
 	 * 闆嗗洟瀵煎嚭妯℃澘灞炴�ф槧灏勪俊鎭幏鍙�
 	 * @param templateVO
 	 * @param execGroupCodePortDataDTO
@@ -4755,23 +5196,51 @@
 	}
 
 	/***
+	 * 闆嗗洟鐮佸睘鎬ц浆鎹�
+	 * @param titleRowData
+	 * @param codeAttrMapGroupAttrDTOS
+	 * @param fieldIndexMap
+	 */
+	private void getGroupCodeFieldIndexMap(List<String> titleRowData,List<CodeAndGroupCodeAttrMappingDTO> codeAttrMapGroupAttrDTOS,Map<Integer/**鍒楀彿**/,String/**瀛楁鐨勫悕绉�**/> fieldIndexMap){
+		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)){
+				id = CODE_GROUP_FIELD;
+			}
+			if(com.alibaba.cloud.commons.lang.StringUtils.isBlank(id) && "浼佷笟缂栫爜".equalsIgnoreCase(title)){
+				id = CODE_FIELD;
+			}
+			if(com.alibaba.cloud.commons.lang.StringUtils.isNotBlank(id)){
+				fieldIndexMap.put(i,id);
+			}
+		}
+
+
+	}
+	/***
 	 * 鏌ヨ鏈湁闆嗗洟鐮佺殑鏁版嵁
 	 * @param classifyFullInfo
 	 * @param templateVO
 	 * @param selectFieldList
 	 * @param dataList
 	 */
-	private void getDatas(CodeClassifyFullInfoBO classifyFullInfo,CodeClassifyTemplateVO templateVO,LinkedList<String> selectFieldList,List<Map<String,String>>dataList){
+	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();
-		Map<String, String> conditionMap = new HashMap<>();
+		Map<String, String> conditionMap=new HashMap<>();
 		if(conditionMap == null){
 			conditionMap = new HashMap<>();
 		}
 		if(conditionMap.containsKey(VciQueryWrapperForDO.OID_FIELD)){
 			conditionMap.put(VciQueryWrapperForDO.OID_FIELD,QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(conditionMap.get(VciQueryWrapperForDO.OID_FIELD)) + ")");
 		}
+		if(!CollectionUtils.isEmpty(codeList)){
+			conditionMap.put("id_in",VciBaseUtil.array2String(codeList.toArray(new String[]{})));
+		}
 		conditionMap.put("codeclsfpath","*" + codeClassifyOid + "*");
 		conditionMap.put("groupcode_null", "null");
 		conditionMap.put("lastr", "1");

--
Gitblit v1.9.3