From 56f069dffd74d560ac90ce928846b9b28f5f0161 Mon Sep 17 00:00:00 2001 From: wangzhijiang <1358525938@qq.com> Date: Fri, 8 Mar 2024 11:16:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8B=86=E5=88=86=E5=AF=B9=E6=AF=94-=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=E5=85=A8=E6=96=87=E5=AF=B9=E6=AF=94=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SarFileCompareInfoServiceImpl.java | 282 ++++++++++++------ .../impl/SarItemsCompareHisEOServiceImpl.java | 1 + .../modules/compare/utils/HtmlTextExcel.java | 66 +--- 3 files changed, 202 insertions(+), 147 deletions(-) diff --git a/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/compare/service/impl/SarFileCompareInfoServiceImpl.java b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/compare/service/impl/SarFileCompareInfoServiceImpl.java index b1f5776..1e43010 100644 --- a/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/compare/service/impl/SarFileCompareInfoServiceImpl.java +++ b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/compare/service/impl/SarFileCompareInfoServiceImpl.java @@ -534,6 +534,19 @@ public class SarFileCompareInfoServiceImpl extends ServiceImpl leftData = itemMap.get(CompareConst.POS_LEFT); if (CollectionUtils.isNotEmpty(leftData)) { - //记录需要合并的单元格 - List mergeCells = new ArrayList<>(); - for (int rowNum = 0; rowNum < leftData.size(); rowNum++) { - SarFileCompareExcelMergeCell sarFileCompareExcelMergeCell = new SarFileCompareExcelMergeCell(); - - SarFileCompareItem sarFileCompareItem = leftData.get(rowNum); - - HSSFRow row1 = sheetItemsLeft.createRow(rowNum + 1); + int i = 1; + for (SarFileCompareItem sarFileCompareItem : leftData) { + HSSFRow row1 = sheetItemsLeft.createRow(i); row1.createCell(0).setCellValue(sfcInfo.getSerialNumberLeft() + " " +sfcInfo.getTitleLeft()); row1.createCell(1).setCellValue(sarFileCompareItem.getItemsNum()); row1.getCell(1).setCellStyle(cellStyleBase); - String itemText = sarFileCompareItem.getItemsText(); - List addList = new ArrayList<>(); - List delList = new ArrayList<>(); - itemText = HtmlTextExcel.changeHtmlToExcel(sheetItemsLeft,workbook,request,itemText,addList,delList); - HSSFRichTextString ts= new HSSFRichTextString(itemText); - if (addList != null && !addList.isEmpty()) { - for (MarkTextVO markTextVO : addList) { - int stIndex = markTextVO.getStartIndex(); - int edIndex = markTextVO.getEndIndex(); - ts.applyFont(stIndex,edIndex,fontAdd); - } - } - if (delList != null && !delList.isEmpty()) { - for (MarkTextVO markTextVO : delList) { - int stIndex = markTextVO.getStartIndex(); - int edIndex = markTextVO.getEndIndex(); - ts.applyFont(stIndex,edIndex,fontDel); - } - } - row1.createCell(2).setCellValue(sarFileCompareItem.getItemsName()); - row1.createCell(3).setCellValue(ts); - row1.getCell(3).setCellStyle(cellStyleBase); - row1.createCell(4).setCellValue(sarFileCompareItem.getRemark()); - } + String itemContent = sarFileCompareItem.getItemsText(); - if (ObjectUtils.isNotEmpty(mergeCells)) { - log.info("-------------- 开始处理需要合并的单元格 -----------------"); - Set mergeCellSet = new HashSet<>(mergeCells); - for (SarFileCompareExcelMergeCell mergeCell : mergeCellSet) { - Integer leftCount = 0; - if (ObjectUtils.isNotEmpty(mergeCell.getLeftEnd())&&ObjectUtils.isNotEmpty(mergeCell.getLeftStart())) { - leftCount = mergeCell.getLeftEnd() - mergeCell.getLeftStart() + 1; - } - Integer rightCount = 0; - if (ObjectUtils.isNotEmpty(mergeCell.getRightEnd())&&ObjectUtils.isNotEmpty(mergeCell.getRightStart())) { - rightCount = mergeCell.getRightEnd() - mergeCell.getRightStart() + 1; - } - Integer start = leftCount - rightCount >= 0 ? mergeCell.getLeftStart() : mergeCell.getRightStart(); - log.info("-------------- 合并开始行数:" + start + " -----------------"); - Integer end = leftCount - rightCount >= 0 ? mergeCell.getLeftEnd() : mergeCell.getRightEnd(); - log.info("-------------- 合并结束行数: " + end + " -----------------"); - //合并 - if (ObjectUtils.isNotEmpty(start)&&ObjectUtils.isNotEmpty(end)) { - CellRangeAddress region0 = new CellRangeAddress(start, end, 0, 0); - sheetItemsLeft.addMergedRegion(region0); - CellRangeAddress region1 = new CellRangeAddress(start, end, 1, 1); - sheetItemsLeft.addMergedRegion(region1); - CellRangeAddress region2 = new CellRangeAddress(start, end, 2, 2); - sheetItemsLeft.addMergedRegion(region2); - CellRangeAddress region4 = new CellRangeAddress(start, end, 4, 4); - sheetItemsLeft.addMergedRegion(region4); - CellRangeAddress region5 = new CellRangeAddress(start, end, 5, 5); - sheetItemsLeft.addMergedRegion(region5); - CellRangeAddress region6 = new CellRangeAddress(start, end, 6, 6); - sheetItemsLeft.addMergedRegion(region6); - CellRangeAddress region7 = new CellRangeAddress(start, end, 8, 8); - sheetItemsLeft.addMergedRegion(region7); + List mergeCells = new ArrayList<>(); + String[] leftSplit = null; + if (StringUtils.isNotEmpty(itemContent)) { + String rowDataAndPath = HtmlTextExcel.getSplitContent(request, itemContent); + HSSFPatriarch patriarch = (HSSFPatriarch) sheetItemsLeft.createDrawingPatriarch(); + + leftSplit = rowDataAndPath.split("---"); + + if (leftSplit.length > 1) { + for (int j = 0; j < leftSplit.length; j++) { + if (ObjectUtils.isNotEmpty(leftSplit[j])) { + ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream(); + if (j > 0) { + Row row2 = sheetItemsLeft.getRow(j + i); + if (ObjectUtils.isEmpty(row2)) { + row2 = sheetItemsLeft.createRow(j + i); + } + log.info("-------------- 开始开始处理左侧图片、表格 -----------------"); + try { + HtmlTextExcel.handleSpecificData(workbook, patriarch, cellStyleLink, byteArrayOut, row2, i, j, leftSplit[j], 2); + } catch (IOException e) { + e.printStackTrace(); + } + log.info("-------------- 左侧图片、表格 处理成功 -----------------"); + } else { + log.info("-------------- 开始开始处理左侧图片、表格 -----------------"); + try { + HtmlTextExcel.handleSpecificData(workbook, patriarch, cellStyleLink, byteArrayOut, row1, i, j, leftSplit[j], 2); + } catch (IOException e) { + e.printStackTrace(); + } + log.info("-------------- 左侧图片、表格 处理成功 -----------------"); + } + } + } + + SarFileCompareExcelMergeCell sarFileCompareExcelMergeCell = new SarFileCompareExcelMergeCell(); + sarFileCompareExcelMergeCell.setLeftStart(i); + sarFileCompareExcelMergeCell.setLeftEnd(i + leftSplit.length - 1); + sarFileCompareExcelMergeCell.setRightStart(0); + sarFileCompareExcelMergeCell.setRightEnd(0); + mergeCells.add(sarFileCompareExcelMergeCell); + + } else { + String text = HtmlTextExcel.changeHtmlToExcel(itemContent, null, null); + row1.createCell(2).setCellValue(text); } + if (ObjectUtils.isNotEmpty(mergeCells)) { + log.info("-------------- 开始处理需要合并的单元格 -----------------"); + Set mergeCellSet = new HashSet<>(mergeCells); + for (SarFileCompareExcelMergeCell mergeCell : mergeCellSet) { + Integer leftCount = 0; + if (ObjectUtils.isNotEmpty(mergeCell.getLeftEnd())&&ObjectUtils.isNotEmpty(mergeCell.getLeftStart())) { + leftCount = mergeCell.getLeftEnd() - mergeCell.getLeftStart() + 1; + } + Integer rightCount = 0; + if (ObjectUtils.isNotEmpty(mergeCell.getRightEnd())&&ObjectUtils.isNotEmpty(mergeCell.getRightStart())) { + rightCount = mergeCell.getRightEnd() - mergeCell.getRightStart() + 1; + } + Integer start = leftCount - rightCount >= 0 ? mergeCell.getLeftStart() : mergeCell.getRightStart(); + log.info("-------------- 合并开始行数:" + start + " -----------------"); + Integer end = leftCount - rightCount >= 0 ? mergeCell.getLeftEnd() : mergeCell.getRightEnd(); + log.info("-------------- 合并结束行数: " + end + " -----------------"); + //合并 + if (ObjectUtils.isNotEmpty(start)&&ObjectUtils.isNotEmpty(end)) { + CellRangeAddress region0 = new CellRangeAddress(start, end, 0, 0); + sheetItemsLeft.addMergedRegion(region0); + CellRangeAddress region1 = new CellRangeAddress(start, end, 1, 1); + sheetItemsLeft.addMergedRegion(region1); + CellRangeAddress region3 = new CellRangeAddress(start, end, 3, 3); + sheetItemsLeft.addMergedRegion(region3); + } + + } + log.info("-------------- 单元格合并成功 -----------------"); + } } - log.info("-------------- 单元格合并成功 -----------------"); + + row1.createCell(3).setCellValue(sarFileCompareItem.getRemark()); + + row1.setRowStyle(cellStyle); + for (int j = 0; j <= 3; j++) { + Cell cell = row1.getCell(j); + if (null != cell) { + cell.setCellStyle(cellStyle); + } + } + int left_length = ObjectUtils.isEmpty(leftSplit) ? 1 : leftSplit.length; + i = i + left_length; } } List rightData = itemMap.get(CompareConst.POS_RIGHT); if (CollectionUtils.isNotEmpty(rightData)) { - for (int rowNum = 0; rowNum < rightData.size(); rowNum++) { - SarFileCompareItem sarFileCompareItem = rightData.get(rowNum); - - HSSFRow row1 = sheetItemsRight.createRow(rowNum + 1); + int i = 1; + for (SarFileCompareItem sarFileCompareItem : rightData) { + HSSFRow row1 = sheetItemsRight.createRow(i); row1.createCell(0).setCellValue(sfcInfo.getSerialNumberRight() + " " +sfcInfo.getTitleRight()); row1.createCell(1).setCellValue(sarFileCompareItem.getItemsNum()); row1.getCell(1).setCellStyle(cellStyleBase); - String itemText = sarFileCompareItem.getItemsText(); - List addList = new ArrayList<>(); - List delList = new ArrayList<>(); - itemText = HtmlTextExcel.changeHtmlToExcel(sheetItemsRight,workbook,request,itemText,addList,delList); - HSSFRichTextString ts= new HSSFRichTextString(itemText); - if (addList != null && !addList.isEmpty()) { - for (MarkTextVO markTextVO : addList) { - int stIndex = markTextVO.getStartIndex(); - int edIndex = markTextVO.getEndIndex(); - ts.applyFont(stIndex,edIndex,fontAdd); + String itemContent = sarFileCompareItem.getItemsText(); + List mergeCells = new ArrayList<>(); + String[] rightSplit = null; + if (StringUtils.isNotEmpty(itemContent)) { + String rowDataAndPath = HtmlTextExcel.getSplitContent(request, itemContent); + HSSFPatriarch patriarch = (HSSFPatriarch) sheetItemsRight.createDrawingPatriarch(); + + rightSplit = rowDataAndPath.split("---"); + + if (rightSplit.length > 1) { + for (int j = 0; j < rightSplit.length; j++) { + if (ObjectUtils.isNotEmpty(rightSplit[j])) { + ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream(); + if (j > 0) { + Row row2 = sheetItemsRight.getRow(j + i); + if (ObjectUtils.isEmpty(row2)) { + row2 = sheetItemsRight.createRow(j + i); + } + log.info("-------------- 开始开始处理左侧图片、表格 -----------------"); + try { + HtmlTextExcel.handleSpecificData(workbook, patriarch, cellStyleLink, byteArrayOut, row2, i, j, rightSplit[j], 2); + } catch (IOException e) { + e.printStackTrace(); + } + log.info("-------------- 左侧图片、表格 处理成功 -----------------"); + } else { + log.info("-------------- 开始开始处理左侧图片、表格 -----------------"); + try { + HtmlTextExcel.handleSpecificData(workbook, patriarch, cellStyleLink, byteArrayOut, row1, i, j, rightSplit[j], 2); + } catch (IOException e) { + e.printStackTrace(); + } + log.info("-------------- 左侧图片、表格 处理成功 -----------------"); + } + } + } + + SarFileCompareExcelMergeCell sarFileCompareExcelMergeCell = new SarFileCompareExcelMergeCell(); + sarFileCompareExcelMergeCell.setLeftStart(i); + sarFileCompareExcelMergeCell.setLeftEnd(i + rightSplit.length - 1); + sarFileCompareExcelMergeCell.setRightStart(0); + sarFileCompareExcelMergeCell.setRightEnd(0); + mergeCells.add(sarFileCompareExcelMergeCell); + + } else { + String text = HtmlTextExcel.changeHtmlToExcel(itemContent, null, null); + row1.createCell(2).setCellValue(text); + } + + if (ObjectUtils.isNotEmpty(mergeCells)) { + log.info("-------------- 开始处理需要合并的单元格 -----------------"); + Set mergeCellSet = new HashSet<>(mergeCells); + for (SarFileCompareExcelMergeCell mergeCell : mergeCellSet) { + Integer leftCount = 0; + if (ObjectUtils.isNotEmpty(mergeCell.getLeftEnd())&&ObjectUtils.isNotEmpty(mergeCell.getLeftStart())) { + leftCount = mergeCell.getLeftEnd() - mergeCell.getLeftStart() + 1; + } + Integer rightCount = 0; + if (ObjectUtils.isNotEmpty(mergeCell.getRightEnd())&&ObjectUtils.isNotEmpty(mergeCell.getRightStart())) { + rightCount = mergeCell.getRightEnd() - mergeCell.getRightStart() + 1; + } + Integer start = leftCount - rightCount >= 0 ? mergeCell.getLeftStart() : mergeCell.getRightStart(); + log.info("-------------- 合并开始行数:" + start + " -----------------"); + Integer end = leftCount - rightCount >= 0 ? mergeCell.getLeftEnd() : mergeCell.getRightEnd(); + log.info("-------------- 合并结束行数: " + end + " -----------------"); + //合并 + if (ObjectUtils.isNotEmpty(start)&&ObjectUtils.isNotEmpty(end)) { + CellRangeAddress region0 = new CellRangeAddress(start, end, 0, 0); + sheetItemsRight.addMergedRegion(region0); + CellRangeAddress region1 = new CellRangeAddress(start, end, 1, 1); + sheetItemsRight.addMergedRegion(region1); + CellRangeAddress region3 = new CellRangeAddress(start, end, 3, 3); + sheetItemsRight.addMergedRegion(region3); + } + + } + log.info("-------------- 单元格合并成功 -----------------"); } } - if (delList != null && !delList.isEmpty()) { - for (MarkTextVO markTextVO : delList) { - int stIndex = markTextVO.getStartIndex(); - int edIndex = markTextVO.getEndIndex(); - ts.applyFont(stIndex,edIndex,fontDel); + + row1.createCell(3).setCellValue(sarFileCompareItem.getRemark()); + + row1.setRowStyle(cellStyle); + for (int j = 0; j <= 3; j++) { + Cell cell = row1.getCell(j); + if (null != cell) { + cell.setCellStyle(cellStyle); } } - row1.createCell(2).setCellValue(sarFileCompareItem.getItemsName()); - row1.createCell(3).setCellValue(ts); - row1.getCell(3).setCellStyle(cellStyleBase); - row1.createCell(4).setCellValue(sarFileCompareItem.getRemark()); + int left_length = ObjectUtils.isEmpty(rightSplit) ? 1 : rightSplit.length; + i = i + left_length; } } diff --git a/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/compare/service/impl/SarItemsCompareHisEOServiceImpl.java b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/compare/service/impl/SarItemsCompareHisEOServiceImpl.java index ddd05d6..9752eb1 100644 --- a/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/compare/service/impl/SarItemsCompareHisEOServiceImpl.java +++ b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/compare/service/impl/SarItemsCompareHisEOServiceImpl.java @@ -92,6 +92,7 @@ public class SarItemsCompareHisEOServiceImpl extends ServiceImpl addList, List delList) { - //超链接样式 - Workbook workbook = new HSSFWorkbook(); - CellStyle cellStyleLink =workbook.createCellStyle(); - HSSFFont font = ((HSSFWorkbook) workbook).createFont(); - font.setColor(HSSFColor.HSSFColorPredefined.LIGHT_BLUE.getIndex()); - cellStyleLink.setFont(font); - cellStyleLink.setWrapText(true); + public static String changeHtmlToExcel (String itemContent, List addList, List delList) { if (StringUtils.isNotEmpty(itemContent)) { itemContent = itemContent.replaceAll("
",""); itemContent = itemContent.replaceAll("
",""); @@ -85,51 +78,6 @@ public class HtmlTextExcel { itemContent = itemContent.replaceAll("",""); itemContent = itemContent.replaceAll("",""); itemContent = itemContent.replaceAll("",""); - String rowDataAndPath = getSplitContent(request, itemContent); -// String dir = filePath + File.separator + UUID.randomUUID().toString().replace("-", ""); - String sheetName = "对比结果"; - Sheet sheet = workbook.createSheet(sheetName); - HSSFPatriarch patriarch = (HSSFPatriarch) sheet.createDrawingPatriarch(); - String[] leftSplit = null; - leftSplit = rowDataAndPath.split("---"); - int i = 1; - Row row = sheet.createRow(i); - if (leftSplit.length > 1) { - for (int j = 0; j < leftSplit.length; j++) { - if (ObjectUtils.isNotEmpty(leftSplit[j])) { - ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream(); - if (j > 0) { - Row row2 = sheet.getRow(j ); - if (ObjectUtils.isEmpty(row2)) { - row2 = sheet.createRow(j); - } - log.info("-------------- 开始开始处理左侧图片、表格 -----------------"); - try { - handleSpecificData(wb, patriarch, cellStyleLink, byteArrayOut, row2, i, j, leftSplit[j], 3); - } catch (IOException e) { - e.printStackTrace(); - } - log.info("-------------- 左侧图片、表格 处理成功 -----------------"); - } else { - log.info("-------------- 开始开始处理左侧图片、表格 -----------------"); - try { - handleSpecificData(wb, patriarch, cellStyleLink, byteArrayOut, row, i, j, leftSplit[j], 3); - } catch (IOException e) { - e.printStackTrace(); - } - log.info("-------------- 左侧图片、表格 处理成功 -----------------"); - } - } - } - List mergeCells = new ArrayList<>(); - SarFileCompareExcelMergeCell sarFileCompareExcelMergeCell = new SarFileCompareExcelMergeCell(); - sarFileCompareExcelMergeCell.setLeftStart(i); - sarFileCompareExcelMergeCell.setLeftEnd(i + leftSplit.length - 1); - sarFileCompareExcelMergeCell.setRightStart(0); - sarFileCompareExcelMergeCell.setRightEnd(0); - mergeCells.add(sarFileCompareExcelMergeCell); - } - } return itemContent; } @@ -147,7 +95,7 @@ public class HtmlTextExcel { * @param cellNum * @throws IOException */ - private static void handleSpecificData(HSSFWorkbook workbook, HSSFPatriarch patriarch, CellStyle cellStyleLink, ByteArrayOutputStream byteArrayOut, Row row, int i, int j, String text, int cellNum) throws IOException { + public static void handleSpecificData(HSSFWorkbook workbook, HSSFPatriarch patriarch, CellStyle cellStyleLink, ByteArrayOutputStream byteArrayOut, Row row, int i, int j, String text, int cellNum) throws IOException { if (text.contains("/upFiles")) { String dir = "dcjd"; row.setHeight((short) 3000); //设置行高 @@ -261,7 +209,7 @@ public class HtmlTextExcel { * @param text * @return */ - private static String getSplitContent(HttpServletRequest request, String text) { + public static String getSplitContent(HttpServletRequest request, String text) { text = text.replace("

", "").replace("

", "\r\n"); //分割图片 log.info("-------------------------开始分割文字与图片---------------------------"); @@ -281,7 +229,7 @@ public class HtmlTextExcel { * @param textAndImg * @param session */ - private static void splitTable(String textAndImg,HttpSession session) { + public static void splitTable(String textAndImg, HttpSession session) { if (textAndImg.contains("") + 14); @@ -300,7 +248,7 @@ public class HtmlTextExcel { * @param session * @return */ - private static void splitImg(String text, HttpSession session) { + public static void splitImg(String text, HttpSession session) { if (text.contains("") + 3);