fix(87790): 新旧拆分单对比优化速度
This commit is contained in:
+33
-5
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user