From 9199d321e3153a8a09f534b34709d6b63e746f42 Mon Sep 17 00:00:00 2001 From: jianjun Date: Tue, 26 Apr 2022 20:49:51 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B3=A8=E9=87=8A=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/ExcelFillCellMergeStrategy.java | 38 +++++++++++-------- .../impl/IcResiUserExportServiceImpl.java | 24 ++++++------ .../service/impl/IcResiUserServiceImpl.java | 5 +-- 3 files changed, 36 insertions(+), 31 deletions(-) diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/handler/ExcelFillCellMergeStrategy.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/handler/ExcelFillCellMergeStrategy.java index 6b08ca5e74..bff1f1a999 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/handler/ExcelFillCellMergeStrategy.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/handler/ExcelFillCellMergeStrategy.java @@ -15,11 +15,18 @@ import java.util.List; /** * desc:单元格合并策略 + * * @author liujianjun */ public class ExcelFillCellMergeStrategy implements CellWriteHandler { + /** + * 需要合并的列 下标 + */ private int[] mergeColumnIndex; + /** + * 从下标n行开始合并 + */ private int mergeRowIndex; public ExcelFillCellMergeStrategy() { @@ -45,19 +52,18 @@ public class ExcelFillCellMergeStrategy implements CellWriteHandler { public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List> list, Cell cell, Head head, Integer integer, Boolean aBoolean) { int curRowIndex = cell.getRowIndex(); int curColIndex = cell.getColumnIndex(); - int size = list.size(); - System.out.println(size); + if (curRowIndex <= mergeRowIndex) { + return; + } + //如果不指定 合并的列则全部列进行 合并判断 if (mergeColumnIndex == null) { - if (curRowIndex > 2) { - mergeWithPrevRow(writeSheetHolder, cell, curRowIndex, curColIndex); - } - }else{ - if (curRowIndex > mergeRowIndex) { - for (int i = 0; i < mergeColumnIndex.length; i++) { - if (curColIndex == mergeColumnIndex[i]) { - mergeWithPrevRow(writeSheetHolder, cell, curRowIndex, curColIndex); - break; - } + mergeWithPrevRow(writeSheetHolder, cell, curRowIndex, curColIndex); + } else { + //合并指定的列号 + for (int columnIndex : mergeColumnIndex) { + if (curColIndex == columnIndex) { + mergeWithPrevRow(writeSheetHolder, cell, curRowIndex, curColIndex); + break; } } } @@ -72,7 +78,6 @@ public class ExcelFillCellMergeStrategy implements CellWriteHandler { * @param curColIndex 当前列 */ private void mergeWithPrevRow(WriteSheetHolder writeSheetHolder, Cell cell, int curRowIndex, int curColIndex) { - //writeSheetHolder.getExcelWriteHeadProperty(). // 当前行的第一个Cell Cell curFirstCell = cell.getSheet().getRow(curRowIndex).getCell(0); Object curFirstData = curFirstCell.getCellType() == CellType.STRING ? curFirstCell.getStringCellValue() : curFirstCell.getNumericCellValue(); @@ -88,7 +93,10 @@ public class ExcelFillCellMergeStrategy implements CellWriteHandler { Boolean dataBool = preData.equals(curData); //此处需要注意:因为我是按照序号确定是否需要合并的,所以获取每一行第一列数据和上一行第一列数据进行比较,如果相等合并 Boolean bool = cell.getRow().getCell(0).getStringCellValue().equals(cell.getSheet().getRow(curRowIndex - 1).getCell(0).getStringCellValue()); - if (dataBool && bool) { + + if (!dataBool || !bool) { + return; + } Sheet sheet = writeSheetHolder.getSheet(); List mergeRegions = sheet.getMergedRegions(); boolean isMerged = false; @@ -107,7 +115,7 @@ public class ExcelFillCellMergeStrategy implements CellWriteHandler { CellRangeAddress cellRangeAddress = new CellRangeAddress(curRowIndex - 1, curRowIndex, curColIndex, curColIndex); sheet.addMergedRegion(cellRangeAddress); } - } + } } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserExportServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserExportServiceImpl.java index 173da5d335..4341bff4ba 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserExportServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserExportServiceImpl.java @@ -120,7 +120,6 @@ public class IcResiUserExportServiceImpl implements IcResiUserExportService { } int[] mergeColumnIndex = mergeColumnIndexList.stream().filter(Objects::nonNull).mapToInt(i->i).toArray(); - // 从那一列开始合并 int mergeRowIndex = exportConfigData.getHeaderRow(); @@ -134,12 +133,11 @@ public class IcResiUserExportServiceImpl implements IcResiUserExportService { FreezeAndFilter writeHandler = new FreezeAndFilter(); excelWriter = EasyExcel.write(ExcelUtils.getOutputStreamForExcel("居民基本信息.xlsx", response)) .registerWriteHandler(new ExcelFillCellMergeStrategy(mergeRowIndex, mergeColumnIndex)) - .registerWriteHandler(writeHandler).build(); - - WriteSheet writeSheet = EasyExcel.writerSheet() .registerWriteHandler(horizontalCellStyleStrategy) .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) - .head(exportConfigData.getHeaders()).build(); + .registerWriteHandler(writeHandler).build(); + + WriteSheet writeSheet = EasyExcel.writerSheet().head(exportConfigData.getHeaders()).build(); String staffOrgPath = null; if (StringUtils.isNotBlank(staffInfoCacheResult.getAgencyPIds()) && !NumConstant.ZERO_STR.equals(staffInfoCacheResult.getAgencyPIds())) { @@ -164,7 +162,6 @@ public class IcResiUserExportServiceImpl implements IcResiUserExportService { result.forEach(o -> { List singleResult = new ArrayList<>(); Map originalConditionMap = new ConcurrentHashMap<>(); - log.info("==========居民信息:{}",JSON.toJSONString(o)); o.forEach((key,value) -> { List showSqlColumns = exportConfigData.getShowSqlColumns(); Map itemMap = showSqlColumns.stream().collect(Collectors.toMap(IcCustomExportResultDTO.SqlColumn::getColumnName, item -> item)); @@ -196,7 +193,6 @@ public class IcResiUserExportServiceImpl implements IcResiUserExportService { }); resultData.add(singleResult); }); - log.info("需要写入的data长度:{}", resultData.size()); excelWriter.write(resultData, writeSheet); //todo break; @@ -210,6 +206,11 @@ public class IcResiUserExportServiceImpl implements IcResiUserExportService { } } + /** + * desc:校验查询表单参数 + * @param tokenDto + * @param exportResiUserFormDTO + */ public void validateSearchForm(TokenDto tokenDto, ExportResiUserFormDTO exportResiUserFormDTO) { IcResiUserPageFormDTO searchForm = exportResiUserFormDTO.getSearchForm(); searchForm.setCustomerId(tokenDto.getCustomerId()); @@ -247,8 +248,6 @@ public class IcResiUserExportServiceImpl implements IcResiUserExportService { private static Map> remoteOptionCacheMap = new HashMap<>(); private void putRemoteValue(Set conditionItemSet, String currentStaffAgencyId, Map map, Map originalConditionMap, FormItemResult e, String columnName, String vauleStr) { try { - log.info("========putRemoteValue:formItemResult:{}",e.getLabel()); - log.info("========putRemoteValue:columnName:{},vauleStr:{}",columnName,vauleStr); Map columnWrappers = new HashMap<>(); if (e.getOptionSourceValue().contains(StrConstant.QUESTION_MARK)){ for (FormItemResult o : conditionItemSet) { @@ -272,6 +271,7 @@ public class IcResiUserExportServiceImpl implements IcResiUserExportService { Map remoteOptions = icResiUserImportService.listRemoteCascadeOptions(parts[0], parts[1], columnWrappers, currentStaffAgencyId, "query"); List listOptions = new ArrayList<>(); remoteOptions.forEach((value,label) -> { + //todo 看看怎么更好的利用本地缓存 if (vauleStr.equals(value)) { listOptions.add(label.getLabel()); } @@ -280,11 +280,8 @@ public class IcResiUserExportServiceImpl implements IcResiUserExportService { cache.put(vauleStr,join); map.put(columnName, join); }else { - //todo 不支持多个itemId Map remoteOptions = icResiUserImportService.listRemoteOptions(parts[0], parts[1], columnWrappers, currentStaffAgencyId, "query"); - log.info("========putRemoteValue:条件:{}", JSON.toJSONString(columnWrappers)); - log.info("========putRemoteValue:结果:{}", JSON.toJSONString(remoteOptions)); if (FormItemTypeEnum.CHECKBOX.getCode().equals(e.getItemType())) { remoteOptions.forEach((label, value) -> map.put(value, vauleStr.contains(value) ? StrConstant.YES : StrConstant.NO)); } else if (FormItemTypeEnum.SELECT.getCode().equals(e.getItemType())) { @@ -292,6 +289,7 @@ public class IcResiUserExportServiceImpl implements IcResiUserExportService { if (vauleStr.equals(value)) { map.put(columnName, label); } + //放if外面是为了下次取得时候 可以有值 cache.put(value,label); }); } @@ -299,7 +297,7 @@ public class IcResiUserExportServiceImpl implements IcResiUserExportService { } } catch (Exception ex) { - log.error("listRemoteOptions url", ex); + log.warn("listRemoteOptions url", ex); } } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java index 295f70f9ed..5e019861df 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java @@ -770,8 +770,7 @@ public class IcResiUserServiceImpl extends BaseServiceImpl subTables =subTablesRes.getData(); // log.info("1、所有的子表subTables:"+JSON.toJSONString(subTables,true)); //关联哪些子表:查询条件用到的表名+查询的列对应的表 并集去重 - Set whereConditionTables=conditions.stream().map(ResiUserQueryValueDTO::getTableName).collect(Collectors.toSet()); - Set tables = new HashSet<>(whereConditionTables); + Set tables = conditions.stream().map(ResiUserQueryValueDTO::getTableName).collect(Collectors.toSet()); tables.add(resultTableName); if (CollectionUtils.isNotEmpty(exportNeedTableList)){ tables.addAll(exportNeedTableList); @@ -790,7 +789,7 @@ public class IcResiUserServiceImpl extends BaseServiceImpl(groupByTables)); return map; }