From 7bacb4be65407d9f8a6bdcd44b4192aa32de91a1 Mon Sep 17 00:00:00 2001 From: ludc Date: 星期四, 20 七月 2023 10:06:22 +0800 Subject: [PATCH] 提交代码 --- Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java | 213 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 213 insertions(+), 0 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..658a3f2 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,9 +3,11 @@ import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.common.utils.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.vci.file.util.VciZipUtil; 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; @@ -151,11 +153,18 @@ */ @Autowired private IBtmTypeClient btmTypeClient; + /*** * 瀵嗙骇鏈嶅姟 */ @Resource private IWebSecretClient secretService; + + /** + * 瀵煎嚭鐨勫崄涓囨潯 + */ + public static final int EXPORT_LIMIT = 100000; + /** * 鎵归噺鐢宠锛氶�夊彇閫変腑鍒嗙被涓嬬殑鎵�鏈夋ā鏉垮叧閿睘鎬э紝鐩镐技灞炴�э紝蹇呭~灞炴�э紝鍐欏叆execl涓� * @@ -1450,6 +1459,210 @@ 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"); + //鍏堟煡璇㈡�绘暟 + 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 += boService.queryCount(btmTypeId, conditionMap); + } + }else{ + total=boService.queryCount(btmTypeId, conditionMap); + } + 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(); -- Gitblit v1.9.3