master
chenfeng 4 months ago
parent 69dff0aa6a
commit f488db793e
  1. 48
      yudao-server/src/main/java/cn/iocoder/yudao/server/service/CertificateOfApprovalService.java
  2. 13
      yudao-server/src/main/java/cn/iocoder/yudao/server/service/SpecialGasCylinderService.java
  3. 13
      yudao-server/src/main/java/cn/iocoder/yudao/server/service/SupervisionService.java

@ -8,11 +8,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
@Service
@ -120,7 +119,14 @@ public class CertificateOfApprovalService {
if (StrUtil.contains(productId, "瓶号")) {
productId = StrUtil.removePrefix(productId, "瓶号");
}
equipmentRegistryRespVO.setProductId(productId);
// TODO 再次筛选一遍,查看有没有遗漏的编号
String ofo = extractRelatedNumbersAsString(texts, productId);
String finalProductId = productId;
String combinedId = Optional.ofNullable(ofo)
.filter(s -> !s.isEmpty())
.map(s -> finalProductId + "/" + s)
.orElse(productId);
equipmentRegistryRespVO.setProductId(combinedId);
}
}
String nominalWorkingPressure = extractManufacturer(texts, fieldMap.get("nominalWorkingPressure"), 1);
@ -331,4 +337,38 @@ public class CertificateOfApprovalService {
}
return null; // 未找到或越界时返回null
}
public static String extractRelatedNumbersAsString(List<String> recTexts, String knownNumber) {
if (recTexts == null || knownNumber == null) return "";
// 1. 动态生成匹配模式
String dynamicPattern = buildDynamicPattern(knownNumber);
Pattern pattern = Pattern.compile(dynamicPattern);
// 2. 提取所有匹配项(去重+跳过已知编号)
StringJoiner result = new StringJoiner("/");
boolean foundKnownNumber = false;
for (String text : recTexts) {
if (pattern.matcher(text).matches()) {
if (!foundKnownNumber) {
if (text.equals(knownNumber)) {
foundKnownNumber = true; // 开始记录后续编号
}
continue;
}
// 避免重复添加
if (result.length() == 0 || !text.equals(result.toString().split("/")[result.toString().split("/").length - 1])) {
result.add(text);
}
}
}
return result.toString();
}
private static String buildDynamicPattern(String sample) {
String prefix = sample.replaceAll("[^A-Za-z].*", "");
String digits = sample.replaceAll("[^0-9]", "");
return "^" + prefix + "\\d{" + digits.length() + "}$";
}
}

@ -49,6 +49,15 @@ public class SpecialGasCylinderService {
} else {
manufacturerField = extractManufacturer(texts, fieldMap.get("manufacturerField"), 1);
if (ObjectUtil.isNotEmpty(manufacturerField)) {
// 判断获取的是否是公司名称
boolean ofo = containsTargetWords(manufacturerField);
String manufacturerFieldNew = null;
if (!ofo) {
manufacturerFieldNew = extractManufacturer(texts, fieldMap.get("manufacturerField"), -1);
if (ObjectUtil.isNotEmpty(manufacturerFieldNew)){
manufacturerField =manufacturerFieldNew;
}
}
equipmentRegistryRespVO.setManufacturer(manufacturerField);
equipmentRegistryRespVO.setSupervisionAgency(manufacturerField);
}
@ -160,6 +169,8 @@ public class SpecialGasCylinderService {
}
return null; // 未找到或越界时返回null
}
public static boolean containsTargetWords(String input) {
return input.contains("有限公司") || input.contains("公司");
}
}

@ -104,11 +104,12 @@ public class SupervisionService {
List<EquipmentRegistryRespVO> equipmentRegistryRespVOS = new ArrayList<>();
for (OcrResponseVo.TableRecResult result : tableRecResults) {
List<String> texts = new ArrayList<>();
List<String> rec_texts =new ArrayList<>();
int isTableOcrPred = 0;
//表格返回参数table_res_list
if (CollectionUtil.isNotEmpty(result.getPrunedResult().getTable_res_list()) && result.getPrunedResult().getTable_res_list().size() == 1) {
texts = result.getPrunedResult().getTable_res_list().get(0).getTable_ocr_pred().getRec_texts();
List<String> rec_texts = result.getPrunedResult().getOverall_ocr_res().getRec_texts();
rec_texts = result.getPrunedResult().getOverall_ocr_res().getRec_texts();
//判断table的list无效
if (texts.size() < rec_texts.size() - 36) {
texts = rec_texts;
@ -167,9 +168,15 @@ public class SupervisionService {
}
equipmentRegistryRespVO.setType("productQualified");
equipmentRegistryRespVOS.add(equipmentRegistryRespVO);
}else {
boolean NoProduct = rec_texts.stream().anyMatch(t -> t.contains("登记表") || t.contains("特种设备使用登记表"));
//在循环检查一次
if (NoProduct){
equipmentRegistryRespVO = productQualifiedService.getCertificateOfApproval(rec_texts, postfix);
}
equipmentRegistryRespVO.setType("productQualified");
equipmentRegistryRespVOS.add(equipmentRegistryRespVO);
}
}
param.put("extractedData", equipmentRegistryRespVOS);
return param;

Loading…
Cancel
Save