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 | 1765 ++++++++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 1,275 insertions(+), 490 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 25953b9..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 @@ -1,14 +1,19 @@ package com.vci.ubcs.code.service.impl; +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; import com.vci.ubcs.code.applyjtcodeservice.feign.IMdmInterJtClient; +import com.vci.ubcs.code.applyjtcodeservice.vo.DockingPreAttrMappingVO; import com.vci.ubcs.code.bo.AttributeValue; import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO; import com.vci.ubcs.code.bo.CodeTemplateAttrSqlBO; -import com.vci.ubcs.code.dto.CodeExportAttrDTO; -import com.vci.ubcs.code.dto.CodeOrderDTO; +import com.vci.ubcs.code.constant.MdmEngineConstant; +import com.vci.ubcs.code.dto.*; import com.vci.ubcs.code.entity.CodeAllCode; import com.vci.ubcs.code.enumpack.CodeDefaultLC; import com.vci.ubcs.code.enumpack.CodeLevelTypeEnum; @@ -36,6 +41,7 @@ import com.vci.ubcs.starter.revision.model.BaseModel; import com.vci.ubcs.starter.util.DefaultAttrAssimtUtil; import com.vci.ubcs.starter.util.LocalFileUtil; +import com.vci.ubcs.starter.util.SaveLogUtil; import com.vci.ubcs.starter.web.constant.QueryOptionConstant; import com.vci.ubcs.starter.web.enumpck.BooleanEnum; import com.vci.ubcs.starter.web.enumpck.UserSecretEnum; @@ -45,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; @@ -53,8 +60,10 @@ 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; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -62,14 +71,24 @@ 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; import java.util.concurrent.CopyOnWriteArraySet; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; import static com.alibaba.druid.util.FnvHash.Constants.LIMIT; @@ -97,18 +116,25 @@ @Value("${batchadd.redis.time:6000000}") public int BATCHADD_REDIS_TIME; + + @Value("${batchadd.import_data_limit:5001}") + private Integer IMPORT_DATA_LIMIT; + /** * 涓婚搴撳垎绫荤殑鏈嶅姟 */ @Resource private ICodeClassifyService classifyService; + @Resource + private MdmEngineService mdmEngineService; /** * 閫氱敤鏌ヨ */ @Resource private CommonsMapper commonsMapper; + /**** * 鐮佸�兼湇鍔� */ @@ -166,11 +192,16 @@ */ @Resource private IWebSecretClient secretService; + /** + * 鏃ュ織淇濆瓨宸ュ叿绫� + */ + @Autowired + private SaveLogUtil saveLogUtil; /** - * 瀵煎嚭鐨勫崄涓囨潯 + * 瀹㈡埛鐜板満excel涓鸿�佺増鏈紝瀵煎嚭鐨勬�绘暟闄愬埗涓�65535 */ - public static final int EXPORT_LIMIT = 100000; + public static final int EXPORT_LIMIT = 65535; /** * 鎵归噺鐢宠锛氶�夊彇閫変腑鍒嗙被涓嬬殑鎵�鏈夋ā鏉垮叧閿睘鎬э紝鐩镐技灞炴�э紝蹇呭~灞炴�э紝鍐欏叆execl涓� @@ -346,10 +377,12 @@ @Override public String createImportExcel(String codeClassifyOid, boolean isHistory) { List<CodeClassifyTemplateVO> templateVOList=new ArrayList<>(); - VciBaseUtil.alertNotNull("瀵煎嚭妯℃澘","瀵煎嚭鐨勯厤缃�",codeClassifyOid,"涓婚搴撳垎绫荤殑涓婚敭"); CodeClassifyVO codeClassifyVO = classifyService.getObjectByOid(codeClassifyOid); + + //鑾峰彇鐮佹瀹藉害 + String secWidth = getCodeSegmentWidth(codeClassifyVO.getOid()); if(isHistory){ templateVOList= templateService.childTemplates(codeClassifyOid); @@ -389,17 +422,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 +440,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()) @@ -464,6 +497,147 @@ } /** + * 鐢熸垚鎵归噺淇敼瀵煎叆鐨勬枃浠� + * + * @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; + } + + /** + * 鑾峰彇鐮佹瀹藉害 + * @param codeClassifyOid + * @return + */ + private String getCodeSegmentWidth(String codeClassifyOid){ + CodeClassifyVO codeClassifyVO = classifyService.getObjectByOid(codeClassifyOid); + // 瑕佽幏鍙栫爜娈靛搴︼紝鍏堣鑾峰彇瑙勫垯锛屽綋鍓嶆病鏈夊線涓婃壘 + CodeRuleVO codeRuleByClassifyFullInfo = mdmEngineService.getCodeRuleByClassifyFullInfo(classifyService.getClassifyFullInfo(codeClassifyOid)); + List<CodeBasicSecVO> secVOList = codeRuleByClassifyFullInfo.getSecVOList(); + if(secVOList.isEmpty()){ + return ""; + } + + StringBuffer secWidth = new StringBuffer(""); + + for (int j = 0; j < secVOList.size(); j++) { + CodeBasicSecVO secVO = secVOList.get(j); + int width = VciBaseUtil.getInt(secVO.getCodeSecLength()) + ((secVO.getPrefixCode() + secVO.getSuffixCode()).length()); + secWidth.append(width).append("#"); + } + return secWidth.toString().substring(0, secWidth.length() - 1); + } + + /** * 瀵煎嚭鐨勬椂鍊欏皝瑁呭繀杈撳拰鍏抽敭灞炴�� * @param attrVO 灞炴�х殑鏄剧ず瀵硅薄 * @param text 鍗曞厓鏍肩殑鍊� @@ -495,7 +669,6 @@ return text; } - /** * 鎵归噺鐢宠缂栫爜鏁版嵁 * @@ -504,7 +677,7 @@ * @return 鏈夐敊璇俊鎭殑excel鐨勬枃浠� */ @Override - public CodeImProtRusultVO batchImportCode(CodeOrderDTO orderDTO, File file) { + public CodeImProtRusultVO batchImportCode(CodeOrderDTO orderDTO, File file) throws Exception { VciBaseUtil.alertNotNull(orderDTO,"缂栫爜鐢宠鐩稿叧鐨勬暟鎹�",orderDTO.getCodeClassifyOid(),"涓婚搴撳垎绫讳富閿�"); ReadExcelOption reo = new ReadExcelOption(); reo.setReadAllSheet(true); @@ -524,7 +697,7 @@ //鏍¢獙妯℃澘鏄笉鏄渶鏂扮殑 checkTemplateSync(sheetDataSetList,templateVO,0); //鍏堜笉鐢ㄧ灞炴�ф槸鍚﹂兘瀛樺湪锛屽厛杞崲涓�涓嬫暟鎹� - Map<String,String> errorMap = new HashMap<>(); + Map<String,String> errorMap = new ConcurrentHashMap<>(); String redisUUid=batchImportCodes(orderDTO,templateVO,dataSet,errorMap,true); CodeImProtRusultVO codeImProtRusultVO = new CodeImProtRusultVO(); List<String> needRowIndexList = new ArrayList<>(); @@ -538,7 +711,6 @@ // return null; return codeImProtRusultVO; } - /*** * 浠庨《灞傛壒閲忕敵璇峰鍏ユ柟娉� @@ -645,13 +817,12 @@ }); - //閮借浆鎹㈠畬浜嗐�傞渶瑕佹壒閲忔鏌� //濡傛灉鍑洪敊浜嗭紝鎴戜滑渚濈劧鎵ц鏈夋晥鐨勬暟鎹紝鏃犳晥鐨勬暟鎹啓鍥炲埌excel涓� //2.鍒ゆ柇蹇呰緭椤广�傘�傞渶瑕佸叏閮ㄧ殑灞炴�э紝濡傛灉鏄繀杈擄紝浣嗘槸琛ㄥ崟閲岄潰涓嶆樉绀虹殑锛屽彧鑳芥槸鍒嗙被娉ㄥ叆鎴栬�呯粍鍚堣鍒� batchCheckRequiredAttrOnOrder(templateVO,allCboList,errorMap); //3.鍒ゆ柇鍏抽敭灞炴�� - CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, allCboList); + CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, allCboList,errorMap); Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList(); Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList(); if(!CollectionUtils.isEmpty(selfRepeatRowIndexList)){ @@ -661,7 +832,7 @@ } if(!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)){ keyAttrRepeatRowIndexList.stream().forEach(rowIndex->{ - errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅" ); + errorMap.put(rowIndex, "鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅;" + errorMap.getOrDefault(rowIndex,"") ); }); } //鍒嗙被娉ㄥ叆 @@ -719,10 +890,8 @@ createRedisDatas(uuid + "-ok",codeImprotDataVOS, newErrorMap,true); }); + //寰�鐗╁搧鑺傜偣涓婂姞妯℃澘 - - - List<String> needRowIndexList=new ArrayList<>(); CodeImProtRusultVO codeImProtRusultVO = new CodeImProtRusultVO(); if(errorMap.size()>0) { @@ -780,36 +949,364 @@ */ @Override public CodeImProtRusultVO batchImportHistoryData(String codeClassifyOid, String classifyAttr,File file) throws Throwable{ + try { + 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 VciBaseException("涓轰簡淇濊瘉绯荤粺鐨勭ǔ瀹氭�э紝璇蜂竴娆′笉瑕佸鍏ヨ秴杩�1涓囨潯鐨勬暟鎹�"); + } + Map<String,List<WriteExcelData>> shetNameMap=new HashMap<>(); + //鐩镐技椤圭洰鏌ラ噸 + String uuid=VciBaseUtil.getPk(); + boolean isCreateUUid=false; + boolean isExport=false; + //long start = System.currentTimeMillis(); + // 璁板綍瀵煎叆鎴愬姛鐨勬�绘暟 + List<Integer> importCount = new ArrayList<>(); + CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyOid); + 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(StringUtil.format("涓轰簡淇濊瘉绯荤粺鐨勭ǔ瀹氭�э紝璇蜂竴娆′笉瑕佸鍏ヨ秴杩噞}鏉$殑鏁版嵁",IMPORT_DATA_LIMIT)); + } + //鍘嗗彶瀵煎叆鐨勬椂鍊欎笉澶勭悊缂栫爜 + //----閫昏緫鍐呭---- + //1. 鍒嗙被鐨勮矾寰勫彲浠ュ湪椤甸潰涓婇�夋嫨鏄垎绫荤紪鍙疯繕鏄垎绫荤殑鍚嶇О + //2. 鍒嗙被鐨勮矾寰勶紝蹇呴』鏄綋鍓嶅鍏ラ�夋嫨鐨勫垎绫荤殑鑺傜偣锛屼互鍙婂叾涓嬬骇鑺傜偣 + //3. 閫氳繃鏁版嵁瑕佸鍏ョ殑鍒嗙被鍘绘煡鎵惧搴旂殑缂栫爜瑙勫垯 + //4. 鏁版嵁瀛樺偍鍜屾壒閲忕敵璇蜂竴鏍凤紝 + //5. 闇�瑕佸崟鐙鐞嗕紒涓氱紪鐮佺殑鍐呭锛� + // 5.1 浼佷笟缂栫爜鍦ㄥ綋鍓峞xcel閲屼笉鑳介噸澶� + // 5.2 浼佷笟缂栫爜鍦ㄧ郴缁熶腑涓嶈兘閲嶅锛堝彲浠ユ槸宸茬粡鍥炴敹鐨勶級 + // 5.3 浼佷笟缂栫爜鐨勯暱搴︼紝鍜岀紪鐮佽鍒欑殑闀垮害瑕佸搴斾笂 + // 5.4 鑾峰彇娴佹按鐮佹鐨勫�硷紝鍘婚櫎濉厖鐨勫瓧绗︼紝鐪嬫祦姘村彿鏄灏戯紝鐒跺悗灏嗘祦姘村彿鍜岀幇鍦ㄧ殑鏈�澶ф祦姘村彿鍒ゆ柇锛屽皬浜庡氨鐩存帴褰曞叆锛屽ぇ浜庡垯淇敼鏈�澶ф祦姘村彿 + // 5.5 瀛樺偍浼佷笟缂栫爜鍒癮llcode涓� + //鏌ヨ鍒嗙被鍜屾ā鏉� + + //鍏堟壘鍒版瘡涓�琛岀殑鏍囬锛岀劧鍚庢牴鎹爣棰樻潵鑾峰彇瀵瑰簲鐨勫睘鎬� + SheetDataSet dataSet = sheetDataSetList.get(i); + List<SheetRowData> rowDataList = dataSet.getRowData(); + + //鎵剧涓�琛岋紝涓轰簡鎵炬爣棰� + CodeClassifyTemplateVO templateVO = new CodeClassifyTemplateVO(); + /** if (!templateService.checkChildHasSameTemplate(classifyFullInfo.getCurrentClassifyVO().getOid())) { + throw new VciBaseException("褰撳墠鐨勫垎绫讳互鍙婁笅绾у垎绫荤殑妯℃澘涓嶇浉鍚�"); + }***/ + //閮借浆鎹㈠畬浜嗐�傞渶瑕佹壒閲忔鏌� + //鎵炬墍鏈夌殑鍒嗙被璺緞,闇�瑕佹牎楠岃矾寰勬槸鍚︽纭紝鏄惁閮藉湪褰撳墠鐨勫垎绫荤殑涓嬬骇 + 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 { + List<CodeClassifyTemplateVO> templateVOList= checkSamesTemplate(titleRowData,sheetDataSetList,i,pathMap,errorMap); + templateVO= templateVOList.get(0); + }catch (Throwable e){ + throw new VciBaseException(e.getMessage()); + } + + List<SheetRowData> needowDataList = rowDataList.stream().filter(cbo -> { + String rowIndex = cbo.getRowIndex(); + return !errorMap.containsKey(rowIndex); + }).collect(Collectors.toList()); + + //checkTemplateSync(sheetDataSetList, templateVO,i); + //杩欓噷涓嶉櫎鍘婚粯璁ょ殑灞炴�� + 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())); + 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<>(); + String fullPath = getFullPath(classifyFullInfo); + //鎴戜滑闇�瑕佽幏鍙栧埌鎵�鏈夌殑涓嬬骇鍒嗙被鐨刼id鐨勮矾寰勶紝鍥犱负鍚庨潰闇�瑕� + Map<String/**涓婚敭**/, String/**璺緞**/> childOidPathMap = getChildClassifyPathMap(classifyFullInfo, fullPath); + excelToCbo(classifyFullInfo, fieldIndexMap, needowDataList, templateVO, cboList, fullPath, false); + + + Map<String/**涓婚敭**/, CodeClassifyVO> classifyVOMap = Optional.ofNullable(childClassifyVOs).orElseGet(() -> new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t)); + classifyVOMap.put(classifyFullInfo.getCurrentClassifyVO().getOid(), classifyFullInfo.getCurrentClassifyVO()); + pathMap.put("#current#", classifyFullInfo.getCurrentClassifyVO()); + + //鍒ゆ柇缂栧彿鍦╡xcel閲屾湰韬氨閲嶅鐨� + Map<String, Long> idCountMap = cboList.stream().collect(Collectors.groupingBy(ClientBusinessObject::getId, Collectors.counting())); + List<String> repeatIdList = new ArrayList<>(); + idCountMap.forEach((id, count) -> { + if (count > 1) { + repeatIdList.add(id); + } + }); + if (!CollectionUtils.isEmpty(repeatIdList)) { + cboList.stream().filter(s -> repeatIdList.contains(s.getId())).map(s -> s.getAttributeValue(IMPORT_ROW_INDEX)).forEach(rowIndex -> { + errorMap.put(rowIndex, "缂栧彿鍦ㄥ綋鍓峞xcel涓噸澶�;"); + }); + } + //鎴戜滑闇�瑕佸垽鏂繖浜涘垎绫荤殑妯℃澘鏄笉鏄竴鏍风殑锛屽彧闇�瑕佹牎楠岋紝涓嶇敤鑾峰彇 + //妫�鏌ュ垎绫荤殑璺緞 + checkClassifyPathInHistory(cboList, errorMap, pathMap, childOidPathMap); + + //妫�鏌ヨ鍒� + Map<String/**鍒嗙被涓婚敭**/, String/**瑙勫垯涓婚敭**/> ruleOidMap = new ConcurrentHashMap<String, String>(); + List<String> unExistRuleClassifyOidList = new CopyOnWriteArrayList<>(); + checkRuleOidInHistory(classifyVOMap, ruleOidMap, unExistRuleClassifyOidList); + //濡傛灉鍑洪敊浜嗭紝鎴戜滑渚濈劧鎵ц鏈夋晥鐨勬暟鎹紝鏃犳晥鐨勬暟鎹啓鍥炲埌excel涓� + + //鎴戜滑鏍规嵁鍑洪敊鐨勫垎绫荤殑涓婚敭锛屽幓鎵捐鍙� + if (!CollectionUtils.isEmpty(unExistRuleClassifyOidList)) { + cboList.stream().forEach(cbo -> { + if (unExistRuleClassifyOidList.contains(cbo.getAttributeValue(CODE_CLASSIFY_OID_FIELD))) { + String row_index = cbo.getAttributeValue(IMPORT_ROW_INDEX); + errorMap.put(row_index, errorMap.getOrDefault(row_index, "") + ";鏍规嵁鍒嗙被璺緞瀵瑰簲鐨勫垎绫伙紝娌℃湁璁剧疆缂栫爜瑙勫垯"); + } + }); + } + + //鍒ゆ柇蹇呰緭椤� + 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,true); + + //璁剧疆榛樿鍊� + batchSwitchAttrDefault(attrVOS, cboList); + + //7.澶勭悊缁勫悎瑙勫垯 + batchSwitchComponentAttrOnOrder(attrVOS, cboList); + + //3.鍒ゆ柇鍏抽敭灞炴�� + CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList,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鏂囦欢涓叧閿睘鎬ч噸澶�"); + }); + } + if (!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)) { + keyAttrRepeatRowIndexList.stream().forEach(rowIndex -> { + errorMap.put(rowIndex, "鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅;" + errorMap.getOrDefault(rowIndex, "")); + }); + } + //4.鏍¢獙瑙勫垯 + batchCheckVerifyOnOrder(attrVOS, cboList, errorMap); + + //6.鏃堕棿鐨勶紝蹇呴』缁熶竴涓簓yyy-MM-dd HH:mm:ss + batchSwitchDateAttrOnOrder(attrVOS, cboList, errorMap); + if (CollectionUtils.isEmpty(ruleOidMap.values())) { + throw new VciBaseException("瀵煎叆鐨勬暟鎹墍閫夋嫨鐨勫垎绫婚兘娌℃湁璁剧疆缂栫爜瑙勫垯"); + } + // 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 -> { + List<CodeAllCode> codeAllCodeList= codeAllCodeService.selectByWrapper(Wrappers.<CodeAllCode>query().lambda().eq(CodeAllCode::getCodeRuleOid, ruleOid) + .notIn(CodeAllCode::getId,cbos.stream().map(s -> s.getId()).collect(Collectors.toSet()).toArray(new String[0])) + .notIn(CodeAllCode::getLcStatus,CodeAllCodeLC.TASK_BACK.getValue() + "','" + CodeAllCodeLC.OBSOLETED.getValue()) + ); + existIds.addAll(Optional.ofNullable(codeAllCodeList).orElseGet(() -> new ArrayList<>()).stream().map(s -> { + String id = s.getId(); + if (StringUtils.isBlank(id)) { + id = s.getId(); + } + return id; + }).collect(Collectors.toList())); + }); + List<String> existIdCbos = thisCbos.stream().filter(s -> { + String id = s.getId(); + if (StringUtils.isBlank(id)) { + id = s.getAttributeValue("id"); + } + return existIds.contains(id); + }).map(s -> s.getAttributeValue(IMPORT_ROW_INDEX)).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(existIdCbos)) { + thisCbos = thisCbos.stream().filter(s -> { + String id = s.getId(); + if (StringUtils.isBlank(id)) { + id = s.getAttributeValue("id"); + } + return !existIdCbos.contains(id); + }).collect(Collectors.toList()); + existIdCbos.stream().forEach(rowIndex -> { + errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";銆�" + idFieldName + "銆戝湪绯荤粺涓凡缁忚鍗犵敤"); + }); + } + } + }); + + Map<String, ClientBusinessObject> rowIndexCboMap = cboList.stream().filter(cbo -> cbo != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getAttributeValue((IMPORT_ROW_INDEX)), t -> t)); + if (errorMap.size() > 0) { + isExport=true; + createRedisDatas(uuid + "-error", templateVO, rowIndexCboMap, dataSet, fieldIndexMap, errorMap, false); + } + createWriteExcelData(rowDataList, errorMap, new ArrayList<>(), titleRowData, shetNameMap, templateVO); + List<ClientBusinessObject> needSaveCboList = cboList.stream().filter(cbo -> { + String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); + return !errorMap.containsKey(rowIndex); + }).collect(Collectors.toList()); + //鐩镐技鏍¢獙 + Map<String, String> resembleMap = new HashMap<>(); + List<DataResembleVO> dataResembleVOS = new ArrayList<>(); + String btmtypeid = classifyFullInfo.getTopClassifyVO().getBtmTypeId(); + bathcResembleQuery(templateVO.getCodeclassifyoid(), templateVO, needSaveCboList, resembleMap, btmtypeid, dataResembleVOS); + if (resembleMap.size() > 0) { + if (!CollectionUtils.isEmpty(dataResembleVOS)) { + bladeRedis.set(uuid + "-resemble-data", dataResembleVOS); + createRedisDatas(uuid + "-resemble", templateVO, rowIndexCboMap, dataSet, fieldIndexMap, resembleMap, false); + } + } + //鐢熸垚class缂撳瓨 + Map<String, String> rowIndexClsOidMap = cboList.stream().filter(cbo -> cbo != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getAttributeValue((IMPORT_ROW_INDEX)), t -> t.getAttributeValue(CODE_CLASSIFY_OID_FIELD))); + createRedisByCodeClassify(uuid + "-class",templateVO,dataSet,fieldIndexMap,true); + //鑾峰彇缂栫爜锛屾煡璇㈠湪绯荤粺涓槸鍚﹁鍏朵粬鐨勫紩鐢ㄤ簡 + //鎺掗櫎閿欒鐨勶紝鍓╀笅姝g‘鐨� + Map<String, String> newErrorMap = new HashMap<>(); + newErrorMap.putAll(resembleMap); + newErrorMap.putAll(errorMap); + //瑕佹妸浠ヤ笂鐨勯敊璇殑閮芥姏鍑哄悗锛屽啀缁х画澶勭悊鏃堕棿鍜岀粍鍚堣鍒� + needSaveCboList = cboList.stream().filter(cbo -> { + String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); + return !newErrorMap.containsKey(rowIndex); + }).collect(Collectors.toList()); + if((errorMap.size()>0&&needSaveCboList.size()>0)||resembleMap.size()>0){ + isCreateUUid=true; + } + + List<String> needRowIndexList = needSaveCboList.stream().filter(s -> errorMap.containsKey(s.getAttributeValue(IMPORT_ROW_INDEX))).map(s -> s.getAttributeValue(IMPORT_ROW_INDEX)).collect(Collectors.toList()); + if (isExport||newErrorMap.size() > 0) { + createRedisDatas(uuid + "-ok", templateVO, rowIndexCboMap, dataSet, fieldIndexMap, newErrorMap, true); + } else { + List<BaseModel> dataCBOIdList=new ArrayList<>(); + //SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo(); + List<ClientBusinessObject> finalNeedSaveCboList = needSaveCboList; + CodeClassifyTemplateVO finalTemplateVO = templateVO; + ruleRowIndexMap.keySet().parallelStream().forEach(ruleOid -> { + //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 CopyOnWriteArrayList<>(); + thisCbos.stream().forEach(clientBusinessObject -> { + BaseModel baseModel=new BaseModel(); + BeanUtil.convert(clientBusinessObject,baseModel); + //baseModel.setData(VciBaseUtil.objectToMapString(clientBusinessObject)); + dataCBOList.add(baseModel); + dataCBOIdList.add(baseModel); + }); + + if (!CollectionUtils.isEmpty(thisCbos)) { + try { + // TODO 澶氱嚎绋嬫祦闂 + productCodeService.productCodeAndSaveData(classifyFullInfo, finalTemplateVO, ruleVOMap.get(ruleOid), null, dataCBOList); + importCount.add(dataCBOList.size()); + } catch (Throwable e) { + log.error("鎵归噺浜х敓缂栫爜鐨勬椂鍊欏嚭閿欎簡", e); + thisCbos.stream().forEach(cbo -> { + String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); + errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";绯荤粺閿欒锛屽瓨鍌ㄦ暟鎹殑鏃跺�欏嚭閿欎簡:"+e.getMessage()); + }); + } + } + }); + if (errorMap.size() > 0) { + isExport = true; + } + createWriteExcelData(rowDataList, errorMap, new ArrayList<>(), titleRowData, shetNameMap, finalTemplateVO); + 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"; + 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("瀵煎叆鍒板垎绫粄}涓紝瀵煎叆鎴愬姛鎬绘暟涓猴細{}", JSON.toJSONString(classifyFullInfo),importCount.get(0))); + } + if(isCreateUUid){ + codeImProtRusultVO.setRedisUuid(uuid); + } + return codeImProtRusultVO; + }catch (Exception e){ + saveLogUtil.operateLog("鍘嗗彶鏁版嵁瀵煎叆",true,e.toString()); + throw e; + } + } + + /** + * 瀵煎叆鎵归噺缂栬緫鏁版嵁 + * + * @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.size() > LIMIT + 1) { - throw new VciBaseException("涓轰簡淇濊瘉绯荤粺鐨勭ǔ瀹氭�э紝璇蜂竴娆′笉瑕佸鍏ヨ秴杩�1涓囨潯鐨勬暟鎹�"); + if (sheetDataSetList.get(0).getRowData().size() > LIMIT + 1) { + throw new ServiceException("涓轰簡淇濊瘉绯荤粺鐨勭ǔ瀹氭�э紝璇蜂竴娆′笉瑕佸鍏ヨ秴杩�1涓囨潯鐨勬暟鎹�"); } - Map<String,List<WriteExcelData>> shetNameMap=new HashMap<>(); - //鐩镐技椤圭洰鏌ラ噸 - String uuid=VciBaseUtil.getPk(); - boolean isCreateUUid=false; + 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; } - //鍘嗗彶瀵煎叆鐨勬椂鍊欎笉澶勭悊缂栫爜 - //----閫昏緫鍐呭---- - //1. 鍒嗙被鐨勮矾寰勫彲浠ュ湪椤甸潰涓婇�夋嫨鏄垎绫荤紪鍙疯繕鏄垎绫荤殑鍚嶇О - //2. 鍒嗙被鐨勮矾寰勶紝蹇呴』鏄綋鍓嶅鍏ラ�夋嫨鐨勫垎绫荤殑鑺傜偣锛屼互鍙婂叾涓嬬骇鑺傜偣 - //3. 閫氳繃鏁版嵁瑕佸鍏ョ殑鍒嗙被鍘绘煡鎵惧搴旂殑缂栫爜瑙勫垯 - //4. 鏁版嵁瀛樺偍鍜屾壒閲忕敵璇蜂竴鏍凤紝 - //5. 闇�瑕佸崟鐙鐞嗕紒涓氱紪鐮佺殑鍐呭锛� - // 5.1 浼佷笟缂栫爜鍦ㄥ綋鍓峞xcel閲屼笉鑳介噸澶� - // 5.2 浼佷笟缂栫爜鍦ㄧ郴缁熶腑涓嶈兘閲嶅锛堝彲浠ユ槸宸茬粡鍥炴敹鐨勶級 - // 5.3 浼佷笟缂栫爜鐨勯暱搴︼紝鍜岀紪鐮佽鍒欑殑闀垮害瑕佸搴斾笂 - // 5.4 鑾峰彇娴佹按鐮佹鐨勫�硷紝鍘婚櫎濉厖鐨勫瓧绗︼紝鐪嬫祦姘村彿鏄灏戯紝鐒跺悗灏嗘祦姘村彿鍜岀幇鍦ㄧ殑鏈�澶ф祦姘村彿鍒ゆ柇锛屽皬浜庡氨鐩存帴褰曞叆锛屽ぇ浜庡垯淇敼鏈�澶ф祦姘村彿 - // 5.5 瀛樺偍浼佷笟缂栫爜鍒癮llcode涓� - + // 鍗曟瀵煎叆鏁伴噺闄愬埗 + if(sheetDataSetList.get(i).getRowData().size() > IMPORT_DATA_LIMIT){ + throw new ServiceException("涓轰簡淇濊瘉绯荤粺鐨勭ǔ瀹氭�э紝璇蜂竴娆′笉瑕佸鍏ヨ秴杩�"+IMPORT_DATA_LIMIT+"鏉$殑鏁版嵁"); + } //鏌ヨ鍒嗙被鍜屾ā鏉� CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyOid); @@ -818,10 +1315,7 @@ List<SheetRowData> rowDataList = dataSet.getRowData(); //鎵剧涓�琛岋紝涓轰簡鎵炬爣棰� - CodeClassifyTemplateVO templateVO = new CodeClassifyTemplateVO(); - /** if (!templateService.checkChildHasSameTemplate(classifyFullInfo.getCurrentClassifyVO().getOid())) { - throw new VciBaseException("褰撳墠鐨勫垎绫讳互鍙婁笅绾у垎绫荤殑妯℃澘涓嶇浉鍚�"); - }***/ + CodeClassifyTemplateVO templateVO ; //閮借浆鎹㈠畬浜嗐�傞渶瑕佹壒閲忔鏌� //鎵炬墍鏈夌殑鍒嗙被璺緞,闇�瑕佹牎楠岃矾寰勬槸鍚︽纭紝鏄惁閮藉湪褰撳墠鐨勫垎绫荤殑涓嬬骇 List<CodeClassifyVO> childClassifyVOs = classifyService.listChildrenClassify(codeClassifyOid, true, classifyAttr, true); @@ -831,235 +1325,65 @@ 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()); - - //checkTemplateSync(sheetDataSetList, templateVO,i); //杩欓噷涓嶉櫎鍘婚粯璁ょ殑灞炴�� 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())); - String idFieldName = attrVOS.stream().filter(s -> VciQueryWrapperForDO.ID_FIELD.equalsIgnoreCase(s.getId())).findFirst().orElseGet(() -> new CodeClassifyTemplateAttrVO()).getName(); + fieldIndexMap.put(0,"id"); getFieldIndexMap(titleRowData, attrNameIdMap, fieldIndexMap); //鍏堜笉鐢ㄧ灞炴�ф槸鍚﹂兘瀛樺湪锛屽厛杞崲涓�涓嬫暟鎹� - List<ClientBusinessObject> cboList = new ArrayList<>(); - String fullPath = getFullPath(classifyFullInfo); - //鎴戜滑闇�瑕佽幏鍙栧埌鎵�鏈夌殑涓嬬骇鍒嗙被鐨刼id鐨勮矾寰勶紝鍥犱负鍚庨潰闇�瑕� - Map<String/**涓婚敭**/, String/**璺緞**/> childOidPathMap = getChildClassifyPathMap(classifyFullInfo, fullPath); - excelToCbo(classifyFullInfo, fieldIndexMap, needowDataList, templateVO, cboList, fullPath, false); - - - Map<String/**涓婚敭**/, CodeClassifyVO> classifyVOMap = Optional.ofNullable(childClassifyVOs).orElseGet(() -> new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t)); - classifyVOMap.put(classifyFullInfo.getCurrentClassifyVO().getOid(), classifyFullInfo.getCurrentClassifyVO()); - pathMap.put("#current#", classifyFullInfo.getCurrentClassifyVO()); - - //鍒ゆ柇缂栧彿鍦╡xcel閲屾湰韬氨閲嶅鐨� - Map<String, Long> idCountMap = cboList.stream().collect(Collectors.groupingBy(ClientBusinessObject::getId, Collectors.counting())); - List<String> repeatIdList = new ArrayList<>(); - idCountMap.forEach((id, count) -> { - if (count > 1) { - repeatIdList.add(id); + 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) + ",鏈兘鏌ヨ鍒扮浉鍏虫暟鎹��"); } - }); - if (!CollectionUtils.isEmpty(repeatIdList)) { - cboList.stream().filter(s -> repeatIdList.contains(s.getId())).map(s -> s.getAttributeValue(IMPORT_ROW_INDEX)).forEach(rowIndex -> { - errorMap.put(rowIndex, "缂栧彿鍦ㄥ綋鍓峞xcel涓噸澶�;"); - }); - } - //鎴戜滑闇�瑕佸垽鏂繖浜涘垎绫荤殑妯℃澘鏄笉鏄竴鏍风殑锛屽彧闇�瑕佹牎楠岋紝涓嶇敤鑾峰彇 - //妫�鏌ュ垎绫荤殑璺緞 - checkClassifyPathInHistory(cboList, errorMap, pathMap, childOidPathMap); - - //妫�鏌ヨ鍒� - Map<String/**鍒嗙被涓婚敭**/, String/**瑙勫垯涓婚敭**/> ruleOidMap = new ConcurrentHashMap<String, String>(); - List<String> unExistRuleClassifyOidList = new CopyOnWriteArrayList<>(); - checkRuleOidInHistory(classifyVOMap, ruleOidMap, unExistRuleClassifyOidList); - //濡傛灉鍑洪敊浜嗭紝鎴戜滑渚濈劧鎵ц鏈夋晥鐨勬暟鎹紝鏃犳晥鐨勬暟鎹啓鍥炲埌excel涓� - - //鎴戜滑鏍规嵁鍑洪敊鐨勫垎绫荤殑涓婚敭锛屽幓鎵捐鍙� - if (!CollectionUtils.isEmpty(unExistRuleClassifyOidList)) { - cboList.stream().forEach(cbo -> { - if (unExistRuleClassifyOidList.contains(cbo.getAttributeValue(CODE_CLASSIFY_OID_FIELD))) { - String row_index = cbo.getAttributeValue(IMPORT_ROW_INDEX); - errorMap.put(row_index, errorMap.getOrDefault(row_index, "") + ";鏍规嵁鍒嗙被璺緞瀵瑰簲鐨勫垎绫伙紝娌℃湁璁剧疆缂栫爜瑙勫垯"); - } - }); - } - - //鍒ゆ柇蹇呰緭椤� - 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,true); - - //璁剧疆榛樿鍊� - batchSwitchAttrDefault(attrVOS, cboList); - //7.澶勭悊缁勫悎瑙勫垯 - batchSwitchComponentAttrOnOrder(attrVOS, cboList); - //3.鍒ゆ柇鍏抽敭灞炴�� - CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList); - 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鏂囦欢涓叧閿睘鎬ч噸澶�"); - }); - } - if (!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)) { - keyAttrRepeatRowIndexList.stream().forEach(rowIndex -> { - errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅"); - }); - } - //4.鏍¢獙瑙勫垯 - batchCheckVerifyOnOrder(attrVOS, cboList, errorMap); - - //6.鏃堕棿鐨勶紝蹇呴』缁熶竴涓簓yyy-MM-dd HH:mm:ss - batchSwitchDateAttrOnOrder(attrVOS, cboList, errorMap); - 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)); - //鏍¢獙缂栫爜瑙勫垯鍜岀爜娈垫槸鍚︽纭� - 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 -> { - List<CodeAllCode> codeAllCodeList= codeAllCodeService.selectByWrapper(Wrappers.<CodeAllCode>query().lambda().eq(CodeAllCode::getCodeRuleOid, ruleOid) - .notIn(CodeAllCode::getId,cbos.stream().map(s -> s.getId()).collect(Collectors.toSet()).toArray(new String[0])) - .notIn(CodeAllCode::getLcStatus,CodeAllCodeLC.TASK_BACK.getValue() + "','" + CodeAllCodeLC.OBSOLETED.getValue()) - ); - existIds.addAll(Optional.ofNullable(codeAllCodeList).orElseGet(() -> new ArrayList<>()).stream().map(s -> { - String id = s.getId(); - if (StringUtils.isBlank(id)) { - id = s.getId(); - } - return id; - }).collect(Collectors.toList())); - }); - List<String> existIdCbos = thisCbos.stream().filter(s -> { - String id = s.getId(); - if (StringUtils.isBlank(id)) { - id = s.getAttributeValue("id"); - } - return existIds.contains(id); - }).map(s -> s.getAttributeValue(IMPORT_ROW_INDEX)).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(existIdCbos)) { - thisCbos = thisCbos.stream().filter(s -> { - String id = s.getId(); - if (StringUtils.isBlank(id)) { - id = s.getAttributeValue("id"); - } - return !existIdCbos.contains(id); - }).collect(Collectors.toList()); - existIdCbos.stream().forEach(rowIndex -> { - errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";銆�" + idFieldName + "銆戝湪绯荤粺涓凡缁忚鍗犵敤"); - }); - } + 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()); } - }); - - Map<String, ClientBusinessObject> rowIndexCboMap = cboList.stream().filter(cbo -> cbo != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getAttributeValue((IMPORT_ROW_INDEX)), t -> t)); + } if (errorMap.size() > 0) { - isExport=true; - createRedisDatas(uuid + "-error", templateVO, rowIndexCboMap, dataSet, fieldIndexMap, errorMap, false); + isExport = true; } - createWriteExcelData(rowDataList, errorMap, new ArrayList<>(), titleRowData, shetNameMap, templateVO); - List<ClientBusinessObject> needSaveCboList = cboList.stream().filter(cbo -> { - String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); - return !errorMap.containsKey(rowIndex); - }).collect(Collectors.toList()); - //鐩镐技鏍¢獙 - Map<String, String> resembleMap = new HashMap<>(); - List<DataResembleVO> dataResembleVOS = new ArrayList<>(); - String btmtypeid = classifyFullInfo.getTopClassifyVO().getBtmTypeId(); - bathcResembleQuery(templateVO.getCodeclassifyoid(), templateVO, needSaveCboList, resembleMap, btmtypeid, dataResembleVOS); - if (resembleMap.size() > 0) { - if (!CollectionUtils.isEmpty(dataResembleVOS)) { - bladeRedis.set(uuid + "-resemble-data", dataResembleVOS); - createRedisDatas(uuid + "-resemble", templateVO, rowIndexCboMap, dataSet, fieldIndexMap, resembleMap, false); - } - } - //鐢熸垚class缂撳瓨 - Map<String, String> rowIndexClsOidMap = cboList.stream().filter(cbo -> cbo != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getAttributeValue((IMPORT_ROW_INDEX)), t -> t.getAttributeValue(CODE_CLASSIFY_OID_FIELD))); - createRedisByCodeClassify(uuid + "-class",templateVO,dataSet,fieldIndexMap,true); - //鑾峰彇缂栫爜锛屾煡璇㈠湪绯荤粺涓槸鍚﹁鍏朵粬鐨勫紩鐢ㄤ簡 - //鎺掗櫎閿欒鐨勶紝鍓╀笅姝g‘鐨� - Map<String, String> newErrorMap = new HashMap<>(); - newErrorMap.putAll(resembleMap); - newErrorMap.putAll(errorMap); - //瑕佹妸浠ヤ笂鐨勯敊璇殑閮芥姏鍑哄悗锛屽啀缁х画澶勭悊鏃堕棿鍜岀粍鍚堣鍒� - needSaveCboList = cboList.stream().filter(cbo -> { - String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); - return !newErrorMap.containsKey(rowIndex); - }).collect(Collectors.toList()); - if((errorMap.size()>0&&needSaveCboList.size()>0)||resembleMap.size()>0){ - isCreateUUid=true; - } + createWriteExcelData(rowDataList, errorMap, new ArrayList<>(), titleRowData, shetNameMap, finalTemplateVO); - List<String> needRowIndexList = needSaveCboList.stream().filter(s -> errorMap.containsKey(s.getAttributeValue(IMPORT_ROW_INDEX))).map(s -> s.getAttributeValue(IMPORT_ROW_INDEX)).collect(Collectors.toList()); - if (isExport||newErrorMap.size() > 0) { - createRedisDatas(uuid + "-ok", templateVO, rowIndexCboMap, dataSet, fieldIndexMap, newErrorMap, true); - } else { - List<BaseModel> dataCBOIdList=new ArrayList<>(); - //SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo(); - List<ClientBusinessObject> finalNeedSaveCboList = needSaveCboList; - CodeClassifyTemplateVO finalTemplateVO = templateVO; - ruleRowIndexMap.keySet().parallelStream().forEach(ruleOid -> { - //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<>(); - thisCbos.stream().forEach(clientBusinessObject -> { - BaseModel baseModel=new BaseModel(); - BeanUtil.convert(clientBusinessObject,baseModel); - //baseModel.setData(VciBaseUtil.objectToMapString(clientBusinessObject)); - dataCBOList.add(baseModel); - dataCBOIdList.add(baseModel); - }); - - if (!CollectionUtils.isEmpty(thisCbos)) { - try { - 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, "") + ";绯荤粺閿欒锛屽瓨鍌ㄦ暟鎹殑鏃跺�欏嚭閿欎簡"); - }); - - } - } - }); - if (errorMap.size() > 0) { - isExport = true; - } - createWriteExcelData(rowDataList, errorMap, new ArrayList<>(), titleRowData, shetNameMap, finalTemplateVO); - engineService.batchSaveSelectChar(templateVO, dataCBOIdList); - } } String excelFileName=""; if(isExport&&!CollectionUtils.isEmpty(shetNameMap)) { @@ -1079,11 +1403,11 @@ 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)); } - if(isCreateUUid){ - codeImProtRusultVO.setRedisUuid(uuid); - } - return codeImProtRusultVO; } /*private void converBaseModels(List<ClientBusinessObject> clientBusinessObjects,List<BaseModel>dataCBOList){ @@ -1099,6 +1423,7 @@ }); }*/ + /*** * 浠巈xecl閲屾瀯寤哄璞� * @param rowDataList @@ -1138,7 +1463,6 @@ * @param currentTemplateVO * @param templateColumnVOMap */ - private void createTemplate(CodeClassifyTemplateVO currentTemplateVO,Map<String,List<ColumnVO>>templateColumnVOMap){ List<CodeClassifyTemplateAttrVO> templateAttrVOS = currentTemplateVO.getAttributes().stream().filter(s -> @@ -1249,7 +1573,6 @@ } - /*** * 鎵归噺澶勭悊鐢宠鏁版嵁 * @param orderDTO @@ -1257,140 +1580,148 @@ * @param dataSet * @return */ - private String batchImportCodes(CodeOrderDTO orderDTO,CodeClassifyTemplateVO templateVO,SheetDataSet dataSet,Map<String,String> errorMap,boolean isEnumType){ + private String batchImportCodes(CodeOrderDTO orderDTO,CodeClassifyTemplateVO templateVO,SheetDataSet dataSet,Map<String,String> errorMap,boolean isEnumType) throws Exception { List<String> codeList=new ArrayList<>(); - CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid()); - //瑙勫垯鐨勪富閿渶瑕佸幓鑾峰彇 - CodeRuleVO ruleVO = engineService.getCodeRuleByClassifyFullInfo(classifyFullInfo); - //1.鍒ゆ柇瑙勫垯涓櫎浜嗘祦姘寸爜娈碉紝鏄惁鏈夊叾浠栫爜娈� - engineService.checkSecValueOnOrder(ruleVO,orderDTO); - List<SheetRowData> rowDataList = dataSet.getRowData(); + String uuid = ""; + try { + CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid()); + //瑙勫垯鐨勪富閿渶瑕佸幓鑾峰彇 + CodeRuleVO ruleVO = engineService.getCodeRuleByClassifyFullInfo(classifyFullInfo); + //1.鍒ゆ柇瑙勫垯涓櫎浜嗘祦姘寸爜娈碉紝鏄惁鏈夊叾浠栫爜娈� + engineService.checkSecValueOnOrder(ruleVO,orderDTO); + List<SheetRowData> rowDataList = dataSet.getRowData(); - //闄ゅ幓榛樿鐨勫睘鎬�.杩樻湁鍙湁琛ㄥ崟鏄剧ず鐨勫瓧娈垫墠瀵煎叆 - List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s -> - !DEFAULT_ATTR_LIST.contains(s.getId()) && VciBaseUtil.getBoolean(s.getFormDisplayFlag()) - ).collect(Collectors.toList()); - Map<Integer/**鍒楀彿**/,String/**瀛楁鐨勫悕绉�**/> fieldIndexMap = new HashMap<>(); - List<String> titleRowData = dataSet.getColName(); - Map<String/**涓枃鍚嶇О**/, String/**鑻辨枃鍚嶇О**/> attrNameIdMap = attrVOS.stream().collect(Collectors.toMap(s -> s.getName(), t -> t.getId().toLowerCase(Locale.ROOT),(o1, o2)->o2)); - getFieldIndexMap(titleRowData,attrNameIdMap,fieldIndexMap); + //闄ゅ幓榛樿鐨勫睘鎬�.杩樻湁鍙湁琛ㄥ崟鏄剧ず鐨勫瓧娈垫墠瀵煎叆 + List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s -> + !DEFAULT_ATTR_LIST.contains(s.getId()) && VciBaseUtil.getBoolean(s.getFormDisplayFlag()) + ).collect(Collectors.toList()); + Map<Integer/**鍒楀彿**/,String/**瀛楁鐨勫悕绉�**/> fieldIndexMap = new HashMap<>(); + List<String> titleRowData = dataSet.getColName(); + Map<String/**涓枃鍚嶇О**/, String/**鑻辨枃鍚嶇О**/> attrNameIdMap = attrVOS.stream().collect(Collectors.toMap(s -> s.getName(), t -> t.getId().toLowerCase(Locale.ROOT),(o1, o2)->o2)); + getFieldIndexMap(titleRowData,attrNameIdMap,fieldIndexMap); - //闇�瑕佸垽鏂槸鍚︽墍鏈夌殑灞炴�ч兘鍦ㄦā鏉夸笂浜� - List<CodeClassifyTemplateAttrVO> unExistAttrVOs = attrVOS.stream().filter(s -> !fieldIndexMap.containsValue(s.getId().toLowerCase(Locale.ROOT)) - && StringUtils.isBlank(s.getComponentRule()) && StringUtils.isBlank(s.getClassifyInvokeAttr())//缁勫悎瑙勫垯鍜屽垎绫绘敞鍏ョ‘瀹炴病缁欑敤鎴峰鍑哄幓 - ).collect(Collectors.toList()); - if(!CollectionUtils.isEmpty(unExistAttrVOs)){ - throw new VciBaseException("銆�" + unExistAttrVOs.stream().map(CodeClassifyTemplateAttrVO::getName) + "銆戣繖浜涘睘鎬у湪鍒楄〃涓病鏈夋壘鍒�"); - } - List<ClientBusinessObject> cboList = new ArrayList<>(); - String fullPath = getFullPath(classifyFullInfo); - excelToCbo(classifyFullInfo,fieldIndexMap,rowDataList,templateVO,cboList,fullPath,true); - - //閮借浆鎹㈠畬浜嗐�傞渶瑕佹壒閲忔鏌� - //濡傛灉鍑洪敊浜嗭紝鎴戜滑渚濈劧鎵ц鏈夋晥鐨勬暟鎹紝鏃犳晥鐨勬暟鎹啓鍥炲埌excel涓� - //2.鍒ゆ柇蹇呰緭椤广�傘�傞渶瑕佸叏閮ㄧ殑灞炴�э紝濡傛灉鏄繀杈擄紝浣嗘槸琛ㄥ崟閲岄潰涓嶆樉绀虹殑锛屽彧鑳芥槸鍒嗙被娉ㄥ叆鎴栬�呯粍鍚堣鍒� - batchCheckRequiredAttrOnOrder(templateVO,cboList,errorMap); - //3.鍒ゆ柇鍏抽敭灞炴�� - CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList); - Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList(); - Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList(); - if(!CollectionUtils.isEmpty(selfRepeatRowIndexList)){ - selfRepeatRowIndexList.stream().forEach(rowIndex->{ - errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鍦ㄥ綋鍓嶅鐞嗙殑鏁版嵁鏂囦欢涓叧閿睘鎬ч噸澶�" ); - }); - } - if(!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)){ - keyAttrRepeatRowIndexList.stream().forEach(rowIndex->{ - errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅" ); - }); - } - //鍒嗙被娉ㄥ叆 - batchSwitchClassifyAttrOnOrder(attrVOS,cboList,classifyFullInfo,false); - //boolean - reSwitchBooleanAttrOnOrder(attrVOS,cboList); - //4.鏍¢獙瑙勫垯 - batchCheckVerifyOnOrder(attrVOS, cboList,errorMap); - if(isEnumType) {//鏄惁闇�瑕佹牎楠屾灇涓�/鍙傜収 - //5.鏍¢獙鏋氫妇鏄惁姝g‘ - batchSwitchEnumAttrOnOrder(attrVOS, cboList, errorMap); - //7.澶勭悊鍙傜収鐨勬儏鍐� - batchSwitchReferAttrOnOrder(attrVOS,cboList,errorMap); - } - //6.鏃堕棿鏍煎紡鐨勯獙璇� - //6.鏃堕棿鐨勶紝蹇呴』缁熶竴涓簓yyy-MM-dd HH:mm:ss - batchSwitchDateAttrOnOrder(attrVOS,cboList,errorMap); - //鏈�鍚庡紕缁勫悎瑙勫垯 - batchSwitchComponentAttrOnOrder(attrVOS,cboList); - String uuid=VciBaseUtil.getPk(); - Map<String, ClientBusinessObject> rowIndexCboMap = cboList.stream().filter(cbo -> cbo != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getAttributeValue((IMPORT_ROW_INDEX)), t -> t)); - - if(errorMap.size()>0) { - createRedisDatas(uuid + "-error",templateVO, rowIndexCboMap, dataSet, fieldIndexMap, errorMap,false); - } - boolean isCreateUUid=false; - List<ClientBusinessObject> needSaveCboList = cboList.stream().filter(cbo -> { - String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); - return !errorMap.containsKey(rowIndex); - }).collect(Collectors.toList()); - //鐩镐技鏍¢獙 - Map<String,String>resembleMap=new HashMap<>(); - List<DataResembleVO> dataResembleVOS=new ArrayList<>(); - String btmtypeid= classifyFullInfo.getTopClassifyVO().getBtmTypeId(); - bathcResembleQuery(orderDTO.getCodeClassifyOid(),templateVO,needSaveCboList,resembleMap,btmtypeid,dataResembleVOS); - if(resembleMap.size()>0) { - isCreateUUid=true; - if(!CollectionUtils.isEmpty(dataResembleVOS)) { - bladeRedis.set(uuid + "-resemble-data", dataResembleVOS); - createRedisDatas(uuid + "-resemble",templateVO, rowIndexCboMap, dataSet, fieldIndexMap, resembleMap, false); + //闇�瑕佸垽鏂槸鍚︽墍鏈夌殑灞炴�ч兘鍦ㄦā鏉夸笂浜� + List<CodeClassifyTemplateAttrVO> unExistAttrVOs = attrVOS.stream().filter(s -> !fieldIndexMap.containsValue(s.getId().toLowerCase(Locale.ROOT)) + && StringUtils.isBlank(s.getComponentRule()) && StringUtils.isBlank(s.getClassifyInvokeAttr())//缁勫悎瑙勫垯鍜屽垎绫绘敞鍏ョ‘瀹炴病缁欑敤鎴峰鍑哄幓 + ).collect(Collectors.toList()); + if(!CollectionUtils.isEmpty(unExistAttrVOs)){ + throw new VciBaseException("銆�" + unExistAttrVOs.stream().map(CodeClassifyTemplateAttrVO::getName) + "銆戣繖浜涘睘鎬у湪鍒楄〃涓病鏈夋壘鍒�"); } - } - //鎺掗櫎閿欒鐨勶紝鍓╀笅姝g‘鐨� - Map<String,String> newErrorMap=new HashMap<>(); - newErrorMap.putAll(resembleMap); - newErrorMap.putAll(errorMap); - needSaveCboList = cboList.stream().filter(cbo -> { - String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); - return !newErrorMap.containsKey(rowIndex); - }).collect(Collectors.toList()); - if((errorMap.size()>0&&needSaveCboList.size()>0)||resembleMap.size()>0){ - isCreateUUid=true; - } - createRedisByCodeClassify(uuid + "-class",templateVO,dataSet,fieldIndexMap,false); - if(newErrorMap.size()>0) { - createRedisDatas(uuid + "-ok",templateVO, rowIndexCboMap, dataSet, fieldIndexMap, newErrorMap,true); - }else { - uuid=""; + List<ClientBusinessObject> cboList = new ArrayList<>(); + String fullPath = getFullPath(classifyFullInfo); + excelToCbo(classifyFullInfo,fieldIndexMap,rowDataList,templateVO,cboList,fullPath,true); - //瑕佹妸浠ヤ笂鐨勯敊璇殑閮芥姏鍑哄悗锛屽啀缁х画澶勭悊鏃堕棿鍜岀粍鍚堣鍒� + //閮借浆鎹㈠畬浜嗐�傞渶瑕佹壒閲忔鏌� + //濡傛灉鍑洪敊浜嗭紝鎴戜滑渚濈劧鎵ц鏈夋晥鐨勬暟鎹紝鏃犳晥鐨勬暟鎹啓鍥炲埌excel涓� + //2.鍒ゆ柇蹇呰緭椤广�傘�傞渶瑕佸叏閮ㄧ殑灞炴�э紝濡傛灉鏄繀杈擄紝浣嗘槸琛ㄥ崟閲岄潰涓嶆樉绀虹殑锛屽彧鑳芥槸鍒嗙被娉ㄥ叆鎴栬�呯粍鍚堣鍒� + batchCheckRequiredAttrOnOrder(templateVO,cboList,errorMap); + //3.鍒ゆ柇鍏抽敭灞炴�� + CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList,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,"") + ";鍦ㄥ綋鍓嶅鐞嗙殑鏁版嵁鏂囦欢涓叧閿睘鎬ч噸澶�" ); + }); + } + if(!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)){ + keyAttrRepeatRowIndexList.stream().forEach(rowIndex->{ + errorMap.put(rowIndex,"鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅;" + errorMap.getOrDefault(rowIndex,"")); + }); + } + //鍒嗙被娉ㄥ叆 + batchSwitchClassifyAttrOnOrder(attrVOS,cboList,classifyFullInfo,false); + //boolean + reSwitchBooleanAttrOnOrder(attrVOS,cboList); + //4.鏍¢獙瑙勫垯 + batchCheckVerifyOnOrder(attrVOS, cboList,errorMap); + if(isEnumType) {//鏄惁闇�瑕佹牎楠屾灇涓�/鍙傜収 + //5.鏍¢獙鏋氫妇鏄惁姝g‘ + batchSwitchEnumAttrOnOrder(attrVOS, cboList, errorMap); + //7.澶勭悊鍙傜収鐨勬儏鍐� + batchSwitchReferAttrOnOrder(attrVOS,cboList,errorMap); + } + //6.鏃堕棿鏍煎紡鐨勯獙璇� + //6.鏃堕棿鐨勶紝蹇呴』缁熶竴涓簓yyy-MM-dd HH:mm:ss + batchSwitchDateAttrOnOrder(attrVOS,cboList,errorMap); + //鏈�鍚庡紕缁勫悎瑙勫垯 + batchSwitchComponentAttrOnOrder(attrVOS,cboList); + uuid=VciBaseUtil.getPk(); + Map<String, ClientBusinessObject> rowIndexCboMap = cboList.stream().filter(cbo -> cbo != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getAttributeValue((IMPORT_ROW_INDEX)), t -> t)); + + if(errorMap.size()>0) { + createRedisDatas(uuid + "-error",templateVO, rowIndexCboMap, dataSet, fieldIndexMap, errorMap,false); + } + boolean isCreateUUid=false; + List<ClientBusinessObject> needSaveCboList = cboList.stream().filter(cbo -> { + String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); + return !errorMap.containsKey(rowIndex); + }).collect(Collectors.toList()); + //鐩镐技鏍¢獙 + Map<String,String>resembleMap=new HashMap<>(); + List<DataResembleVO> dataResembleVOS=new ArrayList<>(); + String btmtypeid= classifyFullInfo.getTopClassifyVO().getBtmTypeId(); + bathcResembleQuery(orderDTO.getCodeClassifyOid(),templateVO,needSaveCboList,resembleMap,btmtypeid,dataResembleVOS); + if(resembleMap.size()>0) { + isCreateUUid=true; + if(!CollectionUtils.isEmpty(dataResembleVOS)) { + bladeRedis.set(uuid + "-resemble-data", dataResembleVOS); + createRedisDatas(uuid + "-resemble",templateVO, rowIndexCboMap, dataSet, fieldIndexMap, resembleMap, false); + } + } + //鎺掗櫎閿欒鐨勶紝鍓╀笅姝g‘鐨� + Map<String,String> newErrorMap=new HashMap<>(); + newErrorMap.putAll(resembleMap); + newErrorMap.putAll(errorMap); needSaveCboList = cboList.stream().filter(cbo -> { String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); return !newErrorMap.containsKey(rowIndex); }).collect(Collectors.toList()); + if((errorMap.size()>0&&needSaveCboList.size()>0)||resembleMap.size()>0){ + isCreateUUid=true; + } + createRedisByCodeClassify(uuid + "-class",templateVO,dataSet,fieldIndexMap,false); + if(newErrorMap.size()>0) { + createRedisDatas(uuid + "-ok",templateVO, rowIndexCboMap, dataSet, fieldIndexMap, newErrorMap,true); + }else { + uuid=""; - if (!CollectionUtils.isEmpty(needSaveCboList)) { - //9.鎴戜滑澶勭悊涓氬姟鏁版嵁 - //鐢熸垚缂栫爜鐨勫唴瀹� - List<String> dataCBOIdList=new ArrayList<>(); - List<BaseModel> dataCBOList=new ArrayList<>(); - cboList.stream().forEach(clientBusinessObject -> { - BaseModel baseModel=new BaseModel(); - BeanUtil.convert(clientBusinessObject,baseModel); - //baseModel.setData(VciBaseUtil.objectToMapString(clientBusinessObject)); - dataCBOList.add(baseModel); - dataCBOIdList.add(baseModel.getOid()); - }); - try { - codeList = productCodeService.productCodeAndSaveData(classifyFullInfo,templateVO,ruleVO, orderDTO.getSecDTOList(),dataCBOList); - //濡傛灉鏄紪鐮佺敓鎴愬け璐ワ紝鍒欑洿鎺ュ氨澶辫触浜嗭紝鍏朵粬鐨勫垽鏂嚭鏉ユ湁閿欒鐨勬垜浠兘缁熶竴杩斿洖鍒癳xcel閲岄潰 - engineService.batchSaveSelectChar(templateVO, dataCBOList); - } catch (Exception e) { - e.printStackTrace(); - log.error("鎵逛簡鐢宠鏃跺け璐�"); + //瑕佹妸浠ヤ笂鐨勯敊璇殑閮芥姏鍑哄悗锛屽啀缁х画澶勭悊鏃堕棿鍜岀粍鍚堣鍒� + needSaveCboList = cboList.stream().filter(cbo -> { + String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); + return !newErrorMap.containsKey(rowIndex); + }).collect(Collectors.toList()); + + if (!CollectionUtils.isEmpty(needSaveCboList)) { + //9.鎴戜滑澶勭悊涓氬姟鏁版嵁 + //鐢熸垚缂栫爜鐨勫唴瀹� + List<String> dataCBOIdList=new ArrayList<>(); + List<BaseModel> dataCBOList=new ArrayList<>(); + cboList.stream().forEach(clientBusinessObject -> { + BaseModel baseModel=new BaseModel(); + BeanUtil.convert(clientBusinessObject,baseModel); + //baseModel.setData(VciBaseUtil.objectToMapString(clientBusinessObject)); + dataCBOList.add(baseModel); + dataCBOIdList.add(baseModel.getOid()); + }); + try { + codeList = productCodeService.productCodeAndSaveData(classifyFullInfo,templateVO,ruleVO, orderDTO.getSecDTOList(),dataCBOList); + //濡傛灉鏄紪鐮佺敓鎴愬け璐ワ紝鍒欑洿鎺ュ氨澶辫触浜嗭紝鍏朵粬鐨勫垽鏂嚭鏉ユ湁閿欒鐨勬垜浠兘缁熶竴杩斿洖鍒癳xcel閲岄潰 + engineService.batchSaveSelectChar(templateVO, dataCBOList); + } catch (Exception e) { + e.printStackTrace(); + log.error("鎵归噺鐢宠鏃跺け璐�"); + throw e; + } } } - } - if(!isCreateUUid){ - return uuid=""; + if(!isCreateUUid){ + return uuid=""; + } + saveLogUtil.operateLog("鎵归噺鐢宠缂栫爜",false, StringUtil.format("鎵归噺瀵煎叆鐢宠鎴愬姛鍏眥}鏉℃暟鎹紝鐢熸垚鐨勭爜鍊煎涓嬨�恵}銆�",codeList.size(),codeList)); + }catch (Exception e){ + saveLogUtil.operateLog("鎵归噺鐢宠缂栫爜",true,e.toString()); + throw e; } return uuid; } @@ -1507,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; @@ -1524,11 +1855,9 @@ 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); } List<String> selectFieldList = new ArrayList<>(); @@ -1564,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()); @@ -1728,7 +2057,7 @@ ).collect(Collectors.toList()); String fullPath = getFullPath(classifyFullInfo); excelToCbo(classifyFullInfo,fieldIndexMap,rowDataList, codeClassifyTemplateVO,cboList,fullPath,!isImprot); - Map<String,String> errorMap=new HashMap<>(); + Map<String,String> errorMap=new ConcurrentHashMap<>(); Map<String/**璺緞**/, CodeClassifyVO> pathMap=new HashMap<>() ; //鏍¢獙缂栫爜瑙勫垯鍜岀爜娈垫槸鍚︽纭� Map<String, List<String>> ruleRowIndexMap = new ConcurrentHashMap<>(); @@ -1749,7 +2078,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); } @@ -1772,12 +2102,12 @@ //鏈�鍚庡紕缁勫悎瑙勫垯 batchSwitchComponentAttrOnOrder(attrVOS,cboList); //3.鍒ゆ柇鍏抽敭灞炴�� - CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, codeClassifyTemplateVO, cboList); + CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, codeClassifyTemplateVO, cboList,errorMap); Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList(); Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList(); if(!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)){ keyAttrRepeatRowIndexList.stream().forEach(rowIndex->{ - errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅" ); + errorMap.put(rowIndex,"鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅;" + errorMap.getOrDefault(rowIndex,"")); }); } //4.鏍¢獙瑙勫垯 @@ -1906,7 +2236,7 @@ */ @Override public void batchSyncApplyCode(CodeOrderDTO orderDTO, DataObjectVO dataObjectVO, LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs,boolean isCodeOrGroupCode) { - Map<String,String> errorMap=new HashMap<>(); + Map<String,String> errorMap=new ConcurrentHashMap<>(); VciBaseUtil.alertNotNull(orderDTO,"缂栫爜鐢宠鐩稿叧鐨勬暟鎹�",orderDTO.getCodeClassifyOid(),"涓婚搴撳垎绫讳富閿�"); CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid()); //瑙勫垯鐨勪富閿渶瑕佸幓鑾峰彇 @@ -1938,7 +2268,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,20 +2285,33 @@ //閮借浆鎹㈠畬浜嗐�傞渶瑕佹壒閲忔鏌� //濡傛灉鍑洪敊浜嗭紝鎴戜滑渚濈劧鎵ц鏈夋晥鐨勬暟鎹紝鏃犳晥鐨勬暟鎹啓鍥炲埌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); + CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList,errorKeyMap); Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList(); Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList(); + Map<String,List<String>>keyAttrOkOidTORepeatOidMap= keyResultVO.getKeyAttrOkOidTORepeatOidMap(); if(!CollectionUtils.isEmpty(selfRepeatRowIndexList)){ selfRepeatRowIndexList.stream().forEach(rowIndex->{ @@ -1997,23 +2341,13 @@ resultDataObjectDetailDO.setMsg(errorMap.getOrDefault(rowIndex,"") + ";鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅" ); resultDataObjectDetailDOs.add(resultDataObjectDetailDO); */ - errorKeyMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅" ); + Map<String, List<BaseModel>> indexTODataMap=keyResultVO.getIndexTODataMap(); + if(indexTODataMap.containsKey(rowIndex)){ + List<BaseModel> baseModelList= indexTODataMap.get(rowIndex); + } + errorKeyMap.put(rowIndex, "鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅;" + errorKeyMap.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 = {""}; @@ -2056,50 +2390,54 @@ Map<String, List<BaseModel>> indexTodataMap = keyResultVO.getIndexTODataMap(); cboList.stream().forEach(cbo -> { String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); + String msg = errorKeyMap.get(rowIndex); if (indexTodataMap.containsKey(rowIndex)) { String oid = cbo.getOid(); String sourceOid = oid; String code = ""; - String groupCode=""; String errorid = "201"; if(codeOidToSystemOidMap.containsKey(oid)){ sourceOid=codeOidToSystemOidMap.get(oid); } List<BaseModel> newCboList = indexTodataMap.get(rowIndex); if (!CollectionUtils.isEmpty(newCboList)) { - BaseModel newCbo= newCboList.get(0); - String lcstatus =newCbo.getLcStatus(); - String newOid =newCbo.getOid(); - Date ts =newCbo.getTs(); - code = StringUtils.isBlank(newCbo.getId())?"":newCbo.getId(); - groupCode=newCbo.getData().getOrDefault("GROUPCODE",""); - String lastmodifier=newCbo.getLastModifier(); - if (lcstatus!=null&&!lcstatus.equals(CodeDefaultLC.RELEASED.getValue())) { - newCbo.setOid(newOid); - newCbo.setLastModifier(lastmodifier); - /*if(isCodeOrGroupCode) { - newCbo.setId(code); - }else{ - newCbo.getData().put("groupcode",groupCode); - }*/ - newCbo.setTs(ts); - cbo.setLastModifier(cbo.getLastModifier()); - editBoList.add(newCbo); - } - String mes = errorKeyMap.get(rowIndex); - XMLResultDataObjectDetailDO resultDataObjectDetailDO = new XMLResultDataObjectDetailDO(); - if(isCodeOrGroupCode) { - if(StringUtils.isBlank(groupCode)){ - errorid="1"; - mes+="锛涚敵璇风殑缂栫爜绫诲瀷涓洪泦鍥㈢爜锛岀瓑寰呴泦鍥㈢紪鐮佽祴鍊�"; + //澶勭悊鍏抽敭灞炴�ф煡鍑哄鏉$殑璇濓紝鏍规嵁闆嗘垚璋冪敤鐨勫綋鍓嶅垎绫讳唬鍙峰彇褰撳墠鍒嗙被鐨勭爜鍊笺�� + Map<String/**缂栫爜**/, BaseModel/**閲嶅缂栫爜鏁版嵁**/> classOidTOBaseModelMap = new HashMap<>(); + newCboList.stream().forEach(baseModel->{ + String codeclsfid=baseModel.getData().get(CODE_CLASSIFY_OID_FIELD.toUpperCase(Locale.ROOT)); + classOidTOBaseModelMap.put(codeclsfid,baseModel); + }); + String codeclsfid= classifyFullInfo.getCurrentClassifyVO().getOid(); + if(classOidTOBaseModelMap.containsKey(codeclsfid)){ + BaseModel newCbo= classOidTOBaseModelMap.get(codeclsfid); + String lcstatus =newCbo.getLcStatus(); + String newOid =newCbo.getOid(); + Date ts =newCbo.getTs(); + code = StringUtils.isBlank(newCbo.getId())?"":newCbo.getId(); + if(isCodeOrGroupCode) { + code=newCbo.getData().getOrDefault("GROUPCODE",""); + if(StringUtils.isBlank(code)){ + errorid="1"; + msg="锛涚敵璇风殑缂栫爜绫诲瀷涓洪泦鍥㈢爜锛岀瓑寰呴泦鍥㈢紪鐮佽祴鍊�"; + } } - resultDataObjectDetailDO.setCode(groupCode); + String lastmodifier=newCbo.getLastModifier(); + if (lcstatus!=null&&!lcstatus.equals(CodeDefaultLC.RELEASED.getValue())) { + newCbo.setOid(newOid); + newCbo.setLastModifier(lastmodifier); + newCbo.setTs(ts); + cbo.setLastModifier(cbo.getLastModifier()); + editBoList.add(newCbo); + } }else{ - resultDataObjectDetailDO.setCode(code); + errorid="205"; + msg+="锛涚紪鐮佸垯灞炰簬鍏朵粬鍒嗙被銆�"; } + XMLResultDataObjectDetailDO resultDataObjectDetailDO = new XMLResultDataObjectDetailDO(); + resultDataObjectDetailDO.setCode(code); resultDataObjectDetailDO.setId(sourceOid); resultDataObjectDetailDO.setErrorid(errorid); - resultDataObjectDetailDO.setMsg(mes); + resultDataObjectDetailDO.setMsg(msg); resultDataObjectDetailDOs.add(resultDataObjectDetailDO); } @@ -2114,10 +2452,7 @@ } // }); - //璁剧疆榛樿鍊� - batchSwitchAttrDefault(attrVOS, cboList); - //鏈�鍚庡紕缁勫悎瑙勫垯 - batchSwitchComponentAttrOnOrder(attrVOS,cboList); + //瑕佹妸浠ヤ笂鐨勯敊璇殑閮芥姏鍑哄悗锛屽啀缁х画澶勭悊鏃堕棿鍜岀粍鍚堣鍒� List<ClientBusinessObject> needSaveCboList = cboList.stream().filter(cbo -> { String rowIndex =cbo.getAttributeValue(IMPORT_ROW_INDEX); @@ -2133,7 +2468,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()); }); @@ -2262,6 +2597,7 @@ } return resultDataObjectDetailDOs; } + /*** * 闆嗘垚鎵归噺鍚屾鏇存柊鎺ュ彛 * @param codeClassifyVO; @@ -2367,6 +2703,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("鏁版嵁涓嶆槸鏈�鏂扮殑锛屽彲鑳戒粬浜哄凡缁忎慨鏀癸紝璇峰埛鏂板悗鍐嶈瘯"); @@ -2376,20 +2713,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); //浼佷笟鐮佸拰闆嗗洟鐮佺殑涓嶄慨鏀� @@ -2397,12 +2734,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(); @@ -2548,6 +2893,7 @@ }); } } + /** * 杞崲缁勫悎瑙勫垯鐨勫�� * @@ -2594,6 +2940,7 @@ }); } } + /** * 鏍¢獙鍏抽敭灞炴�� * @@ -2622,7 +2969,6 @@ }); //娌℃湁闄愬埗鍒嗙被锛屼絾鏄竴涓ā鏉垮彧鍙兘鍦ㄤ竴涓笟鍔$被鍨嬮噷闈紝鎵�浠ョ洿鎺ユ煡璇㈣繖涓笟鍔$被鍨嬪嵆鍙� - if (!CollectionUtils.isEmpty(conditionMap)) { String tableName=""; R<BtmTypeVO> r = btmTypeClient.getAllAttributeByBtmId(templateVO.getBtmTypeId()); @@ -2634,11 +2980,12 @@ } } if (StringUtils.isBlank(tableName)) { - String errormsg="鏍规嵁涓氬姟绫诲瀷涓烘煡璇㈠埌鐩稿叧涓氬姟琛�"; + String errormsg="鏍规嵁涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿叧涓氬姟琛�"; errorMap.put(orderDTO.getId(),errorMap.getOrDefault(orderDTO.getId(),"")+errormsg); return; } - final String[] sql = {"select count(*) from " + tableName + " t where 1 = 1 "}; + //final String[] sql = {"select count(*) from " + tableName + " t where 1 = 1 "}; + final String[] sql = {"select t.id from " + tableName + " t where 1 = 1 "}; conditionMap.forEach((key, value) -> { if(StringUtils.isBlank(value)||value.equals(QueryOptionConstant.ISNULL)){ sql[0] += " and " + key + " is null "; @@ -2653,17 +3000,24 @@ } else if (StringUtils.isNotBlank(orderDTO.getCopyFromVersion())) { sql[0] += " and t.oid != '" + orderDTO.getCopyFromVersion() + "'"; } + // 涓嶉渶瑕佸弬涓庢牎楠岀殑瑙勫垯oid + String isParticipateCheckOids = classifyService.selectLeafByParentClassifyOid(classifyFullInfo.getTopClassifyVO().getOid(), classifyFullInfo.getCurrentClassifyVO().getOid()); + if(Func.isNotBlank(isParticipateCheckOids)){ + sql[0] += " and codeclsfid not in("+isParticipateCheckOids+")"; + } sql[0] += " and t.lastR = '1' and t.lastV = '1' "; - if (commonsMapper.queryCountBySql(sql[0]) > 0) { + List<String> repeatData = commonsMapper.selectList(sql[0]); + if (!repeatData.isEmpty()) { String ruleInfoMsg = keyRuleVO == null ? "" : "鏌ヨ瑙勫垯锛氬幓闄ょ┖鏍�--{0},蹇界暐澶у皬鍐�--{1},蹇界暐鍏ㄥ崐瑙�--{2},蹇界暐鍏ㄩ儴绌烘牸--{3}"; String[] objs = new String[]{trim ? "鏄�" : "鍚�", ignoreCase ? "鏄�" : "鍚�", ignoreWidth ? "鏄�" : "鍚�", trimAll ? "鏄�" : "鍚�"}; - String defaultValue=";鏍规嵁鎮ㄥ~鍐欑殑鍏抽敭灞炴�х殑鍐呭锛岀粨鍚堝叧閿睘鎬ф煡璇㈣鍒欙紝鍙戠幇杩欎釜鏁版嵁宸茬粡鍦ㄧ郴缁熶腑瀛樺湪浜嗐�傝淇!銆�"; + String defaultValue=";鏍规嵁鎮ㄥ~鍐欑殑鍏抽敭灞炴�х殑鍐呭锛岀粨鍚堝叧閿睘鎬ф煡璇㈣鍒欙紝鍙戠幇杩欎釜鏁版嵁宸茬粡鍦ㄧ郴缁熶腑瀛樺湪浜�,鏁版嵁鐨勭紪鍙峰涓嬶細"+repeatData.stream().collect(Collectors.joining(","))+"銆傝淇!銆�"; String errormsg=defaultValue+ MessageFormat.format(ruleInfoMsg, objs); errorMap.put(orderDTO.getId(),errorMap.getOrDefault(orderDTO.getId(),"")+errormsg); // throw new VciBaseException("鏍规嵁鎮ㄥ~鍐欑殑鍏抽敭灞炴�х殑鍐呭锛岀粨鍚堝叧閿睘鎬ф煡璇㈣鍒欙紝鍙戠幇杩欎釜鏁版嵁宸茬粡鍦ㄧ郴缁熶腑瀛樺湪浜嗐�傝淇!銆�" + ruleInfoMsg, objs); } } } + /** * 鏍¢獙鏋氫妇鐨勫唴瀹� * @@ -2687,6 +3041,7 @@ }); } } + /** * 杞崲鏃堕棿鐨勬牸寮� * @@ -2748,10 +3103,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()); } } @@ -2779,6 +3134,7 @@ orderDTO.getData().put(attrId, value); } } + /** * 浠庣紪鐮佺敵璇蜂俊鎭璞′笂鑾峰彇鏌愪釜灞炴�х殑鍊� * @@ -2798,6 +3154,7 @@ } return value; } + /** * 澶勭悊鍒嗙被娉ㄥ叆鐨勪俊鎭� * @@ -2843,6 +3200,7 @@ }); } } + /*** * * @param codeClassifyVO @@ -2939,7 +3297,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; @@ -2971,6 +3329,7 @@ } }); } + /** * excel杞崲涓篶bo鐨勫璞� * @param classifyFullInfo 鍒嗙被鐨勫叏閮ㄤ俊鎭� @@ -3083,6 +3442,7 @@ }); } + /** * excel杞崲涓篶bo鐨勫璞� * @param classifyFullInfo 鍒嗙被鐨勫叏閮ㄤ俊鎭� @@ -3117,7 +3477,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)); @@ -3132,6 +3492,7 @@ }); } + /** * excel杞崲涓篶bo鐨勫璞� * @param classifyFullInfo 鍒嗙被鐨勫叏閮ㄤ俊鎭� @@ -3147,9 +3508,9 @@ 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); + String field = fieldIndexMap.get(index); if (StringUtils.isBlank(field)) { throw new VciBaseException("绗�" + (index + 1) + "鍒楃殑鏍囬鍦ㄧ郴缁熶腑涓嶅瓨鍦�"); } @@ -3174,7 +3535,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)); @@ -3187,6 +3548,106 @@ cboList.add(cbo); }); + } + + /** + * 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); } /** @@ -3220,6 +3681,7 @@ } } } + /** * 鎵归噺杞崲鏃堕棿閮戒负鎸囧畾鐨勬牸寮� * @param attrVOS 妯℃澘灞炴�� @@ -3445,6 +3907,7 @@ } } + /** * 鎵归噺妫�鏌ヤ紒涓氱紪鐮佹槸鍚﹀瓨鍦� * @param templateVO 妯℃澘鐨勬樉绀哄璞� @@ -3506,6 +3969,7 @@ }); } } + /*** * 鏍¢獙鍒嗙被瀵瑰簲鐨勬ā鏉夸俊鎭� * @param titleRowData @@ -3589,6 +4053,7 @@ } return codeClassifyTemplateVOList ; } + /** * 浠庡睘鎬т笂鑾峰彇鍙傜収鐨勫唴瀹� * @param attrVO 灞炴�х殑淇℃伅 @@ -3650,6 +4115,7 @@ } return showText; } + /** * 澶勭悊鏋氫妇鐨勬樉绀哄璞� * @param attrVOS 妯℃澘灞炴�� @@ -3698,7 +4164,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)) { @@ -3706,11 +4172,12 @@ if(!CollectionUtils.isEmpty(nullRowIndex)){ String checkAttr = requiredAttrMap.values().stream().map(CodeClassifyTemplateAttrVO::getName).collect(Collectors.joining(",")); nullRowIndex.stream().forEach(rowIndex->{ - errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鏍¢獙瑙勫垯涓嶉�氳繃锛屾湁鏍¢獙鐨勫睘鎬т负" + checkAttr); + errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鏍¢獙瑙勫垯蹇呭~椤逛笉閫氳繃锛屽鏋滄湁蹇呭~灞炴�т负绌猴紝鍒欏~銆�/銆戜唬鏇�,鏈夋牎楠岀殑灞炴�т负" + checkAttr); }); } } } + /** * 澶勭悊鍒嗙被娉ㄥ叆 * @param attrVOS 妯℃澘灞炴�� @@ -3720,7 +4187,7 @@ private void batchSwitchClassifyAttrOnOrder(Collection<CodeClassifyTemplateAttrVO> attrVOS,List<ClientBusinessObject> dataList, CodeClassifyFullInfoBO classifyFullInfo,boolean isImPort) { Map<String, CodeClassifyTemplateAttrVO> dateAttrVOMap = attrVOS.stream().filter( - s -> StringUtils.isNotBlank(s.getClassifyInvokeAttr()) && StringUtils.isNotBlank(s.getClassifyInvokeAttr()) + s -> StringUtils.isNotBlank(s.getClassifyInvokeAttr()) ).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); Map<String,CodeClassifyFullInfoBO> classifyFullInfoMap=new HashMap<>(); classifyFullInfoMap.put(classifyFullInfo.getCurrentClassifyVO().getOid(),classifyFullInfo); @@ -3740,7 +4207,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); @@ -3756,6 +4224,7 @@ } else { Map<String, String> classifyDataMap = VciBaseUtil.objectToMapString(classifyVO); String value = classifyDataMap.getOrDefault(attrVO.getClassifyInvokeAttr(), ""); + log.error("================================褰撳墠鍒嗙被娉ㄥ叆鐨剉alue鍊间负锛�==========================",value); cbo.setAttributeValue(attrId, value); } } catch (Throwable e) { @@ -3772,7 +4241,7 @@ * @param cboList 鎵归噺鐨勬暟鎹� */ private CodeImportResultVO batchCheckKeyAttrOnOrder(CodeClassifyFullInfoBO classifyFullInfo, CodeClassifyTemplateVO templateVO, - List<ClientBusinessObject> cboList) { + List<ClientBusinessObject> cboList,Map<String,String> errorMap) { //涓嶮dmEngineServiceImpl閲岀殑checkKeyAttrOnOrder鐩镐技 //鍏堣幏鍙栧叧閿睘鎬х殑瑙勫垯锛屼篃鍒╃敤缁ф壙鐨勬柟寮� CodeKeyAttrRepeatVO keyRuleVO = keyRuleService.getRuleByClassifyFullInfo(classifyFullInfo); @@ -3799,7 +4268,9 @@ //2.鍒ゆ柇鍏抽敭灞炴�у湪绯荤粺閲屾槸鍚﹂噸澶� //鍥犱负鏁版嵁閲忓緢澶э紝鎵�浠ュ緱鎯冲姙娉曞苟琛� //SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo(); - Map<String,List<BaseModel>> indexTODataMap=new HashMap<>(); + Map<String,List<BaseModel>> indexTODataMap=new ConcurrentHashMap<>(); + // 鏌ヨ涓嶉渶瑕佸弬涓庡叧閿睘鎬ф牎楠岀殑闄よ嚜宸变互澶栫殑鎵�鏈夊垎绫籵id + final String isParticipateCheckOids = classifyService.selectLeafByParentClassifyOid(classifyFullInfo.getTopClassifyVO().getOid(), classifyFullInfo.getCurrentClassifyVO().getOid()); List<ClientBusinessObject> repeatDataMap = cboList.parallelStream().filter(cbo -> { //姣忚閮藉緱鏌ヨ.濡傛灉鍏朵腑鍑虹幇浜嗛敊璇紝鎴戜滑灏辩洿鎺ユ姏鍑哄紓甯革紝鍏朵綑鐨勬樉绀� //VciBaseUtil.setCurrentUserSessionInfo(sessionInfo); @@ -3813,22 +4284,30 @@ 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){ - List<Map<String,String>> newDataList= commonsMapper.queryByOnlySqlForMap(sqlBO.getSqlUnPage()); - //List<ClientBusinessObject> newCboList= ChangeMapTOClientBusinessObjects(newDataList); - List<BaseModel> newCboList=new ArrayList<>(); + List<String> repeatData = commonsMapper.selectList(sqlBO.getSqlId()); + if(!repeatData.isEmpty()){ + final List<Map<String,String>> newDataList = commonsMapper.queryByOnlySqlForMap(sqlBO.getSqlUnPage()); + //List<ClientBusinessObject> newCboList=ChangeMapTOClientBusinessObjects(newDataList); + List<BaseModel> newCboList = new ArrayList<>(); newDataList.stream().forEach(stringStringMap -> { BaseModel baseModel=new BaseModel(); DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(stringStringMap,baseModel); + baseModel.setData(stringStringMap); newCboList.add(baseModel); }); + // 娣诲姞閿欒鍊� + String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); + errorMap.put(rowIndex, "閲嶅鐨勮褰曠紪鍙蜂负:"+repeatData.stream().collect(Collectors.joining(","))); if(!CollectionUtils.isEmpty(newCboList)) { indexTODataMap.put(cbo.getAttributeValue(IMPORT_ROW_INDEX), newCboList); } } - return isKeyCheck; + return !repeatData.isEmpty(); }else{ return false; } @@ -3856,7 +4335,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 { @@ -3939,9 +4418,11 @@ childOidPathMap.put(childPath.getOid(),thisClassifyPath); }); } + String path=classifyFullInfo.getCurrentClassifyVO().getId(); + //鏍规嵁瀹㈡埛閫夋嫨鐨勫垎绫昏矾寰勬湭id锛岃繕鏄痭ame纭畾璺緞鎷兼帴 + childOidPathMap.put(classifyFullInfo.getCurrentClassifyVO().getOid(),fullPath); return childOidPathMap; } - /** * 鑾峰彇瀵煎叆鐨勫唴瀹逛腑鍏抽敭灞炴�ч噸澶嶇殑琛屽彿 @@ -3951,7 +4432,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()); @@ -3996,7 +4477,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); } @@ -4011,6 +4492,7 @@ resultVO.setKeyAttrRepeatRowIndexList(selfRepeatRowIndexList); resultVO.setKeyAttrOkOidTORepeatOidMap(keyAttrOkOidTORepeatOidMap); } + /** * excel鐨勬爣棰樹笂鑾峰彇瀛楁鎵�鍦ㄧ殑浣嶇疆 * @param titleRowData 鏍囬鐨勫唴瀹� @@ -4125,6 +4607,7 @@ codeClassifyDatas.addAll(newCodeImprotDataVO); log.info("222"); } + /*** * @param titleRowData * @param newTemplateVO @@ -4170,7 +4653,8 @@ codeImprotDataVO.setColNames(colNames); codeImprotDataVO.getDatas().add(filedValueMap); } - /*** + + /** * 姝g‘閿欒鏁版嵁redis缂撳瓨 * @param uuid * @param templateVO @@ -4484,4 +4968,305 @@ mdmInterJtClient.receiveEditApply(oids,btmName); } } + + /*** + * @param codeClassifyOid + * @return + */ + @Override + public String exportGroupCodeExcel(String codeClassifyOid) throws ServiceException { + VciBaseUtil.alertNotNull(codeClassifyOid,"涓婚搴撳垎绫荤殑涓婚敭"); + CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyOid); + CodeClassifyVO codeClassifyVO= classifyFullInfo.getCurrentClassifyVO(); + //鑾峰彇鏈�鏂扮殑妯℃澘 + CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(codeClassifyOid); + LinkedList<String> colName=new LinkedList<>();//鍒楀ご + LinkedList<String> fieldList=new LinkedList<>();//鍒楀瓧娈� + + ExecGroupCodePortDataDTO execGroupCodePortDataDTO=new ExecGroupCodePortDataDTO(); + createExportGroupCodeMapConfig(templateVO,execGroupCodePortDataDTO);//缁勭粐鏁版嵁 + if(!CollectionUtils.isEmpty(execGroupCodePortDataDTO.getCodeAttrMapGroupAttrDTOS())){ + throw new ServiceException("闆嗗洟灞炴�ф槧灏勬湭閰嶇疆"); + } + fieldList=execGroupCodePortDataDTO.getFieldList(); + List<Map<String,String>>dataList=new ArrayList<>(); + getDatas(classifyFullInfo,templateVO,fieldList,dataList,null); + execGroupCodePortDataDTO.setDataList(dataList);//鏀炬暟鎹� + execGroupCodePortDataDTO.setSheetName(codeClassifyVO.getName()+"闆嗗洟鐮佸鍏ユā鏉�"); + String tempFolder = LocalFileUtil.getDefaultTempFolder(); + String excelName = tempFolder + File.separator + + classifyFullInfo.getCurrentClassifyVO().getId() + "_" + classifyFullInfo.getCurrentClassifyVO().getName() + "_闆嗗洟鐮佸鍑烘ā鏉�.xls"; + try { + new File(excelName).createNewFile(); + } catch (Throwable e) { + throw new VciBaseException(LangBaseUtil.getErrorMsg(e), new String[]{excelName}, e); + } + LinkedList<String> finalFieldList = fieldList; + Map<String, CodeClassifyTemplateAttrVO> attrVOMap = templateVO.getAttributes().stream().filter(s-> finalFieldList.contains(s.getId().toLowerCase(Locale.ROOT))).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); + 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); + excelDataList.add(groupExcelData); + for (int i = 0; i < fieldList.size(); i++) { + String attrId=fieldList.get(i); + if(attrId.equals(CODE_FIELD)||attrId.equals(CODE_GROUP_FIELD)){ + continue; + } + if (attrVOMap.containsKey(attrId)) { + CodeClassifyTemplateAttrVO attrVO = attrVOMap.get(attrId); + //Object text = attrVO.getName(); + CodeAndGroupCodeAttrMappingDTO codeAttrMappingDTO = jAttrVOMap.get(attrId); + Object text = codeAttrMappingDTO.getSourceAttrName(); + text = exportKeyAndRequired(workbook, attrVO, text); + WriteExcelData excelData = new WriteExcelData(0, i, text); + if (text instanceof RichTextString) { + excelData.setFontColor(String.valueOf(HSSFColor.HSSFColorPredefined.RED.getIndex())); + } + excelDataList.add(excelData); + } + } + final Integer[] rowIndex = {0}; + dataList.stream().forEach(data -> { + rowIndex[0]++; + String id=data.getOrDefault("id", ""); + excelDataList.add(new WriteExcelData(rowIndex[0], 0, id)); + String groupCode=data.getOrDefault("groupcode", ""); + excelDataList.add(new WriteExcelData(rowIndex[0], 1, groupCode)); + List<String> newFieldList = finalFieldList.stream().filter(e -> !e.equals("id") &&!e.equals("groupcode")).collect(Collectors.toList()); + + for (int i = 0; i < newFieldList.size(); i++) { + String attrId = newFieldList.get(i).toLowerCase(Locale.ROOT); + if(attrId.equals("id")){ + + }else if(attrId.equals("groupcode")){ + + }else{ + if (attrVOMap.containsKey(attrId)) { + CodeClassifyTemplateAttrVO attrVO = attrVOMap.get(attrId); + if (StringUtils.isNotBlank(attrVO.getEnumId()) || StringUtils.isNotBlank(attrVO.getEnumString())) { + attrId = attrId + "Text"; + } + if (StringUtils.isNotBlank(attrVO.getReferBtmId()) || StringUtils.isNotBlank(attrVO.getReferConfig())) { + attrId = attrId + "name"; + } + if (VciQueryWrapperForDO.LC_STATUS_FIELD.equalsIgnoreCase(attrId)) { + attrId = VciQueryWrapperForDO.LC_STATUS_FIELD_TEXT.toLowerCase(Locale.ROOT); + } + excelDataList.add(new WriteExcelData(rowIndex[0], i+2, data.getOrDefault(attrId, ""))); + } + } + } + }); + WriteExcelOption excelOption = new WriteExcelOption(); + excelOption.addSheetDataList(execGroupCodePortDataDTO.getSheetName(),excelDataList); + + //澧炲姞妯℃澘鐨勪俊鎭鍏� + LinkedList<WriteExcelData> tempEDList = new LinkedList<>(); + tempEDList.add(new WriteExcelData(0,0,"妯℃澘涓婚敭")); + tempEDList.add(new WriteExcelData(0,1,"妯℃澘浠e彿")); + tempEDList.add(new WriteExcelData(0,2,"妯℃澘鍚嶇О")); + tempEDList.add(new WriteExcelData(1,0,templateVO.getOid())); + tempEDList.add(new WriteExcelData(1,1,templateVO.getId())); + tempEDList.add(new WriteExcelData(1,2,templateVO.getName())); + excelOption.addSheetDataList("妯℃澘淇℃伅銆愯鍕垮垹闄ゆ垨绉诲姩銆�",tempEDList); + ExcelUtil.writeDataToFile(excelName, excelOption); + log.info("鏂囦欢璺緞"+excelName); + return excelName; + } + + /*** + * 瀵煎叆闆嗗洟鐮� + * @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 + */ + private void createExportGroupCodeMapConfig(CodeClassifyTemplateVO templateVO,ExecGroupCodePortDataDTO execGroupCodePortDataDTO){ + String classOid=templateVO.getCodeclassifyoid(); + String templateOid=templateVO.getOid(); + R r=mdmInterJtClient.list_mapping(classOid); + if(r.isSuccess()){ + List<DockingPreAttrMappingVO>dockingPreAttrMappingVOList= (List<DockingPreAttrMappingVO>) r.getData(); + List<CodeAndGroupCodeAttrMappingDTO> codeAttrMapGroupAttrDTOS=new ArrayList<>(); + LinkedList<String> fieldList=new LinkedList<>(); + LinkedList<String> colNameList=new LinkedList<>(); + dockingPreAttrMappingVOList.stream().forEach(dockingPreAttrMappingVO -> { + CodeAndGroupCodeAttrMappingDTO codeAndGroupCodeAttrMappingDTO=new CodeAndGroupCodeAttrMappingDTO(); + if(StringUtils.isNotBlank(dockingPreAttrMappingVO.getTargetAttrId())){ + codeAndGroupCodeAttrMappingDTO.setDefaultValue(dockingPreAttrMappingVO.getDefaultValue()); + codeAndGroupCodeAttrMappingDTO.setMetaListId(dockingPreAttrMappingVO.getMetaListId()); + codeAndGroupCodeAttrMappingDTO.setSourceAttrKey(dockingPreAttrMappingVO.getSourceAttrKey()); + codeAndGroupCodeAttrMappingDTO.setSourceAttrName(dockingPreAttrMappingVO.getSourceAttrName()); + codeAndGroupCodeAttrMappingDTO.setTargetAttrId(dockingPreAttrMappingVO.getTargetAttrId()); + codeAndGroupCodeAttrMappingDTO.setTargetAttrKey(dockingPreAttrMappingVO.getTargetAttrKey()); + codeAndGroupCodeAttrMappingDTO.setTargetAttrName(dockingPreAttrMappingVO.getTargetAttrName()); + fieldList.add(dockingPreAttrMappingVO.getTargetAttrKey()); + colNameList.add(dockingPreAttrMappingVO.getSourceAttrName()); + } + codeAttrMapGroupAttrDTOS.add(codeAndGroupCodeAttrMappingDTO); + }); + execGroupCodePortDataDTO.setCodeAttrMapGroupAttrDTOS(codeAttrMapGroupAttrDTOS); + execGroupCodePortDataDTO.setFieldList(fieldList); + execGroupCodePortDataDTO.setColName(colNameList); + } + } + + /*** + * 闆嗗洟鐮佸睘鎬ц浆鎹� + * @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,List<String> codeList ){ + //鍏堟煡璇㈡暟鎹� + String btmTypeId = classifyFullInfo.getTopClassifyVO().getBtmTypeId(); + String codeClassifyOid=classifyFullInfo.getCurrentClassifyVO().getOid(); + 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"); + conditionMap.put("lastv", "1"); + + R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Arrays.asList(btmTypeId)); + String tableName = ""; + if(listR.isSuccess() && !listR.getData().isEmpty()){ + tableName = Func.isNotBlank(listR.getData().get(0).getTableName()) ? listR.getData().get(0).getTableName():VciBaseUtil.getTableName(btmTypeId); + }else{ + tableName = VciBaseUtil.getTableName(btmTypeId); + } + PageHelper pageHelper = new PageHelper(); + pageHelper.setLimit(1000000); + pageHelper.setPage(1); + pageHelper.addDefaultDesc("createTime"); + DataGrid<Map<String, String>> dataGrid = engineService.queryGrid(btmTypeId, templateVO, conditionMap, pageHelper); + //杞崲鏁版嵁 + if(!CollectionUtils.isEmpty(dataGrid.getData())){ + dataList.addAll(dataGrid.getData()); + } + //灏佽鏌ヨ鍑烘潵鐨勬暟鎹� + engineService.wrapperData(dataList, templateVO, selectFieldList,false); + //modify by weidy@2022-09-27 + //鍥犱负鍦ㄥ垪琛ㄥ拰琛ㄥ崟鐨勬樉绀虹殑鏃跺�欙紝鎴戜滑鐨勫紑鍏崇被鍨嬮〉闈細澶勭悊锛屼絾鏄湪瀵煎嚭鐨勬椂鍊欙紝鎴戜滑闇�瑕佸皢true鍜宖alse閮芥浛鎹㈡垚涓枃 + engineService.wrapperBoolean(dataList,templateVO); + log.info("瀵煎嚭妯℃澘鐨勬暟鎹潯鐩暟:"+dataList.size()); + } } -- Gitblit v1.9.3