条款对比

This commit is contained in:
wangzhijiang
2024-02-23 15:15:52 +08:00
parent ed6c0b64a7
commit 4fe27e2168
12 changed files with 2747 additions and 24 deletions
@@ -16,9 +16,11 @@ import com.jero.common.exception.JeroBootException;
import com.jero.common.system.base.controller.JeroController;
import com.jero.common.system.vo.LoginUser;
import com.jero.common.util.MessageUtils;
import com.jero.common.util.UUIDUtils;
import com.jero.generater.modules.online.cgform.service.impl.OnlCgformFieldServiceImpl;
import com.jero.modules.compare.entity.SarFileCompareDetailVO;
import com.jero.modules.compare.entity.SarFileCompareInfo;
import com.jero.modules.compare.enums.CompareTypeEnum;
import com.jero.modules.compare.enums.ReleaseConditionEnum;
import com.jero.modules.compare.service.ISarFileCompareInfoService;
import com.jero.modules.system.service.ISysUserService;
@@ -39,10 +41,7 @@ import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.*;
import java.util.stream.Collectors;
@@ -105,6 +104,7 @@ public class SarFileCompareInfoController extends JeroController<SarFileCompareI
for (SarFileCompareInfo info : pageList.getRecords()) {
info.setReleaseStateTitle(ReleaseConditionEnum.getTextByValue(info.getReleaseState(), cut));
info.setCompareTypeShow(CompareTypeEnum.getTextByValue(info.getCompareType()));
}
return Result.OK(pageList);
}
@@ -266,15 +266,6 @@ public class SarFileCompareInfoController extends JeroController<SarFileCompareI
@ApiOperationSupport(order = 9)
public Result<?> changeState(@Validated @RequestBody SarFileCompareInfo sarFileCompareInfo) {
SarFileCompareInfo info = sarFileCompareInfoService.queryById(sarFileCompareInfo.getId());
// 水平越权
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
if (!info.getCreateBy().equals(loginUser.getUsername())){
if(LanguageEnum.CN.equals(MessageUtils.getLanguage())) {
throw new JeroBootException("无权限!");
}else{
throw new JeroBootException("No access!");
}
}
if (ReleaseConditionEnum.DRAFT.getValue().equals(sarFileCompareInfo.getReleaseState())) {
info.setReleaseState(ReleaseConditionEnum.PUBLISHED.getValue());
} else {
@@ -303,12 +294,39 @@ public class SarFileCompareInfoController extends JeroController<SarFileCompareI
@PostMapping(value = "/editComments")
@ApiOperationSupport(order = 11)
public Result<?> editComments(@Validated @RequestBody SarFileCompareInfo sarFileCompareInfo) {
// 水平越权
sarFileCompareInfoService.isHorizontalOverstep(sarFileCompareInfo.getId());
SarFileCompareInfo info = sarFileCompareInfoService.getById(sarFileCompareInfo.getId());
info.setComments(sarFileCompareInfo.getComments());
sarFileCompareInfoService.editById(info);
return Result.OK(MessageUtils.getMessage(ResultCommon.OK));
}
/**
* 发起条款对比
*
* @param json
* @return 对比详情ID
*/
@AutoLog(value = "新旧拆分单对比-发起条款对比")
@ApiOperation(value = "新旧拆分单对比-发起条款对比", notes = "新旧拆分单对比-发起条款对比")
@RequestMapping(value = "/itemComparison", method = RequestMethod.POST)
@ApiOperationSupport(order = 12)
public Result<String> itemComparison(@RequestBody JSONObject json) {
try {
String leftStandard = json.get("leftStandard").toString();
String rightStandard = json.get("rightStandard").toString();
String remark = "";
if (json.get("remark") != null) {
remark = json.get("remark").toString();
}
String InfoId = sarFileCompareInfoService.itemComparison(leftStandard, rightStandard, remark);
Result<String> r = new Result<>();
r.setSuccess(true);
r.setCode(CommonConstant.SC_OK_200);
r.setResult(InfoId);
return r;
} catch (Exception ex) {
log.error("发起条款对比失败:" + ex.getMessage());
return Result.error("发起条款对比失败!" + ex.getMessage());
}
}
}
@@ -131,7 +131,6 @@ public class SarFileCompareItemCommentController extends JeroController<SarFileC
public Result<?> delete(@RequestBody IdMapBody mapBody) {
// 水平越权
SarFileCompareItemComment sarFileCompareItemComment = sarFileCompareItemCommentService.getById(mapBody.getId());
sarFileCompareInfoService.isHorizontalOverstep(sarFileCompareItemComment.getInfoId());
sarFileCompareItemCommentService.deleteById(mapBody.getId());
return Result.OK("删除成功!");
}
@@ -22,9 +22,10 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
/**
* @Description: 新旧拆分单对比条款表
* @Author: jero-boot
* @Date: 2022-08-02
@@ -181,4 +182,10 @@ public class SarFileCompareItemController extends JeroController<SarFileCompareI
return Result.OK(res);
}
@ApiOperation(value = "条款比对")
@PostMapping("/clauseComparisonEvent")
public Result<Map<String,Object>> clauseComparisonEvent(String oldItemId, String newItemId, String standHisId, String flag) throws Exception {
Map<String,Object> resultMap = sarFileCompareItemService.clauseComparisonEvent(oldItemId,newItemId,standHisId,flag);
return Result.OK(resultMap);
}
}
@@ -160,4 +160,9 @@ public class SarFileCompareInfo implements Serializable {
@ApiModelProperty(value = "创建人")
private String createNameNo;
// 比对类型:条款比对、全文比对
@ApiModelProperty(value = "比对类型")
private String compareType;
@TableField(exist = false)
private String compareTypeShow;
}
@@ -0,0 +1,46 @@
package com.jero.modules.compare.enums;
/**
* 对比类型枚举类
*/
public enum CompareTypeEnum {
ITEM("条款对比","item"),
FULL_TEXT("全文对比","fullText"),
;
String cnName;
String value;
private CompareTypeEnum(String cnName, String value) {
this.cnName = cnName;
this.value = value;
}
public String getCnName() {
return cnName;
}
public void setCnName(String cnName) {
this.cnName = cnName;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public static String getTextByValue(String value) {
CompareTypeEnum[] values = values();
for (CompareTypeEnum releaseConditionEnum : values) {
if (releaseConditionEnum.value.equals(value)) {
return releaseConditionEnum.cnName;
}
}
return null;
}
}
@@ -86,4 +86,14 @@ public interface ISarFileCompareInfoService extends IService<SarFileCompareInfo>
void isHorizontalOverstep(String ids);
void deleteByStandardId(String ids);
/**
* 发起条款对比
*
* @param leftStandard
* @param rightStandard
* @param remark
* @return
*/
String itemComparison(String leftStandard, String rightStandard, String remark) throws Exception;
}
@@ -72,4 +72,6 @@ public interface ISarFileCompareItemService extends IService<SarFileCompareItem>
Map<String, SarFileCompareItem> queryMapByInfoId(String infoId);
List<String> clauseComparison(String lid,String rid);
Map<String,Object> clauseComparisonEvent(String oldItemId, String newItemId, String standHisId,String flag);
}
@@ -7,6 +7,7 @@ import com.jero.common.exception.JeroBootException;
import com.jero.common.system.vo.LoginUser;
import com.jero.common.util.MessageUtils;
import com.jero.modules.compare.entity.*;
import com.jero.modules.compare.enums.CompareTypeEnum;
import com.jero.modules.compare.enums.ReleaseConditionEnum;
import com.jero.modules.compare.mapper.SarFileCompareInfoMapper;
import com.jero.modules.compare.service.ISarFileCompareInfoService;
@@ -142,7 +143,7 @@ public class SarFileCompareInfoServiceImpl extends ServiceImpl<SarFileCompareInf
*/
@Override
public String fullTextComparison(String leftStandard, String rightStandard, String remark) throws Exception {
SarFileCompareInfo sfcInfo = addStandCompareHis(leftStandard, rightStandard, remark);
SarFileCompareInfo sfcInfo = addStandCompareHis(leftStandard, rightStandard, remark, CompareTypeEnum.FULL_TEXT.getValue());
//文档对比信息目录
List<SarFileSplitMenuEO> leftMenuEOList = sarFileSplitMenuEOService.queryByInfoId(leftStandard);
Map<String, SarFileCompareMenu> leftMenuMap = wrapperMenuMap(leftMenuEOList, sfcInfo.getId(), CompareConst.POS_LEFT);
@@ -254,7 +255,7 @@ public class SarFileCompareInfoServiceImpl extends ServiceImpl<SarFileCompareInf
* @param remark
* @throws Exception
*/
public SarFileCompareInfo addStandCompareHis(String leftStandId, String rightStandId, String remark) throws Exception {
public SarFileCompareInfo addStandCompareHis(String leftStandId, String rightStandId, String remark, String compareType) throws Exception {
SarFileSplitInfoEO leftInfo = sarFileSplitInfoEOService.queryById(leftStandId);
SarFileSplitInfoEO rightInfo = sarFileSplitInfoEOService.queryById(rightStandId);
//保存标准比对历史表数据
@@ -287,6 +288,7 @@ public class SarFileCompareInfoServiceImpl extends ServiceImpl<SarFileCompareInf
sarFileCompareInfo.setReleaseState(ReleaseConditionEnum.DRAFT.getValue());
sarFileCompareInfo.setRemark(remark);
sarFileCompareInfo.setCompareType(compareType);
this.add(sarFileCompareInfo);
return sarFileCompareInfo;
}
@@ -464,4 +466,17 @@ public class SarFileCompareInfoServiceImpl extends ServiceImpl<SarFileCompareInf
}
/**
* 条款对比
*
* @param leftStandard
* @param rightStandard
* @return
* @throws Exception
*/
@Override
public String itemComparison(String leftStandard, String rightStandard, String remark) throws Exception {
SarFileCompareInfo sfcInfo = addStandCompareHis(leftStandard, rightStandard, remark, CompareTypeEnum.ITEM.getValue());
return sfcInfo.getId();
}
}
@@ -100,7 +100,6 @@ public class SarFileCompareItemCommentServiceImpl extends ServiceImpl<SarFileCom
@Override
public void editById(SarFileCompareItemComment sarFileCompareItemComment) {
// 水平越权
sarFileCompareInfoService.isHorizontalOverstep(sarFileCompareItemComment.getInfoId());
SarFileCompareItemComment ic = queryById(sarFileCompareItemComment.getId());
Date now = new Date();
ic.setUpdateTime(now);
@@ -2,18 +2,26 @@ package com.jero.modules.compare.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.util.UUIDUtils;
import com.jero.modules.compare.entity.SarFileCompareInfo;
import com.jero.modules.compare.entity.SarFileCompareItem;
import com.jero.modules.compare.mapper.SarFileCompareItemMapper;
import com.jero.modules.compare.service.ISarFileCompareItemService;
import com.jero.modules.compare.utils.CompHanLPUtils;
import com.jero.modules.compare.utils.CompareConst;
import com.jero.modules.compare.utils.DiffUtils;
import com.jero.modules.compare.utils.EventEditHistoryHighLightUtil;
import com.jero.modules.split.entity.SarFileSplitItemsEO;
import com.jero.modules.split.entity.SarFileSplitItemsValEO;
import com.jero.modules.split.page.SarFileSplitItemsValEOPage;
import com.jero.modules.split.service.ISarFileSplitItemsValEOService;
import com.jero.modules.system.util.MyStringUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.text.NumberFormat;
import java.util.*;
/**
* @Description: 文档对比信息条款表
@@ -24,6 +32,9 @@ import java.util.Map;
@Service
public class SarFileCompareItemServiceImpl extends ServiceImpl<SarFileCompareItemMapper, SarFileCompareItem> implements ISarFileCompareItemService {
@Autowired
private ISarFileSplitItemsValEOService sarFileSplitItemsValEOService;
/**
* 保存
*
@@ -132,4 +143,130 @@ public class SarFileCompareItemServiceImpl extends ServiceImpl<SarFileCompareIte
List<String> htmlDiffStr = dmp.getHtmlDiffStr(leftItem.getItemsText(), rightItem.getItemsText());
return htmlDiffStr;
}
@Override
public Map<String, Object> clauseComparisonEvent(String oldItemId, String newItemId, String standHisId, String flag) {
Map<String,Object> resultMap = new HashMap<String, Object>();
String oldTxt = "";
SarFileSplitItemsValEOPage oldPage = new SarFileSplitItemsValEOPage();
oldPage.setItemId(oldItemId);
oldPage.setType("TEXT");
oldPage.setOrderBy("DISPLAY_SEQ,ID");
List<SarFileSplitItemsValEO> oldList = sarFileSplitItemsValEOService.queryByList(oldPage);
if(oldList!=null && !oldList.isEmpty()){
for(int i = 1;i<=oldList.size();i++){
if(i==oldList.size()) {
oldTxt += oldList.get(i-1).getItemContent();
}else{
oldTxt += oldList.get(i-1).getItemContent() + "i#2\n";
}
}
}
String newTxt = "";
SarFileSplitItemsValEOPage newPage = new SarFileSplitItemsValEOPage();
newPage.setItemId(newItemId);
newPage.setType("TEXT");
newPage.setOrderBy("DISPLAY_SEQ,ID");
List<SarFileSplitItemsValEO> newList = sarFileSplitItemsValEOService.queryByList(newPage);
if(newList!=null && !newList.isEmpty()){
for(int i = 1;i<=newList.size();i++){
if(i==newList.size()) {
newTxt += newList.get(i-1).getItemContent();
}else{
newTxt += newList.get(i-1).getItemContent() + "i#2\n";
}
}
}
String similarityDegree="";
double similarity = 100.00;
if(!StringUtils.isNotBlank(oldTxt.trim()) && !StringUtils.isNotBlank(newTxt.trim())){
similarityDegree = "100.00";
}else if(StringUtils.isNotBlank(oldTxt.trim()) && StringUtils.isNotBlank(newTxt.trim())){
similarity = CompHanLPUtils.findSimilarity(oldTxt.trim(), newTxt.trim());
NumberFormat nf = java.text.NumberFormat.getPercentInstance();
//nf.setMaximumIntegerDigits(2);//小数点前保留几位
nf.setMinimumFractionDigits(2);// 小数点后保留几位
similarityDegree = nf.format(similarity);
}else{
similarity = 0.00;
similarityDegree = "0.00";
}
resultMap.put("similarityDegree",similarityDegree);
List<String> leftString = new ArrayList<>();
List<String> rightString = new ArrayList<>();
if(similarity >= 0.6){
String[] anb = EventEditHistoryHighLightUtil.getHighLightDifferent(oldTxt.trim(), newTxt.trim());
if(StringUtils.isNotBlank(flag) && flag.equals("2")){
anb[0] = anb[0].replaceAll("red;", "#ffffff;background-color: red;").replaceAll("i#2\n", "<br/>");
anb[1] = anb[1].replaceAll("red;", "#ffffff;background-color: rgb(51, 145, 206);").replaceAll("i#2\n", "<br/>");
}else {
anb[0] = anb[0].replaceAll("red;", "#ffffff;background-color: rgb(51, 145, 206);").replaceAll("i#2\n", "<br/>");
anb[1] = anb[1].replaceAll("red;", "#ffffff;background-color: red;").replaceAll("i#2\n", "<br/>");
}
resultMap.put("leftString",anb[0]);
resultMap.put("rightString",anb[1]);
}else{
String oldTxtTemp = oldTxt.replace("i#2\n", "<br/>");
List<String> stringList1 = Arrays.asList(oldTxtTemp.split("<br/>"));
for(String left : stringList1){
StringBuilder stringBuilder = new StringBuilder(left);
stringBuilder.append("</div>");
stringBuilder.insert(0,"<div>");
leftString.add(stringBuilder.toString());
}
resultMap.put("leftString",leftString);
String newTxtTemp = newTxt.replace("i#2\n", "<br/>");
List<String> stringList2 = Arrays.asList(newTxtTemp.split("<br/>"));
for(String right : stringList2){
StringBuilder stringBuilder = new StringBuilder(right);
stringBuilder.append("</div>");
stringBuilder.insert(0,"<div>");
rightString.add(stringBuilder.toString());
}
resultMap.put("rightString",rightString);
}
//往条款比对历史表中添加数据
if(standHisId != null && !standHisId.isEmpty()){
// SarFileSplitItemsEO leftEo = sarFileSplitItemsEOService.selectByPrimaryKey(oldItemId);
// SarFileSplitItemsEO rightEo = sarFileSplitItemsEOService.selectByPrimaryKey(newItemId);
// String leftItemsText = "";
// if(leftString != null && !leftString.isEmpty()){
// for(String left : leftString){
// leftItemsText += left;
// }
// }
// String rightItemsText = "";
// if(rightString != null && !rightString.isEmpty()){
// for(String right : rightString){
// rightItemsText += right;
// }
// }
/* SarItemsCompareHisEO sarItemsCompareHisEO = new SarItemsCompareHisEO();
sarItemsCompareHisEO.setId(UUIDUtils.randomUUID20());
sarItemsCompareHisEO.setOldItemsId(leftEo.getId());
sarItemsCompareHisEO.setOldItemsName(leftEo.getItemsName());
sarItemsCompareHisEO.setOldItemsNum(leftEo.getItemsNum());
sarItemsCompareHisEO.setOldItemsText(leftItemsText);
sarItemsCompareHisEO.setNewItemsId(rightEo.getId());
sarItemsCompareHisEO.setNewItemsName(rightEo.getItemsName());
sarItemsCompareHisEO.setNewItemsNum(rightEo.getItemsNum());
sarItemsCompareHisEO.setNewItemsText(rightItemsText);
sarItemsCompareHisEO.setStandHisId(standHisId);
sarItemsCompareHisEO.setSimilarityDegree(similarityDegree);
sarItemsCompareHisEO.setCreateUser(LoginUserUtil.getUserId());
sarItemsCompareHisEO.setModifyUser(LoginUserUtil.getUserId());
sarItemsCompareHisEO.setModifyTime(new Date());
sarItemsCompareHisEO.setCreateTime(new Date());
sarItemsCompareHisEOService.insertSelective(sarItemsCompareHisEO);*/
}
SarFileCompareInfo sarStandCompareHisEO =new SarFileCompareInfo();
sarStandCompareHisEO.setId(standHisId);
// sarStandCompareHisEO.setCompareStatus("比对完成");
// sarStandCompareHisEODao.updateByPrimaryKeySelective(sarStandCompareHisEO);
if (oldList.size()==0 || newList.size()==0){
resultMap.put("error","比对数据已删除");
}
return resultMap;
}
}
@@ -0,0 +1,209 @@
package com.jero.modules.compare.utils;
/**
* @Description: TODO
* @author: super_liu
* @date: 2021年11月28日 12:28
*/
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
/**
* 文本差异高亮算法
*
* @Author : cron
* @Date: 2020-01-15
*/
@SuppressWarnings("all")
public class EventEditHistoryHighLightUtil {
/**
* 传入2个字符串进行相比高亮显示
* eg:
* 原数据一:王五张三
* 原数据二:张三李四
* <span style='color:red'>王五</span>张三
* 张三<span style='color:red'>李四</span>
*/
public static String[] getHighLightDifferentOld(String a, String b) {
String[] temp = getDiff(a, b);
String[] result = {getHighLight(a, temp[0]), getHighLight(b, temp[1])};
return result;
}
private static String getHighLight(String source, String temp) {
StringBuffer sb = new StringBuffer();
char[] sourceChars = source.toCharArray();
char[] tempChars = temp.toCharArray();
boolean flag = false;
for (int i = 0; i < sourceChars.length; i++) {
if (tempChars[i] != ' ') {
if (i == 0) {
sb.append("<span style='color:red'>").append(sourceChars[i]);
} else if (flag) {
sb.append(sourceChars[i]);
} else {
sb.append("<span style='color:red'>").append(sourceChars[i]);
}
flag = true;
if (i == sourceChars.length - 1) {
sb.append("</span>");
}
} else if (flag) {
sb.append("</span>").append(sourceChars[i]);
flag = false;
} else {
sb.append(sourceChars[i]);
}
}
return sb.toString();
}
public static String[] getDiff(String a, String b) {
String[] result = null;
//选取长度较小的字符串用来穷举子串
if (a.length() < b.length()) {
result = getDiff(a, b, 0, a.length());
} else {
result = getDiff(b, a, 0, b.length());
result = new String[]{result[1], result[0]};
}
return result;
}
/**
* 将a的指定部分与b进行比较生成比对结果
*/
private static String[] getDiff(String a, String b, int start, int end) {
String[] result = new String[]{a, b};
int len = result[0].length();
while (len > 0) {
for (int i = start; i < end - len + 1; i++) {
String sub = result[0].substring(i, i + len);
int idx = -1;
if ((idx = result[1].indexOf(sub)) != -1) {
result[0] = setEmpty(result[0], i, i + len);
result[1] = setEmpty(result[1], idx, idx + len);
if (i > 0) {
//递归获取空白区域左边差异
result = getDiff(result[0], result[1], 0, i);
}
if (i + len < end) {
//递归获取空白区域右边差异
result = getDiff(result[0], result[1], i + len, end);
}
len = 0;//退出while循环
break;
}
}
len = len / 2;
}
return result;
}
/**
* 将字符串s指定的区域设置成空格
*/
public static String setEmpty(String s, int start, int end) {
char[] array = s.toCharArray();
for (int i = start; i < end; i++) {
array[i] = ' ';
}
return new String(array);
}
//--------------new -------------------------
public static String[] getHighLightDifferent(String altbe, String altaf) {
//字符串1 altbe 字符串2 altaf
List<Integer> beList = rememberSpacing(altbe);
List<Integer> afList = rememberSpacing(altaf);
altbe = altbe.replace(" ", "");
altaf = altaf.replace(" ", "");
LinkedList<DiffMatchPatch.Diff> t = new DiffMatchPatch().diff_main(altbe, altaf);
StringBuffer s1 = new StringBuffer();
StringBuffer s2 = new StringBuffer();
Integer indexBe = 0;
Integer indexAf = 0;
for (DiffMatchPatch.Diff diff : t) {
StringBuffer diffTextBe = new StringBuffer(diff.text);
StringBuffer diffTextAf = new StringBuffer(diff.text);
if ("EQUAL".equalsIgnoreCase(diff.operation.toString())) {
addSpacing(beList, indexBe, diffTextBe);
addSpacing(afList, indexAf, diffTextAf);
s1.append(diffTextBe);
s2.append(diffTextAf);
indexBe += diffTextBe.length();
indexAf += diffTextAf.length();
}
indexBe = appendString2("DELETE", diff, s1, s2, beList, indexBe);
indexAf = appendString2("INSERT", diff, s2, s1, afList, indexAf);
}
String[] result = new String[2];
result[0] = s1.toString();
result[1] = s2.toString();
return result;
}
// public static void appendString(String type, Diff diff, StringBuffer sbOne, StringBuffer sbTwo) {
// if (type.equals(diff.operation.toString())) {
// if (" ".equals(diff.text)) {
// sbOne.append(" ");
// sbTwo.append(" ");
// } else {
// sbOne.append("<em class='f-required'>").append(diff.text).append("</em>");
// }
// }
// }
private static List<Integer> rememberSpacing(String str) {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < str.length(); i++) {
if (' ' == str.charAt(i)) {
list.add(i);
}
}
return list;
}
public static void addSpacing(List<Integer> list, Integer index, StringBuffer str) {
for (Integer o : list) {
if (o >= index && o < index + str.length()) {
str.insert(o - index, ' ');
}
}
}
public static Integer appendString2(String type, DiffMatchPatch.Diff diff, StringBuffer sbOne,
StringBuffer sbTwo, List<Integer> list, Integer i) {
Integer result = i;
if (type.equals(diff.operation.toString())) {
StringBuffer sb = new StringBuffer(diff.text);
for (Integer o : list) {
if (o >= i && o < i + sb.length()) {
sb.insert(o - i, ' ');
}
}
sbOne.append("<span style='color:red;'>").append(sb).append("</span>");
result = i + sb.length();
}
return result;
}
// public static void main(String[] args) {
// String a = "测试测试测试仅关注界面和功能,数据准确性在暂不测试";
// String b = "提交留言数据仅关注界面和功能,数据准确性在暂不测试";
// String[] anb = getHighLightDifferent(a, b);
// System.out.println(Arrays.toString(anb));
//
//// String altbe = "提交留言数据仅关注界面和 功能,数据准确性在暂不测试";
//// String altaf = "提交留言数据仅关注界面和功能,数据准确性在暂不测试提交 留言数据仅关注界面和功能,数据准确性在暂不测试";
//// String[] highLightDifferentNew = getHighLightDifferent(altbe, altaf);
//// System.out.println(Arrays.toString(highLightDifferentNew));
// }
}