diff --git a/docus-client-interface/src/main/java/com/docus/server/api/segmentation/OcrRuleTestApi.java b/docus-client-interface/src/main/java/com/docus/server/api/segmentation/OcrRuleTestApi.java index 705364e..79eac4f 100644 --- a/docus-client-interface/src/main/java/com/docus/server/api/segmentation/OcrRuleTestApi.java +++ b/docus-client-interface/src/main/java/com/docus/server/api/segmentation/OcrRuleTestApi.java @@ -70,6 +70,14 @@ public interface OcrRuleTestApi { @PutMapping("/edit") void edit(@RequestBody EditOcrRuleTestDTO editOcrRuleTestDTO); + /** + * 删除后保存 + * + * @param editOcrRuleTestDTOList 编辑参数 + */ + @PutMapping("/deleteAndAdd") + void deleteAndAdd(@RequestBody List editOcrRuleTestDTOList); + /** * 批量删除 * diff --git a/docus-client-interface/src/main/java/com/docus/server/dto/segmentation/ocrfileinfo/AddOcrFileInfoDTO.java b/docus-client-interface/src/main/java/com/docus/server/dto/segmentation/ocrfileinfo/AddOcrFileInfoDTO.java index 662de63..4712e79 100644 --- a/docus-client-interface/src/main/java/com/docus/server/dto/segmentation/ocrfileinfo/AddOcrFileInfoDTO.java +++ b/docus-client-interface/src/main/java/com/docus/server/dto/segmentation/ocrfileinfo/AddOcrFileInfoDTO.java @@ -67,19 +67,19 @@ public class AddOcrFileInfoDTO implements Serializable { private OcrStatusEnum ocrStatus; @ApiModelProperty(value = "分段id") - private Integer assortId; + private String assortId; @ApiModelProperty(value = "分段名称") private String assortName; @ApiModelProperty(value = "命中策略id") - private Integer ruleId; + private Long ruleId; @ApiModelProperty(value = "命中关键词") private String hitKey; @ApiModelProperty(value = "命中占比") - private Float rate; + private Double rate; @ApiModelProperty(value = "创建时间") private Date createTime; diff --git a/docus-client-interface/src/main/java/com/docus/server/dto/segmentation/ocrfileinfo/EditOcrFileInfoDTO.java b/docus-client-interface/src/main/java/com/docus/server/dto/segmentation/ocrfileinfo/EditOcrFileInfoDTO.java index b3192b4..1e4d987 100644 --- a/docus-client-interface/src/main/java/com/docus/server/dto/segmentation/ocrfileinfo/EditOcrFileInfoDTO.java +++ b/docus-client-interface/src/main/java/com/docus/server/dto/segmentation/ocrfileinfo/EditOcrFileInfoDTO.java @@ -64,19 +64,19 @@ public class EditOcrFileInfoDTO implements Serializable { private OcrStatusEnum ocrStatus; @ApiModelProperty(value = "分段id") - private Integer assortId; + private String assortId; @ApiModelProperty(value = "分段名称") private String assortName; @ApiModelProperty(value = "命中策略id") - private Integer ruleId; + private Long ruleId; @ApiModelProperty(value = "命中关键词") private String hitKey; @ApiModelProperty(value = "命中占比") - private Float rate; + private Double rate; @ApiModelProperty(value = "创建时间") private Date createTime; diff --git a/docus-client-interface/src/main/java/com/docus/server/dto/segmentation/ocrfileinfotest/AddOcrFileInfoTestDTO.java b/docus-client-interface/src/main/java/com/docus/server/dto/segmentation/ocrfileinfotest/AddOcrFileInfoTestDTO.java index 9ed436a..706968d 100644 --- a/docus-client-interface/src/main/java/com/docus/server/dto/segmentation/ocrfileinfotest/AddOcrFileInfoTestDTO.java +++ b/docus-client-interface/src/main/java/com/docus/server/dto/segmentation/ocrfileinfotest/AddOcrFileInfoTestDTO.java @@ -67,19 +67,19 @@ public class AddOcrFileInfoTestDTO implements Serializable { private OcrStatusEnum ocrStatus; @ApiModelProperty(value = "分段id") - private Integer assortId; + private String assortId; @ApiModelProperty(value = "分段名称") private String assortName; @ApiModelProperty(value = "命中策略id") - private Integer ruleId; + private Long ruleId; @ApiModelProperty(value = "命中关键词") private String hitKey; @ApiModelProperty(value = "命中占比") - private Float rate; + private Double rate; @ApiModelProperty(value = "创建时间") private Date createTime; diff --git a/docus-client-interface/src/main/java/com/docus/server/dto/segmentation/ocrfileinfotest/EditOcrFileInfoTestDTO.java b/docus-client-interface/src/main/java/com/docus/server/dto/segmentation/ocrfileinfotest/EditOcrFileInfoTestDTO.java index 1c37e73..f0f9739 100644 --- a/docus-client-interface/src/main/java/com/docus/server/dto/segmentation/ocrfileinfotest/EditOcrFileInfoTestDTO.java +++ b/docus-client-interface/src/main/java/com/docus/server/dto/segmentation/ocrfileinfotest/EditOcrFileInfoTestDTO.java @@ -65,19 +65,19 @@ public class EditOcrFileInfoTestDTO implements Serializable { private OcrStatusEnum ocrStatus; @ApiModelProperty(value = "分段id") - private Integer assortId; + private String assortId; @ApiModelProperty(value = "分段名称") private String assortName; @ApiModelProperty(value = "命中策略id") - private Integer ruleId; + private Long ruleId; @ApiModelProperty(value = "命中关键词") private String hitKey; @ApiModelProperty(value = "命中占比") - private Float rate; + private Double rate; @ApiModelProperty(value = "创建时间") private Date createTime; diff --git a/docus-client-interface/src/main/java/com/docus/server/entity/segmentation/OcrFileInfo.java b/docus-client-interface/src/main/java/com/docus/server/entity/segmentation/OcrFileInfo.java index b05077f..e22bd4c 100644 --- a/docus-client-interface/src/main/java/com/docus/server/entity/segmentation/OcrFileInfo.java +++ b/docus-client-interface/src/main/java/com/docus/server/entity/segmentation/OcrFileInfo.java @@ -89,7 +89,7 @@ public class OcrFileInfo implements Serializable { @ApiModelProperty(value = "分段id") @TableField("assort_id") - private Integer assortId; + private String assortId; @ApiModelProperty(value = "分段名称") @TableField("assort_name") @@ -97,7 +97,7 @@ public class OcrFileInfo implements Serializable { @ApiModelProperty(value = "命中策略id") @TableField("rule_id") - private Integer ruleId; + private Long ruleId; @ApiModelProperty(value = "命中关键词") @TableField("hit_key") @@ -105,7 +105,7 @@ public class OcrFileInfo implements Serializable { @ApiModelProperty(value = "命中占比") @TableField("rate") - private Float rate; + private Double rate; @ApiModelProperty(value = "文件大小") @TableField("file_size") diff --git a/docus-client-interface/src/main/java/com/docus/server/entity/segmentation/OcrFileInfoTest.java b/docus-client-interface/src/main/java/com/docus/server/entity/segmentation/OcrFileInfoTest.java index 84b980e..87a44b3 100644 --- a/docus-client-interface/src/main/java/com/docus/server/entity/segmentation/OcrFileInfoTest.java +++ b/docus-client-interface/src/main/java/com/docus/server/entity/segmentation/OcrFileInfoTest.java @@ -90,7 +90,7 @@ public class OcrFileInfoTest implements Serializable { @ApiModelProperty(value = "分段id") @TableField("assort_id") - private Integer assortId; + private String assortId; @ApiModelProperty(value = "分段名称") @TableField("assort_name") @@ -98,7 +98,7 @@ public class OcrFileInfoTest implements Serializable { @ApiModelProperty(value = "命中策略id") @TableField("rule_id") - private Integer ruleId; + private Long ruleId; @ApiModelProperty(value = "命中关键词") @TableField("hit_key") @@ -106,7 +106,7 @@ public class OcrFileInfoTest implements Serializable { @ApiModelProperty(value = "命中占比") @TableField("rate") - private Float rate; + private Double rate; @ApiModelProperty(value = "文件大小") @TableField("file_size") diff --git a/docus-client-interface/src/main/java/com/docus/server/entity/segmentation/OcrRuleJson.java b/docus-client-interface/src/main/java/com/docus/server/entity/segmentation/OcrRuleJson.java index 562f384..f7eca9f 100644 --- a/docus-client-interface/src/main/java/com/docus/server/entity/segmentation/OcrRuleJson.java +++ b/docus-client-interface/src/main/java/com/docus/server/entity/segmentation/OcrRuleJson.java @@ -17,7 +17,7 @@ public class OcrRuleJson { private String assortName; @ApiModelProperty(value = "占比分") - private Integer matchRatio; + private Double matchRatio; @ApiModelProperty(value = "匹配关键词 多个#分割") private String keyWord; diff --git a/docus-client-interface/src/main/java/com/docus/server/entity/segmentation/OcrRuleResult.java b/docus-client-interface/src/main/java/com/docus/server/entity/segmentation/OcrRuleResult.java index 2335f2a..94f8dd7 100644 --- a/docus-client-interface/src/main/java/com/docus/server/entity/segmentation/OcrRuleResult.java +++ b/docus-client-interface/src/main/java/com/docus/server/entity/segmentation/OcrRuleResult.java @@ -6,8 +6,18 @@ import lombok.Data; @Data public class OcrRuleResult { - @ApiModelProperty(value = "id") - private Long id; + @ApiModelProperty(value = "分段id") + private String assortId; + @ApiModelProperty(value = "分段名称") + private String assortName; + @ApiModelProperty(value = "命中策略id") + private Long ruleId; + + @ApiModelProperty(value = "命中关键词") + private String hitKey; + + @ApiModelProperty(value = "命中占比") + private Double rate; } diff --git a/docus-client-interface/src/main/java/com/docus/server/entity/segmentation/OcrSpecialResult.java b/docus-client-interface/src/main/java/com/docus/server/entity/segmentation/OcrSpecialResult.java index 91032f8..96405b2 100644 --- a/docus-client-interface/src/main/java/com/docus/server/entity/segmentation/OcrSpecialResult.java +++ b/docus-client-interface/src/main/java/com/docus/server/entity/segmentation/OcrSpecialResult.java @@ -7,7 +7,20 @@ import lombok.Data; @Data public class OcrSpecialResult { - @ApiModelProperty(value = "id") - private Long id; + @ApiModelProperty(value = "分段id") + private String assortId; + + @ApiModelProperty(value = "分段名称") + private String assortName; + + @ApiModelProperty(value = "命中策略id") + private Long ruleId; + + @ApiModelProperty(value = "命中关键词") + private String hitKey; + + @ApiModelProperty(value = "命中占比") + private Double rate; + } diff --git a/docus-client-interface/src/main/java/com/docus/server/entity/segmentation/OcrSpecialRuleJson.java b/docus-client-interface/src/main/java/com/docus/server/entity/segmentation/OcrSpecialRuleJson.java index a9ed440..a6a57b0 100644 --- a/docus-client-interface/src/main/java/com/docus/server/entity/segmentation/OcrSpecialRuleJson.java +++ b/docus-client-interface/src/main/java/com/docus/server/entity/segmentation/OcrSpecialRuleJson.java @@ -11,7 +11,7 @@ import lombok.*; public class OcrSpecialRuleJson { @ApiModelProperty(value = "命中分数") - private Integer score; + private double score; @ApiModelProperty(value = "匹配关键词 多个#分割") private String keyWord; diff --git a/docus-client-interface/src/main/java/com/docus/server/enums/OcrStatusEnum.java b/docus-client-interface/src/main/java/com/docus/server/enums/OcrStatusEnum.java index 3eacfea..d9dfb5d 100644 --- a/docus-client-interface/src/main/java/com/docus/server/enums/OcrStatusEnum.java +++ b/docus-client-interface/src/main/java/com/docus/server/enums/OcrStatusEnum.java @@ -11,7 +11,7 @@ public enum OcrStatusEnum implements IIntegerEnum { STARTING(1, "分段中"), - COMPLETE(1, "完成分段"); + COMPLETE(2, "完成分段"); private Integer value; private String display; diff --git a/docus-client-interface/src/main/java/com/docus/server/vo/segmentation/ocrfileinfo/OcrFileInfoVO.java b/docus-client-interface/src/main/java/com/docus/server/vo/segmentation/ocrfileinfo/OcrFileInfoVO.java index 73ac0d0..1f3fa3e 100644 --- a/docus-client-interface/src/main/java/com/docus/server/vo/segmentation/ocrfileinfo/OcrFileInfoVO.java +++ b/docus-client-interface/src/main/java/com/docus/server/vo/segmentation/ocrfileinfo/OcrFileInfoVO.java @@ -64,19 +64,19 @@ public class OcrFileInfoVO implements Serializable { private OcrStatusEnum ocrStatus; @ApiModelProperty(value = "分段id") - private Integer assortId; + private String assortId; @ApiModelProperty(value = "分段名称") private String assortName; @ApiModelProperty(value = "命中策略id") - private Integer ruleId; + private Long ruleId; @ApiModelProperty(value = "命中关键词") private String hitKey; @ApiModelProperty(value = "命中占比") - private Float rate; + private Double rate; @ApiModelProperty(value = "创建时间") private Date createTime; diff --git a/docus-client-interface/src/main/java/com/docus/server/vo/segmentation/ocrfileinfotest/OcrFileInfoTestVO.java b/docus-client-interface/src/main/java/com/docus/server/vo/segmentation/ocrfileinfotest/OcrFileInfoTestVO.java index 2c91a90..71884cf 100644 --- a/docus-client-interface/src/main/java/com/docus/server/vo/segmentation/ocrfileinfotest/OcrFileInfoTestVO.java +++ b/docus-client-interface/src/main/java/com/docus/server/vo/segmentation/ocrfileinfotest/OcrFileInfoTestVO.java @@ -64,19 +64,19 @@ public class OcrFileInfoTestVO implements Serializable { private OcrStatusEnum ocrStatus; @ApiModelProperty(value = "分段id") - private Integer assortId; + private String assortId; @ApiModelProperty(value = "分段名称") private String assortName; @ApiModelProperty(value = "命中策略id") - private Integer ruleId; + private Long ruleId; @ApiModelProperty(value = "命中关键词") private String hitKey; @ApiModelProperty(value = "命中占比") - private Float rate; + private Double rate; @ApiModelProperty(value = "创建时间") private Date createTime; diff --git a/docus-segmentation/src/main/java/com/docus/server/controller/OcrRuleTestController.java b/docus-segmentation/src/main/java/com/docus/server/controller/OcrRuleTestController.java index c1f05db..ac84037 100644 --- a/docus-segmentation/src/main/java/com/docus/server/controller/OcrRuleTestController.java +++ b/docus-segmentation/src/main/java/com/docus/server/controller/OcrRuleTestController.java @@ -84,6 +84,11 @@ public class OcrRuleTestController implements OcrRuleTestApi { iOcrRuleTestService.edit(editOcrRuleTestDTO); } + @Override + public void deleteAndAdd(List editOcrRuleTestDTOList) { + iOcrRuleTestService.deleteAndAdd(editOcrRuleTestDTOList); + } + /** * 批量删除 * diff --git a/docus-segmentation/src/main/java/com/docus/server/service/IOcrRuleTestService.java b/docus-segmentation/src/main/java/com/docus/server/service/IOcrRuleTestService.java index 32a1203..3e03064 100644 --- a/docus-segmentation/src/main/java/com/docus/server/service/IOcrRuleTestService.java +++ b/docus-segmentation/src/main/java/com/docus/server/service/IOcrRuleTestService.java @@ -20,10 +20,10 @@ public interface IOcrRuleTestService { /** * 判断是否命中分段规则 - * @param text + * @param ocrTextList * @return */ - OcrRuleResult handleSpecialRule(String text); + OcrRuleResult handleRule(List ocrTextList); /** * 按主键查询 @@ -71,4 +71,6 @@ public interface IOcrRuleTestService { * @return 分页列表 */ PageResult search(SearchDTO searchDTO); + + void deleteAndAdd(List editOcrRuleTestDTOList); } diff --git a/docus-segmentation/src/main/java/com/docus/server/service/IOcrSpecialRuleTestService.java b/docus-segmentation/src/main/java/com/docus/server/service/IOcrSpecialRuleTestService.java index fbe2623..68921ba 100644 --- a/docus-segmentation/src/main/java/com/docus/server/service/IOcrSpecialRuleTestService.java +++ b/docus-segmentation/src/main/java/com/docus/server/service/IOcrSpecialRuleTestService.java @@ -31,7 +31,7 @@ public interface IOcrSpecialRuleTestService { * @param result * @return */ - boolean handleSpecialRule(OcrSpecialResult result,String text); + boolean handleSpecialRuleEnd (OcrSpecialResult result,List ocrTextList); /** diff --git a/docus-segmentation/src/main/java/com/docus/server/service/handler/StartOcrTestHandler.java b/docus-segmentation/src/main/java/com/docus/server/service/handler/StartOcrTestHandler.java index c95881f..ee39f39 100644 --- a/docus-segmentation/src/main/java/com/docus/server/service/handler/StartOcrTestHandler.java +++ b/docus-segmentation/src/main/java/com/docus/server/service/handler/StartOcrTestHandler.java @@ -1,14 +1,19 @@ package com.docus.server.service.handler; +import com.docus.core.util.Func; import com.docus.log.annotation.TrackRetryListener; import com.docus.server.api.ocr.OcrApi; import com.docus.server.entity.segmentation.OcrFileInfoTest; +import com.docus.server.entity.segmentation.OcrRuleResult; import com.docus.server.entity.segmentation.OcrSpecialResult; +import com.docus.server.enums.OcrStatusEnum; import com.docus.server.infrastructure.dao.IOcrFileInfoTestDao; +import com.docus.server.service.IOcrRuleTestService; import com.docus.server.service.IOcrSpecialRuleTestService; import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.util.Date; import java.util.List; /** @@ -22,25 +27,60 @@ public class StartOcrTestHandler { private IOcrFileInfoTestDao iOcrFileInfoTestDao; @Resource private IOcrSpecialRuleTestService iOcrSpecialRuleTestService; + @Resource + private IOcrRuleTestService iOcrRuleTestService; + @TrackRetryListener("START_OCR_TEST") public void startOcr(String patientId) { + boolean isSpecialFile = false; + OcrSpecialResult lastSpecialResul = null; + //根据病案号查询文件列表 List fileInfoTestList = iOcrFileInfoTestDao.findBy("patientId",patientId); - for (OcrFileInfoTest fileInfoTest:fileInfoTestList) { + //遍历文件列表 获取ocr识别结果 List ocrTextList = ocrApi.getText(fileInfoTest.getPicCutUrl()); + + fileInfoTest.setOcrText(Func.toJson(ocrTextList)); + fileInfoTest.setOcrStatus(OcrStatusEnum.COMPLETE); + fileInfoTest.setOcrFinishTime(new Date()); + //判断上次是否特殊文件开始 需要判断是否特殊文件结尾 + if (isSpecialFile){ + fileInfoTest.setAssortId(lastSpecialResul.getAssortId()); + fileInfoTest.setAssortName(lastSpecialResul.getAssortName()); + fileInfoTest.setRuleId(lastSpecialResul.getRuleId()); + boolean b = iOcrSpecialRuleTestService.handleSpecialRuleEnd(lastSpecialResul, ocrTextList); + if (b){ + //当前分段为特殊分段结尾 + isSpecialFile = false; + lastSpecialResul = null; + } + continue; + } //优先判断是否特殊规则开始 OcrSpecialResult ocrSpecialResult = iOcrSpecialRuleTestService.handleSpecialRule(ocrTextList); //判断是否属于某个分段 + if (ocrSpecialResult!=null){ + fileInfoTest.setAssortId(ocrSpecialResult.getAssortId()); + fileInfoTest.setAssortName(ocrSpecialResult.getAssortName()); + fileInfoTest.setRuleId(ocrSpecialResult.getRuleId()); + isSpecialFile = true; + lastSpecialResul = ocrSpecialResult; + continue; + } + OcrRuleResult ocrRuleResult = iOcrRuleTestService.handleRule(ocrTextList); //更新文件数据的分段 - + if (ocrRuleResult!=null){ + fileInfoTest.setAssortId(ocrRuleResult.getAssortId()); + fileInfoTest.setAssortName(ocrRuleResult.getAssortName()); + fileInfoTest.setRuleId(ocrRuleResult.getRuleId()); + } } - //更新数据库表 - + iOcrFileInfoTestDao.updateBatchById(fileInfoTestList,1000); } } diff --git a/docus-segmentation/src/main/java/com/docus/server/service/impl/OcrRuleTestServiceImpl.java b/docus-segmentation/src/main/java/com/docus/server/service/impl/OcrRuleTestServiceImpl.java index 1069cf9..b09d722 100644 --- a/docus-segmentation/src/main/java/com/docus/server/service/impl/OcrRuleTestServiceImpl.java +++ b/docus-segmentation/src/main/java/com/docus/server/service/impl/OcrRuleTestServiceImpl.java @@ -1,5 +1,6 @@ package com.docus.server.service.impl; +import com.docus.core.util.Func; import com.docus.infrastructure.redis.service.IdService; import com.docus.infrastructure.web.request.SearchDTO; import com.docus.infrastructure.web.response.PageResult; @@ -7,8 +8,7 @@ import com.docus.server.convert.OcrRuleTestConvert; import com.docus.server.dto.segmentation.ocrruletest.AddOcrRuleTestDTO; import com.docus.server.dto.segmentation.ocrruletest.DeleteOcrRuleTestDTO; import com.docus.server.dto.segmentation.ocrruletest.EditOcrRuleTestDTO; -import com.docus.server.entity.segmentation.OcrRuleResult; -import com.docus.server.entity.segmentation.OcrRuleTest; +import com.docus.server.entity.segmentation.*; import com.docus.server.infrastructure.dao.IOcrRuleTestDao; import com.docus.server.service.IOcrRuleTestService; import com.docus.server.vo.segmentation.ocrruletest.OcrRuleTestVO; @@ -16,7 +16,9 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.util.Comparator; import java.util.List; +import java.util.stream.Collectors; /** * 匹配策略表-调试 服务实现类 @@ -32,17 +34,56 @@ public class OcrRuleTestServiceImpl implements IOcrRuleTestService { private IdService idService; @Override - public OcrRuleResult handleSpecialRule(String text) { - + public OcrRuleResult handleRule(List ocrTextList) { //查询所有规则列表 - - - //判断是否包含 - - - //判断命中率 - - + List ocrRuleTestList = iOcrRuleTestDao.findAll(); + //判断是否符合某个条件的开始条件 + for (OcrRuleTest ocrRuleTest : ocrRuleTestList) { + String assortId = ocrRuleTest.getAssortId(); + double score = ocrRuleTest.getMatchRatio(); + String[] keyWordList = ocrRuleTest.getKeyWord().split("#"); + + for (String ocrText : ocrTextList) { + for (int i = 0; i < keyWordList.length; i++) { + String keyWord = keyWordList[i]; + if (ocrText.contains(keyWord)) { + double rate = keyWord.length() / (double) ocrText.length() * 100; + //判断是否命中 + if (rate >= score) { + //判断二级是否启用 + if (ocrRuleTest.getIsUseSecond() && Func.isNotEmpty(ocrRuleTest.getJson())) { + List ocrRuleList = Func.parseJsonArray(ocrRuleTest.getJson(), OcrRuleJson.class) + .stream().sorted(Comparator.comparing(OcrRuleJson::getSort)) + .collect(Collectors.toList()); + for (OcrRuleJson ruleJson : ocrRuleList) { + assortId = ruleJson.getAssortId(); + keyWordList = ruleJson.getKeyWord().split("#"); + score = ruleJson.getMatchRatio(); + for (int j = 0; j < keyWordList.length; j++) { + keyWord = keyWordList[i]; + if (ocrText.contains(keyWord)) { + rate = keyWord.length() / (double) ocrText.length() * 100; + //判断是否命中 + if (rate >= score) { + OcrRuleResult ocrRuleResult = new OcrRuleResult(); + ocrRuleResult.setRuleId(ocrRuleTest.getId()); + ocrRuleResult.setAssortId(assortId); + return ocrRuleResult; + } + } + } + } + } else { + OcrRuleResult ocrRuleResult = new OcrRuleResult(); + ocrRuleResult.setRuleId(ocrRuleTest.getId()); + ocrRuleResult.setAssortId(assortId); + return ocrRuleResult; + } + } + } + } + } + } return null; } @@ -95,6 +136,19 @@ public class OcrRuleTestServiceImpl implements IOcrRuleTestService { //return result; } + @Override + public void deleteAndAdd(List editOcrRuleTestDTOList) { + List ruleTestList = editOcrRuleTestDTOList.stream().map(m->{ + OcrRuleTest ocrRuleTest = OcrRuleTestConvert.INSTANCE.convertDO(m); + ocrRuleTest.setId(ocrRuleTest.getId()==null?idService.getDateSeq():ocrRuleTest.getId()); + return ocrRuleTest; + }).collect(Collectors.toList()); + String assortId = ruleTestList.get(0).getAssortId(); + + iOcrRuleTestDao.deleteBy("assortId",assortId); + iOcrRuleTestDao.saveBatch(ruleTestList,1000); + } + /** * 新增 * diff --git a/docus-segmentation/src/main/java/com/docus/server/service/impl/OcrSpecialRuleTestServiceImpl.java b/docus-segmentation/src/main/java/com/docus/server/service/impl/OcrSpecialRuleTestServiceImpl.java index 4edb9cf..764d601 100644 --- a/docus-segmentation/src/main/java/com/docus/server/service/impl/OcrSpecialRuleTestServiceImpl.java +++ b/docus-segmentation/src/main/java/com/docus/server/service/impl/OcrSpecialRuleTestServiceImpl.java @@ -1,5 +1,7 @@ package com.docus.server.service.impl; +import com.docus.core.util.Func; +import com.docus.core.util.jackson.JsonUtil; import com.docus.infrastructure.redis.service.IdService; import com.docus.infrastructure.web.request.SearchDTO; import com.docus.infrastructure.web.response.PageResult; @@ -8,10 +10,13 @@ import com.docus.server.dto.segmentation.ocrspecialruletest.AddOcrSpecialRuleTes import com.docus.server.dto.segmentation.ocrspecialruletest.DeleteOcrSpecialRuleTestDTO; import com.docus.server.dto.segmentation.ocrspecialruletest.EditOcrSpecialRuleTestDTO; import com.docus.server.entity.segmentation.OcrSpecialResult; +import com.docus.server.entity.segmentation.OcrSpecialRule; +import com.docus.server.entity.segmentation.OcrSpecialRuleJson; import com.docus.server.entity.segmentation.OcrSpecialRuleTest; import com.docus.server.infrastructure.dao.IOcrSpecialRuleTestDao; import com.docus.server.service.IOcrSpecialRuleTestService; import com.docus.server.vo.segmentation.ocrspecialruletest.OcrSpecialRuleTestVO; +import io.swagger.annotations.ApiModelProperty; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -31,20 +36,48 @@ public class OcrSpecialRuleTestServiceImpl implements IOcrSpecialRuleTestService @Resource private IdService idService; + @Override public OcrSpecialResult handleSpecialRule(List ocrTextList) { - // 查询所以的特殊规则列表 - + // 查询所以的特殊规则列表 + List all = iOcrSpecialRuleTestDao.findAll(); //判断是否符合某个条件的开始条件 - - + for (OcrSpecialRuleTest ocrSpecialRuleTest : all) { + + String assortId = ocrSpecialRuleTest.getAssortId(); + String startJson = ocrSpecialRuleTest.getStartJson(); + String assortName = ocrSpecialRuleTest.getName(); + + List ocrSpecialRuleJsons = Func.parseJsonArray(startJson, OcrSpecialRuleJson.class); + for (OcrSpecialRuleJson ocrSpecialRuleJson : ocrSpecialRuleJsons) { + double score = ocrSpecialRuleJson.getScore(); + String[] keyWordList = ocrSpecialRuleJson.getKeyWord().split("#"); + for (String ocrText : ocrTextList) { + for (int i = 0; i < keyWordList.length; i++) { + String keyWord = keyWordList[i]; + if (ocrText.contains(keyWord)){ + double rate = keyWord.length() / (double)ocrText.length() * 100; + //判断是否命中 + if (rate>=score) { + OcrSpecialResult ocrSpecialResult = new OcrSpecialResult(); + ocrSpecialResult.setAssortId(assortId); + ocrSpecialResult.setAssortName(assortName); + ocrSpecialResult.setRate(rate); + ocrSpecialResult.setHitKey(keyWord); + return ocrSpecialResult; + } + } + } + } + } + } //默认返回空对象 return null; } @Override - public boolean handleSpecialRule(OcrSpecialResult result,String text) { + public boolean handleSpecialRuleEnd(OcrSpecialResult result, List ocrTextList) { //获取结束条件列表