From 5ca05f604876cacca45e3bdfa9f54a997653da90 Mon Sep 17 00:00:00 2001 From: ludc Date: 星期三, 24 一月 2024 16:25:45 +0800 Subject: [PATCH] bug修改:290相似项查询sql拼接报错修改,291码值回收报错下标越界 --- Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java | 325 ++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 233 insertions(+), 92 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 09ec641..72feb94 100644 --- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java +++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java @@ -3,7 +3,6 @@ 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.feign.IMdmInterJtClient; @@ -13,9 +12,7 @@ import com.vci.ubcs.code.bo.CodeTemplateAttrSqlBO; 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; -import com.vci.ubcs.code.enumpack.sysIntegrationPushTypeEnum; +import com.vci.ubcs.code.enumpack.*; import com.vci.ubcs.code.lifecycle.CodeAllCodeLC; import com.vci.ubcs.code.mapper.CommonsMapper; import com.vci.ubcs.code.service.*; @@ -29,7 +26,6 @@ import com.vci.ubcs.omd.feign.IBtmTypeClient; import com.vci.ubcs.omd.feign.IWebSecretClient; import com.vci.ubcs.omd.vo.BtmTypeVO; -import com.vci.ubcs.omd.vo.RevisionRuleVO; import com.vci.ubcs.starter.bo.WriteExcelData; import com.vci.ubcs.starter.exception.VciBaseException; import com.vci.ubcs.starter.poi.bo.ReadExcelOption; @@ -58,7 +54,6 @@ import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.RichTextString; import org.apache.poi.ss.usermodel.Workbook; -import org.aspectj.apache.bcel.classfile.Code; import org.springblade.core.redis.cache.BladeRedis; import org.springblade.core.secure.BladeUser; import org.springblade.core.secure.utils.AuthUtil; @@ -72,7 +67,6 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; @@ -89,7 +83,9 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArraySet; +import java.util.concurrent.ForkJoinPool; 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; @@ -203,6 +199,11 @@ * 瀹㈡埛鐜板満excel涓鸿�佺増鏈紝瀵煎嚭鐨勬�绘暟闄愬埗涓�65535 */ public static final int EXPORT_LIMIT = 65535; + + /** + * 鑷畾涔夊苟鍙慒orkJoinPool + */ + private static final ForkJoinPool customForkJoinPool = new ForkJoinPool(Runtime.getRuntime().availableProcessors()-1); /** * 鎵归噺鐢宠锛氶�夊彇閫変腑鍒嗙被涓嬬殑鎵�鏈夋ā鏉垮叧閿睘鎬э紝鐩镐技灞炴�э紝蹇呭~灞炴�э紝鍐欏叆execl涓� @@ -383,7 +384,7 @@ CodeClassifyVO codeClassifyVO = classifyService.getObjectByOid(codeClassifyOid); //鑾峰彇鐮佹瀹藉害 - //String secWidth = getCodeSegmentWidth(codeClassifyVO.getOid()); + String secWidth = getCodeSegmentWidth(codeClassifyVO.getOid()); if(isHistory){ templateVOList= templateService.childTemplates(codeClassifyOid); @@ -434,6 +435,8 @@ 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())); + // 濉厖鐮佹 + excelDataList.add(new WriteExcelData(1,1,secWidth)); } for (int i = 0; i < templateAttrVOS.size(); i++) { CodeClassifyTemplateAttrVO attrVO = templateAttrVOS.get(i); @@ -620,22 +623,121 @@ * @return */ private String getCodeSegmentWidth(String codeClassifyOid){ - CodeClassifyVO codeClassifyVO = classifyService.getObjectByOid(codeClassifyOid); + CodeClassifyFullInfoBO classifyFullInfoBO = classifyService.getClassifyFullInfo(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("#"); - } + secVOList.stream().forEach(item->{ + switch (item.getSecType().toLowerCase(Locale.ROOT)){ + case "codeclassifysec": + case "codevariablesec": + case "coderefersec": + case "codefixedsec": + case "codeattrsec": + case "codeserialsec": + countSecWith(item,secWidth); + break; + case "codelevelsec": + //灞傜骇鐮佹锛岄渶瑕佷粠鍒嗙被涓婅幏鍙栫浉搴旂殑淇℃伅 + String secValue = ""; + if (CodeLevelTypeEnum.MIN.getValue().equalsIgnoreCase(item.getCodeLevelType())) { + //鏈�灏忓眰锛屽洜涓烘垜浠彧鑳藉湪鍙跺瓙鑺傜偣涓婄敵璇风紪鐮侊紝鎵�浠ヨ繖涓氨鏄綋鍓嶅垎绫荤殑 + if (CodeGetValueTypeEnum.CURRENT.getValue().equalsIgnoreCase(item.getCodeGetValueType()) || CollectionUtils.isEmpty(classifyFullInfoBO.getParentClassifyVOs())) { + //灏辨槸褰撳墠鍒嗙被鐨� + secValue = classifyFullInfoBO.getCurrentClassifyVO().getId(); + } else { + //鎴戜滑闇�瑕佷粠椤跺眰寮�濮嬫壘鍒板綋鍓嶅垎绫讳负姝� + secValue = classifyFullInfoBO.getParentClassifyVOs().stream().sorted(((o1, o2) -> -o1.getDataLevel().compareTo(o2.getDataLevel()))).map(CodeClassifyVO::getId).collect(Collectors.joining()) + classifyFullInfoBO.getCurrentClassifyVO().getId(); + } + } else { + //鎸囧畾灞傦紝鎴戜滑闇�瑕侀�氳繃涓婄骇鐨勬潵鑾峰彇 + if (CollectionUtils.isEmpty(classifyFullInfoBO.getParentClassifyVOs())) { + //璇存槑褰撳墠宸茬粡鏄渶楂樼殑浜� + secValue = classifyFullInfoBO.getCurrentClassifyVO().getId(); + } else { + //杩欎釜鎴戜滑闇�瑕佺湅鐪�,灞傜骇鏄笉鏄ぇ浜庝簡鏈�澶у眰绾х殑鏁� + List<CodeClassifyVO> parentClassifyVOList = classifyFullInfoBO.getParentClassifyVOs().stream().sorted(((o1, o2) -> -o1.getDataLevel().compareTo(o2.getDataLevel()))).collect(Collectors.toList()); + if (item.getCodeLevelValue() > (parentClassifyVOList.size() + 1)) { + //鎸囧畾鐨勫眰绾ф瘮褰撳墠鐨勫眰绾ц繕澶т簡锛屾墍浠ュ彧鑳借幏鍙栧綋鍓嶅眰绾т簡 + if (CodeGetValueTypeEnum.CURRENT.getValue().equalsIgnoreCase(item.getCodeGetValueType())) { + secValue = classifyFullInfoBO.getCurrentClassifyVO().getId(); + } else { + secValue = parentClassifyVOList.stream().map(CodeClassifyVO::getId).collect(Collectors.joining()) + classifyFullInfoBO.getCurrentClassifyVO().getId(); + } + } else { + //鎴戜滑鑾峰彇鍏朵腑鎸囧畾灞傜殑鍐呭 + if (CodeGetValueTypeEnum.CURRENT.getValue().equalsIgnoreCase(item.getCodeGetValueType())) { + CodeClassifyVO classifyVO = parentClassifyVOList.stream().filter(s -> s.getDataLevel().intValue() == item.getCodeLevelValue().intValue()).findFirst().orElseGet(() -> null); + if (classifyVO != null) { + secValue = classifyVO.getId(); + } + } else { + //灏忎簬绛変簬鐨勫叏閮ㄦ嬁鍑烘潵 + secValue = parentClassifyVOList.stream().filter(s -> s.getDataLevel().intValue() <= item.getCodeLevelValue().intValue()).sorted(((o1, o2) -> -o1.getDataLevel().compareTo(o2.getDataLevel()))).map(CodeClassifyVO::getId).collect(Collectors.joining()); + } + } + } + } + //鐪嬬湅闀垮害鏄惁闇�瑕佹埅鏂� + if (!CodeCutTypeEnum.NONE.getValue().equalsIgnoreCase(item.getValueCutType()) && + item.getValueCutLength() != null && item.getValueCutLength() > 0 && secValue.length() > item.getValueCutLength()) { + if (CodeCutTypeEnum.RIGHT.getValue().equalsIgnoreCase(item.getValueCutType())) { + //宸︽埅鍙栨槸浠庡乏杈瑰壀鎺夛紝鍙虫埅鍙栨槸浠庡彸杈瑰壀鎺�--淇濈暀宸﹁竟 + secValue = secValue.substring(0, item.getValueCutLength()); + } else { + secValue = secValue.substring(secValue.length() - item.getValueCutLength()); + } + } + secValue = productCodeService.joinPreffixAndSuffix(item,secValue); + secWidth.append(secValue.length()).append("#"); + break; + case "codedatesec": + String dateFormatStr = item.getCodeDateFormatStr(); + if(Func.isNotEmpty(dateFormatStr)) { + // 鑾峰彇褰撳墠鏃堕棿 + Date currentDate = new Date(); + // 鎸囧畾鏃ユ湡鏍煎紡 + SimpleDateFormat dateFormat = new SimpleDateFormat(dateFormatStr); + // 灏嗗綋鍓嶆椂闂磋浆鎹负鎸囧畾鏃ユ湡鏍煎紡 + // 浣跨敤姝e垯琛ㄨ揪寮忓幓鎺夐櫎鏁板瓧浠ュ鐨勬墍鏈夊瓧绗︿覆 + String cleanedDate = dateFormat.format(currentDate).replaceAll("[^0-9]", ""); + int width = cleanedDate.length(); + if (Func.isNotEmpty(item.getPrefixCode())) { + width += item.getPrefixCode().length(); + } + if (Func.isNotEmpty(item.getSuffixCode())) { + width += item.getSuffixCode().length(); + } + secWidth.append(width).append("#"); + } + break; + } + }); return secWidth.toString().substring(0, secWidth.length() - 1); + } + + /** + * 璁$畻鐮佹闀垮害鍔犲墠鍚庣紑鐨勯暱搴� + * @param codeBasicSecVO + * @param secWidth + */ + private void countSecWith(CodeBasicSecVO codeBasicSecVO,StringBuffer secWidth){ + if(Func.isNotEmpty(codeBasicSecVO.getCodeSecLength())){ + int width = VciBaseUtil.getInt(codeBasicSecVO.getCodeSecLength()); + if(Func.isNotEmpty(codeBasicSecVO.getPrefixCode())){ + width += codeBasicSecVO.getPrefixCode().length(); + } + if(Func.isNotEmpty(codeBasicSecVO.getSuffixCode())){ + width += codeBasicSecVO.getSuffixCode().length(); + } + secWidth.append(width).append("#"); + }else { + secWidth.append(0).append("#"); + } } /** @@ -1245,8 +1347,6 @@ 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"; @@ -1260,14 +1360,17 @@ throw new VciBaseException(LangBaseUtil.getErrorMsg(e)); } ExcelUtil.writeDataToFile(excelFileName, eo); + saveLogUtil.operateLog("鍘嗗彶鏁版嵁瀵煎叆",true, StringUtil.format("閿欒淇℃伅锛歿}",JSON.toJSONString(shetNameMap))); + }else{ + // 鍘嗗彶鏁版嵁瀵煎叆鏃跺嚭鐜颁簡鐩镐技椤硅繑鍥炵粨鏋滄椂涓嶇畻瀵煎叆鎴愬姛 + if(shetNameMap.isEmpty() || !isCreateUUid){ + saveLogUtil.operateLog("鍘嗗彶鏁版嵁瀵煎叆",false, StringUtil.format("瀵煎叆鍒板垎绫粄}涓紝瀵煎叆鎴愬姛鎬绘暟涓猴細{}", JSON.toJSONString(classifyFullInfo), Func.isEmpty(importCount) ? 0:importCount.get(0))); + } } 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); @@ -2014,10 +2117,18 @@ ExcelUtil.writeDataToFile(excelName, excelOption); } + /** + * 鐩镐技椤规煡璇㈠嚭鏉ヤ箣鍚庡啀鐐瑰嚮纭鏃惰皟鐢ㄧ殑 + * @param codeImprotSaveDatVOList + * @param classifyAttr + * @param isImprot + * @return + */ @Override public R batchImportData(List<CodeImprotSaveDatVO> codeImprotSaveDatVOList, String classifyAttr, boolean isImprot) { WriteExcelOption eo = new WriteExcelOption(); AtomicBoolean success= new AtomicBoolean(true); + AtomicReference<CodeClassifyTemplateVO> codeClassifyTemplateVO = new AtomicReference<>(); codeImprotSaveDatVOList.stream().forEach(codeImprotSaveDatVO -> { List<SheetRowData> rowDataList = new ArrayList<>(); List<ClientBusinessObject>cboList=new ArrayList<>(); @@ -2046,16 +2157,16 @@ log.info("鍒嗙被锛�"+classifyFullInfo.getCurrentClassifyVO().getName()+"鏁版嵁:"+codeImprotSaveDatVO.getDataList().size()); // CodeClassifyTemplateVO codeClassifyTemplateVO= engineService.getUsedTemplateByClassifyOid(orderDTO.getCodeClassifyOid()); - CodeClassifyTemplateVO codeClassifyTemplateVO= templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid()); + codeClassifyTemplateVO.set(templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid())); //瑙勫垯鐨勪富閿渶瑕佸幓鑾峰彇 CodeRuleVO ruleVO = engineService.getCodeRuleByClassifyFullInfo(classifyFullInfo); //闄ゅ幓榛樿鐨勫睘鎬�.杩樻湁鍙湁琛ㄥ崟鏄剧ず鐨勫瓧娈垫墠瀵煎叆 - List<CodeClassifyTemplateAttrVO> attrVOS = codeClassifyTemplateVO.getAttributes().stream().filter(s -> + List<CodeClassifyTemplateAttrVO> attrVOS = codeClassifyTemplateVO.get().getAttributes().stream().filter(s -> !DEFAULT_ATTR_LIST.contains(s.getId()) && ((Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag())) ).collect(Collectors.toList()); String fullPath = getFullPath(classifyFullInfo); - excelToCbo(classifyFullInfo,fieldIndexMap,rowDataList, codeClassifyTemplateVO,cboList,fullPath,!isImprot); + excelToCbo(classifyFullInfo,fieldIndexMap,rowDataList, codeClassifyTemplateVO.get(),cboList,fullPath,!isImprot); Map<String,String> errorMap=new ConcurrentHashMap<>(); Map<String/**璺緞**/, CodeClassifyVO> pathMap=new HashMap<>() ; //鏍¢獙缂栫爜瑙勫垯鍜岀爜娈垫槸鍚︽纭� @@ -2101,7 +2212,7 @@ //鏈�鍚庡紕缁勫悎瑙勫垯 batchSwitchComponentAttrOnOrder(attrVOS,cboList); //3.鍒ゆ柇鍏抽敭灞炴�� - CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, codeClassifyTemplateVO, cboList,false,errorMap); + CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, codeClassifyTemplateVO.get(), cboList,false,errorMap); Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList(); Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList(); if(!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)){ @@ -2132,7 +2243,7 @@ dataCBOList.add(baseModel); }); try { - productCodeService.productCodeAndSaveData(classifyFullInfo, codeClassifyTemplateVO, finalRuleVOMap.get(ruleOid), null, dataCBOList, user); + productCodeService.productCodeAndSaveData(classifyFullInfo, codeClassifyTemplateVO.get(), finalRuleVOMap.get(ruleOid), null, dataCBOList, user); } catch (Throwable e) { //success=false; log.error("鎵归噺浜х敓缂栫爜鐨勬椂鍊欏嚭閿欎簡", e); @@ -2142,7 +2253,7 @@ }); } } - engineService.batchSaveSelectChar(codeClassifyTemplateVO, dataCBOList); + engineService.batchSaveSelectChar(codeClassifyTemplateVO.get(), dataCBOList); }); }else { final BladeUser user = AuthUtil.getUser(); @@ -2159,7 +2270,7 @@ dataCBOList.add(baseModel); }); try { - productCodeService.productCodeAndSaveData(classifyFullInfo, codeClassifyTemplateVO, ruleVO, orderDTO.getSecDTOList(), dataCBOList,user); + productCodeService.productCodeAndSaveData(classifyFullInfo, codeClassifyTemplateVO.get(), ruleVO, orderDTO.getSecDTOList(), dataCBOList,user); } catch (Exception e) { log.error("鎵归噺浜х敓缂栫爜鐨勬椂鍊欏嚭閿欎簡", e); needSaveCboList.stream().forEach(cbo -> { @@ -2168,7 +2279,7 @@ }); } //濡傛灉鏄紪鐮佺敓鎴愬け璐ワ紝鍒欑洿鎺ュ氨澶辫触浜嗭紝鍏朵粬鐨勫垽鏂嚭鏉ユ湁閿欒鐨勬垜浠兘缁熶竴杩斿洖鍒癳xcel閲岄潰 - engineService.batchSaveSelectChar(codeClassifyTemplateVO, dataCBOList); + engineService.batchSaveSelectChar(codeClassifyTemplateVO.get(), dataCBOList); } } if(errorMap.size()>0) { @@ -2179,14 +2290,16 @@ errorMap.forEach((key,v)->{ excelDataList.add(new WriteExcelData(index[0]++, 0, "绗�"+(Integer.parseInt(key)+1)+"琛屾暟鎹細"+v)); }); - eo.addSheetDataList(codeClassifyTemplateVO.getName() + "瀵煎叆妯℃澘", excelDataList); + eo.addSheetDataList(codeClassifyTemplateVO.get().getName() + "瀵煎叆妯℃澘", excelDataList); } }); if(!success.get()){ String excelName = LocalFileUtil.getDefaultTempFolder() + File.separator + (isImprot?"鎵归噺鍘嗗彶閿欒淇℃伅.xls":"鎵归噺鐢宠閿欒淇℃伅.xls"); ExcelUtil.writeDataToFile(excelName,eo); - return R.fail(excelName); + saveLogUtil.operateLog("鍘嗗彶鏁版嵁瀵煎叆",true, StringUtil.format("閿欒淇℃伅锛歿}",JSON.toJSONString(eo.getWriteDataMap()))); + return R.fail(excelName); }else { + saveLogUtil.operateLog("鍘嗗彶鏁版嵁瀵煎叆",false, StringUtil.format("瀵煎叆鍒板垎绫粄}涓紝瀵煎叆鎴愬姛鎬绘暟涓猴細{}", JSON.toJSONString(codeClassifyTemplateVO), Func.isEmpty(codeImprotSaveDatVOList.get(0).getDataList().size()))); return R.success(isImprot ? "鎵归噺鍘嗗彶瀵煎叆鎴愬姛" : "鎵归噺鐢宠鎴愬姛"); } } @@ -2407,10 +2520,10 @@ if (!CollectionUtils.isEmpty(newCboList)) { //澶勭悊鍏抽敭灞炴�ф煡鍑哄鏉$殑璇濓紝鏍规嵁闆嗘垚璋冪敤鐨勫綋鍓嶅垎绫讳唬鍙峰彇褰撳墠鍒嗙被鐨勭爜鍊笺�� 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); - }); + newCboList.stream().forEach(baseModel->{ + String codeclsfid=baseModel.getData().get(CODE_CLASSIFY_OID_FIELD.toLowerCase(Locale.ROOT)); + classOidTOBaseModelMap.put(codeclsfid,baseModel); + }); String codeclsfid= classifyFullInfo.getCurrentClassifyVO().getOid(); if(classOidTOBaseModelMap.containsKey(codeclsfid)){ BaseModel newCbo= classOidTOBaseModelMap.get(codeclsfid); @@ -2447,7 +2560,7 @@ } } }); - //鍏抽敭鐔熸倝鏇存敼 + //鍏抽敭灞炴�ф洿鏀� if (!CollectionUtils.isEmpty(editBoList)) { engineService.updateBatchByBaseModel(classifyFullInfo.getTopClassifyVO().getBtmTypeId(),editBoList);//淇濆瓨鏁版嵁 } @@ -2641,7 +2754,7 @@ //cboOidMap.put("id", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(codeDataMap.keySet().toArray(new String[0])) + ")"); String tableName =""; try { - R<BtmTypeVO> r = btmTypeClient.getAllAttributeByBtmId(templateVO.getBtmTypeId()); + R<BtmTypeVO> r = btmTypeClient.getAllAttributeByBtmId(classifyFullInfo.getTopClassifyVO().getBtmTypeId()); if(!r.isSuccess()) { throw new Throwable(r.getMsg()); } @@ -2683,6 +2796,7 @@ } List<Map<String,String>> dataMapList=commonsMapper.queryByOnlySqlForMap(sb.toString()); + DefaultAttrAssimtUtil.mapToLowerCase(dataMapList,true); List<ClientBusinessObject> cboList= ChangeMapTOClientBusinessObjects(dataMapList); Map<String, ClientBusinessObject> codeSystemObjectMap = cboList.stream().filter(systeDataObject -> systeDataObject != null && StringUtils.isNotBlank(systeDataObject.getId())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getId(), t -> t)); Map<String, String> errorMap = new HashMap<>(); @@ -2738,7 +2852,17 @@ cbo.setDescription(StringUtils.isBlank(orderDTO.getDescription())?"":orderDTO.getDescription()); cbo.setName(orderDTO.getName()); try { - cbo.setAttributeValueWithNoCheck("description", orderDTO.getDescription()); + //涓昏澶勭悊澶у皬鍐欓棶棰橈紝灏哾ata閲岄潰鐨勬暟鎹殑key閮借浆涓哄皬鍐� + HashMap<String,String> lowerData = new HashMap<>(); + Iterator<Map.Entry<String, String>> iterator = cbo.getData().entrySet().iterator(); + while (iterator.hasNext()){ + Map.Entry<String, String> next = iterator.next(); + lowerData.put(next.getKey().toLowerCase(Locale.ROOT),next.getValue()); + } + cbo.getData().clear(); + cbo.getData().putAll(lowerData); + cbo.setAttributeValueWithNoCheck("description", (StringUtil.isNotBlank(orderDTO.getData() + .get("description")) ? orderDTO.getData().get("description") : orderDTO.getDescription() )); // cbo.setAttributeValue("name", orderDTO.getName()); // if(finalIsProcess){//鍦ㄦ祦绋嬩腑涓嶅厑璁告洿鏀� // errorMap.put(code,errorMap.getOrDefault(code, errorMap.getOrDefault(code,"")+";鏁版嵁"+code+"鍦ㄦ祦绋嬩腑锛屼笉鍏佽鏇存敼!")); @@ -2801,7 +2925,7 @@ List<CodeAllCode>newCodeAllCodeList= codeAllCodeService.selectByWrapper(Wrappers.<CodeAllCode>query().lambda().eq(CodeAllCode::getCreateCodeOid, cbo.getOid())); if (!CollectionUtils.isEmpty(newCodeAllCodeList)) { - CodeAllCode codeCbo = codeAllCodeList.get(0); + CodeAllCode codeCbo = newCodeAllCodeList.get(0); log.info("codeCbos code:" + codeCbo.getId()); codeCbo.setLcStatus(status); codeAllCodeList.add(codeCbo); @@ -2839,7 +2963,7 @@ engineService.updateBatchByBaseModel(classifyFullInfo.getTopClassifyVO().getBtmTypeId(),updateList); codeAllCodeService.saveOrUpdateBatch(codeAllCodeList); if(deleteList.size()>0) { - commonsMapper.deleteByTaleAndOid(tableName, VciBaseUtil.array2String(deleteList.toArray(new String[]{}))); + commonsMapper.deleteByTaleAndOid(tableName, VciBaseUtil.toInSql(deleteList.toArray(new String[]{}))); } //鏄惁璋冪敤闆嗗洟鎺ュ彛鐢宠鎺ュ彛 if(isCodeOrGroupCode){ @@ -3514,6 +3638,11 @@ rowDataList.stream().forEach(rowData -> { ClientBusinessObject cbo=new ClientBusinessObject(); DefaultAttrAssimtUtil.addDefaultAttrAssimt(cbo, classifyFullInfo.getTopClassifyVO().getBtmTypeId()); + R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(classifyFullInfo.getTopClassifyVO().getBtmTypeId())); + if(!listR.isSuccess() || listR.getData().size() == 0){ + throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒"); + } + cbo.setRevisionRule("".equals(listR.getData().get(0).getVersionRule())?"1":listR.getData().get(0).getVersionRule()); rowData.getData().forEach((index,value)->{ String field = fieldIndexMap.get(index); if (StringUtils.isBlank(field)) { @@ -3860,7 +3989,8 @@ String sql = "select " + valueField + "," + showText.toLowerCase(Locale.ROOT) +" from " + table + " where " + showText + " in (%s)"; valueCollections.stream().forEach(values->{ List<Map<String,String>> dataMapList = commonsMapper.queryByOnlySqlForMap(String.format(sql, VciBaseUtil.toInSql(values.toArray(new String[0])))); - List<ClientBusinessObject> cbos= ChangeMapTOClientBusinessObjects(dataMapList); + DefaultAttrAssimtUtil.mapToLowerCase(dataMapList,true); + List<ClientBusinessObject> cbos=ChangeMapTOClientBusinessObjects(dataMapList); if(!CollectionUtils.isEmpty(cbos)){ valueOidTextMap.putAll(cbos.stream().collect(Collectors.toMap(s->s.getAttributeValue(valueField),t->t.getAttributeValue(showText)))); } @@ -4229,7 +4359,7 @@ } else { Map<String, String> classifyDataMap = VciBaseUtil.objectToMapString(classifyVO); String value = classifyDataMap.getOrDefault(attrVO.getClassifyInvokeAttr(), ""); - log.error("================================褰撳墠鍒嗙被娉ㄥ叆鐨剉alue鍊间负锛�==========================",value); +// log.error("================================褰撳墠鍒嗙被娉ㄥ叆鐨剉alue鍊间负锛�==========================",value); cbo.setAttributeValue(attrId, value); } } catch (Throwable e) { @@ -4277,53 +4407,60 @@ // 鏌ヨ涓嶉渶瑕佸弬涓庡叧閿睘鎬ф牎楠岀殑闄よ嚜宸变互澶栫殑鎵�鏈夊垎绫籵id final String isParticipateCheckOids = classifyService.selectLeafByParentClassifyOid(classifyFullInfo.getTopClassifyVO().getOid(), classifyFullInfo.getCurrentClassifyVO().getOid()); final BladeUser user = AuthUtil.getUser(); - List<ClientBusinessObject> repeatDataMap = cboList.parallelStream().filter(cbo -> { - //姣忚閮藉緱鏌ヨ.濡傛灉鍏朵腑鍑虹幇浜嗛敊璇紝鎴戜滑灏辩洿鎺ユ姏鍑哄紓甯革紝鍏朵綑鐨勬樉绀� - //VciBaseUtil.setCurrentUserSessionInfo(sessionInfo); - Map<String, String> conditionMap = new HashMap<>(); - ketAttrMap.forEach((attrId, attrVO) -> { - String value =cbo.getAttributeValue(attrId.toLowerCase(Locale.ROOT)); - if (value == null) { - value = ""; - } - value= value.replace(REQUIRED_CHAR,SPECIAL_CHAR); - 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); - } - if(isEdit){//濡傛灉鏄洿鏀瑰垯闇�鎺掗櫎绯荤粺鏈韩 - conditionMap.put("t.id",QueryOptionConstant.NOTEQUAL+cbo.getId()); - } - conditionMap.put("t.lastr", "1"); - conditionMap.put("t.lastv", "1"); - - CodeTemplateAttrSqlBO sqlBO = engineService.getSqlByTemplateVO(classifyFullInfo.getTopClassifyVO().getBtmTypeId(), templateVO, conditionMap, null); - List<String> repeatData = commonsMapper.selectList(sqlBO.getSqlId()); - if(!repeatData.isEmpty()){ - 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,false); - 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); + // TODO:Thread limit exceeded replacing blocked 寮傚父鏄繖閮ㄥ垎浠g爜鎶涘嚭鐨� + // ,鎵�浠ユ殏鏃跺皢parallelStream鏀规垚浜唖tream锛屾敼鎴愪簡stream涔嬪悗鍙戠幇宸ㄦ參 + // customForkJoinPool鎺у埗骞跺彂搴� + List<ClientBusinessObject> finalCboList = cboList; + List<ClientBusinessObject> repeatDataMap = (List<ClientBusinessObject>) customForkJoinPool.submit(()->{ + finalCboList.parallelStream().filter(cbo -> { + //姣忚閮藉緱鏌ヨ.濡傛灉鍏朵腑鍑虹幇浜嗛敊璇紝鎴戜滑灏辩洿鎺ユ姏鍑哄紓甯革紝鍏朵綑鐨勬樉绀� + //VciBaseUtil.setCurrentUserSessionInfo(sessionInfo); + Map<String, String> conditionMap = new HashMap<>(); + ketAttrMap.forEach((attrId, attrVO) -> { + String value =cbo.getAttributeValue(attrId.toLowerCase(Locale.ROOT)); + if (value == null) { + value = ""; } + value= value.replace(REQUIRED_CHAR,SPECIAL_CHAR); + 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); + } + if(isEdit){//濡傛灉鏄洿鏀瑰垯闇�鎺掗櫎绯荤粺鏈韩 + conditionMap.put("t.id",QueryOptionConstant.NOTEQUAL+cbo.getId()); + } + conditionMap.put("t.lastr", "1"); + conditionMap.put("t.lastv", "1"); + + CodeTemplateAttrSqlBO sqlBO = engineService.getSqlByTemplateVO(classifyFullInfo.getTopClassifyVO().getBtmTypeId(), templateVO, conditionMap, null); + List<String> repeatData = commonsMapper.selectList(sqlBO.getSqlId()); + if(!repeatData.isEmpty()){ + final List<Map<String,String>> newDataList = commonsMapper.queryByOnlySqlForMap(sqlBO.getSqlUnPage()); + DefaultAttrAssimtUtil.mapToLowerCase(newDataList,true); + //List<ClientBusinessObject> newCboList=ChangeMapTOClientBusinessObjects(newDataList); + List<BaseModel> newCboList = new ArrayList<>(); + newDataList.stream().forEach(stringStringMap -> { + BaseModel baseModel=new BaseModel(); + DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(stringStringMap,baseModel,false,user); + 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 !repeatData.isEmpty(); + }else{ + return false; } - return !repeatData.isEmpty(); - }else{ - return false; - } - }).collect(Collectors.toList()); + }).collect(Collectors.toList()); + }).join(); if(!CollectionUtils.isEmpty(repeatDataMap)){ resultVO.setKeyAttrRepeatRowIndexList(repeatDataMap.stream().map(s->s.getAttributeValue(IMPORT_ROW_INDEX)).collect(Collectors.toSet())); } @@ -4532,9 +4669,11 @@ } private List<ClientBusinessObject> ChangeMapTOClientBusinessObjects(List<Map<String,String>> oldDataMap){ List<ClientBusinessObject> clientBusinessObjectList=new ArrayList<>(); + DefaultAttrAssimtUtil.mapToLowerCase(oldDataMap,true); + final BladeUser user = AuthUtil.getUser(); oldDataMap.stream().forEach(dataMap->{ ClientBusinessObject clientBusinessObject=new ClientBusinessObject(); - DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(dataMap,clientBusinessObject,true); + DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(dataMap,clientBusinessObject,false,user); for (String key:dataMap.keySet()){ Object value= dataMap.getOrDefault(key,""); clientBusinessObject.setAttributeValue(key.toLowerCase(Locale.ROOT),value==null?"":value.toString()); @@ -4825,6 +4964,7 @@ pageHelper.addDefaultDesc("id"); CodeTemplateAttrSqlBO sqlBO = engineService.getSqlByTemplateVO(btmtypeid, templateVO, conditionMap, pageHelper); List<Map<String,String>> dataMapList=commonsMapper.queryByOnlySqlForMap(sqlBO.getSqlUnPage()); + DefaultAttrAssimtUtil.mapToLowerCase(dataMapList,true); List<ClientBusinessObject> resembleCboList= ChangeMapTOClientBusinessObjects(dataMapList); if(!CollectionUtils.isEmpty(resembleCboList)) { List<Map<String, String>> finalDataMap = dataMap; @@ -5190,10 +5330,10 @@ // 淇敼鐗堟鍙� engineService.updateBatchByBaseModel(btmTypeId,oldCbos); List<CodeAllCode> codeAllCodeList=new ArrayList<>(); - + final BladeUser user = AuthUtil.getUser(); cboList.stream().forEach(clientBusinessObject -> { BaseModel newBaseModel=new BaseModel(); - DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(clientBusinessObject.getData(),newBaseModel,true); + DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(clientBusinessObject.getData(),newBaseModel,false,user); newCbos.add(newBaseModel); }); // 鎻掑叆鏂扮殑鏁版嵁 @@ -5225,19 +5365,20 @@ public void batchSwitchCheckExist(Map<String,String> errorMap,List<ClientBusinessObject> cboList,CodeClassifyFullInfoBO classifyFullInfo,CodeClassifyTemplateVO templateVO,ExecGroupCodePortDataDTO execGroupCodePortDataDTO,Map<Integer/**鍒楀彿**/,String/**瀛楁鐨勫悕绉�**/> fieldIndexMap){ List<BaseModel> oldBaseModelList=new ArrayList<>(); List<CodeAllCode> codeAllCodeList=new ArrayList<>(); + final BladeUser user = AuthUtil.getUser(); cboList.stream().forEach(clientBusinessObject -> { String code=clientBusinessObject.getId(); String rowIndex=clientBusinessObject.getAttributeValue(IMPORT_ROW_INDEX); List<Map<String,String>>dataList=new ArrayList<>(); List<String> fieldList= execGroupCodePortDataDTO.getFieldList(); getDatas(classifyFullInfo,templateVO,execGroupCodePortDataDTO.getFieldList(),dataList,Arrays.asList(code)); + DefaultAttrAssimtUtil.mapToLowerCase(dataList,true); if(!CollectionUtils.isEmpty(dataList)){ Map<String,String> newDataMap=new HashMap<>();//灏嗘柊瀵硅薄灞炴�ф殏鏃跺瓨鍌ㄥ湪Map<> newDataMap.putAll(clientBusinessObject.getData()); Map<String,String> dataMap=dataList.get(0); BaseModel oldBaseModel=new BaseModel(); - - DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(dataMap,oldBaseModel,false); + DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(dataMap,oldBaseModel,false,user); String oldOid=oldBaseModel.getOid(); clientBusinessObject.setCopyFromVersion(oldOid); -- Gitblit v1.9.3