fix(87790): 新旧拆分单对比优化速度

This commit is contained in:
yjz
2024-08-19 15:19:42 +08:00
parent a7fadd7d4f
commit 60a0224232
@@ -72,6 +72,8 @@ public class SarFileCompareInfoServiceImpl extends ServiceImpl<SarFileCompareInf
@Resource
private ILawsDomesticStandardService gbService;
// 判断是否是纯<img>标签,不以</p>结尾,也不以</table>结尾
private static final Pattern imgPattern = Pattern.compile("<img[^>]+>(?<!</p>)(?<!</table>)");
/**
* 保存
@@ -154,25 +156,36 @@ public class SarFileCompareInfoServiceImpl extends ServiceImpl<SarFileCompareInf
*/
@Override
public String fullTextComparison(String leftStandard, String rightStandard, String remark) throws Exception {
long a = System.currentTimeMillis();
SarFileCompareInfo sfcInfo = addStandCompareHis(leftStandard, rightStandard, remark);
//文档对比信息目录
List<SarFileSplitMenuEO> leftMenuEOList = sarFileSplitMenuEOService.queryByInfoId(leftStandard);
Map<String, SarFileCompareMenu> leftMenuMap = wrapperMenuMap(leftMenuEOList, sfcInfo.getId(), CompareConst.POS_LEFT);
sarFileCompareMenuService.saveBatch(leftMenuMap.values());
long b = System.currentTimeMillis();
log.error("左菜单保存============================"+(b - a));
List<SarFileSplitMenuEO> rightMenuEOList = sarFileSplitMenuEOService.queryByInfoId(rightStandard);
Map<String, SarFileCompareMenu> rightMenuMap = wrapperMenuMap(rightMenuEOList, sfcInfo.getId(), CompareConst.POS_RIGHT);
sarFileCompareMenuService.saveBatch(rightMenuMap.values());
long c = System.currentTimeMillis();
log.error("右菜单保存============================"+(c - b));
//文档对比信息条款
List<SarFileSplitItemsEO> leftItemEOList = sarFileSplitItemsEOService.selectByInfoId(leftStandard);
List<SarFileCompareItem> leftItemList = wrapperItemList(leftItemEOList, sfcInfo.getId(), leftMenuMap, CompareConst.POS_LEFT);
List<SarFileSplitItemsEO> rightItemEOList = sarFileSplitItemsEOService.selectByInfoId(rightStandard);
List<SarFileCompareItem> rightItemList = wrapperItemList(rightItemEOList, sfcInfo.getId(), rightMenuMap, CompareConst.POS_RIGHT);
long y = System.currentTimeMillis();
log.error("============================"+(y - c));
if (!leftItemList.isEmpty() && !rightItemList.isEmpty()) {
//双重循环找到相似度最高的条款做关联
for (int i = 0; i < leftItemList.size(); i++) {
String leftTxt = leftItemList.get(i).getItemsText();
String leftAllTxt = leftItemList.get(i).getItemsNum() + leftItemList.get(i).getItemsName() + leftItemList.get(i).getItemsText();
// String leftAllTxt = leftItemList.get(i).getItemsNum() + leftItemList.get(i).getItemsName() + leftItemList.get(i).getItemsText();
StringBuilder sb = new StringBuilder();
sb.append(leftItemList.get(i).getItemsNum())
.append(leftItemList.get(i).getItemsName())
.append(leftItemList.get(i).getItemsText());
String leftAllTxt = sb.toString();
//初始化 假设未找到相似条目
leftItemList.get(i).setTargetStand(-1);
//定义初始化的相似度
@@ -183,14 +196,23 @@ public class SarFileCompareInfoServiceImpl extends ServiceImpl<SarFileCompareInf
rightItemList.get(j).setTargetStand(-1);
}
String rightTxt = rightItemList.get(j).getItemsText();
String rightAllTxt = rightItemList.get(j).getItemsNum() + rightItemList.get(j).getItemsName() + rightItemList.get(j).getItemsText();
// String rightAllTxt = rightItemList.get(j).getItemsNum() + rightItemList.get(j).getItemsName() + rightItemList.get(j).getItemsText();
StringBuilder sb2 = new StringBuilder();
sb.append(rightItemList.get(i).getItemsNum())
.append(rightItemList.get(i).getItemsName())
.append(rightItemList.get(i).getItemsText());
String rightAllTxt = sb2.toString();
if (null != rightAllTxt && !rightAllTxt.isEmpty()) {
double similarity = 0;
// 使用正则表达式判断是否是纯<img>标签,不以</p>结尾,也不以</table>结尾
String leftTxtTrim = StringUtils.isBlank(leftTxt) ? "" : leftTxt.trim();
String rightTxtTrim = StringUtils.isBlank(rightTxt) ? "" : rightTxt.trim();
boolean leftTxtMatches = Pattern.matches("<img[^>]+>(?<!</p>)(?<!</table>)", leftTxtTrim);
boolean rightTxtMatches = Pattern.matches("<img[^>]+>(?<!</p>)(?<!</table>)", rightTxtTrim);
boolean leftTxtMatches = leftTxtTrim.matches("<img[^>]+>(?<!</p>)(?<!</table>)");
boolean rightTxtMatches = rightTxtTrim.matches("<img[^>]+>(?<!</p>)(?<!</table>)");
// boolean leftTxtMatches = Pattern.matches("<img[^>]+>(?<!</p>)(?<!</table>)", leftTxtTrim);
// boolean rightTxtMatches = Pattern.matches("<img[^>]+>(?<!</p>)(?<!</table>)", rightTxtTrim);
// boolean leftTxtMatches = imgPattern.matcher(leftTxtTrim).find();
// boolean rightTxtMatches = imgPattern.matcher(rightTxtTrim).find();
if (leftTxtMatches && rightTxtMatches){
// 如果是纯img标签直接对比内容
if (leftTxtTrim.equals(rightTxtTrim)
@@ -217,8 +239,14 @@ public class SarFileCompareInfoServiceImpl extends ServiceImpl<SarFileCompareInf
}
}
}
long z = System.currentTimeMillis();
log.error("计算============================"+(z - y));
sarFileCompareItemService.saveBatch(leftItemList);
long d = System.currentTimeMillis();
log.error("左条款============================"+(d - z));
sarFileCompareItemService.saveBatch(rightItemList);
long e = System.currentTimeMillis();
log.error("右条款============================"+(e - z));
return sfcInfo.getId();
}