From 566c542d3f1eb0ad9e918bd1fa9586ab1ed7ec86 Mon Sep 17 00:00:00 2001 From: xiejun <xj@2023> Date: 星期五, 17 十一月 2023 01:28:50 +0800 Subject: [PATCH] 自定义流水相关开发 --- Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java | 230 ++++++++++++++++++++++++++++++++++---------------------- 1 files changed, 139 insertions(+), 91 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 6ac3b6e..57d9c79 100644 --- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java +++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java @@ -3,6 +3,7 @@ import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.common.utils.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.google.protobuf.ServiceException; import com.vci.ubcs.code.applyjtcodeservice.feign.IMdmInterJtClient; import com.vci.ubcs.code.bo.AttributeValue; import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO; @@ -65,6 +66,7 @@ import java.io.File; import java.io.IOException; import java.text.MessageFormat; +import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; @@ -97,6 +99,10 @@ @Value("${batchadd.redis.time:6000000}") public int BATCHADD_REDIS_TIME; + + @Value("${batchadd.import_data_limit:5001}") + private Integer IMPORT_DATA_LIMIT; + /** * 涓婚搴撳垎绫荤殑鏈嶅姟 */ @@ -179,7 +185,7 @@ * @return excel鐨勬枃浠跺湴鍧� */ @Override - public String downloadTopImportExcel(String codeClassifyOid){ + public String downloadTopImportExcel(String codeClassifyOid){ List<CodeClassifyTemplateVO> templateVOList=new ArrayList<>(); VciBaseUtil.alertNotNull("瀵煎嚭妯℃澘","瀵煎嚭鐨勯厤缃�",codeClassifyOid,"涓婚搴撳垎绫荤殑涓婚敭"); CodeClassifyVO codeClassifyVO = classifyService.getObjectByOid(codeClassifyOid); @@ -389,17 +395,17 @@ && (isHistory || VciBaseUtil.getBoolean(s.getFormDisplayFlag())) ).collect(Collectors.toList()); - if (CollectionUtils.isEmpty(templateAttrVOS)) { - throw new VciBaseException("妯℃澘娌℃湁閰嶇疆浠讳綍銆愯〃鍗曟樉绀恒�戜负銆愭槸銆戠殑灞炴��"); - } + if (CollectionUtils.isEmpty(templateAttrVOS)) { + throw new VciBaseException("妯℃澘娌℃湁閰嶇疆浠讳綍銆愯〃鍗曟樉绀恒�戜负銆愭槸銆戠殑灞炴��"); + } List<CodeClassifyTemplateAttrVO> idAttrVOList = codeClassifyTemplateVO.getAttributes().stream().filter(s -> s.getId().equalsIgnoreCase(CODE_FIELD)).collect(Collectors.toList()); LinkedList<WriteExcelData> excelDataList = new LinkedList<>(); Workbook workbook = new HSSFWorkbook(); if(isHistory){ - excelDataList.add(new WriteExcelData(0,0,"鍒嗙被璺緞")); - excelDataList.add(new WriteExcelData(0,1,"鐮佹瀹藉害")); - excelDataList.add(new WriteExcelData(0,2,!CollectionUtils.isEmpty(idAttrVOList)?idAttrVOList.get(0).getName():"浼佷笟缂栫爜")); + excelDataList.add(new WriteExcelData(0,0,"鍒嗙被璺緞","")); + excelDataList.add(new WriteExcelData(0,1,"鐮佹瀹藉害","")); + excelDataList.add(new WriteExcelData(0,2,!CollectionUtils.isEmpty(idAttrVOList)?idAttrVOList.get(0).getName():"浼佷笟缂栫爜",idAttrVOList.get(0).getId())); } for (int i = 0; i < templateAttrVOS.size(); i++) { CodeClassifyTemplateAttrVO attrVO = templateAttrVOS.get(i); @@ -407,7 +413,7 @@ Object text = attrVO.getName(); text = exportKeyAndRequired(workbook,attrVO,text); int colIndex = (isHistory?3:0) + i; - WriteExcelData excelData = new WriteExcelData(0, colIndex, text); + WriteExcelData excelData = new WriteExcelData(0, colIndex, text,attrVO.getId()); if(StringUtils.isNotBlank(attrVO.getCodeDateFormat()) || VciFieldTypeEnum.VTDateTime.name().equalsIgnoreCase(attrVO.getAttributeDataType()) || VciFieldTypeEnum.VTDate.name().equalsIgnoreCase(attrVO.getAttributeDataType()) @@ -495,7 +501,6 @@ return text; } - /** * 鎵归噺鐢宠缂栫爜鏁版嵁 * @@ -538,7 +543,6 @@ // return null; return codeImProtRusultVO; } - /*** * 浠庨《灞傛壒閲忕敵璇峰鍏ユ柟娉� @@ -645,7 +649,6 @@ }); - //閮借浆鎹㈠畬浜嗐�傞渶瑕佹壒閲忔鏌� //濡傛灉鍑洪敊浜嗭紝鎴戜滑渚濈劧鎵ц鏈夋晥鐨勬暟鎹紝鏃犳晥鐨勬暟鎹啓鍥炲埌excel涓� //2.鍒ゆ柇蹇呰緭椤广�傘�傞渶瑕佸叏閮ㄧ殑灞炴�э紝濡傛灉鏄繀杈擄紝浣嗘槸琛ㄥ崟閲岄潰涓嶆樉绀虹殑锛屽彧鑳芥槸鍒嗙被娉ㄥ叆鎴栬�呯粍鍚堣鍒� @@ -719,10 +722,8 @@ createRedisDatas(uuid + "-ok",codeImprotDataVOS, newErrorMap,true); }); + //寰�鐗╁搧鑺傜偣涓婂姞妯℃澘 - - - List<String> needRowIndexList=new ArrayList<>(); CodeImProtRusultVO codeImProtRusultVO = new CodeImProtRusultVO(); if(errorMap.size()>0) { @@ -792,10 +793,15 @@ String uuid=VciBaseUtil.getPk(); boolean isCreateUUid=false; boolean isExport=false; + //long start = System.currentTimeMillis(); for(int i=0;i<sheetDataSetList.size()-1;i++) { if (CollectionUtils.isEmpty(sheetDataSetList) || CollectionUtils.isEmpty(sheetDataSetList.get(i).getRowData()) || sheetDataSetList.get(i).getRowData().size() < 1) { continue; + } + // 鍗曟瀵煎叆鏁伴噺闄愬埗 + if(sheetDataSetList.get(i).getRowData().size() > IMPORT_DATA_LIMIT){ + throw new ServiceException("涓轰簡淇濊瘉绯荤粺鐨勭ǔ瀹氭�э紝璇蜂竴娆′笉瑕佸鍏ヨ秴杩�"+IMPORT_DATA_LIMIT+"鏉$殑鏁版嵁"); } //鍘嗗彶瀵煎叆鐨勬椂鍊欎笉澶勭悊缂栫爜 //----閫昏緫鍐呭---- @@ -809,7 +815,6 @@ // 5.3 浼佷笟缂栫爜鐨勯暱搴︼紝鍜岀紪鐮佽鍒欑殑闀垮害瑕佸搴斾笂 // 5.4 鑾峰彇娴佹按鐮佹鐨勫�硷紝鍘婚櫎濉厖鐨勫瓧绗︼紝鐪嬫祦姘村彿鏄灏戯紝鐒跺悗灏嗘祦姘村彿鍜岀幇鍦ㄧ殑鏈�澶ф祦姘村彿鍒ゆ柇锛屽皬浜庡氨鐩存帴褰曞叆锛屽ぇ浜庡垯淇敼鏈�澶ф祦姘村彿 // 5.5 瀛樺偍浼佷笟缂栫爜鍒癮llcode涓� - //鏌ヨ鍒嗙被鍜屾ā鏉� CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyOid); @@ -820,7 +825,7 @@ //鎵剧涓�琛岋紝涓轰簡鎵炬爣棰� CodeClassifyTemplateVO templateVO = new CodeClassifyTemplateVO(); /** if (!templateService.checkChildHasSameTemplate(classifyFullInfo.getCurrentClassifyVO().getOid())) { - throw new VciBaseException("褰撳墠鐨勫垎绫讳互鍙婁笅绾у垎绫荤殑妯℃澘涓嶇浉鍚�"); + throw new VciBaseException("褰撳墠鐨勫垎绫讳互鍙婁笅绾у垎绫荤殑妯℃澘涓嶇浉鍚�"); }***/ //閮借浆鎹㈠畬浜嗐�傞渶瑕佹壒閲忔鏌� //鎵炬墍鏈夌殑鍒嗙被璺緞,闇�瑕佹牎楠岃矾寰勬槸鍚︽纭紝鏄惁閮藉湪褰撳墠鐨勫垎绫荤殑涓嬬骇 @@ -937,14 +942,15 @@ if (CollectionUtils.isEmpty(ruleOidMap.values())) { throw new VciBaseException("瀵煎叆鐨勬暟鎹墍閫夋嫨鐨勫垎绫婚兘娌℃湁璁剧疆缂栫爜瑙勫垯"); } - Map<String, CodeRuleVO> ruleVOMap = ruleService.listCodeRuleByIds(ruleOidMap.values(), true).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t)); + // TODO: 鏀圭敤oid鏌ヨ瑙勫垯鐨勶紝鍒敤id + Map<String, CodeRuleVO> ruleVOMap = ruleService.listCodeRuleByOids(ruleOidMap.values()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t)); //鏍¢獙缂栫爜瑙勫垯鍜岀爜娈垫槸鍚︽纭� Map<String, List<String>> ruleRowIndexMap = new ConcurrentHashMap<>(); checkSecLengthInHistory(cboList, classifyVOMap, ruleVOMap, ruleOidMap, errorMap, ruleRowIndexMap); ruleRowIndexMap.keySet().parallelStream().forEach(ruleOid -> { List<String> rowIndexList = ruleRowIndexMap.get(ruleOid); List<ClientBusinessObject> thisCbos = cboList.stream().filter(cbo -> rowIndexList.contains(cbo.getAttributeValue(IMPORT_ROW_INDEX)) && !errorMap.containsKey(cbo.getAttributeValue(IMPORT_ROW_INDEX))).collect(Collectors.toList()); -//鎴戜滑闇�瑕佸厛鏌ヨ涓�涓嬶紝鍐呭鏄惁宸茬粡瀛樺湪 + //鎴戜滑闇�瑕佸厛鏌ヨ涓�涓嬶紝鍐呭鏄惁宸茬粡瀛樺湪 if(!CollectionUtils.isEmpty(thisCbos)){ List<String> existIds = new ArrayList<>(); VciBaseUtil.switchCollectionForOracleIn(thisCbos).stream().forEach(cbos -> { @@ -1032,7 +1038,7 @@ //VciBaseUtil.setCurrentUserSessionInfo(sessionInfo); List<String> rowIndexList = ruleRowIndexMap.get(ruleOid); List<ClientBusinessObject> thisCbos = finalNeedSaveCboList.stream().filter(cbo -> rowIndexList.contains(cbo.getAttributeValue(IMPORT_ROW_INDEX)) && !errorMap.containsKey(cbo.getAttributeValue(IMPORT_ROW_INDEX))).collect(Collectors.toList()); - List<BaseModel> dataCBOList=new ArrayList<>(); + List<BaseModel> dataCBOList=new CopyOnWriteArrayList<>(); thisCbos.stream().forEach(clientBusinessObject -> { BaseModel baseModel=new BaseModel(); BeanUtil.convert(clientBusinessObject,baseModel); @@ -1043,12 +1049,13 @@ if (!CollectionUtils.isEmpty(thisCbos)) { try { + // TODO 澶氱嚎绋嬫祦闂 productCodeService.productCodeAndSaveData(classifyFullInfo, finalTemplateVO, ruleVOMap.get(ruleOid), null, dataCBOList); } catch (Throwable e) { log.error("鎵归噺浜х敓缂栫爜鐨勬椂鍊欏嚭閿欎簡", e); thisCbos.stream().forEach(cbo -> { String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); - errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";绯荤粺閿欒锛屽瓨鍌ㄦ暟鎹殑鏃跺�欏嚭閿欎簡"); + errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";绯荤粺閿欒锛屽瓨鍌ㄦ暟鎹殑鏃跺�欏嚭閿欎簡:"+e.getMessage()); }); } @@ -1061,6 +1068,8 @@ engineService.batchSaveSelectChar(templateVO, dataCBOIdList); } } + //long end = System.currentTimeMillis(); + //log.info("=============for鎵ц鏃堕棿================="+String.valueOf((end-start)/1000)); String excelFileName=""; if(isExport&&!CollectionUtils.isEmpty(shetNameMap)) { excelFileName = LocalFileUtil.getDefaultTempFolder() + File.separator + "閿欒淇℃伅.xls"; @@ -1086,6 +1095,7 @@ return codeImProtRusultVO; } + /*private void converBaseModels(List<ClientBusinessObject> clientBusinessObjects,List<BaseModel>dataCBOList){ clientBusinessObjects.stream().forEach(clientBusinessObject -> { BaseModel baseModel=new BaseModel(); @@ -1099,6 +1109,7 @@ }); }*/ + /*** * 浠巈xecl閲屾瀯寤哄璞� * @param rowDataList @@ -1138,7 +1149,6 @@ * @param currentTemplateVO * @param templateColumnVOMap */ - private void createTemplate(CodeClassifyTemplateVO currentTemplateVO,Map<String,List<ColumnVO>>templateColumnVOMap){ List<CodeClassifyTemplateAttrVO> templateAttrVOS = currentTemplateVO.getAttributes().stream().filter(s -> @@ -1749,7 +1759,8 @@ Map<String/**鍒嗙被涓婚敭**/, String/**瑙勫垯涓婚敭**/> ruleOidMap = new ConcurrentHashMap<String, String>(); List<String> unExistRuleClassifyOidList = new CopyOnWriteArrayList<>(); checkRuleOidInHistory(classifyVOMap, ruleOidMap, unExistRuleClassifyOidList); - ruleVOMap = ruleService.listCodeRuleByIds(ruleOidMap.values(), true).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t)); + // TODO 鏀圭敤oid鏌ヨ鐨勶紝杩欏効涓嶈鐢╥d + ruleVOMap = ruleService.listCodeRuleByOids(ruleOidMap.values()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t)); checkSecLengthInHistory(cboList, classifyVOMap, ruleVOMap, ruleOidMap, errorMap, ruleRowIndexMap); } @@ -1938,7 +1949,8 @@ && com.alibaba.cloud.commons.lang.StringUtils.isBlank(s.getComponentRule()) && com.alibaba.cloud.commons.lang.StringUtils.isBlank(s.getClassifyInvokeAttr())//缁勫悎瑙勫垯鍜屽垎绫绘敞鍏ョ‘瀹炴病缁欑敤鎴峰鍑哄幓 ).collect(Collectors.toList()); if(!CollectionUtils.isEmpty(unExistAttrVOs)){ - throw new VciBaseException("銆�" + unExistAttrVOs.stream().map(CodeClassifyTemplateAttrVO::getName) + "銆戣繖浜涘睘鎬у湪excel涓病鏈夋壘鍒�"); + String message=unExistAttrVOs.stream().map(CodeClassifyTemplateAttrVO::getName).collect(Collectors.joining(SERIAL_UNIT_SPACE)); + throw new VciBaseException("銆�" + message + "銆戣繖浜涘睘鎬у湪excel涓病鏈夋壘鍒�"); } List<ClientBusinessObject> cboList = new ArrayList<>(); String fullPath = getFullPath(classifyFullInfo); @@ -1954,16 +1966,29 @@ //閮借浆鎹㈠畬浜嗐�傞渶瑕佹壒閲忔鏌� //濡傛灉鍑洪敊浜嗭紝鎴戜滑渚濈劧鎵ц鏈夋晥鐨勬暟鎹紝鏃犳晥鐨勬暟鎹啓鍥炲埌excel涓� + + + Map<String,String> errorKeyMap=new HashMap<>(); + //1.鍒嗙被娉ㄥ叆 + batchSwitchClassifyAttrOnOrder(attrVOS,cboList,classifyFullInfo,false); + //boolean + reSwitchBooleanAttrOnOrder(attrVOS,cboList); + // cboList.stream().forEach(cbo->{ + //2.鏍¢獙瑙勫垯 + batchCheckVerifyOnOrder(attrVOS, cboList,errorMap); + //3.鏍¢獙鏋氫妇鏄惁姝g‘ + batchSwitchEnumAttrOnOrder(attrVOS,cboList,errorMap); + //4.鏃堕棿鏍煎紡鐨勯獙璇� + //4.鏃堕棿鐨勶紝蹇呴』缁熶竴涓簓yyy-MM-dd HH:mm:ss + batchSwitchDateAttrOnOrder(attrVOS,cboList,errorMap); + //5.澶勭悊鍙傜収鐨勬儏鍐� + batchSwitchReferAttrOnOrder(attrVOS,cboList,errorMap); + //6璁剧疆榛樿鍊� + batchSwitchAttrDefault(attrVOS, cboList); //2.鍒ゆ柇蹇呰緭椤广�傘�傞渶瑕佸叏閮ㄧ殑灞炴�э紝濡傛灉鏄繀杈擄紝浣嗘槸琛ㄥ崟閲岄潰涓嶆樉绀虹殑锛屽彧鑳芥槸鍒嗙被娉ㄥ叆鎴栬�呯粍鍚堣鍒� batchCheckRequiredAttrOnOrder(templateVO,cboList,errorMap); - - - /** - * 鍏抽敭鐔熸倝閿欒鎻愮ず - */ - Map<String,String> errorKeyMap=new HashMap<>(); - - + //鏈�鍚庡紕缁勫悎瑙勫垯 + batchSwitchComponentAttrOnOrder(attrVOS,cboList); //3.鍒ゆ柇鍏抽敭灞炴�� CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList); Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList(); @@ -2000,20 +2025,6 @@ errorKeyMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅" ); }); } - //鍒嗙被娉ㄥ叆 - batchSwitchClassifyAttrOnOrder(attrVOS,cboList,classifyFullInfo,false); - //boolean - reSwitchBooleanAttrOnOrder(attrVOS,cboList); - // cboList.stream().forEach(cbo->{ - //4.鏍¢獙瑙勫垯 - batchCheckVerifyOnOrder(attrVOS, cboList,errorMap); - //5.鏍¢獙鏋氫妇鏄惁姝g‘ - batchSwitchEnumAttrOnOrder(attrVOS,cboList,errorMap); - //6.鏃堕棿鏍煎紡鐨勯獙璇� - //6.鏃堕棿鐨勶紝蹇呴』缁熶竴涓簓yyy-MM-dd HH:mm:ss - batchSwitchDateAttrOnOrder(attrVOS,cboList,errorMap); - //7.澶勭悊鍙傜収鐨勬儏鍐� - batchSwitchReferAttrOnOrder(attrVOS,cboList,errorMap); //鏍¢獙灞炴�ф槸鍚︽纭敊璇俊鎭� if(errorMap.size()>0){ String[] newMsg = {""}; @@ -2090,6 +2101,7 @@ XMLResultDataObjectDetailDO resultDataObjectDetailDO = new XMLResultDataObjectDetailDO(); if(isCodeOrGroupCode) { if(StringUtils.isBlank(groupCode)){ + errorid="1"; mes+="锛涚敵璇风殑缂栫爜绫诲瀷涓洪泦鍥㈢爜锛岀瓑寰呴泦鍥㈢紪鐮佽祴鍊�"; } resultDataObjectDetailDO.setCode(groupCode); @@ -2113,10 +2125,7 @@ } // }); - //璁剧疆榛樿鍊� - batchSwitchAttrDefault(attrVOS, cboList); - //鏈�鍚庡紕缁勫悎瑙勫垯 - batchSwitchComponentAttrOnOrder(attrVOS,cboList); + //瑕佹妸浠ヤ笂鐨勯敊璇殑閮芥姏鍑哄悗锛屽啀缁х画澶勭悊鏃堕棿鍜岀粍鍚堣鍒� List<ClientBusinessObject> needSaveCboList = cboList.stream().filter(cbo -> { String rowIndex =cbo.getAttributeValue(IMPORT_ROW_INDEX); @@ -2132,7 +2141,7 @@ needSaveCboList.stream().forEach(clientBusinessObject -> { BaseModel baseModel=new BaseModel(); BeanUtil.convert(clientBusinessObject,baseModel); - //(VciBaseUtil.objectToMapString(clientBusinessObject)); + //(VciBaseUtil.objectToMapString(clientBusinessObject)); dataCBOList.add(baseModel); allNeedSaveCboList.add(baseModel.getOid()); }); @@ -2157,14 +2166,16 @@ } if(isCodeOrGroupCode) { if(StringUtils.isBlank(groupCode)){ + resultDataObjectDetailDO.setErrorid("1"); msg="鐢宠鐨勭紪鐮佺被鍨嬩负闆嗗洟鐮侊紝绛夊緟闆嗗洟缂栫爜璧嬪��"; } resultDataObjectDetailDO.setCode(groupCode); }else{ resultDataObjectDetailDO.setCode(code); + resultDataObjectDetailDO.setErrorid("0"); } resultDataObjectDetailDO.setId(sourceOid); - resultDataObjectDetailDO.setErrorid("0"); + resultDataObjectDetailDO.setMsg(msg); resultDataObjectDetailDOs.add(resultDataObjectDetailDO); //澶勭悊浼犻�佺殑鏁版嵁涓叧閿睘鎬ч噸澶嶇殑锛岀洿鎺ユ嬁鍒板凡缁忕敵璇峰埌缂栫爜鐨勬暟鎹紪鐮佺洿鎺ュ皢璧嬬粰鍏抽敭灞炴�ч噸澶嶇殑鏁版嵁 @@ -2324,13 +2335,19 @@ sb.append(" select * from "); sb.append(tableName); sb.append(" where 1=1 "); + sb.append(" and lastr=1 and lastv=1" ); if(isCodeOrGroupCode) { - sb.append(" groupcode in ("); + sb.append(" and ( groupcode in ("); + sb.append(VciBaseUtil.toInSql(codeDataMap.keySet().toArray(new String[0]))); + sb.append(")"); + sb.append(" or id in ("); + sb.append(VciBaseUtil.toInSql(codeDataMap.keySet().toArray(new String[0]))); + sb.append("))"); }else{ - sb.append(" id in ("); + sb.append(" and id in ("); + sb.append(VciBaseUtil.toInSql(codeDataMap.keySet().toArray(new String[0]))); + sb.append(")"); } - sb.append(VciBaseUtil.toInSql(codeDataMap.keySet().toArray(new String[0]))); - sb.append(")"); List<Map<String,String>> dataMapList=commonsMapper.queryByOnlySqlForMap(sb.toString()); List<ClientBusinessObject> cboList= ChangeMapTOClientBusinessObjects(dataMapList); @@ -2358,8 +2375,9 @@ 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?true:false) { + if (cbo.getTs().compareTo(orderDTO.getTs())==0?false:true) { // throw new VciBaseException("鏁版嵁涓嶆槸鏈�鏂扮殑锛屽彲鑳戒粬浜哄凡缁忎慨鏀癸紝璇峰埛鏂板悗鍐嶈瘯"); errorMap.put(orderDTO.getId(),errorMap.getOrDefault(orderDTO.getId(),"")+";鏁版嵁涓嶆槸鏈�鏂扮殑锛屽彲鑳戒粬浜哄凡缁忎慨鏀癸紝璇峰埛鏂板悗鍐嶈瘯"); } @@ -2367,20 +2385,20 @@ throw new VciBaseException("鏁版嵁涓嶆槸{0}鐨勭姸鎬侊紝涓嶅厑璁镐慨鏀�", new String[]{CodeDefaultLC.EDITING.getText()}); }*/ if(operation.equals("update")) { - //1. 鍒ゆ柇蹇呰緭椤� - checkRequiredAttrOnOrder(templateVO, orderDTO, errorMap); - //2.鍏堟敞鍏ワ紝鍐嶇粍鍚堬紝鏈�鍚庢牎楠� + //1.鍏堟敞鍏ワ紝鍐嶇粍鍚堬紝鏈�鍚庢牎楠� switchClassifyLevelOnOrder(templateVO, classifyFullInfo, orderDTO, errorMap); - //3.澶勭悊缁勫悎瑙勫垯銆傜粍鍚堣鍒欎笉鑳戒娇鐢ㄧ紪鐮佺殑灞炴�э紝鍥犱负缂栫爜鐨勭敓鎴愬彲鑳芥槸闇�瑕佸睘鎬х殑 + //2.澶勭悊缁勫悎瑙勫垯銆傜粍鍚堣鍒欎笉鑳戒娇鐢ㄧ紪鐮佺殑灞炴�э紝鍥犱负缂栫爜鐨勭敓鎴愬彲鑳芥槸闇�瑕佸睘鎬х殑 switchComponentAttrOnOrder(templateVO, orderDTO); - //4.鏍¢獙瑙勫垯 + //3.鏍¢獙瑙勫垯 checkVerifyOnOrder(templateVO, orderDTO, errorMap); - //5.鍒ゆ柇鍏抽敭灞炴�� - checkKeyAttrOnOrder(classifyFullInfo, templateVO, orderDTO, errorMap); - //6.鏍¢獙鏋氫妇鐨勫唴瀹规槸鍚︽纭� + //4.鏍¢獙鏋氫妇鐨勫唴瀹规槸鍚︽纭� checkEnumOnOrder(templateVO, orderDTO, errorMap); - //7.澶勭悊鏃堕棿鏍煎紡锛屽湪鏁版嵁搴撻噷闈笉璁烘槸瀛楃涓茶繕鏄棩鏈熸牸寮忥紝閮戒娇鐢ㄧ浉鍚岀殑鏍煎紡瀛樺偍 + //5.澶勭悊鏃堕棿鏍煎紡锛屽湪鏁版嵁搴撻噷闈笉璁烘槸瀛楃涓茶繕鏄棩鏈熸牸寮忥紝閮戒娇鐢ㄧ浉鍚岀殑鏍煎紡瀛樺偍 switchDateAttrOnOrder(templateVO, orderDTO); + //6. 鍒ゆ柇蹇呰緭椤� + checkRequiredAttrOnOrder(templateVO, orderDTO, errorMap); + //7.鍒ゆ柇鍏抽敭灞炴�� + checkKeyAttrOnOrder(classifyFullInfo, templateVO, orderDTO, errorMap); //榛樿鐨勫唴瀹逛笉鑳藉彉锛屾墍浠ュ彧闇�瑕佹嫹璐濊嚜瀹氫箟鐨勭浉鍏冲睘鎬у嵆鍙� copyValueToCBO(classifyFullInfo, cbo, orderDTO, templateVO, true, errorMap); //浼佷笟鐮佸拰闆嗗洟鐮佺殑涓嶄慨鏀� @@ -2388,12 +2406,20 @@ cbo.setName(orderDTO.getName()); try { cbo.setAttributeValueWithNoCheck("description", orderDTO.getDescription()); - cbo.setAttributeValue("name", orderDTO.getName()); + // cbo.setAttributeValue("name", orderDTO.getName()); // if(finalIsProcess){//鍦ㄦ祦绋嬩腑涓嶅厑璁告洿鏀� // errorMap.put(code,errorMap.getOrDefault(code, errorMap.getOrDefault(code,"")+";鏁版嵁"+code+"鍦ㄦ祦绋嬩腑锛屼笉鍏佽鏇存敼!")); // }else{ + Date date=new Date(); cbo.setLcStatus(status); cbo.setAttributeValue("lcstatus",status); + cbo.setLastModifyTime(date); + cbo.setLastModifier(lastModifier); + cbo.setLastModifyTime(date); + cbo.setAttributeValue("lastmodifier",lastModifier); + cbo.setAttributeValue("lastmodifytime",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(date)); + cbo.setTs(date); + cbo.setAttributeValue("ts",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(date)); // } } catch (VciBaseException e) { e.printStackTrace(); @@ -2401,7 +2427,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); @@ -2420,7 +2446,7 @@ List<CodeAllCode>newCodeAllCodeList= codeAllCodeService.selectByWrapper(Wrappers.<CodeAllCode>query().lambda().eq(CodeAllCode::getCreateCodeOid, cbo.getOid())); log.info("codeCbos size:" + newCodeAllCodeList.size()); if (!CollectionUtils.isEmpty(newCodeAllCodeList)) { - CodeAllCode codeCbo = codeAllCodeList.get(0); + CodeAllCode codeCbo = newCodeAllCodeList.get(0); log.info("codeCbos code:" + codeCbo.getId()); codeCbo.setLcStatus(CodeDefaultLC.TASK_BACK.getValue()); codeAllCodeList.add(codeCbo); @@ -2478,13 +2504,16 @@ //瀛樺偍鏁版嵁 try { engineService.updateBatchByBaseModel(classifyFullInfo.getTopClassifyVO().getBtmTypeId(),updateList); - codeAllCodeService.saveBatch(codeAllCodeList); + codeAllCodeService.saveOrUpdateBatch(codeAllCodeList); if(deleteList.size()>0) { commonsMapper.deleteByTaleAndOid(tableName, VciBaseUtil.array2String(deleteList.toArray(new String[]{}))); } //鏄惁璋冪敤闆嗗洟鎺ュ彛鐢宠鎺ュ彛 if(isCodeOrGroupCode){ List<String> IdList=resultDataObjectDetailDOs.stream().filter(xMLResultDataObjectDetailDO-> com.alibaba.cloud.commons.lang.StringUtils.isNotBlank(xMLResultDataObjectDetailDO.getId())).map(XMLResultDataObjectDetailDO::getId).distinct().collect(Collectors.toList()); + + + if(!CollectionUtils.isEmpty(IdList)) { this.sendApplyGroupcode(IdList, classifyFullInfo.getTopClassifyVO().getBtmTypeId(),sysIntegrationPushTypeEnum.ACCPET_EDITCODE.getValue()); } @@ -2612,17 +2641,36 @@ //娌℃湁闄愬埗鍒嗙被锛屼絾鏄竴涓ā鏉垮彧鍙兘鍦ㄤ竴涓笟鍔$被鍨嬮噷闈紝鎵�浠ョ洿鎺ユ煡璇㈣繖涓笟鍔$被鍨嬪嵆鍙� if (!CollectionUtils.isEmpty(conditionMap)) { - final String[] sql = {"select count(*) from " + VciBaseUtil.getTableName(classifyFullInfo.getTopClassifyVO().getBtmTypeId()) + " where 1 = 1 "}; + String tableName=""; + R<BtmTypeVO> r = btmTypeClient.getAllAttributeByBtmId(templateVO.getBtmTypeId()); + if(r.isSuccess()) { + BtmTypeVO btmTypeVO = r.getData(); + if (btmTypeVO != null) { + tableName = btmTypeVO.getTableName(); + + } + } + if (StringUtils.isBlank(tableName)) { + String errormsg="鏍规嵁涓氬姟绫诲瀷涓烘煡璇㈠埌鐩稿叧涓氬姟琛�"; + errorMap.put(orderDTO.getId(),errorMap.getOrDefault(orderDTO.getId(),"")+errormsg); + return; + } + final String[] sql = {"select count(*) from " + tableName + " t where 1 = 1 "}; conditionMap.forEach((key, value) -> { - sql[0] += " and " + key + " = " + value; + if(StringUtils.isBlank(value)||value.equals(QueryOptionConstant.ISNULL)){ + sql[0] += " and " + key + " is null "; + }else{ + sql[0] += " and " + key + " = " + value; + } + }); if (StringUtils.isNotBlank(orderDTO.getOid())) { //淇敼鐨勬椂鍊欙紝闇�瑕佹帓闄よ嚜宸� - sql[0] += " and oid != '" + orderDTO.getOid() + "'"; + sql[0] += " and t.oid != '" + orderDTO.getOid() + "'"; } else if (StringUtils.isNotBlank(orderDTO.getCopyFromVersion())) { - sql[0] += " and oid != '" + orderDTO.getCopyFromVersion() + "'"; + sql[0] += " and t.oid != '" + orderDTO.getCopyFromVersion() + "'"; } - sql[0] += " and lastR = '1' and lastV = '1' "; + sql[0] += " and t.lastR = '1' and t.lastV = '1' "; if (commonsMapper.queryCountBySql(sql[0]) > 0) { String ruleInfoMsg = keyRuleVO == null ? "" : "鏌ヨ瑙勫垯锛氬幓闄ょ┖鏍�--{0},蹇界暐澶у皬鍐�--{1},蹇界暐鍏ㄥ崐瑙�--{2},蹇界暐鍏ㄩ儴绌烘牸--{3}"; String[] objs = new String[]{trim ? "鏄�" : "鍚�", ignoreCase ? "鏄�" : "鍚�", ignoreWidth ? "鏄�" : "鍚�", trimAll ? "鏄�" : "鍚�"}; @@ -2717,10 +2765,10 @@ // if (lifeCycleVO != null) { // cbo.setLcStatus(lifeCycleVO.getStartStatus()); // } else { - cbo.setLcStatus(CodeDefaultLC.EDITING.getValue()); + cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue()); // } } else { - cbo.setLcStatus(CodeDefaultLC.EDITING.getValue()); + cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue()); } } @@ -2827,6 +2875,9 @@ ClientBusinessObject sysDataObject= codeSystemObjectMap.get(code); if(isCodeOrGroupCode){ code=sysDataObject.getAttributeValue("GROUPCODE"); + if(StringUtils.isBlank(code)){ + code=sysDataObject.getId(); + } } CodeOrderDTO orderDTO = new CodeOrderDTO(); if(codeDataMap.containsKey(code)){ @@ -2835,11 +2886,7 @@ orderDTO.setCodeClassifyOid(codeClassifyVO.getOid());//鍒嗙被涓婚敭 orderDTO.setOid(sysDataObject.getOid());//鏁版嵁oid orderDTO.setLcStatus(rowDatas.getStatus());//鐘舵�� - if(isCodeOrGroupCode){ - orderDTO.setId(sysDataObject.getId()); - }else{ - orderDTO.setId(code); - } + orderDTO.setId(code); orderDTO.setTs(sysDataObject.getTs()); orderDTO.setBtmname(codeClassifyVO.getBtmname());//涓氬姟绫诲瀷 orderDTO.setDescription("闆嗘垚璋冪敤:鏇存柊");//鏁版嵁鎻忚堪 @@ -2909,7 +2956,7 @@ for (int j = 0; j < ruleVO.getSecVOList().size(); j++) { CodeBasicSecVO secVO = ruleVO.getSecVOList().get(j); String length= secValues[j]; - if(StringUtils.isNotBlank(secVO.getCodeSecLength())&&VciBaseUtil.getInt(length)>VciBaseUtil.getInt(secVO.getCodeSecLength())){ + if(StringUtils.isNotBlank(secVO.getCodeSecLength())&&VciBaseUtil.getInt(length)>(VciBaseUtil.getInt(secVO.getCodeSecLength())+((secVO.getPrefixCode()+secVO.getSuffixCode()).length()))){ errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鐮佹瀹藉害涓庣郴缁熶腑鐨勭紪鐮佽鍒欎笉鍚�" ); fined = true; break; @@ -3087,7 +3134,7 @@ Integer userSecret = VciBaseUtil.getCurrentUserSecret(); cbo.setAttributeValue(SECRET_FIELD,String.valueOf((userSecret==null || userSecret ==0)? UserSecretEnum.NONE.getValue():userSecret)); } - cbo.setLcStatus(CodeDefaultLC.EDITING.getValue()); + cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue()); }else{ //姝ゆ椂杩樻病鏈夎浆鎹㈣矾寰� //cbo.setAttributeValue(CODE_FULL_PATH_FILED, childOidPathMap.getOrDefault(rowData.getData().getOrDefault(CODE_CLASSIFY_OID_FIELD,""),fullPath)); @@ -3117,7 +3164,7 @@ String fullPath,boolean newCode){ rowDataList.stream().forEach(rowData -> { ClientBusinessObject cbo=new ClientBusinessObject(); - DefaultAttrAssimtUtil.addDefaultAttrAssimt(cbo, classifyFullInfo.getTopClassifyVO().getBtmTypeId()); + DefaultAttrAssimtUtil.addDefaultAttrAssimt(cbo, classifyFullInfo.getTopClassifyVO().getBtmTypeId()); rowData.getData().forEach((index,value)->{ String field = fieldIndexMap.get(index); if (StringUtils.isBlank(field)) { @@ -3144,7 +3191,7 @@ Integer userSecret = VciBaseUtil.getCurrentUserSecret(); cbo.setAttributeValue(SECRET_FIELD,String.valueOf((userSecret==null || userSecret ==0)? UserSecretEnum.NONE.getValue():userSecret)); } - cbo.setLcStatus(CodeDefaultLC.EDITING.getValue()); + cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue()); }else{ //姝ゆ椂杩樻病鏈夎浆鎹㈣矾寰� //cbo.setAttributeValue(CODE_FULL_PATH_FILED, childOidPathMap.getOrDefault(rowData.getData().getOrDefault(CODE_CLASSIFY_OID_FIELD,""),fullPath)); @@ -3668,7 +3715,7 @@ */ private void batchCheckRequiredAttrOnOrder(CodeClassifyTemplateVO templateVO,List<ClientBusinessObject> cboList,Map<String,String> errorMap){ Map<String, CodeClassifyTemplateAttrVO> requiredAttrMap = templateVO.getAttributes().stream().filter(s -> - VciBaseUtil.getBoolean(s.getRequireFlag()) && StringUtils.isBlank(s.getComponentRule()) && StringUtils.isBlank(s.getClassifyInvokeLevel())//涓嶈兘鏄粍鍚堢殑鍜屽垎绫绘敞鍏ョ殑 + VciBaseUtil.getBoolean(s.getRequireFlag()) && StringUtils.isBlank(s.getComponentRule()) && (StringUtils.isBlank(s.getClassifyInvokeLevel())||s.getClassifyInvokeLevel().equals("none"))//涓嶈兘鏄粍鍚堢殑鍜屽垎绫绘敞鍏ョ殑 ).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); //涓嶮dmEngineServiceImpl閲岄潰鐨刢heckRequiredAttrOnOrder 閫昏緫搴旇鐩镐技 if(!CollectionUtils.isEmpty(requiredAttrMap)) { @@ -3710,7 +3757,8 @@ } } CodeClassifyFullInfoBO newClassifyFullInfo= classifyFullInfoMap.get(cbo.getAttributeValue(CODE_CLASSIFY_OID_FIELD)); - List<CodeClassifyVO> classifyVOS = newClassifyFullInfo.getParentClassifyVOs().stream().sorted(((o1, o2) -> o2.getDataLevel().compareTo(o1.getDataLevel()))).collect(Collectors.toList()); + List<CodeClassifyVO> classifyVOS = newClassifyFullInfo.getParentClassifyVOs().stream().sorted(((o1, o2) -> -o2.getDataLevel().compareTo(o1.getDataLevel()))).collect(Collectors.toList()); + int level = VciBaseUtil.getInt(attrVO.getClassifyInvokeLevel()); if (classifyVOS.size()>=level && level > 0 ) { classifyVO = classifyVOS.get(level-1); @@ -3769,7 +3817,7 @@ //2.鍒ゆ柇鍏抽敭灞炴�у湪绯荤粺閲屾槸鍚﹂噸澶� //鍥犱负鏁版嵁閲忓緢澶э紝鎵�浠ュ緱鎯冲姙娉曞苟琛� //SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo(); - Map<String,List<BaseModel>> indexTODataMap=new HashMap<>(); + Map<String,List<BaseModel>> indexTODataMap=new ConcurrentHashMap<>(); List<ClientBusinessObject> repeatDataMap = cboList.parallelStream().filter(cbo -> { //姣忚閮藉緱鏌ヨ.濡傛灉鍏朵腑鍑虹幇浜嗛敊璇紝鎴戜滑灏辩洿鎺ユ姏鍑哄紓甯革紝鍏朵綑鐨勬樉绀� //VciBaseUtil.setCurrentUserSessionInfo(sessionInfo); @@ -3921,7 +3969,7 @@ * @return 閲嶅鐨勮鍙� */ private void getSelfRepeatRowIndex(Map<String/**灞炴�х殑缂栧彿**/, CodeClassifyTemplateAttrVO> ketAttrMap, - List<ClientBusinessObject> dataList,CodeKeyAttrRepeatVO keyRuleVO,CodeImportResultVO resultVO){ + List<ClientBusinessObject> dataList,CodeKeyAttrRepeatVO keyRuleVO,CodeImportResultVO resultVO){ Set<String> selfRepeatRowIndexList = new CopyOnWriteArraySet<>(); Map<String,List<String>> keyAttrOkOidTORepeatOidMap=new HashMap<>(); boolean trimAll =keyRuleVO ==null?false: VciBaseUtil.getBoolean(keyRuleVO.getIgnoreallspaceflag()); @@ -4013,7 +4061,7 @@ DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(dataMap,clientBusinessObject); for (String key:dataMap.keySet()){ Object value= dataMap.getOrDefault(key,""); - clientBusinessObject.setAttributeValue(key,value.toString()); + clientBusinessObject.setAttributeValue(key.toLowerCase(Locale.ROOT),value==null?"":value.toString()); } clientBusinessObjectList.add(clientBusinessObject); }); @@ -4446,7 +4494,7 @@ * @param idList * @param btmName */ - private void sendApplyGroupcode(List<String> idList,String btmName,String operationType){ + public void sendApplyGroupcode(List<String> idList,String btmName,String operationType){ String oids=VciBaseUtil.array2String(idList.toArray(new String[]{})); if(operationType.equals(sysIntegrationPushTypeEnum.ACCPET_APPCODE.getValue())) { mdmInterJtClient.applyGroupCode(oids,btmName); -- Gitblit v1.9.3