From 111330b2dd0bccc176ab9c6324a6ed01d5bc0e93 Mon Sep 17 00:00:00 2001 From: xiejun <xj@2023> Date: 星期四, 12 十月 2023 09:48:03 +0800 Subject: [PATCH] 历史导入编码最大流水值不正确问题修复 --- Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java | 564 ++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 486 insertions(+), 78 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 248fb60..ac1c84c 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,13 +3,16 @@ import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.common.utils.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.vci.ubcs.code.applyjtcodeservice.feign.IMdmInterJtClient; 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.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.lifecycle.CodeAllCodeLC; import com.vci.ubcs.code.mapper.CommonsMapper; import com.vci.ubcs.code.service.*; @@ -19,6 +22,7 @@ import com.vci.ubcs.code.vo.webserviceModel.attrmap.DataObjectVO; import com.vci.ubcs.code.vo.webserviceModel.attrmap.RowDatas; import com.vci.ubcs.code.vo.webserviceModel.result.xml.XMLResultDataObjectDetailDO; +import com.vci.ubcs.file.util.VciZipUtil; import com.vci.ubcs.omd.feign.IBtmTypeClient; import com.vci.ubcs.omd.feign.IWebSecretClient; import com.vci.ubcs.omd.vo.BtmTypeVO; @@ -50,6 +54,7 @@ import org.apache.poi.ss.usermodel.Workbook; import org.springblade.core.redis.cache.BladeRedis; import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.Func; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -152,10 +157,21 @@ @Autowired private IBtmTypeClient btmTypeClient; /*** + * 鐢宠闆嗗洟缂栫爜鏈嶅姟 + */ + @Resource + private IMdmInterJtClient mdmInterJtClient; + /*** * 瀵嗙骇鏈嶅姟 */ @Resource private IWebSecretClient secretService; + + /** + * 瀵煎嚭鐨勫崄涓囨潯 + */ + public static final int EXPORT_LIMIT = 100000; + /** * 鎵归噺鐢宠锛氶�夊彇閫変腑鍒嗙被涓嬬殑鎵�鏈夋ā鏉垮叧閿睘鎬э紝鐩镐技灞炴�э紝蹇呭~灞炴�э紝鍐欏叆execl涓� * @@ -163,7 +179,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); @@ -178,38 +194,40 @@ //鍙傜収鐨勮嚜琛岃緭鍏ュ悕绉� //鍒嗙被娉ㄥ叆鐨勪笉鐢紝閮芥槸瀵煎叆鍚庤嚜鍔ㄥ鐞嗙殑 //缂栫爜锛岀姸鎬佺瓑瀛楁涓嶅鍏� - List<CodeClassifyTemplateAttrVO> templateAttrVOS = templateVO.getAttributes().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("妯℃澘娌℃湁閰嶇疆浠讳綍銆愯〃鍗曟樉绀恒�戜负銆愭槸銆戠殑灞炴��"); - } - templateAttrVOS.stream().forEach(codetemplateAttr ->{ - String field=codetemplateAttr.getId(); - String name=codetemplateAttr.getName(); - CodeClassifyTemplateAttrVO codeBaseAttributeDTO=new CodeClassifyTemplateAttrVO(); - boolean res=(StringUtils.isNotBlank(codetemplateAttr.getAttributeGroup())&& codetemplateAttr.getAttributeGroup().equals(BATCHADD_EXCEPORT_ATTR_TYPE))//鍩烘湰灞炴�у瓧娈垫樉绀� - ||(StringUtils.isNotBlank(codetemplateAttr.getKeyAttrFlag())&&Boolean.parseBoolean(codetemplateAttr.getKeyAttrFlag()))//鍏抽敭灞炴�х殑瀛樺叆 - ||(StringUtils.isNotBlank(codetemplateAttr.getSameRepeatAttrFlag())&&Boolean.parseBoolean(codetemplateAttr.getSameRepeatAttrFlag())) //鐩镐技灞炴�х殑瀛樺叆 - ||(StringUtils.isNotBlank(codetemplateAttr.getRequireFlag())&&Boolean.parseBoolean(codetemplateAttr.getRequireFlag())); - if(allFieldToOutNameMap.containsKey(name)){//濡傛灉瀛樺湪鐨勮瘽鍒欓渶瑕佹牴鎹叿浣撶殑鍘昏祴鍊� - codeBaseAttributeDTO= allFieldToOutNameMap.get(name); - if(StringUtils.isNotBlank(codetemplateAttr.getKeyAttrFlag())&&Boolean.parseBoolean(codetemplateAttr.getKeyAttrFlag())){ - codeBaseAttributeDTO.setKeyAttrFlag(codetemplateAttr.getKeyAttrFlag());//灞炴�у叧閿睘鎬� - } - if(StringUtils.isNotBlank(codetemplateAttr.getRequireFlag())&&Boolean.parseBoolean(codetemplateAttr.getRequireFlag())){ - codeBaseAttributeDTO.setRequireFlag(codetemplateAttr.getRequireFlag());//灞炴�у繀濉」 - } - if(StringUtils.isNotBlank(codetemplateAttr.getSameRepeatAttrFlag())&&Boolean.parseBoolean(codetemplateAttr.getSameRepeatAttrFlag())){ - codeBaseAttributeDTO.setSameRepeatAttrFlag(codetemplateAttr.getSameRepeatAttrFlag());//灞炴�х浉浼煎睘鎬� - } - }else if(res){ - allFieldToOutNameMap.put(name,codetemplateAttr); + if(!CollectionUtils.isEmpty(templateVO.getAttributes())) { + List<CodeClassifyTemplateAttrVO> templateAttrVOS = templateVO.getAttributes().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("妯℃澘娌℃湁閰嶇疆浠讳綍銆愯〃鍗曟樉绀恒�戜负銆愭槸銆戠殑灞炴��"); } - }); + templateAttrVOS.stream().forEach(codetemplateAttr -> { + String field = codetemplateAttr.getId(); + String name = codetemplateAttr.getName(); + CodeClassifyTemplateAttrVO codeBaseAttributeDTO = new CodeClassifyTemplateAttrVO(); + boolean res = (StringUtils.isNotBlank(codetemplateAttr.getAttributeGroup()) && codetemplateAttr.getAttributeGroup().equals(BATCHADD_EXCEPORT_ATTR_TYPE))//鍩烘湰灞炴�у瓧娈垫樉绀� + || (StringUtils.isNotBlank(codetemplateAttr.getKeyAttrFlag()) && Boolean.parseBoolean(codetemplateAttr.getKeyAttrFlag()))//鍏抽敭灞炴�х殑瀛樺叆 + || (StringUtils.isNotBlank(codetemplateAttr.getSameRepeatAttrFlag()) && Boolean.parseBoolean(codetemplateAttr.getSameRepeatAttrFlag())) //鐩镐技灞炴�х殑瀛樺叆 + || (StringUtils.isNotBlank(codetemplateAttr.getRequireFlag()) && Boolean.parseBoolean(codetemplateAttr.getRequireFlag())); + if (allFieldToOutNameMap.containsKey(name)) {//濡傛灉瀛樺湪鐨勮瘽鍒欓渶瑕佹牴鎹叿浣撶殑鍘昏祴鍊� + codeBaseAttributeDTO = allFieldToOutNameMap.get(name); + if (StringUtils.isNotBlank(codetemplateAttr.getKeyAttrFlag()) && Boolean.parseBoolean(codetemplateAttr.getKeyAttrFlag())) { + codeBaseAttributeDTO.setKeyAttrFlag(codetemplateAttr.getKeyAttrFlag());//灞炴�у叧閿睘鎬� + } + if (StringUtils.isNotBlank(codetemplateAttr.getRequireFlag()) && Boolean.parseBoolean(codetemplateAttr.getRequireFlag())) { + codeBaseAttributeDTO.setRequireFlag(codetemplateAttr.getRequireFlag());//灞炴�у繀濉」 + } + if (StringUtils.isNotBlank(codetemplateAttr.getSameRepeatAttrFlag()) && Boolean.parseBoolean(codetemplateAttr.getSameRepeatAttrFlag())) { + codeBaseAttributeDTO.setSameRepeatAttrFlag(codetemplateAttr.getSameRepeatAttrFlag());//灞炴�х浉浼煎睘鎬� + } + } else if (res) { + allFieldToOutNameMap.put(name, codetemplateAttr); + } + }); + } }); //鏁寸悊濂芥墍鏈夋ā鏉块渶瑕佸啓鍏xecl鐨勫睘鎬т俊鎭� Workbook workbook = new HSSFWorkbook(); @@ -477,7 +495,6 @@ return text; } - /** * 鎵归噺鐢宠缂栫爜鏁版嵁 * @@ -520,7 +537,6 @@ // return null; return codeImProtRusultVO; } - /*** * 浠庨《灞傛壒閲忕敵璇峰鍏ユ柟娉� @@ -627,7 +643,6 @@ }); - //閮借浆鎹㈠畬浜嗐�傞渶瑕佹壒閲忔鏌� //濡傛灉鍑洪敊浜嗭紝鎴戜滑渚濈劧鎵ц鏈夋晥鐨勬暟鎹紝鏃犳晥鐨勬暟鎹啓鍥炲埌excel涓� //2.鍒ゆ柇蹇呰緭椤广�傘�傞渶瑕佸叏閮ㄧ殑灞炴�э紝濡傛灉鏄繀杈擄紝浣嗘槸琛ㄥ崟閲岄潰涓嶆樉绀虹殑锛屽彧鑳芥槸鍒嗙被娉ㄥ叆鎴栬�呯粍鍚堣鍒� @@ -701,10 +716,8 @@ createRedisDatas(uuid + "-ok",codeImprotDataVOS, newErrorMap,true); }); + //寰�鐗╁搧鑺傜偣涓婂姞妯℃澘 - - - List<String> needRowIndexList=new ArrayList<>(); CodeImProtRusultVO codeImProtRusultVO = new CodeImProtRusultVO(); if(errorMap.size()>0) { @@ -774,6 +787,7 @@ 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) { @@ -791,7 +805,6 @@ // 5.3 浼佷笟缂栫爜鐨勯暱搴︼紝鍜岀紪鐮佽鍒欑殑闀垮害瑕佸搴斾笂 // 5.4 鑾峰彇娴佹按鐮佹鐨勫�硷紝鍘婚櫎濉厖鐨勫瓧绗︼紝鐪嬫祦姘村彿鏄灏戯紝鐒跺悗灏嗘祦姘村彿鍜岀幇鍦ㄧ殑鏈�澶ф祦姘村彿鍒ゆ柇锛屽皬浜庡氨鐩存帴褰曞叆锛屽ぇ浜庡垯淇敼鏈�澶ф祦姘村彿 // 5.5 瀛樺偍浼佷笟缂栫爜鍒癮llcode涓� - //鏌ヨ鍒嗙被鍜屾ā鏉� CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyOid); @@ -926,7 +939,7 @@ 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 -> { @@ -1025,6 +1038,7 @@ if (!CollectionUtils.isEmpty(thisCbos)) { try { + // TODO 澶氱嚎绋嬫祦闂 productCodeService.productCodeAndSaveData(classifyFullInfo, finalTemplateVO, ruleVOMap.get(ruleOid), null, dataCBOList); } catch (Throwable e) { log.error("鎵归噺浜х敓缂栫爜鐨勬椂鍊欏嚭閿欎簡", e); @@ -1043,6 +1057,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"; @@ -1068,6 +1084,7 @@ return codeImProtRusultVO; } + /*private void converBaseModels(List<ClientBusinessObject> clientBusinessObjects,List<BaseModel>dataCBOList){ clientBusinessObjects.stream().forEach(clientBusinessObject -> { BaseModel baseModel=new BaseModel(); @@ -1081,6 +1098,7 @@ }); }*/ + /*** * 浠巈xecl閲屾瀯寤哄璞� * @param rowDataList @@ -1450,6 +1468,225 @@ return dataGrid; } + /** + * 瀵煎嚭涓婚搴撶殑鏁版嵁 + * + * @param exportAttrDTO 瀵煎嚭鐩稿叧鐨勯厤缃紝蹇呴』瑕佹湁涓婚搴撳垎绫荤殑涓婚敭 + * @return 瀵煎嚭鐨別xcel鐨勬枃浠� + */ + @Override + public String exportCode(CodeExportAttrDTO exportAttrDTO) { + VciBaseUtil.alertNotNull(exportAttrDTO,"瀵煎嚭鐨勯厤缃�",exportAttrDTO.getCodeClassifyOid(),"涓婚搴撳垎绫荤殑涓婚敭"); + CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(exportAttrDTO.getCodeClassifyOid()); + //鑾峰彇鏈�鏂扮殑妯℃澘 + CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(exportAttrDTO.getCodeClassifyOid()); + //鍏堟煡璇㈡暟鎹� + String btmTypeId = classifyFullInfo.getTopClassifyVO().getBtmTypeId(); + Map<String, String> conditionMap = exportAttrDTO.getConditionMap(); + 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)) + ")"); + } + PageHelper pageHelper = new PageHelper(exportAttrDTO.getLimit()==null?-1:exportAttrDTO.getLimit()); + pageHelper.setPage(exportAttrDTO.getPage()==null?1:exportAttrDTO.getPage()); + pageHelper.setSort(exportAttrDTO.getSort()); + pageHelper.setOrder(exportAttrDTO.getOrder()); + + pageHelper.addDefaultDesc("createTime"); + conditionMap.put("codeclsfpath","*" + exportAttrDTO.getCodeClassifyOid() + "*"); + 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); + } + + String countSql = "select count(*) from " + tableName +" where 1=1" + + " and lastr = '1'" + + " and lastv='1'" + + " and codeclsfpath like '%" + exportAttrDTO.getCodeClassifyOid() + "%'"; + + //鍏堟煡璇㈡�绘暟 + int total = 0; + if(exportAttrDTO.getEndPage()!=null && exportAttrDTO.getEndPage()>0 + &&exportAttrDTO.getPage() !=null && exportAttrDTO.getPage() >0 + &&exportAttrDTO.getEndPage()>exportAttrDTO.getPage()){ + //浠庡灏戦〉鍒板灏戦〉鐨勬煡璇㈡柟寮忥紝 + for(int i = exportAttrDTO.getPage() ;i <= exportAttrDTO.getEndPage();i++){ + PageHelper thisPage = new PageHelper(exportAttrDTO.getLimit()==null?-1:exportAttrDTO.getLimit()); + thisPage.setPage(exportAttrDTO.getPage()==null?1:exportAttrDTO.getPage()); + thisPage.setSort(exportAttrDTO.getSort()); + thisPage.setOrder(exportAttrDTO.getOrder()); + thisPage.addDefaultDesc("createTime"); + + total += commonsMapper.queryCountBySql(countSql); + } + }else{ + + total = commonsMapper.queryCountBySql(countSql); + } + List<String> selectFieldList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(exportAttrDTO.getAttrIdIndexMap())){ + selectFieldList = exportAttrDTO.getAttrIdIndexMap().values().stream().map(s->s.toLowerCase(Locale.ROOT)).collect(Collectors.toList()); + }else{ + selectFieldList = templateVO.getAttributes().stream().filter(s->VciBaseUtil.getBoolean(s.getFormDisplayFlag()) + ||VciBaseUtil.getBoolean(s.getTableDisplayFlag())).map(s->s.getId().toLowerCase(Locale.ROOT)).collect(Collectors.toList()); + } + //鍙傜収璁╁钩鍙扮洿鎺ユ煡璇㈠氨琛� + List<String> finalSelectFieldList = selectFieldList; + List<CodeClassifyTemplateAttrVO> referAttrVOs = templateVO.getAttributes().stream().filter( + s -> StringUtils.isNotBlank(s.getReferBtmId()) + && + (finalSelectFieldList.size() ==0 || finalSelectFieldList.contains(s.getId().toLowerCase(Locale.ROOT))) + ).collect(Collectors.toList()); + if(!CollectionUtils.isEmpty(referAttrVOs)){ + for (int i = 0; i < referAttrVOs.size(); i++) { + selectFieldList.add(referAttrVOs.get(i).getId() + ".name"); + } + } + List<String> excelNameList = new CopyOnWriteArrayList<>(); + String tempFolder = LocalFileUtil.getDefaultTempFolder(); + if(total>EXPORT_LIMIT){ + //鍒嗙粍鏉ユ墽琛� + int queryCount = (total-total%EXPORT_LIMIT)/EXPORT_LIMIT; + if(total%EXPORT_LIMIT>0){ + queryCount = queryCount + 1; + } + List<Integer> indexList = new ArrayList<>(); + for (int i = 0; i <queryCount ; i++) { + indexList.add(i); + } + Map<String, String> finalConditionMap = conditionMap; + //骞惰鏌ヨ鐪嬬湅 + SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo(); + indexList.stream().forEach(index->{ + //绾跨▼鐨勬柟寮忥紝鎵�浠ラ渶瑕佽缃綋鍓嶇敤鎴� + VciBaseUtil.setCurrentUserSessionInfo(sessionInfo); + PageHelper thisPage = new PageHelper(EXPORT_LIMIT); + thisPage.setPage(index+1); + thisPage.setSort(exportAttrDTO.getSort()); + thisPage.setOrder(exportAttrDTO.getOrder()); + thisPage.addDefaultDesc("createTime"); + selectDataAndExportExcelName(btmTypeId, finalConditionMap,thisPage,finalSelectFieldList, + classifyFullInfo,templateVO,exportAttrDTO, + excelNameList,tempFolder,index); + }); + }else{ + pageHelper.setLimit(total); + pageHelper.setPage(1); + selectDataAndExportExcelName(btmTypeId,conditionMap,pageHelper,finalSelectFieldList, + classifyFullInfo,templateVO,exportAttrDTO, + excelNameList,tempFolder,1); + } + if(excelNameList.size() ==0){ + throw new VciBaseException("娌℃湁鏁版嵁鍙互琚鍑�"); + } + if(excelNameList.size() == 1){ + return excelNameList.get(0); + } + //鏄涓紝鎴戜滑闇�瑕佹墦鎴愬帇缂╁寘 + String zipFileName = LocalFileUtil.getDefaultTempFolder() + File.separator + classifyFullInfo.getCurrentClassifyVO().getId() + "_" + classifyFullInfo.getCurrentClassifyVO().getName() + "_瀵煎嚭_" + excelNameList.size()+".zip"; + VciZipUtil zipUtil = new VciZipUtil(); + File file = new File(tempFolder); + zipUtil.addFileToZip(file,zipFileName); + File[] files = file.listFiles(); + for (int i = 0; i < files.length; i++) { + LocalFileUtil.deleteTempFile(files[i],false); + } + LocalFileUtil.deleteTempFile(file,true); + return zipFileName; + } + + /** + * 鏌ヨ鏁版嵁骞跺鍑哄埌excel + * @param btmTypeId 涓氬姟绫诲瀷 + * @param conditionMap 鏌ヨ鏉′欢 + * @param pageHelper 鍒嗛〉 + * @param selectFieldList 鏌ヨ鐨勫瓧娈� + * @param classifyFullInfo 鍒嗙被鐨勫叏閮ㄤ俊鎭� + * @param templateVO 妯℃澘鐨勪俊鎭� + * @param exportAttrDTO 瀵煎嚭鐨勫睘鎬� + * @param excelNameList excel鐨勬枃浠跺悕绉� + * @param tempFolder 涓存椂鏂囦欢澶� + * @param excelIndex excel鐨勯『搴� + */ + private void selectDataAndExportExcelName(String btmTypeId, Map<String, String> conditionMap, PageHelper pageHelper, List<String> selectFieldList, + CodeClassifyFullInfoBO classifyFullInfo, CodeClassifyTemplateVO templateVO, CodeExportAttrDTO exportAttrDTO, + List<String> excelNameList, String tempFolder, + Integer excelIndex) { + DataGrid<Map<String, String>> dataGrid = engineService.queryGrid(btmTypeId, templateVO, conditionMap, pageHelper); + if(dataGrid == null || CollectionUtils.isEmpty(dataGrid.getData())){ + return; + } + //杞崲鏁版嵁 + List<Map<String, String>> dataMap = dataGrid.getData(); + //灏佽鏌ヨ鍑烘潵鐨勬暟鎹� + engineService.wrapperData(dataMap, templateVO, selectFieldList,false); + //modify by weidy@2022-09-27 + //鍥犱负鍦ㄥ垪琛ㄥ拰琛ㄥ崟鐨勬樉绀虹殑鏃跺�欙紝鎴戜滑鐨勫紑鍏崇被鍨嬮〉闈細澶勭悊锛屼絾鏄湪瀵煎嚭鐨勬椂鍊欙紝鎴戜滑闇�瑕佸皢true鍜宖alse閮芥浛鎹㈡垚涓枃 + engineService.wrapperBoolean(dataMap,templateVO); + Map<String, CodeClassifyTemplateAttrVO> attrVOMap = templateVO.getAttributes().stream().filter(s->selectFieldList.contains(s.getId().toLowerCase(Locale.ROOT))).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); + Map<Integer, String> attrIdIndexMap = exportAttrDTO.getAttrIdIndexMap(); + if (CollectionUtils.isEmpty(attrIdIndexMap)) { + attrIdIndexMap = templateVO.getAttributes().stream().filter(s->selectFieldList.contains(s.getId().toLowerCase(Locale.ROOT))).collect(Collectors.toMap(s -> s.getOrderNum(), t -> t.getId())); + } + List<Integer> indexList = attrIdIndexMap.keySet().stream().sorted().collect(Collectors.toList()); + + String excelName = tempFolder + File.separator + + classifyFullInfo.getCurrentClassifyVO().getId() + "_" + classifyFullInfo.getCurrentClassifyVO().getName() + "_瀵煎嚭_" + excelIndex + ".xls"; + try { + new File(excelName).createNewFile(); + } catch (Throwable e) { + throw new VciBaseException(LangBaseUtil.getErrorMsg(e), new String[]{excelName}, e); + } + excelNameList.add(excelName); + List<WriteExcelData> excelDataList = new ArrayList<>(); + Workbook workbook = new HSSFWorkbook(); + for (int i = 0; i < indexList.size(); i++) { + String attrId = attrIdIndexMap.get(indexList.get(i)).toLowerCase(Locale.ROOT); + if (attrVOMap.containsKey(attrId)) { + CodeClassifyTemplateAttrVO attrVO = attrVOMap.get(attrId); + Object text = attrVO.getName(); + 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}; + Map<Integer, String> finalAttrIdIndexMap = attrIdIndexMap; + dataMap.stream().forEach(data -> { + rowIndex[0]++; + for (int i = 0; i < indexList.size(); i++) { + Integer index = indexList.get(i); + String attrId = finalAttrIdIndexMap.get(index).toLowerCase(Locale.ROOT); + 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, data.getOrDefault(attrId, ""))); + } + } + }); + WriteExcelOption excelOption = new WriteExcelOption(excelDataList); + ExcelUtil.writeDataToFile(excelName, excelOption); + } + @Override public R batchImportData(List<CodeImprotSaveDatVO> codeImprotSaveDatVOList, String classifyAttr, boolean isImprot) { WriteExcelOption eo = new WriteExcelOption(); @@ -1668,7 +1905,7 @@ * @return 鏈夐敊璇俊鎭殑excel */ @Override - public void batchSyncApplyCode(CodeOrderDTO orderDTO, DataObjectVO dataObjectVO, LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs) { + public void batchSyncApplyCode(CodeOrderDTO orderDTO, DataObjectVO dataObjectVO, LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs,boolean isCodeOrGroupCode) { Map<String,String> errorMap=new HashMap<>(); VciBaseUtil.alertNotNull(orderDTO,"缂栫爜鐢宠鐩稿叧鐨勬暟鎹�",orderDTO.getCodeClassifyOid(),"涓婚搴撳垎绫讳富閿�"); CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid()); @@ -1731,6 +1968,7 @@ CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList); 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->{ /* //浼犲叆鏁版嵁涔嬮棿鍏抽敭灞炴�х殑鏍¢獙 @@ -1788,10 +2026,15 @@ sourceOid=codeOidToSystemOidMap.get(oid); } String code=""; + String groupCode=""; String errorid="103"; String mes=errorMap.get(rowIndex); XMLResultDataObjectDetailDO resultDataObjectDetailDO=new XMLResultDataObjectDetailDO(); - resultDataObjectDetailDO.setCode(code); + if(isCodeOrGroupCode){ + resultDataObjectDetailDO.setCode(groupCode); + }else{ + resultDataObjectDetailDO.setCode(code); + } resultDataObjectDetailDO.setId(sourceOid); resultDataObjectDetailDO.setErrorid(errorid); resultDataObjectDetailDO.setMsg(mes); @@ -1817,6 +2060,7 @@ String oid = cbo.getOid(); String sourceOid = oid; String code = ""; + String groupCode=""; String errorid = "201"; if(codeOidToSystemOidMap.containsKey(oid)){ sourceOid=codeOidToSystemOidMap.get(oid); @@ -1827,22 +2071,36 @@ String lcstatus =newCbo.getLcStatus(); String newOid =newCbo.getOid(); Date ts =newCbo.getTs(); - code=newCbo.getId(); + code = StringUtils.isBlank(newCbo.getId())?"":newCbo.getId(); + groupCode=newCbo.getData().getOrDefault("GROUPCODE",""); String lastmodifier=newCbo.getLastModifier(); - if (!lcstatus.equals(CodeDefaultLC.RELEASED.getValue())) { + if (lcstatus!=null&&!lcstatus.equals(CodeDefaultLC.RELEASED.getValue())) { newCbo.setOid(newOid); newCbo.setLastModifier(lastmodifier); - newCbo.setId(code); + /*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(); - resultDataObjectDetailDO.setCode(code); + if(isCodeOrGroupCode) { + if(StringUtils.isBlank(groupCode)){ + errorid="1"; + mes+="锛涚敵璇风殑缂栫爜绫诲瀷涓洪泦鍥㈢爜锛岀瓑寰呴泦鍥㈢紪鐮佽祴鍊�"; + } + resultDataObjectDetailDO.setCode(groupCode); + }else{ + resultDataObjectDetailDO.setCode(code); + } resultDataObjectDetailDO.setId(sourceOid); resultDataObjectDetailDO.setErrorid(errorid); resultDataObjectDetailDO.setMsg(mes); + resultDataObjectDetailDOs.add(resultDataObjectDetailDO); } } @@ -1880,22 +2138,41 @@ allNeedSaveCboList.add(baseModel.getOid()); }); try { + List<String>applyGroupCodeIdList=new ArrayList<>(); productCodeService.productCodeAndSaveData(classifyFullInfo, templateVO, ruleVO, orderDTO.getSecDTOList(), dataCBOList); //濡傛灉鏄紪鐮佺敓鎴愬け璐ワ紝鍒欑洿鎺ュ氨澶辫触浜嗭紝鍏朵粬鐨勫垽鏂嚭鏉ユ湁閿欒鐨勬垜浠兘缁熶竴杩斿洖鍒癳xcel閲岄潰 engineService.batchSaveSelectChar(templateVO, dataCBOList); // if(!isProcess){ dataCBOList.stream().forEach(needSaveCbo->{ + XMLResultDataObjectDetailDO resultDataObjectDetailDO=new XMLResultDataObjectDetailDO(); - resultDataObjectDetailDO.setCode(needSaveCbo.getId()); + String code=StringUtils.isBlank(needSaveCbo.getId())?" ":needSaveCbo.getId(); + String groupCode=needSaveCbo.getData().getOrDefault("GROUPCODE"," "); + //resultDataObjectDetailDO.setCode(needSaveCbo.getId()); + String msg="鐢宠缂栫爜鎴愬姛"; String oid=needSaveCbo.getOid(); String sourceOid=oid; + applyGroupCodeIdList.add(oid); if(codeOidToSystemOidMap.containsKey(oid)){ sourceOid=codeOidToSystemOidMap.get(oid); } + 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("鐢宠缂栫爜鎴愬姛"); + + resultDataObjectDetailDO.setMsg(msg); resultDataObjectDetailDOs.add(resultDataObjectDetailDO); + //澶勭悊浼犻�佺殑鏁版嵁涓叧閿睘鎬ч噸澶嶇殑锛岀洿鎺ユ嬁鍒板凡缁忕敵璇峰埌缂栫爜鐨勬暟鎹紪鐮佺洿鎺ュ皢璧嬬粰鍏抽敭灞炴�ч噸澶嶇殑鏁版嵁 + LinkedList<XMLResultDataObjectDetailDO> repeatDataObjectDetailDOS=handleApplyDataKeyAttrRepeat(keyAttrOkOidTORepeatOidMap,codeOidToSystemOidMap,needSaveCbo,isCodeOrGroupCode); + resultDataObjectDetailDOs.addAll(repeatDataObjectDetailDOS); }); /* }else{ needSaveCboList.stream().forEach(needSaveCbo->{ @@ -1913,6 +2190,13 @@ }); }*/ + //鏄惁璋冪敤闆嗗洟鎺ュ彛鐢宠鎺ュ彛 + if(isCodeOrGroupCode){ + if(!CollectionUtils.isEmpty(applyGroupCodeIdList)) { + this.sendApplyGroupcode(applyGroupCodeIdList, classifyFullInfo.getTopClassifyVO().getId(), sysIntegrationPushTypeEnum.ACCPET_APPCODE.getValue()); + } + } + }catch (Throwable e){ e.printStackTrace(); needSaveCboList.stream().forEach(needSaveCbo->{ @@ -1933,15 +2217,61 @@ } } + + /*** + *缁欏悓涓�鎵圭敵璇风紪鐮佸瓨鍦ㄥ叧閿睘鎬х殑鏁版嵁璧嬩笂涓�鑷寸紪鐮� + * @param keyAttrOkOidTORepeatOidMap 涓�鎵圭敵璇锋暟鎹叧閿睘鎬т竴鑷寸殑閲嶅鏁版嵁鏄犲皠鍏崇郴 + * @param codeOidToSystemOidMap + * @param needSaveCbo + * @param isCodeOrGroupCode + */ + private LinkedList<XMLResultDataObjectDetailDO> handleApplyDataKeyAttrRepeat(Map<String,List<String>>keyAttrOkOidTORepeatOidMap,Map<String,String> codeOidToSystemOidMap,BaseModel needSaveCbo,boolean isCodeOrGroupCode){ + LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs=new LinkedList<>(); + String oid=needSaveCbo.getOid(); + if(keyAttrOkOidTORepeatOidMap.containsKey(oid)){ + List<String> repeatOidList= keyAttrOkOidTORepeatOidMap.get(oid); + if(!CollectionUtils.isEmpty(repeatOidList)){ + String sourceNewOid=needSaveCbo.getOid(); + String sourceOid=sourceNewOid; + if(codeOidToSystemOidMap.containsKey(oid)){ + sourceOid=codeOidToSystemOidMap.get(oid); + } + String code=StringUtils.isBlank(needSaveCbo.getId())?" ":needSaveCbo.getId(); + String groupCode=needSaveCbo.getData().getOrDefault("GROUPCODE"," "); + String finalSourceOid = sourceOid; + repeatOidList.stream().forEach(repeatOid->{ + if(codeOidToSystemOidMap.containsKey(repeatOid)){ + XMLResultDataObjectDetailDO repeatresultDataObjectDetailDO=new XMLResultDataObjectDetailDO(); + String repeatSourceOid=codeOidToSystemOidMap.get(repeatOid); + String repeatMsg="姝ゆ暟鎹笌鐢宠鐨勭紪鐮佹暟鎹甶d涓恒��"+ finalSourceOid +"銆戠殑鍏抽敭灞炴�т竴鑷达紝鍒欏彇鐩稿悓缂栫爜"; + if(isCodeOrGroupCode) { + if(StringUtils.isBlank(groupCode)){ + repeatMsg="鐢宠鐨勭紪鐮佺被鍨嬩负闆嗗洟鐮侊紝绛夊緟闆嗗洟缂栫爜璧嬪��"; + } + repeatresultDataObjectDetailDO.setCode(groupCode); + }else{ + repeatresultDataObjectDetailDO.setCode(code); + } + repeatresultDataObjectDetailDO.setId(repeatSourceOid); + repeatresultDataObjectDetailDO.setErrorid("0"); + repeatresultDataObjectDetailDO.setMsg(repeatMsg); + resultDataObjectDetailDOs.add(repeatresultDataObjectDetailDO); + } + }); + } + } + return resultDataObjectDetailDOs; + } /*** * 闆嗘垚鎵归噺鍚屾鏇存柊鎺ュ彛 * @param codeClassifyVO; * @param dataObjectVO 鏁版嵁淇℃伅 * @param resultDataObjectDetailDOs 閿欒淇℃伅 + * @param isCodeOrGroupCode 鏄惁鏇撮泦鍥㈢郴缁熸暟鎹� */ @Transactional(rollbackFor = VciBaseException.class) @Override - public void batchSyncEditDatas(CodeClassifyVO codeClassifyVO, DataObjectVO dataObjectVO, LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs) { + public void batchSyncEditDatas(CodeClassifyVO codeClassifyVO, DataObjectVO dataObjectVO, LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs,boolean isCodeOrGroupCode) { String errorid=""; String msg=""; //鏌ヨ鍒嗙被鍜屾ā鏉� @@ -1966,12 +2296,12 @@ List<String> titleRowData = dataObjectVO.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); - Map<String, String> cboOidMap = new HashMap<>(); - cboOidMap.put("id", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(codeDataMap.keySet().toArray(new String[0])) + ")"); + //Map<String, String> cboOidMap = new HashMap<>(); + //cboOidMap.put("id", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(codeDataMap.keySet().toArray(new String[0])) + ")"); String tableName =""; try { R<BtmTypeVO> r = btmTypeClient.getAllAttributeByBtmId(templateVO.getBtmTypeId()); - if(r.getCode()!=200) { + if(!r.isSuccess()) { throw new Throwable(r.getMsg()); } BtmTypeVO btmTypeVO = r.getData(); @@ -1997,15 +2327,26 @@ sb.append(" select * from "); sb.append(tableName); sb.append(" where 1=1 "); - sb.append(" id in ("); - sb.append(VciBaseUtil.toInSql(codeDataMap.keySet().toArray(new String[0]))); - sb.append(")"); + sb.append(" and lastr=1 and lastv=1" ); + if(isCodeOrGroupCode) { + 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(" and id in ("); + 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); 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<>(); List<CodeOrderDTO> codeOrderDTOList = new ArrayList<>(); - this.getCodeOrderDTOs(codeClassifyVO, templateVO, codeDataMap, codeSystemObjectMap, codeOrderDTOList, errorMap); + this.getCodeOrderDTOs(codeClassifyVO, templateVO, codeDataMap, codeSystemObjectMap, codeOrderDTOList, errorMap,isCodeOrGroupCode); // List<CodeClassifyProcessTempVO> codeClassifyProcessTempVOS=codeClassifyProcessTempService.listProcessTemplate(templateVO.getOid(),"code_cls_flow_use_order"); boolean isProcess=false; /** if(!CollectionUtils.isEmpty(codeClassifyProcessTempVOS)){ @@ -2027,7 +2368,7 @@ RowDatas rowData=codeDataMap.get(code); String status=rowData.getStatus(); 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(),"")+";鏁版嵁涓嶆槸鏈�鏂扮殑锛屽彲鑳戒粬浜哄凡缁忎慨鏀癸紝璇峰埛鏂板悗鍐嶈瘯"); } @@ -2069,7 +2410,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); @@ -2088,7 +2429,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); @@ -2146,9 +2487,19 @@ //瀛樺偍鏁版嵁 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()); + } } errorid="0"; msg="鏇存柊/鐘舵�佹洿鏀�/鍒犻櫎鎴愬姛锛�"; @@ -2175,6 +2526,7 @@ } } } + /** * 鏍¢獙灞炴�ф槸鍚︿负蹇呰緭 * @@ -2272,17 +2624,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 ? "鏄�" : "鍚�"}; @@ -2482,13 +2853,19 @@ * @param errorMap * @return */ - private void getCodeOrderDTOs(CodeClassifyVO codeClassifyVO,CodeClassifyTemplateVO templateVO,Map<String ,RowDatas>codeDataMap,Map<String, ClientBusinessObject> codeSystemObjectMap,List<CodeOrderDTO> codeOrderDTOList,Map<String,String> errorMap){ - codeDataMap.keySet().forEach(code->{ - RowDatas rowDatas=codeDataMap.get(code); - Map<String, String> data= rowDatas.getFiledValue(); + private void getCodeOrderDTOs(CodeClassifyVO codeClassifyVO,CodeClassifyTemplateVO templateVO,Map<String ,RowDatas>codeDataMap,Map<String, ClientBusinessObject> codeSystemObjectMap,List<CodeOrderDTO> codeOrderDTOList,Map<String,String> errorMap,boolean isCodeOrGroupCode){ + codeSystemObjectMap.keySet().forEach(code->{ + ClientBusinessObject sysDataObject= codeSystemObjectMap.get(code); + if(isCodeOrGroupCode){ + code=sysDataObject.getAttributeValue("GROUPCODE"); + if(StringUtils.isBlank(code)){ + code=sysDataObject.getId(); + } + } CodeOrderDTO orderDTO = new CodeOrderDTO(); - if(codeSystemObjectMap.containsKey(code)){ - ClientBusinessObject sysDataObject= codeSystemObjectMap.get(code); + if(codeDataMap.containsKey(code)){ + RowDatas rowDatas=codeDataMap.get(code); + Map<String, String> data= rowDatas.getFiledValue(); orderDTO.setCodeClassifyOid(codeClassifyVO.getOid());//鍒嗙被涓婚敭 orderDTO.setOid(sysDataObject.getOid());//鏁版嵁oid orderDTO.setLcStatus(rowDatas.getStatus());//鐘舵�� @@ -3079,7 +3456,7 @@ String tableName =""; try { R<BtmTypeVO> r = btmTypeClient.getAllAttributeByBtmId(templateVO.getBtmTypeId()); - if(r.getCode()!=200) { + if(!r.isSuccess()) { throw new Throwable(r.getMsg()); } BtmTypeVO btmTypeVO = r.getData(); @@ -3413,7 +3790,8 @@ CodeImportResultVO resultVO = new CodeImportResultVO(); resultVO.setKeyAttrRuleInfo(String.format(keyRuleVO ==null?"":"鏌ヨ瑙勫垯锛氬幓闄ょ┖鏍�--{0},蹇界暐澶у皬鍐�--{1},蹇界暐鍏ㄥ崐瑙�--{2},蹇界暐鍏ㄩ儴绌烘牸--{3}", new String[]{trim?"鏄�":"鍚�",ignoreCase?"鏄�":"鍚�",ignoreWidth?"鏄�":"鍚�",trimAll?"鏄�":"鍚�"})); - resultVO.setSelfRepeatRowIndexList(getSelfRepeatRowIndex(ketAttrMap,cboList,keyRuleVO)); + //resultVO.setSelfRepeatRowIndexList(getSelfRepeatRowIndex(ketAttrMap,cboList,keyRuleVO)); + getSelfRepeatRowIndex(ketAttrMap,cboList,keyRuleVO,resultVO); if(!CollectionUtils.isEmpty(resultVO.getSelfRepeatRowIndexList())){ //鎴戜滑绉婚櫎鏈韩閲嶅鐨勬暟鎹� cboList = cboList.stream().filter(s->!resultVO.getSelfRepeatRowIndexList().contains(s.getAttributeValue(IMPORT_ROW_INDEX))).collect(Collectors.toList()); @@ -3572,9 +3950,10 @@ * @param keyRuleVO 鍏抽敭灞炴�ф帶鍒惰鍒� * @return 閲嶅鐨勮鍙� */ - private Set<String> getSelfRepeatRowIndex(Map<String/**灞炴�х殑缂栧彿**/, CodeClassifyTemplateAttrVO> ketAttrMap, - List<ClientBusinessObject> dataList,CodeKeyAttrRepeatVO keyRuleVO){ + private void getSelfRepeatRowIndex(Map<String/**灞炴�х殑缂栧彿**/, CodeClassifyTemplateAttrVO> ketAttrMap, + 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()); //鍏ㄩ儴鍘荤┖鐨勪紭鍏堢骇澶т簬鍘荤┖ boolean trim =keyRuleVO ==null?false: VciBaseUtil.getBoolean(keyRuleVO.getIgnorespaceflag()); @@ -3583,8 +3962,10 @@ //蹇呴』灏嗗睘鎬ф寜鐓ч『搴忔帓搴忓ソ List<CodeClassifyTemplateAttrVO> attrVOList = ketAttrMap.values().stream().sorted(((o1, o2) -> o1.getOrderNum().compareTo(o2.getOrderNum()))).collect(Collectors.toList()); Map<String/**琛屽彿**/,String/**鍏抽敭灞炴�х殑缁勫悎鍐呭**/> rowIndexKeyStringMap = new HashMap<>(); + Map<String/**鍏抽敭灞炴�х殑缁勫悎鍐呭**/,String/**绗竴涓叧閿睘鎬х殑鏁版嵁oid**/> okOidKeyStringMap = new HashMap<>(); dataList.parallelStream().forEach(cbo-> { String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); + String oid=cbo.getOid(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < attrVOList.size(); i++) { CodeClassifyTemplateAttrVO attrVO = attrVOList.get(i); @@ -3610,12 +3991,25 @@ String keyString = sb.toString(); if(rowIndexKeyStringMap.containsValue(keyString) && StringUtils.isNotBlank(keyString)){ selfRepeatRowIndexList.add(rowIndex); + String okOid=okOidKeyStringMap.getOrDefault(keyString,""); + if(StringUtils.isNotBlank(okOid)){ + List<String>newOidList=new ArrayList<>(); + newOidList.add(oid); + if(keyAttrOkOidTORepeatOidMap.containsKey(okOid)){ + List<String> oldOidList= keyAttrOkOidTORepeatOidMap.get(okOid); + newOidList.addAll(oldOidList); + + } + keyAttrOkOidTORepeatOidMap.put(okOid,newOidList); + } }else { + okOidKeyStringMap.put(sb.toString(),oid); rowIndexKeyStringMap.put(rowIndex, sb.toString()); } }); //鍥犱负鍙槸鍏抽敭灞炴�ч噸澶嶏紝鎵�浠ユ垜浠笉鑳介噸澶嶇殑澶氭潯閫変竴鏉℃潵鎶ラ敊 - return selfRepeatRowIndexList; + resultVO.setKeyAttrRepeatRowIndexList(selfRepeatRowIndexList); + resultVO.setKeyAttrOkOidTORepeatOidMap(keyAttrOkOidTORepeatOidMap); } /** * excel鐨勬爣棰樹笂鑾峰彇瀛楁鎵�鍦ㄧ殑浣嶇疆 @@ -3649,7 +4043,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); }); @@ -4076,4 +4470,18 @@ } } } + + /*** + * 鐢宠闆嗗洟缂栫爜 + * @param idList + * @param btmName + */ + 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); + }else if(operationType.equals(sysIntegrationPushTypeEnum.ACCPET_EDITCODE)){ + mdmInterJtClient.receiveEditApply(oids,btmName); + } + } } -- Gitblit v1.9.3