Procházet zdrojové kódy

修复温度异常报警(耳标和采集器)

zhuoning před 2 roky
rodič
revize
2926109d3a
12 změnil soubory, kde provedl 386 přidání a 223 odebrání
  1. 2 0
      huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/dao/entity/EartagAbnormalAlarmEntity.java
  2. 2 0
      huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/dao/repo/BasePigpenEntityRepo.java
  3. 6 0
      huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/dao/repo/SysBaseConfigEntityRepo.java
  4. 8 0
      huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/service/IBaseConfigService.java
  5. 58 0
      huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/service/impl/BaseConfigServiceImpl.java
  6. 4 1
      huimv-eartag2-platform/huimv-eartag2-eartag/src/main/java/com/huimv/eartag2/eartag/HuimvEartag2EartagApplication.java
  7. 3 12
      huimv-eartag2-platform/huimv-eartag2-eartag/src/main/java/com/huimv/eartag2/eartag/listener/EartagListener.java
  8. 254 192
      huimv-eartag2-platform/huimv-eartag2-eartag/src/main/java/com/huimv/eartag2/eartag/service/impl/EartagServiceImpl.java
  9. 33 0
      huimv-eartag2-platform/huimv-eartag2-eartag/src/test/java/com/huimv/eartag2/eartag/service/ServiceTest.java
  10. 12 12
      huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/schedule/EartagTask.java
  11. 2 3
      huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/schedule/RunnableTaskEartagOnlineStatus.java
  12. 2 3
      huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/service/impl/EartagServiceImpl.java

+ 2 - 0
huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/dao/entity/EartagAbnormalAlarmEntity.java

@@ -42,4 +42,6 @@ private Integer alarmFrom;
 @Column(name = "alarm_type")
 private Integer alarmType;
 
+@Column(name = "alarm_sort")
+private Integer alarmSort;
 }

+ 2 - 0
huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/dao/repo/BasePigpenEntityRepo.java

@@ -11,4 +11,6 @@ public interface BasePigpenEntityRepo extends JpaRepository<BasePigpenEntity, In
     @Query(nativeQuery=true, value="SELECT * FROM base_pigpen WHERE id IN(?1,?2)")
     public abstract List<BasePigpenEntity> getPigpenByPigpenIdAndUnitId(Integer paramInteger1, Integer paramInteger2);
 
+    @Query(nativeQuery=true, value="SELECT temp.pigpen_name,p2.pigpen_name unit_name FROM (SELECT r.unit_id,p.pigpen_name FROM eartag_device_register r LEFT JOIN base_pigpen p ON r.pigpen_id=p.id WHERE device_code=?1) temp LEFT JOIN base_pigpen p2 ON temp.unit_id=p2.id")
+    List<Object[]> getPigpenByDevice(String device);
 }

+ 6 - 0
huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/dao/repo/SysBaseConfigEntityRepo.java

@@ -15,4 +15,10 @@ public interface SysBaseConfigEntityRepo extends JpaRepository<SysBaseConfigEnti
 
     @Query(nativeQuery = true,value = "SELECT b.* FROM sys_base_config a LEFT JOIN sys_base_config b ON a.row_id=b.row_id WHERE a.config_value=?2 AND b.config_key=?1")
     List<SysBaseConfigEntity> getConfigValue(String eartagMaxTem, String farmCode);
+
+    @Query(nativeQuery = true,value = "SELECT b.*,a.config_value farm_code FROM sys_base_config a LEFT JOIN sys_base_config b ON a.row_id=b.row_id WHERE (a.config_value=?2 OR a.config_value=?3) AND b.config_key=?1")
+    List<Object[]> getConfigValue(String eartagMaxTem, String farmCode,String defaultFarmCode);
+//    Optional<List<SysBaseConfigEntity>> getConfigValue(String eartagMaxTem, String farmCode,String defaultFarmCode);
+
+
 }

+ 8 - 0
huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/service/IBaseConfigService.java

@@ -0,0 +1,8 @@
+package com.huimv.eartag2.common.service;
+
+import java.util.Map;
+
+public interface IBaseConfigService {
+    //
+    Map getConfigValue(String keyName, String farmId, String defaultFarmId);
+}

+ 58 - 0
huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/service/impl/BaseConfigServiceImpl.java

@@ -0,0 +1,58 @@
+package com.huimv.eartag2.common.service.impl;
+
+import com.huimv.eartag2.common.dao.entity.SysBaseConfigEntity;
+import com.huimv.eartag2.common.dao.repo.SysBaseConfigEntityRepo;
+import com.huimv.eartag2.common.service.IBaseConfigService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.biosafety.uface.controller
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2020-12-25
+ **/
+@Service
+public class BaseConfigServiceImpl implements IBaseConfigService {
+    @Autowired
+    private SysBaseConfigEntityRepo sysBaseConfigEntityRepo;
+
+    @Override
+    public Map getConfigValue(String keyName, String farmId, String defaultFarmId) {
+        List<Object[]> objectList = sysBaseConfigEntityRepo.getConfigValue(keyName, farmId, defaultFarmId);
+        if (objectList.size() == 0) {
+            return null;
+        } else {
+            List resultList = new ArrayList();
+            for (int a = 0; a < objectList.size(); a++) {
+                Object[] objectArray = objectList.get(a);
+                Map map = new HashMap<>();
+                map.put("id", objectArray[0]);
+                map.put("configName", objectArray[1]);
+                map.put("configKey", objectArray[2]);
+                map.put("configValue", objectArray[3]);
+                map.put("rowId", objectArray[4]);
+                map.put("farmCode", objectArray[5]);
+                resultList.add(map);
+            }
+            if (resultList.size() == 1) {
+                return (HashMap) resultList.get(0);
+            } else {
+                Map resultMap = new HashMap();
+                for (int a = 0; a < resultList.size(); a++) {
+                    Map map = (HashMap) resultList.get(a);
+                    if (!map.get("farmCode").toString().equalsIgnoreCase("0")) {
+                        resultMap = map;
+                        break;
+                    }
+                }
+                return resultMap;
+            }
+        }
+    }
+}

