Bläddra i källkod

公式相关:优化识别率

yangyj 2 år sedan
förälder
incheckning
219a5dc235

+ 28 - 5
blade-service/blade-manager/src/main/java/com/mixsmart/utils/FormulaUtils.java

@@ -323,13 +323,36 @@ public class FormulaUtils {
     }
 
     /**从元素名称中解析项目名称*/
-    public static final  Set<String> EX_WORD=new HashSet<String>(){{add("或");}};
     public static  String parseItemName(String eName){
-        String[] candidate= StringUtils.handleNull(eName).replaceAll("[\\t\\n\\s+]","").split("[((_]");
-        if(candidate.length>0){
-            return Arrays.stream(candidate).map(s->s.replaceAll("[^\\u4e00-\\u9fa5]+","").replaceAll("(在合格标准内|满足设计要求|质量评定|评定|判定|项目|总数|抽测|实测|偏差|设计|合格)[率值]?","")).filter(s->!EX_WORD.contains(s)&&StringUtils.isNotEmpty(s)).collect(Collectors.joining());
+        if (StringUtils.isEmpty(eName)) {
+            return eName;
         }
-        return eName;
+
+        String str = eName.replaceAll("\\s", "");
+        Pattern pattern = Pattern.compile("[((_]");
+        String[] candidate = pattern.split(str);
+
+        String regex = "[^\\u4e00-\\u9fa5]+";
+        Pattern p = Pattern.compile(regex);
+
+        return Arrays.stream(candidate)
+                .map(s -> filterString(s, p))
+                .filter(s -> !isContainKeywords(s))
+                .collect(Collectors.joining());
+    }
+
+    private static String filterString(String s, Pattern p) {
+        Matcher matcher = p.matcher(s);
+        return matcher.replaceAll("").replaceAll(getRegex(), "");
+    }
+    private static String getRegex() {
+        return "(在合格标准内|满足设计要求|质量评定|评定|判定|项目|总数|抽测|实测|偏差|设计|合格)[率值]?";
+    }
+
+
+    private static boolean isContainKeywords(String s) {
+        List<String> keywords = Arrays.asList("或", "每", "个");
+        return keywords.stream().anyMatch(s::contains);
     }
 
     public static byte[] compress(String data) throws IOException {

+ 45 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/FormulaController.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import com.mixsmart.utils.CustomFunction;
+import com.mixsmart.utils.FormulaUtils;
 import com.mixsmart.utils.ListUtils;
 import com.mixsmart.utils.StringUtils;
 import io.swagger.annotations.Api;
@@ -25,6 +26,7 @@ import org.springblade.manager.entity.*;
 import org.springblade.manager.formula.KeyMapper;
 import org.springblade.manager.service.*;
 import org.springblade.manager.service.impl.FormulaServiceImpl;
+import org.springblade.manager.vo.AppWbsTreeContractVO;
 import org.springblade.manager.wrapper.FormulaWrapper;
 import org.springframework.dao.EmptyResultDataAccessException;
 import org.springframework.jdbc.core.JdbcTemplate;
@@ -53,7 +55,6 @@ public class FormulaController {
     private final IContractInfoService contractInfoService;
     private final ITextdictInfoService textdictInfoService;
     private final IFormulaOptionService formulaOptionService;
-
     // 合同段服务-
     private final IWbsTreeContractService wbsTreeContractService;
     /**
@@ -427,5 +428,48 @@ public class FormulaController {
 
 
 
+    @GetMapping("/tracing")
+    @ApiOperationSupport(order = 10)
+    public R<Object> tracing(Long pkeyId){
+       WbsTreeContract one= this.wbsTreeContractService.getOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getPKeyId,pkeyId));
+       if(one!=null){
+         List<String> list = new ArrayList<>();
+         list.add(Func.isNotBlank(one.getFullName())?one.getFullName():one.getNodeName());
+         int max=20;
+         int loop=0;
+         String parentId= one.getParentId().toString();
+         while (loop<max&&StringUtils.isNotEquals(0,parentId)){
+             WbsTreeContract next= this.wbsTreeContractService.getOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getContractId,one.getContractId()).eq(WbsTreeContract::getId,parentId));
+             parentId=next.getParentId().toString();
+             list.add(Func.isNotBlank(next.getFullName())?next.getFullName():next.getNodeName());
+             loop++;
+         }
+         Collections.reverse(list);
+           final String[] indent = {""};
+           String result = list.stream()
+                   .map(item -> {
+                       String line = indent[0] + item;
+                       indent[0] += "  ";
+                       return line;
+                   })
+                   .collect(Collectors.joining("\n"));
+           System.out.println(result);
+         return R.data(result);
+       }
+        return R.fail("无数据");
+    }
+
+
+    @GetMapping("/item-matching")
+    @ApiOperationSupport(order = 10)
+    public R<Object> matching(String tableName ,String search){
+            String sql="select a.tab_ch_name tb,b.e_name en,b.id,b.e_key ek from m_table_info a join m_wbs_form_element b on b.f_id=a.id where b.is_deleted=0 and a.tab_en_name=? and b.e_name like ?";
+            List<Map<String,Object>> result = this.jdbcTemplate.queryForList(sql, tableName,"%"+search+"%");
+            Map<String,Object> map = new HashMap<>();
+            map.put("解析前", result.stream().map(e-> StringUtils.handleNull(e.get("en"))).collect(Collectors.toList()));
+            map.put("解析后", result.stream().map(e-> FormulaUtils.parseItemName(StringUtils.handleNull(e.get("en")))).collect(Collectors.toList()));
+            return R.data(map);
+    }
+
 
 }