소스 검색

处理异常值,出现大于3万时,取上一条

欧阳劲驰 3 달 전
부모
커밋
3ee0ea46ea

+ 27 - 0
src/main/java/com/shkpr/service/aimodelpower/bizmgr/KprAimTapWaterBizFun.java

@@ -690,6 +690,19 @@ public class KprAimTapWaterBizFun {
                                         }
 //                                    }
                                 }
+
+                                //数据异常值判断,如大于3万,使用上一条数据
+                                if (value!=null && value > 30000) {
+                                   Double dbLastValue  = getWaterTapWaterApi().getLastValue(
+                                            (String) recordAllEntity.get("org_name"),
+                                            (String) recordAllEntity.get("time"),
+                                            (String) recordAllEntity.get("value_tag"),
+                                            30000.0,-30000.0);
+                                    if (dbLastValue != null) {
+                                        value = dbLastValue;
+                                    }
+                                }
+
                                 recordAllEntity.put("value", value);
                                 List<Map<String, Object>> queryWaterRecord = getWaterTapWaterApi().getWaterCollectionRecordAllListNew(1, 0,
                                         " WHERE org_name = '" + recordAllEntity.get("org_name")
@@ -1183,6 +1196,20 @@ public class KprAimTapWaterBizFun {
                                                             }
 //                                                        }
                                                     }
+
+                                                    //数据异常值判断,如大于3万,使用上一条数据
+                                                    if (value!=null && value > 30000) {
+
+                                                        Double dbLastValue  = getWaterTapWaterApi().getLastValue(
+                                                                (String) recordAllEntity.get("org_name"),
+                                                                (String) recordAllEntity.get("time"),
+                                                                (String) recordAllEntity.get("value_tag"),
+                                                                30000.0,-30000.0);
+                                                        if (dbLastValue != null) {
+                                                            value = dbLastValue;
+                                                        }
+                                                    }
+
                                                     recordAllEntity.put("value", value);
                                                     List<Map<String, Object>> queryWaterRecord = getWaterTapWaterApi().getWaterCollectionRecordAllList(1, 0,
                                                             " WHERE org_name = '" + recordAllEntity.get("org_name")

+ 14 - 0
src/main/java/com/shkpr/service/aimodelpower/dbdao/shizilaishuiDataSource/WaterZILAISHUIDao.java

@@ -768,4 +768,18 @@ public class WaterZILAISHUIDao {
             return -1;
         }
     }
+
+    public String findLastValue(String orgName, String time, String valueTag, Double maxValue, Double minValue) {
+        //入参数
+        Object[] params = {orgName, time, valueTag, minValue, maxValue};
+        //sql
+        String sql = "SELECT value FROM water_collecation_record_all_new " +
+                "WHERE org_name = ? " +
+                "AND time::timestamp < ?::timestamp " +
+                "AND value_tag = ? " +
+                "AND \"value\"::float8 > ? AND \"value\"::float8 < ? " +
+                "ORDER BY time DESC LIMIT 1";
+        //查询并返回结果
+        return new JdbcTemplate(childDataSource).queryForObject(sql, params, String.class);
+    }
 }

+ 16 - 0
src/main/java/com/shkpr/service/aimodelpower/dbdao/shizilaishuiDataSource/service/WaterTapWaterServiceImpl.java

@@ -4,6 +4,7 @@ package com.shkpr.service.aimodelpower.dbdao.shizilaishuiDataSource.service;
 import com.global.base.log.LogLevelFlag;
 import com.shkpr.service.aimodelpower.dbdao.shizilaishuiDataSource.WaterZILAISHUIDao;
 import com.shkpr.service.aimodelpower.dbdao.shizilaishuiDataSource.service.intef.WaterTapWaterService;
+import org.apache.commons.lang3.math.NumberUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -380,6 +381,21 @@ public class WaterTapWaterServiceImpl implements WaterTapWaterService {
         return waterZILAISHUIDao.updateWaterPumpRecordAll(value, extend);
     }
 
+    /**
+     * 获取最新的值
+     *
+     * @param orgName  组织名称
+     * @param time     时间
+     * @param valueTag 值标签
+     * @param maxValue 最大异常值
+     * @param minValue 最小异常值
+     * @return 值
+     */
+    public Double getLastValue(String orgName, String time, String valueTag, Double maxValue, Double minValue) {
+        String value = waterZILAISHUIDao.findLastValue(orgName, time, valueTag, maxValue, minValue);
+        return NumberUtils.isParsable(value) ? Double.parseDouble(value) : null;
+    }
+
     @Override
     public List<Map<String, Object>> getWaterCollectionRecordAllListNew(int limit, int offset, String extend) {
         int nCode = 0;

+ 12 - 0
src/main/java/com/shkpr/service/aimodelpower/dbdao/shizilaishuiDataSource/service/intef/WaterTapWaterService.java

@@ -63,4 +63,16 @@ public interface WaterTapWaterService {
     public List<Map<String,Object>> getWatertPumpEnergy(String extend);
     public int insertOrUpdateWaterPumpRecordAll(Map<String,Object> value);
     public int updateWaterPumpRecordAll(String value,String extend);
+
+    /**
+     * 获取最新的值
+     *
+     * @param orgName  组织名称
+     * @param time     时间
+     * @param valueTag 值标签
+     * @param maxValue 最大异常值
+     * @param minValue 最小异常值
+     * @return 值
+     */
+    public Double getLastValue(String orgName, String time, String valueTag, Double maxValue, Double minValue) ;
 }