Browse Source

第三方导入,数字类型增加按精度截断

欧阳劲驰 1 month ago
parent
commit
bb3804fdae

+ 21 - 3
src/main/java/com/shkpr/service/alambizplugin/components/GisSurveyThirdImporter.java

@@ -39,6 +39,8 @@ import org.springframework.util.concurrent.ListenableFuture;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.Duration;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
@@ -487,9 +489,25 @@ public class GisSurveyThirdImporter {
         String templateName = propertyTemplate.getName();
         //获取值
         String value = data.get(templateName);
-        //构建dto,并将值长度64截断
-        if (StringUtils.isNotBlank(value)) return new GisSurveyPropertyValueThirdCopy(params.getJobId()
-                , layerApply.getCode(), propertyTemplate.getKey(), StringUtils.substring(value, 0, 64));
+        //构建dto
+        if (StringUtils.isNotBlank(value)) {
+            //double按数字处理,否则按字符串处理
+            if (propertyTemplate.getType().equals(GisSurveyExcelDefine.DATA_TYPE.DOUBLE)
+                    && NumberUtils.isParsable(value)
+                    && propertyTemplate.getPrecisions() != null) {
+                //值按精度设置小数位,并抹去0
+                value = new BigDecimal(value)
+                        .setScale(propertyTemplate.getPrecisions(), RoundingMode.HALF_UP)
+                        .stripTrailingZeros()
+                        .toPlainString();
+
+            } else {
+                //值长度64截断
+                value = StringUtils.substring(value, 0, 64);
+            }
+            return new GisSurveyPropertyValueThirdCopy(params.getJobId()
+                    , layerApply.getCode(), propertyTemplate.getKey(), value);
+        }
 
         return null;
     }

+ 1 - 1
src/main/java/com/shkpr/service/alambizplugin/components/checker/InvalidPropertiesFinder.java

@@ -193,7 +193,7 @@ public class InvalidPropertiesFinder {
                 );
                 missingRequirementsResult.add(gisSurveyThirdImportElement);
             } else if ((GisSurveyExcelDefine.DATA_TYPE.INT.equals(propertyTemplate.getType()) ||
-                    GisSurveyExcelDefine.DATA_TYPE.FLOAT.equals(propertyTemplate.getType()))
+                    GisSurveyExcelDefine.DATA_TYPE.DOUBLE.equals(propertyTemplate.getType()))
                     && !NumberUtils.isParsable(data.get(templateName)))
                 //存在且类型为数字,则判断数字类型
                 invalidTypesResult.add(GisSurveyThirdImportElement.create(data,

+ 1 - 1
src/main/java/com/shkpr/service/alambizplugin/constants/GisSurveyExcelDefine.java

@@ -48,7 +48,7 @@ public interface GisSurveyExcelDefine {
      * 数据类型
      */
     interface DATA_TYPE {
-        String FLOAT = "float";
+        String DOUBLE = "double";
         String INT = "int";
     }
 

+ 2 - 2
src/main/resources/mapper/GisMetadataLayerTemplateMapper.xml

@@ -80,7 +80,7 @@
         mpt.create_time as property_create_time,
         mpt.update_time as property_update_time
         from k3_gis_metadata_layer_template mlt
-        left join k3_gis_metadata_property_template mpt
+        left join v_k3_gis_metadata_property_template mpt
         on mlt.nature = mpt.nature and mlt.key = mpt.layer
         where mlt.nature = #{nature,jdbcType=VARCHAR}
         and mlt.name in
@@ -127,7 +127,7 @@
         mpt.create_time as property_create_time,
         mpt.update_time as property_update_time
         from k3_gis_metadata_layer_template mlt
-        left join k3_gis_metadata_property_template mpt
+        left join v_k3_gis_metadata_property_template mpt
         on mlt.nature = mpt.nature and mlt.key = mpt.layer
         where mlt.key in
         <foreach item="item" index="index" collection="keys"