Browse Source

表单相关:scale C8.103

yangyj 2 năm trước cách đây
mục cha
commit
3f7ea6af53

+ 1 - 1
blade-service/blade-manager/src/main/java/com/mixsmart/utils/CustomFunction.java

@@ -1327,7 +1327,7 @@ public class CustomFunction {
                     int _hz = Integer.parseInt(i < rateIn.length ? rateIn[i] : rateIn[rateIn.length - 1]);
                     String _deviation = i < deviationIn.length ? deviationIn[i] : deviationIn[deviationIn.length - 1];
                     String _pass = i < passIn.length ? passIn[i] : passIn[passIn.length - 1];
-                    int _scale = StringUtils.getScale(e, _deviation);
+                    int _scale = StringUtils.getScaleZero(e, _deviation);
                     String delimiter = StringUtils.handleNull(matcherFindGroup("[^0-9.]", e, 0, false));
                     if (StringUtils.isEmpty(delimiter)) {
                         delimiter = CONCAT;

+ 38 - 6
blade-service/blade-manager/src/main/java/com/mixsmart/utils/FormulaUtils.java

@@ -138,6 +138,21 @@ public class FormulaUtils {
         return result;
     }
 
+
+    public static void main(String[] args) {
+        FormData fd = new FormData();
+        fd.setEName("1111");
+        List<ElementData> list = new ArrayList<>();
+        list.add(new ElementData(1,1,1));
+        test(fd);
+        System.out.println(fd.getEName());
+    }
+    public static void  test(FormData fd){
+        fd.setEName("22222");
+        fd.getValues().add(new ElementData(2,2,2));
+    }
+
+
     public  static void write(FormData fd, Object data,Boolean nullOrBlank ){
         if(Func.isEmpty(fd.getValues())){
             /*无定位信息不写入*/
@@ -350,7 +365,7 @@ public class FormulaUtils {
         //huangjn 每份填报数据的id,目前日志专用
     }
 
-    /**从元素名称中解析项目名称*/
+    /**从元素名称中解析项目名称,细化项目匹配用*/
     public static  String parseItemName(String eName){
         if (StringUtils.isEmpty(eName)) {
             return eName;
@@ -369,6 +384,19 @@ public class FormulaUtils {
                 .collect(Collectors.joining());
     }
 
+    /*A15检查内容专用*/
+    public static  String checkItemName(String eName){
+        if (StringUtils.isEmpty(eName)) {
+            return eName;
+        }
+        /*分割字符串,选取第一个匹配的子串*/
+        String str = eName.replaceAll("\\s", "");
+        Pattern pattern = compile("[((_]");
+        String[] candidate = pattern.split(str);
+        String regex = "[^\\u4e00-\\u9fa5]+";
+        return Arrays.stream(candidate).map(s->s.replaceAll(regex,"")).distinct().filter(StringUtils::isNotEmpty).filter(s->!isContainKeywords2(s)).findFirst().orElse("");
+    }
+
     private static String filterString(String s, Pattern p) {
         s=s.replaceAll("【[^【】]+】","");
         Matcher matcher = p.matcher(s);
@@ -383,6 +411,10 @@ public class FormulaUtils {
         List<String> keywords = Arrays.asList( ":", "个","附录","抽查","测","求","小于","大于","检查","仪","按","不","各","记录","且","规定","值或实");
         return keywords.stream().anyMatch(s::contains);
     }
+    private static boolean isContainKeywords2(String s) {
+        List<String> keywords = Arrays.asList( "实测项目");
+        return keywords.stream().anyMatch(s::contains);
+    }
 
     public static List<String> itemNames =Arrays.asList(
             ""
@@ -422,13 +454,13 @@ public class FormulaUtils {
             ,"竖直度(mm)_挖孔桩_0.5%桩长,且≤200_铅锤线:每桩检测_实测值或实测偏差值"
             , "2△_压浆压力值 (Mpa)_满足施工技术 规范规定_查油压表读书;每管道检查_实测值或实测偏差值"
             , "基底承载力(KPa)_不小于设计_实测值或实测偏差值"
+            ,"1△_受力钢筋间距 (mm)_两排以上间距_±5_实测值或实测偏差值"
     );
 
-/*
-    public static void main(String[] args) {
-        itemNames.stream().map(FormulaUtils::parseItemName).forEach(System.out::println);
-    }
-*/
+/*    public static void main(String[] args) {
+     //   itemNames.stream().map(FormulaUtils::parseItemName).forEach(System.out::println);
+        itemNames.stream().map(FormulaUtils::checkItemName).forEach(System.out::println);
+    }*/
 
     /**
      * @Description 深度拷贝

+ 44 - 8
blade-service/blade-manager/src/main/java/com/mixsmart/utils/StringUtils.java

@@ -11,12 +11,14 @@ import java.io.UnsupportedEncodingException;
 import java.lang.reflect.Field;
 import java.lang.reflect.Modifier;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.text.DecimalFormat;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 
 /**
@@ -952,7 +954,7 @@ public class StringUtils {
         if (value instanceof Number) {
             return true;
         }
-        String pattern = "^[+-]?\\d+(\\.\\d+)?$";
+        String pattern = "^[+-]?\\d+(\\.[\\dEe]+)?$";
         Pattern r = Pattern.compile(pattern);
         Matcher m = r.matcher(String.valueOf(value));
         return m.matches();
@@ -1294,27 +1296,49 @@ public class StringUtils {
 
     /**
      * @return int
-     * @Description 获取最大小数位
+     * @Description 获取最大小数位,转String计算小数位格式,超长浮点数先转double,四舍五入取五位
      * @Param [number]
      * @Author yangyj
      * @Date 2021.12.23 15:08
      **/
+    /*去除有效数字后面的0*/
     public static Integer getScale(Object... number) {
         int max = 0;
         if (number != null) {
-            return getScale(Arrays.asList(number));
+            return getScale(scaleParam(number),1);
+        }
+        return max;
+    }
+    /*保留有效数字后面的0*/
+    public static Integer getScaleZero(Object... number){
+        int max = 0;
+        if (number != null) {
+            return getScale(scaleParam(number),0);
         }
         return max;
     }
 
-    private static Integer getScale(List<Object> number){
+    public static List<Object> scaleParam(Object ... number){
+        return Arrays.stream(number).filter(StringUtils::isNotEmpty).flatMap(e-> CustomFunction.obj2ListNe(e).stream()).distinct().filter(StringUtils::isNumber).map(e->{
+            /*0.3999999999999986 检测到超长小数位先转double处理,再还原回String*/
+            String tg=e.toString();
+            if(tg.length()-tg.indexOf(StringPool.DOT)>6||tg.contains("e")){
+                return BigDecimal.valueOf(Double.parseDouble(tg)).setScale(4, RoundingMode.HALF_UP).toString();
+            }else {
+                return e.toString();
+            }
+        }).collect(Collectors.toList());
+    }
+
+    public static final String[] SCALE_REG=new String[]{"(\\d)+.(\\d)*[0-9]","(\\d)+.(\\d)*[1-9]"};
+    private static Integer getScale(List<Object> number,Integer zero){
         int max=0;
         if(ListUtils.isNotEmpty(number)){
             for (Object n : number) {
                 if (StringUtils.isNotEmpty(n)) {
-                    String[] sa = n.toString().split(",");
+                    String[] sa = n.toString().split(StringPool.COMMA);
                     for (String s : sa) {
-                        Matcher m = RegexUtils.matcher("(\\d)+.(\\d)*[1-9]", s);
+                        Matcher m = RegexUtils.matcher(SCALE_REG[zero], s);
                         if (m.find()) {
                             int cp = new StringBuilder(m.group()).reverse().toString().indexOf(".");
                             if (cp < 5) {
@@ -1329,11 +1353,23 @@ public class StringUtils {
     }
 
 //    public static void main(String[] args) {
-//         List<Object> list = Arrays.asList("16.001",27.0,5,6);
+//        List<Double> list = new ArrayList<>();
+//        list.add(Double.parseDouble("0.3999999999999986"));
+//        list.add(Double.parseDouble("0.1999999999999996"));
+//        list.add(Double.parseDouble("-0.21"));
+//        list.add(Double.parseDouble("-1.2632e1"));
 //        System.out.println(getScale(list));
-//        System.out.println(getScale(16.00,17.00,10,8));
+//        System.out.println(getScaleZero(list));
 //    }
 
+/*    public static void main(String[] args) {
+         List<Object> list = Arrays.asList("16.001",27.0,5,6);
+        System.out.println(getScale(list));
+        System.out.println(getScaleZero(150.0));
+        System.out.println(getScale(150.0));
+
+    }*/
+
     /**
      * @return java.lang.String
      * @Description 公式脚本转义

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

@@ -500,7 +500,8 @@ public class FormulaController {
         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()));
+        map.put("解析后A15", result.stream().map(e -> FormulaUtils.checkItemName(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);
     }
 

+ 1 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/FormulaTurnPoint.java

@@ -172,6 +172,7 @@ public class FormulaTurnPoint implements FormulaStrategy {
                 for(int i=0;i<fda.length;i++){
                     FormData fd= fda[i];
                     FormulaUtils.write(fd,group.get(i),true);
+                    fd.setUpdate(1);
                 }
             }
         });

+ 2 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -983,7 +983,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         try{
             if(tec.summary.size()>0){
                 /**/
-                List<String> result=tec.checkItems.stream().filter(fdTmp->fdTmp.getValues().stream().map(ElementData::getValue).anyMatch(e->StringUtils.isNotEmpty(e)&&StringUtils.isNotEquals("/",e))).map(FormData::getEName).map(FormulaUtils::parseItemName).distinct().collect(Collectors.toList());
+                List<String> result=tec.checkItems.stream().filter(fdTmp->fdTmp.getValues().stream().map(ElementData::getValue).anyMatch(e->StringUtils.isNotEmpty(e)&&StringUtils.isNotEquals("/",e))).map(FormData::getEName).map(FormulaUtils::checkItemName).distinct().collect(Collectors.toList());
                 Optional<FormData> opk= tec.summary.stream().filter(FormData::executable).filter(f->StringUtils.isEquals(f.getFormula().getNumber(),CHECK_ITEMS)).findAny();
                 List<String> history=null;
                 if(opk.isPresent()&&!opk.get().empty()){
@@ -991,7 +991,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                     history=  Arrays.asList(opk.get().getValues().get(0).stringValue().replaceAll("[\\s\\n]+","").split("[,、,]"));
                 }
                 if(history!=null&&history.size()>0){
-                    List<String> itemAll=tec.checkItems.stream().map(FormData::getEName).map(FormulaUtils::parseItemName).distinct().collect(Collectors.toList());
+                    List<String> itemAll=tec.checkItems.stream().map(FormData::getEName).map(FormulaUtils::checkItemName).distinct().collect(Collectors.toList());
                     List<String> customize=history.stream().filter(s->!itemAll.contains(s)).collect(Collectors.toList());
                     result.addAll(customize);
                 }