diff --git a/laws-modules/src/main/java/com/jero/modules/compare/service/impl/SarFileCompareItemCommentServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/compare/service/impl/SarFileCompareItemCommentServiceImpl.java index 819cba33..13b48810 100644 --- a/laws-modules/src/main/java/com/jero/modules/compare/service/impl/SarFileCompareItemCommentServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/compare/service/impl/SarFileCompareItemCommentServiceImpl.java @@ -15,16 +15,15 @@ import com.jero.modules.compare.service.ISarFileCompareInfoService; import com.jero.modules.compare.service.ISarFileCompareItemCommentService; import com.jero.modules.compare.service.ISarFileCompareItemService; import com.jero.modules.compare.utils.ConvertHtml2Excel; +import com.jero.modules.compare.utils.DiffUtils; import com.jero.modules.system.util.MyStringUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.apache.poi.common.usermodel.HyperlinkType; -import org.apache.poi.hssf.usermodel.HSSFClientAnchor; -import org.apache.poi.hssf.usermodel.HSSFFont; -import org.apache.poi.hssf.usermodel.HSSFPatriarch; -import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.hssf.usermodel.*; import org.apache.poi.hssf.util.HSSFColor; +import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddress; import org.springframework.beans.factory.annotation.Autowired; @@ -324,17 +323,20 @@ public class SarFileCompareItemCommentServiceImpl extends ServiceImpl 1) { for (int j = 0; j < leftSplit.length; j++) { if (ObjectUtils.isNotEmpty(leftSplit[j])) { @@ -360,23 +362,24 @@ public class SarFileCompareItemCommentServiceImpl extends ServiceImpl 1) { for (int j = 0; j < rightSplit.length; j++) { if (ObjectUtils.isNotEmpty(rightSplit[j])) { @@ -400,11 +403,78 @@ public class SarFileCompareItemCommentServiceImpl extends ServiceImpl htmlDiffStrContent = dmp.getHtmlDiffStr(rowDataAndPathLeft, rowDataAndPathRight); + List htmlDiffStrName = dmp.getHtmlDiffStr(itemLeft.getItemsName(), itemRight.getItemsName()); + + Font redFont = workbook.createFont(); + redFont.setColor(HSSFColor.HSSFColorPredefined.RED.getIndex()); + Font greenFont = workbook.createFont(); + greenFont.setColor(HSSFColor.HSSFColorPredefined.GREEN.getIndex()); + + // 获取红色字体标签的所有下标位置 + String redTag = ""; + List leftContentRedTagIndex = getTagIndex(htmlDiffStrContent.get(0), redTag); + HSSFRichTextString leftRich = new HSSFRichTextString( + htmlDiffStrContent.get(0) + .replace(redTag, "") + .replace("", "")); + for (String tagIndex : leftContentRedTagIndex) { + // 设置单独字体样式 + String[] split = tagIndex.split(","); + leftRich.applyFont(Integer.parseInt(split[0]), Integer.parseInt(split[1]), redFont); + row.createCell(3).setCellValue(leftRich); + } + + // 获取绿色字体标签的所有下标位置 + String greenTag = ""; + List rightContentGreenTagIndex = getTagIndex(htmlDiffStrContent.get(1), greenTag); + HSSFRichTextString rightRich = new HSSFRichTextString( + htmlDiffStrContent.get(1) + .replace(greenTag, "") + .replace("", "")); + for (String tagIndex : rightContentGreenTagIndex) { + // 设置单独字体样式 + String[] split = tagIndex.split(","); + rightRich.applyFont(Integer.parseInt(split[0]), Integer.parseInt(split[1]), greenFont); + row.createCell(7).setCellValue(rightRich); + } + + // 设置标题单独字体样式 + List leftNameRedTagIndex = getTagIndex(htmlDiffStrName.get(0), redTag); + HSSFRichTextString leftNameRich = new HSSFRichTextString( + htmlDiffStrName.get(0) + .replace(redTag, "") + .replace("", "")); + for (String tagIndex : leftNameRedTagIndex) { + // 设置单独字体样式 + String[] split = tagIndex.split(","); + leftNameRich.applyFont(Integer.parseInt(split[0]), Integer.parseInt(split[1]), redFont); + row.createCell(2).setCellValue(leftRich); + } + + List rightNameRedTagIndex = getTagIndex(htmlDiffStrName.get(1), greenTag); + HSSFRichTextString rightNameRich = new HSSFRichTextString( + htmlDiffStrName.get(0) + .replace(redTag, "") + .replace("", "")); + for (String tagIndex : rightNameRedTagIndex) { + // 设置单独字体样式 + String[] split = tagIndex.split(","); + rightNameRich.applyFont(Integer.parseInt(split[0]), Integer.parseInt(split[1]), greenFont); + row.createCell(6).setCellValue(leftRich); + } + } + row.createCell(8).setCellValue(itemComment.getComment()); row.setRowStyle(cellStyle); for (int j = 0; j < 9; j++) { @@ -485,6 +555,30 @@ public class SarFileCompareItemCommentServiceImpl extends ServiceImpl getTagIndex(String str, String tag) { + List indexList = new ArrayList<>(); + int index = 0; + int i = 0; + while ((index = str.indexOf(tag, index)) != -1) { + int tmp = i * tag.length(); + indexList.add(String.valueOf(index - tmp)); + // 移动到下一个可能的起始位置 + index += tag.length(); + ++i; + } + index = 0; + i = 0; + str = str.replaceAll(tag, ""); + while ((index = str.indexOf("", index)) != -1) { + int tmp = i * "".length(); + indexList.set(i, (Integer.parseInt(indexList.get(i)) - tmp) + "," + (index - tmp)); + // 移动到下一个可能的起始位置 + index += "".length(); + ++i; + } + return indexList; + } + /** * 处理图片跟表格类型的数据 * @param workbook diff --git a/laws-modules/src/main/java/com/jero/modules/laws/standard/entity/LawsEnterpriseStandard.java b/laws-modules/src/main/java/com/jero/modules/laws/standard/entity/LawsEnterpriseStandard.java index 43399e8f..2b8eb182 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/standard/entity/LawsEnterpriseStandard.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/standard/entity/LawsEnterpriseStandard.java @@ -201,6 +201,7 @@ public class LawsEnterpriseStandard implements Serializable { * 标准推进人 */ @ApiModelProperty(value = "标准推进人") + @TableField(exist = false) private String standardPromoter; /**