fix(87790): 新旧拆分单对比优化速度
This commit is contained in:
+33
-5
@@ -72,6 +72,8 @@ public class SarFileCompareInfoServiceImpl extends ServiceImpl<SarFileCompareInf
|
|||||||
@Resource
|
@Resource
|
||||||
private ILawsDomesticStandardService gbService;
|
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
|
@Override
|
||||||
public String fullTextComparison(String leftStandard, String rightStandard, String remark) throws Exception {
|
public String fullTextComparison(String leftStandard, String rightStandard, String remark) throws Exception {
|
||||||
|
long a = System.currentTimeMillis();
|
||||||
SarFileCompareInfo sfcInfo = addStandCompareHis(leftStandard, rightStandard, remark);
|
SarFileCompareInfo sfcInfo = addStandCompareHis(leftStandard, rightStandard, remark);
|
||||||
//文档对比信息目录
|
//文档对比信息目录
|
||||||
List<SarFileSplitMenuEO> leftMenuEOList = sarFileSplitMenuEOService.queryByInfoId(leftStandard);
|
List<SarFileSplitMenuEO> leftMenuEOList = sarFileSplitMenuEOService.queryByInfoId(leftStandard);
|
||||||
Map<String, SarFileCompareMenu> leftMenuMap = wrapperMenuMap(leftMenuEOList, sfcInfo.getId(), CompareConst.POS_LEFT);
|
Map<String, SarFileCompareMenu> leftMenuMap = wrapperMenuMap(leftMenuEOList, sfcInfo.getId(), CompareConst.POS_LEFT);
|
||||||
sarFileCompareMenuService.saveBatch(leftMenuMap.values());
|
sarFileCompareMenuService.saveBatch(leftMenuMap.values());
|
||||||
|
long b = System.currentTimeMillis();
|
||||||
|
log.error("左菜单保存============================"+(b - a));
|
||||||
List<SarFileSplitMenuEO> rightMenuEOList = sarFileSplitMenuEOService.queryByInfoId(rightStandard);
|
List<SarFileSplitMenuEO> rightMenuEOList = sarFileSplitMenuEOService.queryByInfoId(rightStandard);
|
||||||
Map<String, SarFileCompareMenu> rightMenuMap = wrapperMenuMap(rightMenuEOList, sfcInfo.getId(), CompareConst.POS_RIGHT);
|
Map<String, SarFileCompareMenu> rightMenuMap = wrapperMenuMap(rightMenuEOList, sfcInfo.getId(), CompareConst.POS_RIGHT);
|
||||||
sarFileCompareMenuService.saveBatch(rightMenuMap.values());
|
sarFileCompareMenuService.saveBatch(rightMenuMap.values());
|
||||||
|
long c = System.currentTimeMillis();
|
||||||
|
log.error("右菜单保存============================"+(c - b));
|
||||||
//文档对比信息条款
|
//文档对比信息条款
|
||||||
List<SarFileSplitItemsEO> leftItemEOList = sarFileSplitItemsEOService.selectByInfoId(leftStandard);
|
List<SarFileSplitItemsEO> leftItemEOList = sarFileSplitItemsEOService.selectByInfoId(leftStandard);
|
||||||
List<SarFileCompareItem> leftItemList = wrapperItemList(leftItemEOList, sfcInfo.getId(), leftMenuMap, CompareConst.POS_LEFT);
|
List<SarFileCompareItem> leftItemList = wrapperItemList(leftItemEOList, sfcInfo.getId(), leftMenuMap, CompareConst.POS_LEFT);
|
||||||
List<SarFileSplitItemsEO> rightItemEOList = sarFileSplitItemsEOService.selectByInfoId(rightStandard);
|
List<SarFileSplitItemsEO> rightItemEOList = sarFileSplitItemsEOService.selectByInfoId(rightStandard);
|
||||||
List<SarFileCompareItem> rightItemList = wrapperItemList(rightItemEOList, sfcInfo.getId(), rightMenuMap, CompareConst.POS_RIGHT);
|
List<SarFileCompareItem> rightItemList = wrapperItemList(rightItemEOList, sfcInfo.getId(), rightMenuMap, CompareConst.POS_RIGHT);
|
||||||
|
long y = System.currentTimeMillis();
|
||||||
|
log.error("============================"+(y - c));
|
||||||
if (!leftItemList.isEmpty() && !rightItemList.isEmpty()) {
|
if (!leftItemList.isEmpty() && !rightItemList.isEmpty()) {
|
||||||
//双重循环找到相似度最高的条款做关联
|
//双重循环找到相似度最高的条款做关联
|
||||||
for (int i = 0; i < leftItemList.size(); i++) {
|
for (int i = 0; i < leftItemList.size(); i++) {
|
||||||
String leftTxt = leftItemList.get(i).getItemsText();
|
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);
|
leftItemList.get(i).setTargetStand(-1);
|
||||||
//定义初始化的相似度
|
//定义初始化的相似度
|
||||||
@@ -183,14 +196,23 @@ public class SarFileCompareInfoServiceImpl extends ServiceImpl<SarFileCompareInf
|
|||||||
rightItemList.get(j).setTargetStand(-1);
|
rightItemList.get(j).setTargetStand(-1);
|
||||||
}
|
}
|
||||||
String rightTxt = rightItemList.get(j).getItemsText();
|
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()) {
|
if (null != rightAllTxt && !rightAllTxt.isEmpty()) {
|
||||||
double similarity = 0;
|
double similarity = 0;
|
||||||
// 使用正则表达式判断是否是纯<img>标签,不以</p>结尾,也不以</table>结尾
|
// 使用正则表达式判断是否是纯<img>标签,不以</p>结尾,也不以</table>结尾
|
||||||
String leftTxtTrim = StringUtils.isBlank(leftTxt) ? "" : leftTxt.trim();
|
String leftTxtTrim = StringUtils.isBlank(leftTxt) ? "" : leftTxt.trim();
|
||||||
String rightTxtTrim = StringUtils.isBlank(rightTxt) ? "" : rightTxt.trim();
|
String rightTxtTrim = StringUtils.isBlank(rightTxt) ? "" : rightTxt.trim();
|
||||||
boolean leftTxtMatches = Pattern.matches("<img[^>]+>(?<!</p>)(?<!</table>)", leftTxtTrim);
|
boolean leftTxtMatches = leftTxtTrim.matches("<img[^>]+>(?<!</p>)(?<!</table>)");
|
||||||
boolean rightTxtMatches = Pattern.matches("<img[^>]+>(?<!</p>)(?<!</table>)", rightTxtTrim);
|
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){
|
if (leftTxtMatches && rightTxtMatches){
|
||||||
// 如果是纯img标签直接对比内容
|
// 如果是纯img标签直接对比内容
|
||||||
if (leftTxtTrim.equals(rightTxtTrim)
|
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);
|
sarFileCompareItemService.saveBatch(leftItemList);
|
||||||
|
long d = System.currentTimeMillis();
|
||||||
|
log.error("左条款============================"+(d - z));
|
||||||
sarFileCompareItemService.saveBatch(rightItemList);
|
sarFileCompareItemService.saveBatch(rightItemList);
|
||||||
|
long e = System.currentTimeMillis();
|
||||||
|
log.error("右条款============================"+(e - z));
|
||||||
return sfcInfo.getId();
|
return sfcInfo.getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user