+ 4 - 1
huimv-eartag2-platform/huimv-eartag2-eartag/src/main/java/com/huimv/eartag2/eartag/HuimvEartag2EartagApplication.java

@@ -3,6 +3,8 @@ package com.huimv.eartag2.eartag;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.ComponentScans;
 import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
 import org.springframework.scheduling.annotation.EnableScheduling;
 
@@ -14,7 +16,8 @@ import org.springframework.scheduling.annotation.EnableScheduling;
  * @Author : ZhuoNing
  * @Create : 2020-12-25
  **/
-//@ComponentScan(basePackages = {"com.huimv.eartag2.common.utils"})
+//@ComponentScan(basePackages ={"com.huimv.eartag2.common.service","com.huimv.earrag2.eartag"})
+@ComponentScans({@ComponentScan("com.huimv.eartag2.common.service")})
 @EntityScan(value = "com.huimv.eartag2.common.dao.entity")
 @EnableJpaRepositories(basePackages = "com.huimv.eartag2.common.dao.repo")
 @SpringBootApplication

+ 3 - 12
huimv-eartag2-platform/huimv-eartag2-eartag/src/main/java/com/huimv/eartag2/eartag/listener/EartagListener.java

@@ -50,9 +50,10 @@ public class EartagListener {
     @RabbitListener(queues = Const.QUEUE_ASK_EARTAG)
     @RabbitHandler
     public void processRawdata(Map RawMap) throws ParseException, IOException {
+        System.out.println("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 处理耳标 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
         System.out.println("<<<<<<<<<<<<<<< RawMap>>" + RawMap.toString());
         String askText = RawMap.get("askText").toString();
-        System.out.println("<<<<<<<<<<<<<<<<<<<<<<< 处理耳标 <<<<<<<<<<<<<<<<<<<<<<<");
+
         //本模块主要执行保存以下4类数据:(其他注册数据,在线数据,状态数据等都是由其他模块工程执行处理-process2模块工程)
         //--保存原始流水数据(原始流水表)
         //--保存设备心跳流水数据(设备心跳流水表)
@@ -68,7 +69,7 @@ public class EartagListener {
         Map askMap = handleAskText(askText);
         String type = askMap.get("type").toString();
         JSONObject dataJo = (JSONObject) askMap.get("data");
-        System.out.println("## eartagJo="+dataJo);
+        System.out.println("######## eartagJo="+dataJo);
         //
         String earmark = dataJo.getString("earmark");
 
@@ -78,16 +79,6 @@ public class EartagListener {
             //{处理耳标数据}
             eartagService.handleEartag(dataJo);
         }
-
-        //测试代码(属于测试耳标才能进行测试)
-//        if(checkTestRange(earmark)){
-//            if(type.trim().equalsIgnoreCase("eartag")){
-//                //{处理耳标数据}
-//                eartagService.handleEartag(dataJo);
-//            }
-//        }else{
-//            System.out.println("## 已过滤非测试耳标");
-//        }
     }
 
     public void writeTxt(String conent,String file) throws ParseException, IOException {

+ 254 - 192
huimv-eartag2-platform/huimv-eartag2-eartag/src/main/java/com/huimv/eartag2/eartag/service/impl/EartagServiceImpl.java

@@ -3,6 +3,7 @@ package com.huimv.eartag2.eartag.service.impl;
 import com.alibaba.fastjson.JSONObject;
 import com.huimv.eartag2.common.dao.entity.*;
 import com.huimv.eartag2.common.dao.repo.*;
+import com.huimv.eartag2.common.service.IBaseConfigService;
 import com.huimv.eartag2.common.utils.BizConst;
 import com.huimv.eartag2.common.utils.DateUtil;
 import com.huimv.eartag2.eartag.service.ICacheService;
@@ -81,10 +82,16 @@ public class EartagServiceImpl implements IEartagService {
     private EartagAbnormalAlarmEntityRepo eartagAbnormalAlarmEntityRepo;
     @Autowired
     private EartagAbnormalCountEntityRepo eartagAbnormalCountEntityRepo;
-    @Value("${alarm.maxTemp}")
-    private String defaultMaxTemp;
-    @Value("${alarm.minTemp}")
-    private String defaultMinTemp;
+//    @Value("${alarm.maxTemp}")
+//    private String defaultMaxTemp;
+//    @Value("${alarm.minTemp}")
+//    private String defaultMinTemp;
+    @Autowired
+    private IBaseConfigService iBaseConfigService;
+    @Autowired
+    private BasePigpenEntityRepo basePigpenRepo;
+    @Autowired
+    private BizBaseStageEntityRepo bizBaseStageRepo;
 
     @Override
     public void handleEartag(JSONObject dataJo) throws ParseException {
@@ -102,7 +109,7 @@ public class EartagServiceImpl implements IEartagService {
         //--设备和耳标总状态表
         //获取牧场id
         String farmId = deviceService.getFarmIdByDeviceCode(deviceCode);
-        System.out.println("# farmId="+farmId);
+        System.out.println("####### farmId=" + farmId);
         if (farmId != null) {
             //{计算小时运动量}
             countHourAct(dataJo, nowTimestamp, todayDate, farmId);
@@ -152,17 +159,21 @@ public class EartagServiceImpl implements IEartagService {
 
     // 异常统计和报警
     private void abnormalCountAndAlarm(JSONObject dataJo, java.sql.Date todayDate, Timestamp nowTimestamp, String farmCode) {
-        //处理异常耳标温度警报和统计;
+        //处理异常-耳标温度警报和统计;
         handleEartempAlarmAndCount(dataJo, todayDate, nowTimestamp, farmCode);
-        //处理异常环境温度警报和统计;
-//        handleEnvtempAlarmAndCount(dataJo, todayDate, nowTimestamp, farmCode);
+        //处理异常-环境温度警报和统计;
+        handleEnvtempAlarmAndCount(dataJo, todayDate, nowTimestamp, farmCode);
     }
 
     //处理异常环境温度警报和统计;
     private void handleEnvtempAlarmAndCount(JSONObject dataJo, java.sql.Date todayDate, Timestamp nowTimestamp, String farmCode) {
         String earmark = dataJo.getString("earmark");
+        String device = dataJo.getString("device");
+        //{读取栋舍}
+        String pigpenName = getPigpenByDevice(device);
         // 获取异常耳标阈值最大值或最小值
-        Map maxAndMinMap = getMaxAndMinEnvtemp(farmCode);
+//        Map maxAndMinMap = getMaxAndMinEnvtemp(farmCode);
+        Map maxAndMinMap = getMaxAndMin2(farmCode, "envMaxTem", "envMinTem");
         BigDecimal configMaxTempBd = new BigDecimal(maxAndMinMap.get("envMaxTem").toString());
         BigDecimal configMinTempBd = new BigDecimal(maxAndMinMap.get("envMinTem").toString());
         BigDecimal envTemp1Bd = new BigDecimal(dataJo.getString("envTemp1"));
@@ -170,11 +181,12 @@ public class EartagServiceImpl implements IEartagService {
             // 保存耳标高温报警
             EartagAbnormalAlarmEntity eartagAbnormalAlarmEntity = new EartagAbnormalAlarmEntity();
             eartagAbnormalAlarmEntity.setFarmCode(farmCode);
-            eartagAbnormalAlarmEntity.setContent("高温警报:耳标号[" + earmark + "]的环境温度为" + envTemp1Bd.toString() + "°,高于高温阈值" + configMaxTempBd.toString() + "°");
+            eartagAbnormalAlarmEntity.setContent("高温警报:["+pigpenName+"]的环境温度为" + envTemp1Bd.toString() + "°,高于高温阈值" + configMaxTempBd.toString() + "°");
             eartagAbnormalAlarmEntity.setAlarmType(2);
             eartagAbnormalAlarmEntity.setAlarmFrom(2);
             eartagAbnormalAlarmEntity.setAddTime(nowTimestamp);
             eartagAbnormalAlarmEntity.setAddDate(todayDate);
+            eartagAbnormalAlarmEntity.setAlarmSort(3);
             eartagAbnormalAlarmEntityRepo.saveAndFlush(eartagAbnormalAlarmEntity);
             // 高温次数记录
             saveEartagTempDataCount(todayDate, nowTimestamp, farmCode);
@@ -182,61 +194,82 @@ public class EartagServiceImpl implements IEartagService {
             // 保存耳标高温报警
             EartagAbnormalAlarmEntity eartagAbnormalAlarmEntity = new EartagAbnormalAlarmEntity();
             eartagAbnormalAlarmEntity.setFarmCode(farmCode);
-            eartagAbnormalAlarmEntity.setContent("低温警报:耳标号[" + earmark + "]的环境温度为" + envTemp1Bd.toString() + "°,低于低温阈值" + configMinTempBd.toString() + "°");
+            eartagAbnormalAlarmEntity.setContent("低温警报:["+pigpenName+"]的环境温度为" + envTemp1Bd.toString() + "°,低于低温阈值" + configMinTempBd.toString() + "°");
             eartagAbnormalAlarmEntity.setAlarmType(2);
             eartagAbnormalAlarmEntity.setAlarmFrom(2);
             eartagAbnormalAlarmEntity.setAddTime(nowTimestamp);
             eartagAbnormalAlarmEntity.setAddDate(todayDate);
+            eartagAbnormalAlarmEntity.setAlarmSort(4);
             eartagAbnormalAlarmEntityRepo.saveAndFlush(eartagAbnormalAlarmEntity);
             //低温次数记录
             saveEartagTempDataCount(todayDate, nowTimestamp, farmCode);
         }
     }
-    //获取最大值
-    private Map getMaxAndMinEnvtemp(String farmCode) {
-        Map configMap = new HashMap();
-        String hashKey = BizConst.HASH_EARTEMP_TH_PREFIX + farmCode;
-        //获取耳标温度阈值:最大值
-        String maxTemp = (String) cacheService.getHashProperty(hashKey, "envMaxTem");
-        System.out.println("redis.maxTemp=" + maxTemp);
-        if (maxTemp != null) {
-            configMap.put("envMaxTem", maxTemp);
-        } else {
-            // 从属性配置表取值
-            String maxTem = getConfigValue(farmCode,"envMaxTem");
-            System.out.println("配置属性 maxTem="+maxTem);
-            if (maxTem == null) {
-                maxTem = defaultMaxTemp;
-                System.out.println("配置属性 defaultMaxTemp="+defaultMaxTemp);
-            }
-            configMap.put("envMaxTem", maxTem);
-            cacheService.putHashKeyProperty(hashKey, "envMaxTem", maxTem);
-        }
-        //获取耳标温度阈值:最小值
-        String minTemp = (String) cacheService.getHashProperty(hashKey, "envMinTem");
-        System.out.println("redis.minTem=" + minTemp);
-        if (minTemp != null) {
-            configMap.put("envMinTem", minTemp);
-        } else {
-            // 从属性配置表取值
-            String minTem = getConfigValue(farmCode,"envMinTem");
-            System.out.println("配置属性 minTem="+minTem);
-            if (minTem == null) {
-                minTem = defaultMinTemp;
-                System.out.println("配置属性 defaultMinTemp="+defaultMinTemp);
+
+    // 通过设备获取栋舍
+    private String getPigpenByDevice(String device) {
+        //根据设备读取栋舍
+        List<Object[]> pigpenList = basePigpenRepo.getPigpenByDevice(device);
+        if(pigpenList.size()==0){
+            return "";
+        }else{
+            StringBuilder sb = new StringBuilder();
+            for(int a=0;a<pigpenList.size();a++){
+                Object[] objArray = pigpenList.get(0);
+                if(sb.length()>0){
+                    sb.append(",");
+                }
+                sb.append(objArray[0]).append(",").append(objArray[1]);
             }
-            configMap.put("envMinTem", minTem);
-            cacheService.putHashKeyProperty(hashKey, "envMinTem", minTem);
+            return sb.toString();
         }
-        return configMap;
     }
 
+    //获取最大值
+//    private Map getMaxAndMinEnvtemp(String farmCode) {
+//        Map configMap = new HashMap();
+//        String hashKey = BizConst.HASH_EARTEMP_TH_PREFIX + farmCode;
+//        //获取耳标温度阈值:最大值
+//        String maxTemp = (String) cacheService.getHashProperty(hashKey, "envMaxTem");
+//        System.out.println("redis.maxTemp=" + maxTemp);
+//        if (maxTemp != null) {
+//            configMap.put("envMaxTem", maxTemp);
+//        } else {
+//            // 从属性配置表取值
+//            String maxTem = getConfigValue(farmCode, "envMaxTem");
+//            System.out.println("配置属性 maxTem=" + maxTem);
+//            if (maxTem == null) {
+//                maxTem = defaultMaxTemp;
+//                System.out.println("配置属性 defaultMaxTemp=" + defaultMaxTemp);
+//            }
+//            configMap.put("envMaxTem", maxTem);
+//            cacheService.putHashKeyProperty(hashKey, "envMaxTem", maxTem);
+//        }
+//        //获取耳标温度阈值:最小值
+//        String minTemp = (String) cacheService.getHashProperty(hashKey, "envMinTem");
+//        System.out.println("redis.minTem=" + minTemp);
+//        if (minTemp != null) {
+//            configMap.put("envMinTem", minTemp);
+//        } else {
+//            // 从属性配置表取值
+//            String minTem = getConfigValue(farmCode, "envMinTem");
+//            System.out.println("配置属性 minTem=" + minTem);
+//            if (minTem == null) {
+//                minTem = defaultMinTemp;
+//                System.out.println("配置属性 defaultMinTemp=" + defaultMinTemp);
+//            }
+//            configMap.put("envMinTem", minTem);
+//            cacheService.putHashKeyProperty(hashKey, "envMinTem", minTem);
+//        }
+//        return configMap;
+//    }
+
     //处理异常耳标温度警报和统计;
     private void handleEartempAlarmAndCount(JSONObject dataJo, java.sql.Date todayDate, Timestamp nowTimestamp, String farmCode) {
         String earmark = dataJo.getString("earmark");
         // {获取异常耳标阈值最大值或最小值}
 //        Map maxAndMinMap = getMaxAndMinEartemp(farmCode);
-        Map maxAndMinMap = getMaxAndMin2(farmCode,"eartagMaxTem","eartagMinTem");
+        Map maxAndMinMap = getMaxAndMin2(farmCode, "eartagMaxTem", "eartagMinTem");
         BigDecimal configMaxTempBd = new BigDecimal(maxAndMinMap.get("eartagMaxTem").toString());
         BigDecimal configMinTempBd = new BigDecimal(maxAndMinMap.get("eartagMinTem").toString());
         BigDecimal earTemp1Bd = new BigDecimal(dataJo.getString("earTemp1"));
@@ -249,6 +282,7 @@ public class EartagServiceImpl implements IEartagService {
             eartagAbnormalAlarmEntity.setAlarmFrom(2);
             eartagAbnormalAlarmEntity.setAddTime(nowTimestamp);
             eartagAbnormalAlarmEntity.setAddDate(todayDate);
+            eartagAbnormalAlarmEntity.setAlarmSort(1);
             eartagAbnormalAlarmEntityRepo.saveAndFlush(eartagAbnormalAlarmEntity);
             // 高温次数记录
             saveEartagTempDataCount(todayDate, nowTimestamp, farmCode);
@@ -261,6 +295,7 @@ public class EartagServiceImpl implements IEartagService {
             eartagAbnormalAlarmEntity.setAlarmFrom(2);
             eartagAbnormalAlarmEntity.setAddTime(nowTimestamp);
             eartagAbnormalAlarmEntity.setAddDate(todayDate);
+            eartagAbnormalAlarmEntity.setAlarmSort(2);
             eartagAbnormalAlarmEntityRepo.saveAndFlush(eartagAbnormalAlarmEntity);
             //低温次数记录
             saveEartagTempDataCount(todayDate, nowTimestamp, farmCode);
@@ -286,85 +321,86 @@ public class EartagServiceImpl implements IEartagService {
         }
     }
 
-    private Map getMaxAndMinEartemp(String farmCode) {
-        Map configMap = new HashMap();
-        String hashKey = BizConst.HASH_EARTEMP_TH_PREFIX + farmCode;
-        //获取耳标温度阈值:最大值
-        String maxTemp = (String) cacheService.getHashProperty(hashKey, "eartagMaxTem");
-        System.out.println("redis.eartagMaxTem=" + maxTemp);
-        if (maxTemp != null) {
-            configMap.put("eartagMaxTem", maxTemp);
-        } else {
-            // 从属性配置表取值
-            String eartagMaxTem = getConfigValue(farmCode,"eartagMaxTem");
-            System.out.println("配置属性 eartagMaxTem="+eartagMaxTem);
-            if (eartagMaxTem == null) {
-                eartagMaxTem = defaultMaxTemp;
-                System.out.println("默认属性 defaultMaxTemp="+defaultMaxTemp);
-            }
-            configMap.put("eartagMaxTem", eartagMaxTem);
-            cacheService.putHashKeyProperty(hashKey, "eartagMaxTem", eartagMaxTem);
-        }
-        //获取耳标温度阈值:最小值
-        String minTemp = (String) cacheService.getHashProperty(hashKey, "eartagMinTem");
-        System.out.println("redis.eartagMinTem=" + minTemp);
-        if (minTemp != null) {
-            configMap.put("eartagMinTem", minTemp);
-        } else {
-            // 从属性配置表取值
-            String eartagMinTem = getConfigValue(farmCode,"eartagMinTem");
-            System.out.println("配置属性 eartagMinTem="+eartagMinTem);
-            if (eartagMinTem == null) {
-                eartagMinTem = defaultMinTemp;
-                System.out.println("默认属性 defaultMinTemp="+defaultMinTemp);
-            }
-            configMap.put("eartagMinTem", eartagMinTem);
-            cacheService.putHashKeyProperty(hashKey, "eartagMinTem", eartagMinTem);
-        }
-        return configMap;
-    }
+    //
+//    private Map getMaxAndMinEartemp(String farmCode) {
+//        Map configMap = new HashMap();
+//        String hashKey = BizConst.HASH_EARTEMP_TH_PREFIX + farmCode;
+//        //获取耳标温度阈值:最大值
+//        String maxTemp = (String) cacheService.getHashProperty(hashKey, "eartagMaxTem");
+//        System.out.println("redis.eartagMaxTem=" + maxTemp);
+//        if (maxTemp != null) {
+//            configMap.put("eartagMaxTem", maxTemp);
+//        } else {
+//            // 从属性配置表取值
+//            String eartagMaxTem = getConfigValue(farmCode, "eartagMaxTem");
+//            System.out.println("配置属性 eartagMaxTem=" + eartagMaxTem);
+//            if (eartagMaxTem == null) {
+//                eartagMaxTem = defaultMaxTemp;
+////                System.out.println("默认属性 defaultMaxTemp=" + defaultMaxTemp);
+//            }
+//            configMap.put("eartagMaxTem", eartagMaxTem);
+//            cacheService.putHashKeyProperty(hashKey, "eartagMaxTem", eartagMaxTem);
+//        }
+//        //获取耳标温度阈值:最小值
+//        String minTemp = (String) cacheService.getHashProperty(hashKey, "eartagMinTem");
+////        System.out.println("redis.eartagMinTem=" + minTemp);
+//        if (minTemp != null) {
+//            configMap.put("eartagMinTem", minTemp);
+//        } else {
+//            // 从属性配置表取值
+//            String eartagMinTem = getConfigValue(farmCode, "eartagMinTem");
+////            System.out.println("配置属性 eartagMinTem=" + eartagMinTem);
+//            if (eartagMinTem == null) {
+//                eartagMinTem = defaultMinTemp;
+////                System.out.println("默认属性 defaultMinTemp=" + defaultMinTemp);
+//            }
+//            configMap.put("eartagMinTem", eartagMinTem);
+//            cacheService.putHashKeyProperty(hashKey, "eartagMinTem", eartagMinTem);
+//        }
+//        return configMap;
+//    }
 
     // 获取耳根最大最小数值
-    private Map getMaxAndMin(String farmCode,String maxKeyName,String minKeyName) {
-        Map configMap = new HashMap();
-        String hashKey = BizConst.HASH_EARTEMP_TH_PREFIX + farmCode;
-        //获取耳标温度阈值:最大值
-        String maxTemp = (String) cacheService.getHashProperty(hashKey, maxKeyName);
-        System.out.println("redis.eartagMaxTem=" + maxTemp);
-        if (maxTemp != null) {
-            configMap.put(maxKeyName, maxTemp);
-        } else {
-            // 从属性配置表取值
-            String confMaxTem = getConfigValue(farmCode,maxKeyName);
-            System.out.println("配置属性 confMaxTem="+confMaxTem);
-            if (confMaxTem == null) {
-                confMaxTem = defaultMaxTemp;
-                System.out.println("默认属性 defaultMaxTemp="+defaultMaxTemp);
-            }
-            configMap.put(maxKeyName, confMaxTem);
-            cacheService.putHashKeyProperty(hashKey, maxKeyName, confMaxTem);
-        }
-        //获取耳标温度阈值:最小值
-        String minTemp = (String) cacheService.getHashProperty(hashKey, minKeyName);
-        System.out.println("redis.eartagMinTem=" + minTemp);
-        if (minTemp != null) {
-            configMap.put(minKeyName, minTemp);
-        } else {
-            // 从属性配置表取值
-            String configMinTem = getConfigValue(farmCode,minKeyName);
-            System.out.println("配置属性 configMinTem="+configMinTem);
-            if (configMinTem == null) {
-                configMinTem = defaultMinTemp;
-                System.out.println("默认属性 defaultMinTemp="+defaultMinTemp);
-            }
-            configMap.put(minKeyName, configMinTem);
-            cacheService.putHashKeyProperty(hashKey, minKeyName, configMinTem);
-        }
-        return configMap;
-    }
+//    private Map getMaxAndMin(String farmCode, String maxKeyName, String minKeyName) {
+//        Map configMap = new HashMap();
+//        String hashKey = BizConst.HASH_EARTEMP_TH_PREFIX + farmCode;
+//        //获取耳标温度阈值:最大值
+//        String maxTemp = (String) cacheService.getHashProperty(hashKey, maxKeyName);
+////        System.out.println("redis.eartagMaxTem=" + maxTemp);
+//        if (maxTemp != null) {
+//            configMap.put(maxKeyName, maxTemp);
+//        } else {
+//            // 从属性配置表取值
+//            String confMaxTem = getConfigValue(farmCode, maxKeyName);
+////            System.out.println("配置属性 confMaxTem=" + confMaxTem);
+//            if (confMaxTem == null) {
+//                confMaxTem = defaultMaxTemp;
+////                System.out.println("默认属性 defaultMaxTemp=" + defaultMaxTemp);
+//            }
+//            configMap.put(maxKeyName, confMaxTem);
+//            cacheService.putHashKeyProperty(hashKey, maxKeyName, confMaxTem);
+//        }
+//        //获取耳标温度阈值:最小值
+//        String minTemp = (String) cacheService.getHashProperty(hashKey, minKeyName);
+////        System.out.println("redis.eartagMinTem=" + minTemp);
+//        if (minTemp != null) {
+//            configMap.put(minKeyName, minTemp);
+//        } else {
+//            // 从属性配置表取值
+//            String configMinTem = getConfigValue(farmCode, minKeyName);
+////            System.out.println("配置属性 configMinTem=" + configMinTem);
+//            if (configMinTem == null) {
+//                configMinTem = defaultMinTemp;
+////                System.out.println("默认属性 defaultMinTemp=" + defaultMinTemp);
+//            }
+//            configMap.put(minKeyName, configMinTem);
+//            cacheService.putHashKeyProperty(hashKey, minKeyName, configMinTem);
+//        }
+//        return configMap;
+//    }
 
-    //
-    private Map getMaxAndMin2(String farmCode,String maxKeyName,String minKeyName) {
+    // 获取最大最小数值
+    private Map getMaxAndMin2(String farmCode, String maxKeyName, String minKeyName) {
         Map configMap = new HashMap();
         String hashKey = BizConst.HASH_EARTEMP_TH_PREFIX + farmCode;
         //获取耳标温度阈值:最大值
@@ -373,14 +409,15 @@ public class EartagServiceImpl implements IEartagService {
 //        if (maxTemp != null) {
 //            configMap.put(maxKeyName, maxTemp);
 //        } else {
-            // 从属性配置表取值
-            String confMaxTem = getConfigValue(farmCode,maxKeyName);
-            System.out.println("配置属性 confMaxTem="+confMaxTem);
-            if (confMaxTem == null) {
-                confMaxTem = defaultMaxTemp;
-                System.out.println("默认属性 defaultMaxTemp="+defaultMaxTemp);
-            }
-            configMap.put(maxKeyName, confMaxTem);
+        // 从属性配置表取值
+        String confMaxTem = getConfigValue(farmCode, maxKeyName);
+//        System.out.println("配置属性 confMaxTem=" + confMaxTem);
+        if (confMaxTem == null) {
+//            confMaxTem = defaultMaxTemp;
+//            System.out.println("默认属性 defaultMaxTemp=" + defaultMaxTemp);
+            log.error("属性配置:"+maxKeyName+"未配置,请联系管理员进行配置.");
+        }
+        configMap.put(maxKeyName, confMaxTem);
 //            cacheService.putHashKeyProperty(hashKey, maxKeyName, confMaxTem);
 //        }
 
@@ -390,28 +427,37 @@ public class EartagServiceImpl implements IEartagService {
 //        if (minTemp != null) {
 //            configMap.put(minKeyName, minTemp);
 //        } else {
-            // 从属性配置表取值
-            String configMinTem = getConfigValue(farmCode,minKeyName);
-            System.out.println("配置属性 configMinTem="+configMinTem);
-            if (configMinTem == null) {
-                configMinTem = defaultMinTemp;
-                System.out.println("默认属性 defaultMinTemp="+defaultMinTemp);
-            }
-            configMap.put(minKeyName, configMinTem);
+        // 从属性配置表取值
+        String configMinTem = getConfigValue(farmCode, minKeyName);
+//        System.out.println("配置属性 configMinTem=" + configMinTem);
+        if (configMinTem == null) {
+//            configMinTem = defaultMinTemp;
+//            System.out.println("默认属性 defaultMinTemp=" + defaultMinTemp);
+            log.error("属性配置:"+minKeyName+"未配置,请联系管理员进行配置.");
+        }
+        configMap.put(minKeyName, configMinTem);
 //            cacheService.putHashKeyProperty(hashKey, minKeyName, configMinTem);
 //        }
         return configMap;
     }
 
     // 从属性配置表取值
-    public String getConfigValue(String farmCode,String configKey) {
+    public String getConfigValue(String farmCode, String configKey) {
         //从数据库读取温度阈值属性
-        List<SysBaseConfigEntity> configList = sysBaseConfigEntityRepo.getConfigValue(configKey, farmCode);
-        if (configList.size() > 0) {
-            SysBaseConfigEntity sysBaseConfigEntity = configList.get(0);
-            return sysBaseConfigEntity.getConfigValue();
-        } else {
+//        List<SysBaseConfigEntity> configList = sysBaseConfigEntityRepo.getConfigValue(configKey, farmCode);
+//        if (configList.size() > 0) {
+//            SysBaseConfigEntity sysBaseConfigEntity = configList.get(0);
+//            return sysBaseConfigEntity.getConfigValue();
+//        } else {
+//            return null;
+//        }
+        Map configMap = iBaseConfigService.getConfigValue(configKey,farmCode,"0");
+//        System.out.println("configMap >>>>>>>>>>>>>>>>>>>>> "+configMap.toString());
+        if(configMap == null){
+            log.error("耳标离线过程丢弃数据时长属性未配置.采用默认配置参数 configKey="+configKey);
             return null;
+        }else{
+            return configMap.get("configValue")+"";
         }
     }
 
@@ -419,42 +465,58 @@ public class EartagServiceImpl implements IEartagService {
     private void countHourAct(JSONObject eartagJo, Timestamp nowTimestamp, java.sql.Date todayDate, String farmId) {
         DateUtil du = new DateUtil();
         int nowHour = du.getNowHour();
-        int eartagOffLineTime = 24;
-        Optional<SysBaseConfigEntity> optionalConfig = sysBaseConfigEntityRepo.getConfigValue("dropDataEartagOffLineTime");
-        if (optionalConfig.isPresent()) {
-            eartagOffLineTime = Integer.parseInt(optionalConfig.get().getConfigValue());
-            log.info("耳标离线过程丢弃数据时长=" + eartagOffLineTime);
-        } else {
-            log.error("耳标离线过程丢弃数据时长属性未配置.");
+        // 小时
+        int eartagOfflineTime = 24;
+//        Optional<SysBaseConfigEntity> optionalConfig = sysBaseConfigEntityRepo.getConfigValue("dropDataEartagOffLineTime");
+//        if (optionalConfig.isPresent()) {
+//            eartagOfflineTime = Integer.parseInt(optionalConfig.get().getConfigValue());
+//            log.info("耳标离线过程丢弃数据时长=" + eartagOfflineTime);
+//        } else {
+//            log.error("耳标离线过程丢弃数据时长属性未配置.");
+//        }
+        Map configMap = iBaseConfigService.getConfigValue("dropDataEartagOffLineTime",farmId,"0");
+        System.out.println("configMap >>>>>>>>>>>>>>>>>>>>> "+configMap.toString());
+        if(configMap == null){
+            log.error("耳标离线过程丢弃数据时长属性未配置.采用默认配置参数 eartagOfflineTime="+eartagOfflineTime);
+        }else{
+            eartagOfflineTime = Integer.parseInt(configMap.get("configValue")+"");
+            System.out.println("eartagOfflineTime >>>>>>>>>>>> "+eartagOfflineTime);
         }
         String earmark = eartagJo.getString("earmark");
         Long act = Long.parseLong(eartagJo.getString("act"));
         System.out.println("本次运动量=" + act);
+        System.out.println("earmark=" + earmark);
+        System.out.println("farmId=" + farmId);
         //
         Optional<EartagData2Entity> optionEartagData = eartagData2Repo.getLastByEarmark(earmark, farmId);
-        if (!optionEartagData.isPresent()) {
-            log.info("该耳标号无相关数据.[" + earmark + "]");
-        }
-        EartagData2Entity eartagData2Entity = optionEartagData.get();
-        int lastId = eartagData2Entity.getId();
-        Long lastAct = eartagData2Entity.getAct();
-        System.out.println("上次运动量=" + lastAct);
-        Timestamp lastAddTime = eartagData2Entity.getAddTime();
-        long timeDiff = nowTimestamp.getTime() - lastAddTime.getTime();
-        if (timeDiff / (1000 * 60 * 60) < eartagOffLineTime) {
-            long act1 = 0;
-            boolean resetStatus = false;
-            if (act < lastAct) {
-                act1 = act;
-                resetStatus = true;
-            } else {
-                act1 = act - lastAct;
+        System.out.println("optionEartagData.isPresent=" + optionEartagData.isPresent());
+        if (optionEartagData.isPresent()) {
+            // 上一次耳标运动量
+            EartagData2Entity eartagData2Entity = optionEartagData.get();
+            int lastId = eartagData2Entity.getId();
+            Long lastAct = eartagData2Entity.getAct();
+            System.out.println("上次运动量=" + lastAct);
+            Timestamp lastAddTime = eartagData2Entity.getAddTime();
+            long timeDiff = nowTimestamp.getTime() - lastAddTime.getTime();
+            if (timeDiff / (1000 * 60 * 60) < eartagOfflineTime) {
+                long act1 = 0;
+                boolean resetStatus = false;
+                if (act < lastAct) {
+                    act1 = act;
+                    resetStatus = true;
+                } else {
+                    act1 = act - lastAct;
+                }
+                System.out.println("本次运动量增量=" + act1);
+                //{保存耳标小时运动量}
+                saveEartagHourAct(farmId, earmark, act1, nowHour, todayDate);
+                //{保存耳标复位记录}
+                saveEartagReset(resetStatus, farmId, earmark, nowTimestamp, todayDate, lastId, lastAct, act);
             }
-            System.out.println("本次运动量增量=" + act1);
+        } else {
+            log.info("该耳标号[" + earmark + "]无上一次耳标数据.");
             //{保存耳标小时运动量}
-            saveEartagHourAct(farmId, earmark, act1, nowHour, todayDate);
-            //{保存耳标复位记录}
-            saveEartagReset(resetStatus, farmId, earmark, nowTimestamp, todayDate, lastId, lastAct, act);
+            saveEartagHourAct(farmId, earmark, act, nowHour, todayDate);
         }
     }
 
@@ -583,12 +645,20 @@ public class EartagServiceImpl implements IEartagService {
             long act = eartagData2Entity.getAct();
             long timeDifference = nowTimestamp.getTime() - addTime.getTime();
             int setTimeDiff = 5;
-            Optional<SysBaseConfigEntity> optionConfig = sysBaseConfigEntityRepo.getConfigValue("timeDifference");
-            if (optionConfig.isPresent()) {
-                setTimeDiff = Integer.parseInt(optionConfig.get().getConfigValue());
-                log.info("耳标数据过滤时间差=" + setTimeDiff);
-            } else {
-                log.error("耳标数据过滤时间差属性未配置.");
+//            Optional<SysBaseConfigEntity> optionConfig = sysBaseConfigEntityRepo.getConfigValue("timeDifference");
+//            if (optionConfig.isPresent()) {
+//                setTimeDiff = Integer.parseInt(optionConfig.get().getConfigValue());
+//                log.info("耳标数据过滤时间差=" + setTimeDiff);
+//            } else {
+//                log.error("耳标数据过滤时间差属性未配置.");
+//            }
+            Map configMap = iBaseConfigService.getConfigValue("timeDifference",farmId,"0");
+            System.out.println("configMap >>>>>>>>>>>>>>>>>>>>> "+configMap.toString());
+            if(configMap == null){
+                log.error("耳标离线过程丢弃数据时长属性未配置.采用默认配置参数 setTimeDiff="+setTimeDiff);
+            }else{
+                setTimeDiff = Integer.parseInt(configMap.get("configValue")+"");
+                System.out.println("eartagOfflineTime >>>>>>>>>>>> "+setTimeDiff);
             }
             countMap.put("fisrtStatus", false);
             if (timeDifference / 1000 < setTimeDiff) {
@@ -980,11 +1050,6 @@ public class EartagServiceImpl implements IEartagService {
         }
     }
 
-    @Autowired
-    private BasePigpenEntityRepo basePigpenRepo;
-    @Autowired
-    private BizBaseStageEntityRepo bizBaseStageRepo;
-
     //更新耳标注册数据
     public void updateEartagRegister(String earmark, String deviceCode, String bat, Timestamp nowTimestamp, java.sql.Date todayDate, String farmId) {
         EartagDeviceRegisterEntity deviceRegisterEntity = deviceRegisterRepo.getByDeviceCode(deviceCode);
@@ -1324,18 +1389,15 @@ public class EartagServiceImpl implements IEartagService {
             long act1 = 0;
             if (Boolean.parseBoolean(countMap.get("fisrtStatus").toString())) {
                 act = Integer.parseInt(eartagJo.getString("act"));
-                System.out.println("1 act=" + act);
             } else {
                 act = Integer.parseInt(eartagJo.getString("act"));
-                System.out.println("2 act=" + act);
                 long lastAct = Long.parseLong(countMap.get("act").toString());
-                System.out.println("3 lastAct=" + lastAct);
                 if (act > lastAct) {
                     act1 = act - lastAct;
+                }else{
+                    act1 = act;
                 }
-                System.out.println("3 act1=" + act1);
             }
-            System.out.println("4 act1=" + act1);
             DateUtil dateUtil = new DateUtil();
             EartagData2Entity dataEntity = new EartagData2Entity();
             dataEntity.setCmdHeader(eartagJo.getString("cmdHeader"));
@@ -1356,15 +1418,15 @@ public class EartagServiceImpl implements IEartagService {
             dataEntity.setFarmId(farmId);
 //            dataEntity.setAskDate(new java.sql.Date(dateUtil.parseDate(getAskDate(eartagJo.getString("askTime"))).getTime()));
             eartagData2EntityRepo.saveAndFlush(dataEntity);
-
             //更新耳标注册表中的运动量数据
             EartagEartagRegister2Entity eartagRegister2Entity = eartagEartagRegister2EntityRepo.getOneByEarmark(earmark, farmId);
             if (eartagRegister2Entity != null) {
-//                System.out.println("更新耳标=" + earmark + "," + act1);
                 eartagRegister2Entity.setAct(act1);
                 eartagEartagRegister2EntityRepo.saveAndFlush(eartagRegister2Entity);
             }
-            //最新的耳标数据覆盖老数据
+            //{异常统计和异常报警}
+            abnormalCountAndAlarm(eartagJo, todayDate, nowTimestamp, farmId);
+            //{最新的耳标数据覆盖老数据}
             cacheService.putEartagFlowToCache(dataEntity.getEarmark(), dataEntity);
         }
     }

+ 33 - 0
huimv-eartag2-platform/huimv-eartag2-eartag/src/test/java/com/huimv/eartag2/eartag/service/ServiceTest.java

@@ -0,0 +1,33 @@
+package com.huimv.eartag2.eartag.service;
+
+import com.huimv.eartag2.common.service.IBaseConfigService;
+import com.huimv.eartag2.common.service.impl.BaseConfigServiceImpl;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.Map;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.biosafety.uface.controller
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2020-12-25
+ **/
+@SpringBootTest
+@RunWith(SpringRunner.class)
+public class ServiceTest {
+
+    @Autowired
+    private IBaseConfigService iBaseConfigService;
+
+    @Test
+    public void test_1(){
+        Map map = iBaseConfigService.getConfigValue("dropDataEartagOffLineTime","330784002","0");
+        System.out.println("map.toString="+map.toString());
+    }
+}

+ 12 - 12
huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/schedule/EartagTask.java

@@ -43,18 +43,18 @@ public class EartagTask {
     private EartagDeviceRegisterService deviceRegisterService;
 
     // 10分钟
-//    @Scheduled(cron = "0 0/10 * * * ? ")
-//    private void countEartagOnlineTimes() throws IOException {
-//        Timestamp nowTimestamp = new Timestamp(new java.util.Date().getTime());
-//        System.out.println("时间戳="+nowTimestamp);
-//
-////        ExecutorService service = Executors.newFixedThreadPool(5);
-////        ExecutorService service = Executors.newSingleThreadExecutor();
-////        RunnableTaskEartagOnlineStatus task1 = new RunnableTaskEartagOnlineStatus();
-////        service.execute(task1);
-//        //更新耳标在线状态
-//        eartagService.updateEartagLiveStatusAndCount();
-//    }
+    @Scheduled(cron = "0 0/10 * * * ? ")
+    private void countEartagOnlineTimes() throws IOException {
+        Timestamp nowTimestamp = new Timestamp(new java.util.Date().getTime());
+        System.out.println("时间戳="+nowTimestamp);
+
+//        ExecutorService service = Executors.newFixedThreadPool(5);
+//        ExecutorService service = Executors.newSingleThreadExecutor();
+//        RunnableTaskEartagOnlineStatus task1 = new RunnableTaskEartagOnlineStatus();
+//        service.execute(task1);
+        //更新耳标在线状态
+        eartagService.updateEartagLiveStatusAndCount();
+    }
 
 
     // 5分钟

+ 2 - 3
huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/schedule/RunnableTaskEartagOnlineStatus.java

@@ -20,9 +20,8 @@ public class RunnableTaskEartagOnlineStatus implements Runnable {
     public void run() {
         // 更新计算耳标连线状态
 //        IEartagService eartagService = new EartagServiceImpl();
-        System.out.println("eartagService="+eartagService);
-        eartagService.updateEartagLiveStatusAndCount();
-
+//        System.out.println("eartagService="+eartagService);
+//        eartagService.updateEartagLiveStatusAndCount();
     }
 
 }

+ 2 - 3
huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/service/impl/EartagServiceImpl.java

@@ -38,17 +38,16 @@ public class EartagServiceImpl implements IEartagService {
 
     @Override
     public void updateEartagLiveStatusAndCount() {
-        System.out.println("updateEartagLiveStatusAndCount 123");
         // {}
         List<BasePigpen> basePigpenList =  getUnitByPigpen();
         System.out.println("basePigpenList.size="+basePigpenList.size());
-        if(basePigpenList.size()==0){
+        if(basePigpenList.size() == 0){
             System.out.println("单元数为0");
         }
         Timestamp nowTimestamp = new Timestamp(new java.util.Date().getTime());
         int offlineTimeDef = 30;
         Map confMap = new HashMap();
-         confMap.put("config_key","eartagOfflineTime");
+        confMap.put("config_key","eartagOfflineTime");
         List<SysBaseConfig> configList = SysBaseConfigMapper.selectByMap(confMap);
         if(configList.size()>0){
             offlineTimeDef = Integer.parseInt(configList.get(0).getConfigValue());