src/main/java/com/product/module/data/controller/SystemDataExportController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/product/module/data/service/SystemDataExportService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/product/module/data/utli/CustomMergeStrategy.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/product/module/data/controller/SystemDataExportController.java
@@ -68,35 +68,13 @@ e.printStackTrace(); SpringMVCContextHolder.getSystemLogger().error(e); return error(e); } catch (Exception e){ } catch (Exception e) { e.printStackTrace(); SpringMVCContextHolder.getSystemLogger().error(e); return error(CmnCode.EXPORT_GENERAL_LIST_DATA_IMPORT_FIAL.getValue(),CmnCode.EXPORT_GENERAL_LIST_DATA_IMPORT_FIAL.getText()+e.getMessage()); } } @PostMapping("report/{version}") @ApiVersion(1) public String reportDataExport(HttpServletRequest request){ try{ FieldSetEntity fse = null; Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA); if (bean != null) { RequestParameterEntity reqp = (RequestParameterEntity) bean; return OK_Add(systemDataExportService.reportDataExport(reqp)); } return OK(); }catch (BaseException e){ e.printStackTrace(); SpringMVCContextHolder.getSystemLogger().error(e); return error(e); } catch (Exception e){ e.printStackTrace(); SpringMVCContextHolder.getSystemLogger().error(e); return error(CmnCode.EXPORT_GENERAL_LIST_DATA_IMPORT_FIAL.getValue(),CmnCode.EXPORT_GENERAL_LIST_DATA_IMPORT_FIAL.getText()+e.getMessage()); } } } src/main/java/com/product/module/data/service/SystemDataExportService.java
@@ -22,6 +22,7 @@ import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; @@ -41,6 +42,16 @@ @Override public BaseDao getBaseDao() { return super.getBaseDao(); } public void reportDataExport(FieldSetEntity fse) throws BaseException { //æ¥è¡¨uuid String uuid = fse.getUUID(); //æ¯å¦å½å页 boolean exportCurrentPage = fse.getBoolean("exportCurrentPage"); //å½åé¡µå· int pageIndex = fse.getInteger(CmnConst.CPAGE); } /** @@ -248,7 +259,6 @@ List<List<String>> headTitles = Lists.newArrayList(); List<String> fields = Lists.newArrayList(); //导åºçæ°æ®é List<List<Object>> exportData = Lists.newArrayList(); List<String> titles = Lists.newArrayList(); List<String> titleTemplate = Lists.newArrayList(); titleTemplate.add(main_title); @@ -266,12 +276,31 @@ response.setContentType("multipart/form-data"); response.setCharacterEncoding("utf-8"); // è¿éURLEncoder.encodeå¯ä»¥é²æ¢ä¸æä¹±ç å½ç¶åeasyexcel没æå ³ç³» // è¿ééè¦è®¾ç½®ä¸å ³éæµ EasyExcel.write(response.getOutputStream()). registerWriteHandler(new Custemhandler()).head(headTitles).sheet(main_title).doWrite(lists); writeExcel(headTitles, lists, main_title, response); } /** * è¾åºexcel * * @param excelHeaders excel表头 * @param dataRows æ°æ®è¡ * @param sheetName sheetåç§° * @throws IOException */ public void writeExcel(List<List<String>> excelHeaders, List dataRows, String sheetName, HttpServletResponse response) throws IOException { response.setContentType("multipart/form-data"); response.setCharacterEncoding("utf-8"); // è¿éURLEncoder.encodeå¯ä»¥é²æ¢ä¸æä¹±ç å½ç¶åeasyexcel没æå ³ç³» // è¿ééè¦è®¾ç½®ä¸å ³éæµ try (ServletOutputStream outputStream = response.getOutputStream();) { EasyExcel.write(outputStream). registerWriteHandler(new Custemhandler()).head(excelHeaders).sheet(sheetName).doWrite(dataRows); } } /** * ç»è£ æ°æ® * * @param dataArray src/main/java/com/product/module/data/utli/CustomMergeStrategy.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,98 @@ package com.product.module.data.utli; import cn.hutool.core.collection.CollUtil; import com.alibaba.excel.metadata.Head; import com.alibaba.excel.write.merge.AbstractMergeStrategy; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.util.CellRangeAddress; import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.concurrent.atomic.AtomicInteger; public class CustomMergeStrategy extends AbstractMergeStrategy { /** * åç»ï¼æ¯å è¡å并䏿¬¡ */ private List<List<Integer>> mergeColDataGroupCountList; /** * ç®æ åå¹¶åindex */ private List<Integer> targetColumnIndex; /** * éè¦å¼å§åå¹¶åå æ ¼çé¦è¡index */ private Integer rowIndex; /** * mergeColDataListä¸ºå¾ åå¹¶ç®æ åçå¼ */ public CustomMergeStrategy(List<List<String>> mergeColDataList, List<Integer> targetColumnIndex) { this.mergeColDataGroupCountList = getGroupCountList(mergeColDataList); this.targetColumnIndex = targetColumnIndex; } @Override protected void merge(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) { if (null == rowIndex) { rowIndex = cell.getRowIndex(); } // ä» ä»é¦è¡ä»¥åç®æ åçåå æ ¼å¼å§åå¹¶ï¼å¿½ç¥å ¶ä» if (cell.getRowIndex() == rowIndex && targetColumnIndex.contains(cell.getColumnIndex())) { //æ¾å°å¯¹åºçéè¦åå¹¶çå AtomicInteger i = new AtomicInteger(0); Optional<Integer> first = targetColumnIndex.stream().filter(col -> { i.getAndIncrement(); return col == cell.getColumnIndex(); }).findFirst(); mergeGroupColumn(sheet, first.get()); } } private void mergeGroupColumn(Sheet sheet, Integer index) { int rowCount = rowIndex; for (Integer count : mergeColDataGroupCountList.get(index)) { if (count == 1) { rowCount += count; continue; } // åå¹¶åå æ ¼ CellRangeAddress cellRangeAddress = new CellRangeAddress(rowCount, rowCount + count - 1, targetColumnIndex.get(index), targetColumnIndex.get(index)); sheet.addMergedRegionUnsafe(cellRangeAddress); rowCount += count; } } /** * è¯¥æ¹æ³å°ç®æ åæ ¹æ®å¼æ¯å¦ç¸åè¿ç»å¯åå¹¶ï¼åå¨å¯åå¹¶çè¡æ° */ private List<List<Integer>> getGroupCountList(List<List<String>> exportDataList) { if (CollUtil.isEmpty(exportDataList)) { return new ArrayList<>(); } List<List<Integer>> groupCountListList = new ArrayList<>(); exportDataList.forEach(dataList->{ List<Integer> groupCountList = new ArrayList<>(); int count = 1; for (int i = 1; i < dataList.size(); i++) { if (dataList.get(i).equals(dataList.get(i - 1))) { count++; } else { groupCountList.add(count); count = 1; } } // å¤ç宿å䏿¡å groupCountList.add(count); groupCountListList.add(groupCountList); }); return groupCountListList; } }